总结“华为杯”比赛中视觉方案的设计部分
1.1问题要求
利用高度道路监控视频,得到四个观测点的交通流参数,并统计各观测点的交通流参数随时间的变化规律。这篇文章主要分享其中的视觉检测部分,使用的是YOLO v8检测网络与传统方法中的侦差法融合的策略。
1.2问题建模
统计交通流参数随时间变化的关键是从视频中获取路段车辆目标的数量、运动轨迹等信息。因此需要依赖图像处理、目标检测与目标跟踪技术求解问题。我们使用了一种深度学习与传统方法融合的策略,在使用YOLO v8深度学习网络检测目标的基础上,使用多帧差分法提取运动区域补偿目标之间遮挡与特征不足引起的漏检、丢帧的问题,实现更稳定的跟踪,以此计算结果作为计算交通流参数的依据。
求解方案框图
检测跟踪方法流程图
1.2.1预处理方法
对于题目中给的视频数据,首先要拆分成单独的帧进行处理,开源视觉库OpenCV提供了对离线视频进行处理的接口。由于画面中的场景位于户外且目标处于高速运动的状态,图像帧中不可避免地会出现很多噪声,噪声会影响后续算法的稳定性。使用滤波方法能够有效地抑制噪声。在建模过程中,我们尝试使用了均值滤波、中值滤波和双边滤波三种方法。
(1)均值滤波
均值滤波就是邻域平均滤波。在图像空间中,像素是基本组成单元,邻域是像素近邻组成的集合。均值滤波就是遍历所有像素,将像素的值设置为邻域像素点的平均值。这种方式可以抑制像素中的异常值,但缺点是会使图像变模糊。我们以8邻域均值滤波为例,对(x,y)位置的像素值P(x,y),在均值滤波后值被设置为:
(2)中值滤波
中值滤波就是从邻域集合中选取中间值作为像素值的代替,这可以使像素值更接近周围的点,消除异常值。我们以8邻域均值滤波为例,对(x,y)位置的像素值P(x,y),在中值滤波后值被设置为:
(3)双边滤波
双边滤波是是结合图像的空间邻近度和像素值相似度的一种非线性的滤波方法,双边滤波同时考虑空域信息和灰度相似性,能够达到保边去噪的目的。双边滤波器成功的关键是设计了空域核与值域核。
其中k,l是邻域像素的下标。
使用以上三种方法对原始数据进行处理,获得如下结果:
滤波结果对比图
从实验结果来看,使用双边滤波能够起到较好的噪声抑制作用,并且不会导致边缘过于模糊,单层的卷积运算也不会增加过多的计算损耗,因此我们使用双边滤波算法对图像帧进行处理。
1.2.2 基于YOLO v8的车辆目标检测
为了统计交通流数据,我们需要检测出视频中的车辆目标。
基于YOLO(You Only Look Once)系列神经网络的目标检测算法因其出色的性能成为交通场景目标检测中常用的方法。相比于两阶段的RCNN系列的神经网络,YOLO能够在保持较高精度的同时实现实时监测,更适用于本题设定的目标快速运动的交通场景。我们使用YOLO v8神经网络作为我们的车辆目标检测网络。
对于问题中给定的高速公路监控视频,我们需要关注的目标主要有小汽车、卡车与货车。我们搜集了开源的用于公路目标检测UA-DETRAC数据集,数据集包括了在北京、天津等中国重要城市拍摄的10小时视频数据。数据集具备手工标注的8250个车辆,总计121万个目标框的标注数据。数据集中的部分片段中的目标与题目视频中的目标类型高度重叠。因此,我们选择使用这一数据集训练我们的网络权重。数据集本身的标注是VOC格式,为了方便网络的训练,我们编写代码将它转换为了XML格式。我们使用了COCO数据集上预训练的YOLO网络。
目标检测结果
1.2.3 帧间差分法运动区域检测
尽管我们训练的YOLO v8网络能够实现相对稳定的检测,但深度学习的目标检测是基于特征的,在车流量非常密集的情况下,有时会出现一些车辆目标在前面的帧能够稳定检测,但开出一段区域后该目标特征显著的部分被相机与目标之间的其他车辆所遮挡导致检测失败的情况。并且,当车辆开到比较远的距离时,它在图像中只占很少像素,同样只能提供非常少的特征用于检测。这些场景对于车流密度、速度等关键指标的计算是非常不利的。
对于高速监控场景,相机都是静止不动的,所以背景也是静止不动的。而高速路上的车辆目标除非面临极端拥堵的情况,否则不会出现静止的情况,因此使用帧间差分法能够从视频中分割运动区域。帧间差分法常用的有两帧差分法和三帧差分法。
两帧差分法示意图
两帧差分法输入、差分、二值图
三帧差分法输入、差分、二值图
对比结果我们发现,在同样参数设置下,两帧差分法的运动区域相比于三帧差分法更为显著,这可能是与视频中交通车辆的运动速度有关联。此外,在计算效率方面两帧差分法也有优势,因此我们选择使用两帧差分法提取运动区域。