辛奇峰
(上海浦江桥隧运营管理有限公司,上海200433)
随着城市交通的不断发展,桥梁、隧道、地下通道等新建交通设施先后投入使用。在集约化、区域化管理模式的背景下,新建设施的监控系统陆续接入原有老设施监控中心,进行集中监控。而新老设备隔代,数据格式、接口模式参差不齐,这给大型城市交通运营企业推行智能运维带来了困难。
根据目前上海隧道综合监控系统的设计,视频检测功能以半人工方式进行工作,即由每条独立设施监控中心的视频检测系统通过视频检测,对警示的交通事件进行人工确认,并作相应的操作。但是随着外场摄像机不断增加,如某金融中心区域的隧道群集中监控,某郊环长距离桥隧的监控,每天产生的交通事件显著增加,对监控人员确认及操作带来了极大的压力。
目前城市公路隧道使用的视频检测系统提供了通信接口来实现数据通信。以常用的CITILOG 系统为列,该系统提供的MediaTCP 接口可以使运行于任意平台上的TCP 客户端组与视频检测系统的流媒体服务器建立通信联系。
接口的信息类型:
1.2.1 以A 开头的消息,是指从服务端到TCP 客户端(包括客户端反馈)的消息。
1.2.2 以B 开头的消息,是指从客户端到服务端(包括服务端反馈)的消息。
视频检测服务器的端口是设置常规为33000 并且可以在运行过程中修改。建立连接之后,两个模块之间的通过ANSI 字符串进行信息交换。所有信息类(AID)事件会自动传递给客户端。
通过上述通道可以获取视频检测系统检测到的异常停车、车辆逆行、行人、抛洒物、交通事故、车辆火情等交通事件报文信息。在日常人工二次确认后,便可以标记为训练学习网络的数据集。
TCP 客户端通过建立与视频检测流媒体服务器的通信联系,将日常人工确认的交通事件数据通过数据库接口就可以自动获取识别的交通事件、车辆图像并自定义规范后写入数据库,在数据库端获取对应的图像、短视频数据。供深度学习网络模型训练、测试。
图2 数据采集流程图
隧道视频检测系统采集来的数据设置为自定义数据集。
1.4.1 训练图片标注
当采集完成原始图片后,最关键的是对数据进行标框(bounding box)。使用LabelImg 工具对每一张图片根据事件字典的事件,对目标进行标框。
1.4.2 自制数据集文件的设置
标注完后,建立如下目录,目录要求除了images/labels 不同外,其它文件夹名必须相同,程序会根据images 的路径推算出labels 的路径。
图3 数据集目录结构
到此数据集准备完毕,在data/coco128.yaml 文件里修改参数,将其中的文件读取路径、类别数、类别列表设置为自己的数据集要求即可。
2.1.1 测试操作系统为windows 10 家庭版。
2.1.2 支持Cuda 的Nvidia 显卡。
2.1.3 Python 3.7 anaconda(开源的Python 发行版本)。
2.1.4 Cuda 10.1(Cuda 是NVIDIA 公司推出的运算平台)。
2.1.5 Pytorch1.5.1(是开源的机器学习库,用于自然语言处理等应用程序)。
2.1.6 Opencv(可视化工具,可现实处理结果)。
YOLO v5 神经网络结构由3 大主要模块组成,它们分别是:
(1)Backbone:在不同图像细粒度上聚合并形成图像特征的卷积神经网络。
(2)Neck:一系列混合和组合图像特征的网络层,并将图像特征传递到预测层。
(3)Head:对图像特征进行预测,生成边界框和并预测类别(Head)。
以下从神经网络构架上分析每个组件的组成、原理及功能如图4 所示。
图4 YOLOv5 网络框架图
2.2.1 输入端(Input)
主要功能是数据输入与数据增强,常用有608*608、640*640等尺寸。比如对800*600 的图像进行缩放,首先进行自适应图片缩放,在常用的目标检测算法中不同的图片长宽都不相同;因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。每次读取四张图片,分别对四张图片进行翻转、缩放、色域变化等,并且按照四个方向放置,进行图片的组合和框的组合。经实践,这样设置对于小目标的检测效果较好,适合隧道监控工况下的图像输入。
2.2.2 主干网络(BackBone)
主干网络主要包括了Focus 模块、特征提取网络(CSPDarknet53)以及对应的激活函数。
Focus 模块在是图片进入backbone 前,对图片进行切片操作,以yolov5s 模型为例,原始的640*640 *3 的图像输入Focus结构,采用切片操作,先变成320*320*12 的特征图,再经过一次32 个卷积核的卷积操作,最终变成320*320*32 的特征图。切片操作如图5 所示。
图5 切片操作示意图
这样可以一定程度上减少了模型的计算量,并且不会带来信息丢失,为后续的特征提取保留了更完整的图片下采样信息。
特征提取是深度学习在计算机视觉学科中的重要思想方法。所谓特征就是能够代表实体某种属性,从神经科学的角度来说,多层感知神经网络的提取特征的方式是符合人类生物神经网络的构成的。所以YOLO 神经网络也是仿照了人类视觉神经的识别特征的方法。特征提取网络是预训练的CNN(卷积神经网络),YOLO v5 集成了Darknet 构架CSPDarknet53 特征提取模块。
激活函数是为了提高网络的学习能力,提升梯度的传递效率。平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化,常用的函数有ReLU,softplus、Mish。
2.2.3 Neck 模块
Neck 模块是放在Backbone 和Head 之间的,是为了更好的利用Backbone 提取的特征目标检测网络在主干网络和最后的输出层之间插入FPN+PAN 结构。FPN 是自顶向下的,将高层特征通过上采样和低层特征做融合得到进行预测的特征图。在FPN层的后面还添加了一个自底向上的特征金字塔。这样结合操作,FPN 层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,两两联手,从不同的主干层对不同的检测层进行参数聚合,通过FPN+PAN 结构进行融合如图6 所示。yolov5l.yaml 来修改的训练方式包含两种:一种是from scratch(从零开始训练),一种是使用下载好的预训练模型权重。对应的参数命令:
图6 FPN+PAN 结构图
--cfg ./models/YOLOv5l.yaml --weights
--cfg ./models/YOLOv5l.yaml --weights ./YOLOv5l.pt
接下来在Pycharm 中输入以下命令进行训练模型
python train.py --img 640 --batch 16 --epochs 5 --data./data/coco128.yaml --cfg ./models/YOLOv5l.yaml --weights ./YOLOv5l.pt
这是使用YOLOv5l.pt 预训练模型训练了5 个epochs,一个epoch 等于使用训练集中的全部样本训练一次,其中设置的图片大小为640*640 是根据内存情况设置的。batch(size)设为16,更多参数在train.py 文件中有解释,如下所示,如有需要可以设置。其中最多的实验训练了300 个epoch。
2.2.4 Head 模块
Head 组件是获取网络输出内容的网络,利用之前提取的特征,Head 模块利用这些特征,并做出预测。输出层的锚框机制是训练时的损失函数,以及预测框筛选的修改。自适应锚框计算在YOLO 算法中,针对不同的数据集,都会有初始设定长宽的锚框。所谓锚框,就是目标检测算法中,以锚点为中心,由算法预定义的多个不同长宽比的先验框。在此不作配置,以默认设置运行。在网络训练中,网络在初始锚框的基础上输出预测框,进而和真实框进行比对,计算两者差距,再反向更新,迭代网络参数。
在YOLOv5 官方Github(开源代码网络共享社区)页面下载网络源代码,YOLO v5 根据模型的训练规模与算力配置不同,设有从小到大4 个模型:v5s、v5m、v5l、v5x,如图7 所示是这些不同规模的模型与EfficientDet 模型的性能对比图。aml 配置文件设置好并且文件数据组织完毕,选择效率较高的v5l 模型进行训练。
将数据集分给3 类即:训练集、验证集与测试集。./models/
图7 YOLOv5 模型效率图
图8 模型训练过程
训练完成后保存模型并绘制训练曲线,训练过程中的评价指标均被保存在了图形化显示工具(Tensorboard)和日志文件中,包括metric 和train 的数据折线图。
Metrics 是训练过程中完成各项数据的监控表,包括:召回率(Recall)、精确率(Precision)、正确率指标(mAP)。mAP 即平均精度均值(Mean Average Precision),是重要的训练指标。作为目标检测中衡量检测精度的指标。精度越高,召回率越低。
如图9 所示:线条分别代表:Train from pre-weight(预训练权重模型)和Train from scatch(从零开始训练的模型)。
loss 是计算权重大的真实有物体的格子位置(坐标)的损失。所有框都计算判别概率损失,无物体的格子权重小一点,各自计算类别损失。
结果分析:
预训练权重模型和从零开始训练的模型的最高mAP_0.5 均能达到46.5%。
预训练权重模型比从零开始训练的模型能更快收敛,但是在250epochs 左右两者已经达到一致。总的来说预训练权重模型能一定程度上减少训练时间开销。
图9 训练曲线
图10 模型应用于事件检测
图11 隧道口云台摄像机视频流检测
在城市越江隧道中,虽然设计、安装了传统算法的视频检测设备,针对某一物体如车辆、行人、逆行等交通事件,有检测功能。但一般都是在光线均匀充足,无变化、无遮挡的环境中取得。然而实际情况在通行条件较差的隧道中,光过度、光格栅、车辆远光灯等额外环境因素干扰,使得算法识别正确率会明显下降,识别效果不佳。各个物体(大、小型车辆)之间会出现光线遮挡的现象,这就更多地增加了识别的难度。图10 是在隧道环境下训练完成的YOLOv5 模型检测效果。
分别实现了车辆逆行检测、非机动车、行人的交通事件检测及检测车流量功能。如图10 所示,在隧道环境下训练完成的模型克服了远光灯、照明不均匀产生的地面光斑、光格栅等环境因素,识别效率高。
随着隧道运营数据的不断积累,深度学习网络模型可以随着环境的变化而学习环境变化,具有很强的泛化性能。结合YOLOv5 创新的模型结构,加强的特征融合能力,经验证在不同的光照强度或者遮挡的环境中,均能表现出良好的识别效果。这是对传统视频检测算法短板的良好补强。
目前隧道中使用的交通事件检测系统,都只能应用在固定式摄像机上。这些系统使用的识别算法大多是如帧差法、光流法、边缘检测法以及背景法。其中以背景法居多。采用背景法技术进行目标检测,首先,需要背景建模。但安装在隧道进出口的可遥控转动的云台摄像机无法使用该算法建模,造成了事件检测的盲点。
动态场景的目标识别,是YOLO 神经网络模型的重要应用场景。所以将训练好的权重模型设置好视频流的链接,便可应用在隧道的进出口云台监控上,实现实时监控,并将监控结果存储。Pycharm 编译设置及夜间检测效果如图11 所示。
图12 安全区域及安全帽检测
表1 模型使用前后情况对比表
养护施工是保障设施设备安全运营的重要环节。而施工作业安全是重中之重。采集相关隧道工作环境下工作的安全帽图像数据集,训练模型,并应用于实际施工安全检测。施工前将YOLO 深度学习神经网络模型部署在夜间施工区段,进行实时目标检测,辅助安全管理。也可在5G 网络的支持下,接入实时行车记录装置或视频执法仪之类的视频采集端,对实时接入的视频流进行安全检测,提高安全管理效率。安全区域及安全帽检测如图12 所示。
笔者对上海某条流量较大的越江隧道2 处监控点摄像机部署YOLO 网络检测模型进行测试,系统持续运行24 小时。YOLO 目标检测功能投入使用之前,对交通事件的判定主要依靠人工。以某金融中心区域隧道中央监控室为例,共有2 位监控员加1 位值班长每天12 小时4 班轮转人工监控大屏,及事件信息记录上报等工作,工作量大、强度高、效率低。
目标检测神经网络模型使用前后的对比情况见表1。
由表中可以看出,在使用交通事件检测功能后,无论从交通事件的检测能力,还是交通数据的采集能力都比使用前有明显跃升。特别是检测率,系统通过24 小时不间断自动识别监控视频,比系统使用前效率有极大提高。
结论:工作量是一个重要指标,表中显示了系统使用后每日交通事件检测量提高了约3 倍,而完成这部分工作只需要1 人,下降了3 倍;每日单摄像机检测峰值也提高了1 个数量级。
在新基建背景下,一改常规运营思维。以大数据为基础对运维过程进行数字化改造,形成低成本高效率的运营方式。越江桥隧是城市交通主干道,重要流量节点,通过对隧道管理系统的智能化改造,形成一个自我管理的全寿命运维体系,做到每一处工作细节均可得到反馈的实时交互,提高隧道管理的技术含量。突破核心技术壁垒,解决隧道运维过程中的关键难题,保障了城市交通安全畅通,推动行业科技进步,实现经济效益与社会效益的双赢。