◆詹文杰 邱梓逸 蔡振雄
基于YOLOv4与光流法的行人检测和计数方法研究
◆詹文杰 邱梓逸 蔡振雄
(广州大学华软软件学院(广州) 广东 51000)
针对行人进行检测与统计的问题进行分析和研究,提出一种基于深度学习的方法。首先分析YOLOv4算法的优越性,并使用监控下获取的行人图像和YOLOv4算法,训练出深度学习模型。再在监控下进行实时行人检测和统计,针对部分实验结果精度较小的问题,采用光流法进行改进。改进后的检测速度以及检测精度基本满足行人检测和计数的需求。
YOLOv4;行人检测;OPENCV;光流法
公共区域经常出现因为人流量过大,造成公共卫生和公共安全的困扰。实时行人检测和计数可以使管理部门在管理人群时,做出更加合理和高效的决策。且高清监控摄像头在公共区域的普及,让更高质量的行人检测和计数有了保障。
目前通用的行人计数所采用的算法大致分为3类:基于高斯过程回归的行人计数方法[1]、基于“帧差法”的行人计数方法[2]和基于目标检测的行人计数法[3]。这三种方法中,高斯混合模型的计算量较大且收效缓慢,不适合人数较多的情况;“帧差法”对环境要求较为苛刻,无法满足在公共区域进行行人检测的要求,选择过低的阈值不能处理好背景,过高则会出现无法正常识别行人。
除开上述三种算法,近年学者还提出了其他算法。其中由Joseph Redmon等人提出的YOLO系列算法,因为优异的检测精度和检测速度,迅速被广泛应用。
本文在使用YOLOv4的基础上,利用LK光流法,训练出一种基本满足行人检测和计数要求的深度学习模型。
YOLO算法的特点是将目标检测转换成回归问题,用单一卷积神经网络结构预测边界框和类别概率,速度快,可实现实时监测。YOLOv4的网络结构如图1所示,CSPDarknet53作为骨干网络,SPP作为Neck的附加模块,PANet作为Neck的特征融合模块,YOLOv3作为Head[4]。
图1 YOLOv4网络结构
YOLOv4和前代YOLOv3不同点主要表现在三个方面:
(1)在2019年底提出的CutMix数据上推出Mosaic,丰富了检测物体的背景。
(2)采用比YOLOv3更加先进的CSPDarknet53主干网络,包含5个CSP模块,每个CSP模块采用3×3的卷积核,因此可以起到优化采样的作用。让YOLOv4增强了CNN的学习能力并且降低了计算所需的内存和计算要求。
(3)Mish激活函数是2019年下半年提出的激活函数,相对于采用2013年提出的leaky_relu激活函数,Mish的梯度更平滑,如图2所示。
Yolov4中使用的Dropblock,其实和常见网络中的Dropout功能类似,也是缓解过拟合的一种正则化方式。
但传统的dropout对conv效果较差,因为通常卷积、激活和池化层三层无条件连用,共享语义信息。即使Dropout在卷积层上效果并不好,输入的信息仍旧能够被送到下一层,容易导致网络过拟合。
(4)YOLO V4的表现相当惊人,如下图所示,在精确度相当的情况下,YOLO V4的速度是其他模型的3、4倍。图3展示了在相同 GPU 下,测量的各种检测方法性能对比。
图2 Mish激活函数与leaky_relu对比图
图3 性能对比
LK光流算法全称为Lucas–Kanade光流算法,由Bruce D. Lucas 和与Takeo Kanade提出[5],其本质是通过最小二乘法以不需要迭代的方法求解光流。
“亮度恒定”、“运动幅度小”和“空间基本一致”是LK光流法的三个假设条件。通过“亮度恒定”假设推导出的图像的约束方程,其中(,,)表示时刻(,)位置的像素:
将上述方程进行一阶“泰勒”展开,并且根据光流的定义:
将(dx/dt, dy/dt)用(u,v)替换得到光流基本方程[6]:
监控的行人照片和百度飞桨行人开源数据集组成了实验所用的数据集,通过图像标识软件Labelme.标注完后,一张行人照片会生成一份对应的JSON。将所生成的JSON分别放到了train和val文件夹,这两个文件中同时放到IMGJSON文件里,标注的图片打包存放在IMG文件夹里,图片为彩色 JPG格式。完成数据清洗后,将IMG和IMGJSON的数据集转化为适合YOLO的coco数据集模式。
因为此处检测目标只有行人,将YOLOv4官方训练案例中的YOLOv4.cfg中的classes类别数修改,下载官方“预训练”模型后,通过训练上一步处理好的数据集,即可得到鲁棒性较高的行人检测模型。
实验通过读取视频或IP监控摄像头来进行行人检测。利用OPENCV中提供的视频操作类VideoCapture,来完成视频的获取,VideoCapture既支持各种格式的视频文件,也支持直接在摄像头中实时读取,满足行人检测的需要。
行人计数是在行人检测的基础上,统计一段时间内的行人数量。实验中以一帧为单位时间,如图4在交互界面中实时显示。
图4 行人检测与计数
通过上述实验,可以发现在仅使用YOLOv4进行行人检测和计数时,会出现如图5所示,把服装店中的服装检测成行人的错误。通过使用LK光流法对模型进行改进:
图5 改进前的效果
OPENCV提供了关于LK光流法的calcOpticalFlowPyrLK方法。通过标记标志点以及L-K光流法来检测连续两帧运动情况下的跟踪的特征点。
图6 光流法效果图
如果是一个视频(连续的很多“帧”),那么把每两帧之间的运动点连接起来,就可以发现运动的物体的整个轨迹。通过图6,图7对比发现,当背景恒定不动时,运动物体在光流法的特征点标记下,会出现拖拽痕迹。反之,静止物体不会产生拖拽痕迹。
图7 光流法效果图
通过光流法的上述实验案例分析,LK光流法可以有效分析出运动物体。所以添加LK光流法后,模型能够判断服装店服装为非运动物体,排除出行人计数范围,如图8所示,有效解决了将服装检测为行人的问题。
图8 改进后的效果
针对实现行人检测和计数,为这一需求,本文进行了一系列的研究和分析。通过行人数据集进行训练,提出了YOLOv4算法和LK光流法相结合的方法,取得了不错的检测效果,基本实现了对行人的检测和计数,并且有较好的检测精度和速度。说明该方法有一定的应用价值。
[1]杨亦乐,高玮玮,马晓峰,蒋晓.基于深度学习的行人数量统计方法[J].软件,2019,40(11):119-122+151.
[2] REDMON J,DIVVALA S K,GIRSHICK R,et al.You only look once:unified,real-time object detection[C]// Computer Vision and Pattern Recognition.Las Vegas:IEEE,2016:779-788.
[3]REDMON J,FARHADI A.YOLO9000:better,faster,stronger[C]// Computer Vision and Pattern Recognition.Honolulu:IEEE,2017:6517-6525.
[4]管军霖,智鑫.基于YOLOv4卷积神经网络的口罩佩戴检测方法[J].现代信息科技,2020,4(11):9-12.
[5]高屾,朱成杰.基于运动预测的优化光流目标跟踪算法[J].新余学院学报,2020,25(02):19-24.
[6]张鸿阳,韩建峰.基于改进LK光流法的车流量检测[J].内蒙古工业大学学报(自然科学版),2019,38(01):45-50.
广东省科技创新战略专项资金项目,项目编号(pdjh2020b0868);全国大学生创新创业培训计划项目,项目编号(202012618003)