基于YOLOv5 的行人检测方法研究
2022-10-31朱行栋
朱行栋
(200093 上海市 上海理工大学 机械工程学院)
0 引言
随着人工智能的发展,越来越多的场景变得智能化,智能化场景也慢慢以人为主体发展着。对行人进行检测,从而使得应用场景智能化,行人检测技术在人工智能领域的发展和应用已非常广泛,如安防领域、视屏监控、无人驾驶等[1]。高危职业对人体进行动作模拟和跟踪,也都需要较为成熟的行人检测技术。所以,研究行人检测技术对于愈渐智能化的社会具有重要的理论和现实意义。
目前,最经典的传统行人检测算法主要有HOG+SVM 算法[2]、DPM 算法等。HOG+SVM 算法是在2005 年由Dalal 等[3]提出的,采用行人方向梯度直方图特征训练和融合的梯度直方图特征训练,在MIT 数据集上通过SVM 分类器取得不错的效果。基于深度学习算法的一系列行人检测中,R-CNN[4],Fast-RC-NN[5],Fast-RCNN,SSD[6],YOLO 算法表现比较出色。其中,YOLO 系列算法的主要技术在于把检测转化为回归问题,采用一个单独的卷积神经网络实现端到端的目标检测[7]。
上海理工大学实验室目前正在进行机器人校园项目,垃圾督导机器人项目是其中一个重要分支,行人检测正是垃圾督导机器人的核心技术之一。本文基于垃圾督导机器人项目研究YOLOv5 算法在行人检测中的应用。
1 YOLOv5 算法理论
1.1 YOLOv5 算法的来源
YOLOv5 算法是在YOLOv4 和YOLOv3 的基础上发展而来,和YOLOv4 相比,YOLOv5 的架构小了大约90%,在准确度上,YOLOv5 的表现优于目前市场的YOLOv3 和YOLOv4 算法。
1.2 YOLOv5 的网络结构
图1 所示为YOLOv5 的网络结构图,分为输入端,Backbone,Neck 和Prediction 四个部分。其中,输入端包括Mosaic 数据增强、自适应图片缩放、自适应锚框计算,Backbone 包括Focus 结构、CSP结构,Neck 包括FPN+PAN 结构,Prediction 包括GIOU_Loss 结构。
图1 YOLOv5 网络结构Fig.1 YOLOv5 network structure
1.3 输入端
输入端的Mosaic 数据增强同YOLOv4,参照了Cut Mix 数据增强方式,区别在于Mosaic 数据采用4 张图片,开始前每次读取4 张图片,然后依次对4 张图片进行翻转、缩放和色域变化等处理,再按照4 个方向摆好,根据不同位置进行图片组合框的组合。这种随机机制丰富了检测物体的背景,在计算Batch Normalization 时会一次性计算4 张不同方向位置的数据,使得mini-batch 较小,利于减少GPU,可以达到较好效果。
自适应锚框计算,针对不同的数据集设定初始长宽的锚框。YOLOv5 的网络训练中,在设定的初始锚框上输出预测锚框,用预测锚框和真实计算锚框ground truth 计算两者误差,反向传播更新数据,通过多次迭代网络参数达到最优的锚框计算。
自适应图片缩放是指将不同长宽的图片统一缩放到一个标准尺寸,然后再当作数据集用来检测处理。图片缩放后,如果图片两边填充的黑边多,则存在信息冗余,影响速度。对此YOLOv5 进行了改进,修改了letterbox 函数,使得原始图片能够自适应减少信息冗余,即减少黑边。YOLOv5 算法对图片自适应缩放的步骤为计算缩放比例、计算缩放后尺寸、计算黑边填充数值,其计算公式如式(1):
式中:l1,w1——原始图像的长和宽;l2,w2——原始缩放尺寸的长和宽;l3,w3——自适应缩放尺寸的长和宽;——缩放比例系数。选择小的缩放比例系数,再和原始图像尺寸的长宽相乘,即得l2和w2;32——25,对应YOLOv5 算法网络的5次下采样次数;——原本需要填充的高度,再采用numpy 中的np.mod 去余数的方式,得到8 个像素,用8 除以2,即得到图片自适应的两端需要填空的数值。
1.4 Backbone
由图1 的网络结构可知,Backbone 层级包括Focus 结构、CSP 结构。Focus 结构是YOLOv5 算法区别于YOLOv3 和YOLOv4 的操作,Focus 结构的关键是切片操作,如图2 所示,4×4×3 的图片经过切片操作后变成2×2×12 的特征图,再将特征图进行卷积核的卷积操作。图3 所示为Focus 的结构展示。
图2 切片操作Fig.2 Slice operation
图3 Focus 结构Fig.3 Focus structure
Cross Stage Partial(CSP)结构的设计初衷是减少冗余计算量和增强梯度。在YOLOv5 中设计了两种不同的CSP 结构,以YOLO5s 网络为例,通过图1 可以看出,CSP1_X 结构应用于Backbone 主干网络,另一种CSP2_X 结构则应用于Neck 中。CSP结构的具体组成见图4。
图4 CSP 结构Fig.4 CSP structure
1.5 Neck
YOLOv5 的Neck 结构和YOLOv4 的一样,均用了FPN+PAN 的结构,不同的是YOLOv5 网络中的其他部分进行了调整。如图5 所示,在FPN 层的后面还添加了一个自底向上的特征金字塔,包括2 个PAN 结构。YOLOv5 网络结构通过这种方式结合,FPN 层自顶向下传递强语义特征,PAN 层自底向上传递强定位特征,从不同的主干层对不同的检测层进行参数聚合,进一步提高特征提取的能力。
图5 FPN+PAN 结构Fig.5 FPN+PAN structure
1.6 Prediction
目标检测任务的损失函数一般由Classification Loss(分类损失函数)和Bounding Box Regression Loss(回归损失函数)2 部分构成。Yolov5 采用其中的GIoU_Loss做Bounding box 的损失函数,具体见式(2)。该公式加了一个影响因子v,将预测框和目标框的尺寸系数比考虑了进去。
式中:v——衡量长宽系数比一致性的参数,具体可以定义为式(3)。
式(2)和式(3)中,均考虑了几个重要的影响因素:重叠面积、中心点距离、长宽比系数。这种增加了影响因素的GIoU_Loss在IoU的基础上解决了边框不重合问题。然后YOLOv5 采用nms 非极大值抑制对很多目标框进行筛选。
1.7 Leaky_ReLU 激活函数
YOLOv5 的激活函数采用的是Leaky_ReLU 激活函数,区别于YOLOv4 的Mish 激活函数。二者的图形对比如图6 所示。
图6 Leaky_ReLU 和Mish 激活函数Fig.6 Leaky_ReLU and Mish activation function
其中,Leaky_ReLU 激活函数的公式如式(4),Mish 激活函数的公式如式(5)。
式中:λ——(0,1)之间的固定系数。
2 基于YOLOv5 的行人检测实验
2.1 实验数据
本文是在coco 数据集的基础上训练行人检测模型,coco 数据集有80 个类和150 多万个对象实例,选取coco 数据集作为本文实验的初始模型是一个很好的标准。本文将“person”作为一个类,列出2个模型,并在coco-mAP-val推理时间上评估,最后将数据集分成相应的训练集和测试集文件。
2.2 实验平台
本实验的配置环境为Windows 10,64 位系统。在anaconda 中,基于Python3.8 搭建了一个虚拟环境en01,CUDA 和CUDN 为cudnn 7.6.5 for cuda10.2 版本,选用pytorch1.6 作为框架。
2.3 实验参数设定
本实验通过几次迭代训练,以YOLOv5x 作为主干网络,coco 预训练的权重作为模型初始化,迭代epoch 为100epoch 次。在输入端的自适应缩放的原始图片尺寸为800×600,经过自适应缩放后的尺寸为426×320,由4 个像素的黑边填充。将4×4×3 的图片经过切片操作后变成2×2×12 的特征图,再将特征图进行卷积核的卷积操作,减少模型训练过程中的冗余计算,提高了检测精度,同时也提高了实验模型的鲁棒性。
3 实验结果分析
3.1 实验过程及分析
实验过程中,GIoU,Precision,Recall和mAP的变化趋势如图7—图10 所示。GIOU 是源自IOU的一种边框预测的损失计算方法,在行人检测中需要对预测边框和实际标注边框进行对比,计算边框损失。由图7 变化趋势可知,在实验迭代100 次时的GIOU值很小,最终结果需要参照1-GIOU判断,预测边框和实际边框重叠区域越大,损失越小。本实验1-GIOU接近于1,表明损失很小,模型检测行人目标性能较优。行人检测的精准度也随着迭代次数的增加而稳定,准确率在93%~95%波动。
图7 GIOU 变化趋势Fig.7 GIOU trend
图9 表示实验的召回率变化趋势。观察可知,YOLOv5 在刚开始迭代时损失函数较大,召回率很小,在迭代了数十次后召回率趋近于期望值100%。同样,由图10 可知,平均检测精度mAP值随着迭代次数趋近于1,无论是通过Precision,Recall还是mAP判断,都能很好说明本文所采用的YOLOv5 算法在行人检测领域的优越。
图8 Precision 变化趋势Fig.8 Precision trend
图9 Recall 变化趋势Fig.9 Recall trend
图10 mAP 变化趋势Fig.10 mAP trend
3.2 行人检测结果
图11 是本实验部分图像的检测结果。根据程序结果可以得到检测时间。对于416×320 的图像,YOLOv5 的检测速度可达22 ms。由图11 可以看出,利用YOLOv5 算法的行人检测效果很好,即使是距离较远的小目标,定位也很准确,几乎没有出现行人检测的遗漏现象。结果表明,改进后的YOLOv5算法对行人检测的精度和定位准确度都有提升。
图11 行人检测结果Fig.11 Pedestrian detection results
4 结论
本文阐述了基于YOLOv5 网络模型实现行人检测的功能,包括YOLOv5 网络结构的4 个部分所包含的创新点以及模型训练。实验结果表明,YOLOv5 算法降低了行人尺度和距离不同的影响,能够更准确地检测行人,同时在检测精度和检测速度上都远超YOLOv4 和YOLOv3 模型,具有一定的实用价值。下一步,针对数据集中模型人数众多和重叠数量面积较多情况,可在网络结构上再次改进,使行人检测在不同应用场景下提高准确率和速度。