1. 引言
近年来,人工智能在算力的支持下得到了飞速发展。在计算机视觉的领域中,目标检测有着重要且广泛的应用,且一直处于火热的研究之中,甚至成为了其他研究领域的基础。面对不同场景的目标检测算法落地于安全监控 [1]、交通 [2]、医疗 [3] 甚至军事领域 [4],特别是异常火热的自动驾驶 [5],可见目标检测已经成为了基本。
利用深度学习的卷积神经网络提取到图像的特征信息,将物体分类的同时找出物体所在图像的具体位置,最后将其应用于实际生活中。在应用之前,需要保证模型的推理速度,以及精度,此方面的研究从未停止。Girshick等 [6] 2014年利用Region CNN(R-CNN)开启了深度学习在目标检测方面的研究,效果显著,引入了感兴趣区域和CNN,使mAP值在PASCAL VOC2007上最好结果的30%提升到66.0%,但是精度离实际应用远远不够,检测速度更是达不到落地的要求。Girshick [7] 2015年的Fast R-CNN将R-CNN中通过将选择性搜索算法得到的几千个候选框分别放入卷积网络改进为将一张完整的图像放进卷积网络,再得到每张图像的候选框,最后进行分类和回归,大幅减少每张图片耗时,在PASCAL VOC2007上mAP达到70.0%。Girshick等 [8] 2016年的Faster R-CNN使用RPN网络生成候选框,引入多尺度锚框来检测各种尺度的物体,最后的检测精度和速度明显得到提升,在PASCAL VOC2007数据集上mAP达到73.2%。R-CNN系列等 [9] [10] [11] [12] 两阶段目标检测算法,在拥有高精度检测效果的同时检测速度缓慢的问题依然突出。Redmon等2016年的YOLO (You Only Look Once)单阶段检测算法将物体检测问题归于回归问题,给卷积神经网络输入,最后得到边界框的信息以及置信度,在mAP为63.4%的同时FPS达到45,检测速度得到了极大提升,但是检测精度却比不上Faster R-CNN检测算法。YOLO单阶段检测算法检测速度快是该算法能落地的优势,但是发展到现在存在的问题依旧是精度不足。
目标检测中的精度以及FPS一直以来都是研究的对象,在保证精度满足需求的情况下追求实时性是YOLO [13] [14] [15] [16] 算法在实际生活中得到广泛应用的条件,但是目前YOLO检测算法的检测精度依然存在着精度以及mAP不足的情况,提升目标检测算法的检测精度以及推理速度成为发展的必要。
本文以提高Ultralytics公司2020年开源的YOLOv5s检测算法的精度和mAP为目的,采取将注意机制引入YOLOv5s网络,相比于其他3个版本YOLOv5m、YOLOv5l、YOLOv5x,YOLOv5s体积更小,实验更方便,获取网络深层信息更容易,从而探索注意力机制对YOLOv5s检测算法的影响,以期提升YOLOv5s检测网络的检测精度和mAP。
2. YOLOv5s 网络模型
2.1. YOLOv5s简介
YOLOv5s网络结构有四个部分,分别是输入端、Backbone、Neck、Output。整体结构如图1所示。
Figure 1. Model network structure of YOLOv5s
图1. YOLOv5s模型网络结构
小目标检测困难一直是目标检测算法中存在的问题,信息少的特点导致检测困难,加上图像模糊,分辨率低等各种问题导致小目标检测成为目标检测的难点。针对这种情况YOLOv5s网络结构的输入端进行了Mosaic数据增强,将四张图片进行随机裁剪,再拼接到一张图片上作为训练数据,丰富了图片背景,随机缩放增加更多的小目标,利于对小目标检测的同时变相提高了BatchSize,进行BN操作的时候计算了四张图片,达到使网络的鲁棒性更好的目的,所以对自身的BatchSize不是很依赖,同时将图片统一尺寸为460 × 460 × 3。YOLOv5s给网络的anchor默认值为[10, 13, 16, 30, 33, 23],[30, 61, 62, 45, 59, 119],[116, 90, 156, 198, 373, 326],网络会根据默认anchor训练得到预测框,再根据预测框和真实框的差距来调整模型的网络参数,直到得到最终的预测框。
在Backbone网络中,主要的结构有Focus、CSP、SPP。Focus结构,最重要的是切片操作,如YOLOv5s结构图中的Focus部分,460 × 460 × 3的图片会被切片为4个320 × 320 × 3的特征图,具体操作是隔位提取像素,再在通道上拼接形成320 × 320 × 12的特征图,在计算量微量提升的情况下起到了提取更多特征的效果。CSP结构借鉴了CSPNet [17],在进入CSP模块之前都会存在一个3 × 3的卷积核,步长为2,进行下采样。将特征图作两条路径处理,一条路径上经过x个残差组件,另一条路径上经过卷积,将经过两条路径后的特征图进行拼接,在不计算重复梯度信息轻量化的同时保证了准确率。SPP部分则可以极大地增加感受野,以{1 × 1, 5 × 5, 9 × 9, 13 × 13}的方式进行最大池化,最后将得到的各种尺度特征图进行拼接,提取主干特征的能力得到加强,更加有效地分离最为重要的上下文特征。
在Neck模块中,采用了FPN + PAN的结构,并引入了CSP2结构。FPN用来传递强语义特征信息,PAN结构用来传递强定位特征信息,两者结合达到将不同检测层的信息进行融合,提高特征提取的能力。经过一系列卷积操作后进行特征融合,使特征图包含的特征信息更多。
在输出端,采用了GIoU作为边界框的损失函数和非极大值抑制(NMS)。GIoU定义如公式(1)所示,IoU定义如公式(2)所示,GIoU示意图如图2所示。
(1)
(2)
如上图所示,IoU等于两个边界框相交部分的面积比上两个边界框的并集,当两个边界框无相交部分时就会出现没有梯度的情况,无法实现优化以及重叠方式的区分。GIoU则先求出包含两个边界框最小的外接矩形面积,再求出不属于两个边界框的面积占外接矩形面积的比例,最后用IoU减去这个面积比例。
2.2. SE模块
本文第一组对比实验借鉴了在2017年的ImageNet分类赛上夺冠的SENet (Squeeze-and-Excitation Networks),采用了其中的SE模块来学习通道上的相关性,在计算量上稍有提升的同时,筛选出在通道上关联性和重要性较突出的特征信息。第一步会对SE模块的输入进行压缩操作,经过全局平均池化之后的特征图会变成1 × 1 × C的向量,C代表通道,第二步将1 × 1 × C的向量放进全连接神经网络中,全连接神经网络包含了两个全连接层,第一个全连接层的通道数会和一个缩放因子进行乘积,在经过第一个全连接层的时候会进行缩放,达到通过减少通过数而减少计算量的目的,第二个全连接层则使输出通道数为C。最后的Scale操作将输入的特征图与经过压缩和激励操作的特征图进行通道权重相乘,得到输出,因为使用了全连接层,所以参数量会有所上升。本文将SE模块加在主干网络部分,SE模块结构如图3所示。
2.3. CBAM模块
本文第二组对比实验采用了CBAM (Convolutional Block Attention Module)。CBAM模块分为两个部分,通道注意力部分和空间注意力部分,通道注意力的核心部分是使用1 × 1的卷积核来提取信息,偏置部分在实验时设置为false,空间注意力部分则是通过分别在通道维度上采取求平均和,最后进行合并,合并结果为通道数是2的卷积层,再通过一个卷积得到。实验证明顺序使用通道注意力机制和空间注意力机制优于先使用空间注意力机制再使用通道注意力机制的组合和并行使用两个注意力机制的方式。将通道注意力部分和空间注意力部分进行结合,结合之后使用广播机制对原始特征图进行特征提取,得到CBAM的输出特征图。CBAM模块增强了特征在通道和空间上的表现,使网络学习需要关注和摒弃不需要关注特征信息的能力得到提升,像人类视觉一样捕捉表现突出的信息,由于CBAM模块的效果是对特征信息采取精细化分配处理,所以本文会将CBAM模块加在主干网络部分。CBAM结构如图4所示。
如上图所示,网络中间的特征图
作为CBAM层的输入,F经过一个共享的两层神经网络(通道注意力模块)之后与F进行element-wise乘法得到新的特征图
,
会继续进入空间注意力模块(并行进入一个通道的最大池化和平均池化后再在通道上进行拼接)后与
进行element-wise乘法得到
,
。
3. 实验及结果
3.1. 实验数据集及实验环境
实验数据集采用PASCAL VOC2007,类别数为20,并混合在学校采景的数据集进行扩充,为了保持PASCAL VOC数据集的格式,对扩充的数据集用LabelImg进行目标标注,将标注好的文件以PASCAL VOC的命名规则命名,以xml作为标注好的文件后缀名,并使标注文件和图片名字一致。划分后的混合数据集如表1所示。
实验环境采用Linux操作系统,编程语言使用Python 3.8,深度学习框架为PyTorch,进行实验以及数据获取,详细实验环境如表2所示。
Table 2. Detailed configuration of experimental environment
表2. 实验环境详细配置
3.2. YOLOv5s模型的训练参数设置
训练使用了在Coco和PASCAL VOC上的yolov5s预训练模型,优化算法选用Adam,实验所有参数保持一致,迭代数为300轮,BatchSize为16,Adam的动量因子为0.999,初始学习率为0.001。学习率调整方式为:学习率的初始值为0.001,先用线性插值对学习率进行预热,预热动量因子为0.95,轮数为5,再采用余弦退火算法调整。
3.3. 评价指标
本实验对比由原YOLOv5s、YOLOv5s + SELayer、YOLOv5s + CBAM形成,评价指标使用精度(Precision),召回率(Recall)以及平均精度均值(Mean-Average-Precision, mAP),相关计算方式如公式3、公式4所示。
(3)
(4)
TP代表实际为正样本的同时模型预测为正样本的数量,FP代表实际为负样本的同时模型预测为正样本的数量,FN代表实际为正样本的同时模型预测为负样本的数量,TN代表实际为负样本同时预测为负样本的数量。
Precession计算的是预测为正样本且预测正确的样本数量占所有预测为正样本数量的比例,Recall计算的是预测为正样本且预测正确的样本数量占所有实际为正确的样本数量。因为每张图像的类别可能不同,所以采用mAP值作为评价指标,根据每个类别的Precision值和Recall值可以分别绘制出各个类别的P-R曲线,AP计算的是PRC (Precision-Recall Curve)曲线下面积,mAP计算的是所有类别AP的平均值,mAP指标比较如图5所示。
Figure 5. MAP values of the original YOLOv5s, YOLOv5s + SE module and YOLOv5s + CBAM module
图5. 原YOLOv5s、YOLOv5s + SE模块和YOLOv5s + CBAM模块三个模型的mAP值
从三个模型训练所得到的mAP值可以得出,注意力机制使YOLOv5s模型计算微量增加的同时性能会得到一定提升。
3.4. 实验结果及分析
原YOLOv5s、YOLOv5s + SE模块和YOLOv5s + CBAM模块的性能对比结果如表3所示。
Table 3. Comparison of models performance
表3. 模型性能对比
表3的数据显示,与原YOLOv5s模型对比,加了注意力机制后,精度、召回率和mAP值均得到提升。在YOLOv5s基础上加了SE模块后,精度提升1.24%,召回率提升1.32%,mAP提升1.28%;在YOLOv5s基础上加了CBAM模块后提升较大,精度提升5.08%,召回率提升4.3%,mAP提升4.65%。从模型的感受野出发,卷积神经网络都是采取级联的方式来逐步地增加感受野,但是当算法模型层数不足时,感受野的获取就会存在缺陷,采取注意力机制,这里使用了SE模块和CBAM模块,相当于级联了一定数据量的卷积操作让模型获取更大的感受野,从而使模型的性能得到提升。SE模块的压缩操作得到的特征图相当于全局感受野,从而使YOLOv5s模型的性能得到略微提升,较于在分类任务上显著的效果,应用于目标检测任务上时,效果不太显著,可能因为感受野的原因,得到提升的效果,小目标的特点又导致(小目标在检测任务上难于分类任务)提升效果不太显著。CBAM模块的通道注意力部分比SE模块多了一个最大池化并行操作的同时利用特征图的空间关系得到空间注意力特征图,对比于通道注意力,空间注意力会使模型重视特征信息的空间位置,利于检测任务的定位,两个部分串联后利于模型性能的提升,较于SE模块,在目标检测任务上CBAM模块优于SE模块。
算法测试对比效果如图6,图7,图8所示,
Figure 6. Detection effect of original YOLOv5s
图6. 原YOLOv5s检测效果
Figure 7. Detection effect of YOLOv5s + SE module
图7. YOLOv5s + SE模块检测效果
Figure 8. Detection effect of YOLOv5s + CBAM
图8. YOLOv5s + CBAM检测效果
从图6可知,原YOLOv5s检测出现了检测错误的情况(墙体上“大”字下面),从图7可知,在YOLOv5s加上SE模块改进后,检测错误的情况消失,从图8可知在YOLOv5s加上CBAM模块改进后,检测错误消失的同时置信度得到提升。
4. 结论
本文对目前检测效果较好且轻量的YOLOv5s进行了注意力机制的改进,通过将改进前与改进后的评价指标进行对比,得出注意力机制在增加微量计算的同时可以提升模型的检测性能的结论,实验检测效果的对比也证明了注意力机制可以改善模型对物体的检测。综上所述,本文所提出的改进方法可以提升模型的性能,但是存在实验环境和条件的限制,召回率低的问题没有解决,最终也未能将本实验所测试的算法部署、落地测试,后续会从数据集、nms以及注意力机制优化等方向继续改进。
NOTES
*通讯作者。