基于改进YOLO v3的目标检测算法 下载: 2020次
1 引言
目标检测在生活中多个领域有着广泛应用,如行人识别、自动驾驶和医学影像等。传统方法通常将特征提取与机器学习的分类算法相结合,Viola等[1]使用哈尔特征(Haar-like feature)提取方法联合机器学习Adaboost算法训练一系列级联分类器以进行人脸检测,取得了可观效果;马娟娟等[2]利用改进的Grassberger熵来提取目标属性,同时使用随机森林分类器预测搜索框是否包含目标,目标检测的准确率得到提高。随着深度学习的不断发展,基于卷积神经网络(CNN)的目标检测算法逐渐替代了传统目标检测算法,成为新的主流。Girshick等[3]提出的R-CNN(Region-CNN)成功将深度学习应用在目标检测中,先用Selective Search[4]算法选出候选框,再将候选框依次送入CNN中进行分类,但提取的候选框出现大量重叠,特征提取存在冗余。改进的Fast R-CNN[5]算法将整个图像作为输入送入卷积网络中,再将候选框映射在特征图上,避免了重复的特征提取,提高训练速度。Ren等[6]在Faster R-CNN中提出了锚框(anchor boxes)的概念,候选框的提取也使用卷积网络来实现,有效减少了候选框的提取时间。曹宇剑等[7]提出了旋转不变Faster R-CNN的目标检测算法,将其应用于低空无人机装甲的检测,与多模型比较,该算法取得了最好的检测效果。Faster R-CNN需将大小不同的候选框特征图送入全连接层中,故在全连接层前需插入感兴趣区域(ROI)层来固定候选框特征图的尺寸,但破坏了卷积网络的平移不变性。Dai等[8]将目标位置信息融入ROI层,构建位置敏感得分图,有效解决了上述问题。为了使网络能够适应更多尺寸的目标,Lin等[9]提出了特征金字塔结构,并将该结构应用于Faster R-CNN等算法,提升了对小尺度目标的检测性能。通常上述算法检测精度较高,但却不能达到实时效果。为了解决速度问题,Redmon等[10]使用单结构CNN直接预测目标的位置和类别,但精度稍低。随后Redmon等[11]又提出了改进的YOLO v2(You only look once v2)算法,在YOLO v1的基础上增加了批量归一化(Batch normalization)[12]层来加快训练速度,使用锚框和更高分辨率的分类器来提升精度。魏湧明等[13]通过更改候选框的筛选规则等方法改进YOLO v2网络,在无人机航拍图像定位任务中取得了较为理想的效果。基于上述单结构直接回归的思想,Liu等[14]提出了多尺度预测的SSD(Single shot multibox detector)算法,使得不同尺度的特征图专注预测不同尺寸的对象,兼顾了速度和精度,但预测层中浅层特征的表达能力较弱。为了加强浅层特征的表达能力,Fu等[15]通过解卷积的方式将上下文信息加入特征图中,检测精度得到进一步提升。王俊强等[16]结合基于候选框方法和单结构回归法的优势,提出了一种改进的SSD算法,在遥感影像数据集中取得了良好效果。继YOLO v2之后,Redmon等[17]又提出了YOLO系列第三个版本,即YOLO v3,该算法采用了一个分类效果更好的骨架网络结构Darknet53,同时利用多尺度特征进行预测,提升了小目标的识别率,保持了速度优势的同时又提升了检测精度。
像YOLO v3这种单结构直接回归方法属于密集型检测方法,在特征图的每个像素点上都预设固定数量的锚框,将每个锚框都设为一个训练样本,由单结构网络直接预测锚框相对于真实框的偏移量及锚框所属类别。这种检测方法会出现正负样本比例不平衡的情况,因为锚框与真实框匹配后,属于背景的负样本数量远远大于属于目标的正样本数量。为了平衡正负样本数量,SSD算法在训练过程中只选取一些损失较大的负样本,而在YOLO v3算法中,Lin等[18]试图使用一种改进的交叉熵损失函数(Focal loss)来控制正负样本在损失函数中的权重以减少负样本的权重,反而使模型的平均精度下降了几个百分点。
另外,很多高精度目标检测算法都依赖于高质量的锚框,设计越合理,检测精度越高。大部分目标检测算法都根据经验预设尺度和高宽比在空间域上生成锚框,如Faster R-CNN、SSD及基于这些的改进算法。YOLO v3同样采取了锚框策略,在数据集中聚类得到9组不同尺寸的锚框并将其作用于三种尺度的特征图。为了获取更佳的初始值,本文使用增加的卷积模块先对聚类得到的锚框作一个粗略调整,再使用原来的预测网络对调整后的锚框作进一步调优,同时为了平衡正负样本数量,使用增加的卷积模块对负样本提前进行过滤。
2 传统YOLO v3算法
YOLO v3网络结构由Darknet53和检测网络两部分组成,分别用作特征提取及多尺度预测。Darknet53由卷积层和残差层构成,残差层如
式中:x和F(x)为残差层的两个输入,F(x)为x经过两次卷积操作后得到的结果;H(x)为残差层的输出。两次卷积操作的卷积核尺寸分别为1×1和3×3,步长(stride)均为1。同时为了提升网络性能,每层卷积后都添加了批量归一化层和线性单元(leaky ReLU)[19]。添加批量归一化层可加快训练的收敛速度,使用leaky ReLU形式的激活函数可避免深层网络出现梯度消失的现象。
YOLO v3的多尺度预测将在尺寸为52 pixel×52 pixel,26 pixel×26 pixel和13 pixel×13 pixel的特征图上进行,但在特征图输出预测结果前,先进行特征融合操作,将高语义低分辨率与低语义高分辨率的特征拼接在一起,使得高分辨的特征也包含丰富的语义信息。具体特征融合过程:先在尺寸为13 pixel×13 pixel的特征图上进行5次卷积操作,卷积核尺寸依次为1×1,3×3,1×1,3×3和1×1,步长均为1;再连接卷积核尺寸为3×3,步长为1,卷积核数目减半的卷积层,实现降维效果;对特征进行二倍上采样(upsample)操作,再与上一级特征(尺寸为26 pixel×26 pixel的特征图)进行拼接,重复上述操作与尺寸为52 pixel×52 pixel的特征图进行拼接;最终在融合后尺寸为52 pixel×52 pixel,26 pixel×26 pixel和13 pixel×13 pixel的特征图上输出预测结果。
对于输出预测结果的三个特征图,在特征图上每个像素点格子预测三个框,每个预测框都预测中心坐标为(x,y),高和宽分别为h和w,存在物体的置信度p,k个类别的得分值(COCO数据集中k为80,VOC数据集中k为20)。三层特征图一共输出10647(13×13×3+26×26×3+52×52×3)个预测框。最后,将通过非极大值抑制(NMS)算法筛选出的预测框作为最终检测框。
3 改进的YOLO v3算法
3.1 改进的网络结构
改进的YOLO v3算法沿用YOLO v3的骨架网络,并在此基础上增加一个网络分支来调整锚框的宽和高,并对样本进行目标背景分类。在分支网络输出结果后设置一个阈值,根据分类的结果及设置的阈值生成二进制掩码矩阵mask ,当样本预测为背景的概率大于阈值时,则mask值为0,否则为1。将mask映射到最后一层(预测层),mask值为1的样本参与最后阶段的训练与检测。整体网络结构可简单表示为
经上述操作后,得到大小为h×w×12的三种特征图,其中(h,w)值分别为(13,13),(26,26)和(52,52),12为特征图的通道数,可写成3×(2+2),3代表特征图中每个像素都预测三个框,两个2分别代表每个框的高和宽及样本属于目标和背景的得分。最后,利用每个样本的目标、背景得分值及设定的阈值计算mask,同时根据特征图输出宽和高的偏移值修正聚类得到的锚框。最终预测阶段,将mask和修正好的锚框作用于
3.2 锚框的粗调整
为了提高目标检测的精度,一些目标检测算法通常根据经验手动设置一些固定面积、宽高比的锚框,再由网络预测这些锚框相比于真实框的偏移量。在YOLO v3中通过对数据集中边界框的宽和高进行K均值(K-means)聚类得到9组锚框,依据锚框的大小分成三组,将每组三个锚框均匀分布在预测层特征图上,最后通过网络预测每个锚框的偏移量。为了进一步提升锚框的质量,通过添加的卷积网络模块对锚框的宽和高先作一个粗略调整,再将调整好的锚框送入最后的预测层进行更精确的回归。设添加网络模块中预测锚框相对于真实框的宽、高偏移分别为tw、th,可通过
计算边界框实际的宽bw和高bh。式中:pw和ph分别为由聚类得到的锚框的宽和高。
最终阶段边界框的预测过程和锚框调整过程相同,均由网络直接预测边界框相对于锚框的偏移量tw和th,但这个锚框不再由聚类的形式获取,而是由增加的网络模块生成,网络生成的锚框为最后阶段边界框的预测提供了更好的初始值。边界框中心点坐标由目标所在网格坐标及中心点相较所在网格的偏移量组成,可表示为
式中:tx,ty为目标中心点相对于其所在网格左上角的偏移值;Cx,Cy为网格与图像左上角的横纵距离;σ为Sigmoid函数。在计算中心点坐标前先对偏移量tx和ty进行Sigmoid 变换,将偏移量限制在0~1之间,以确保预测的中心点落在目标所在网格内。
3.3 正负样本预测
单结构直接回归方法普遍存在的一个问题就是正负样本比例不平衡,特征图上每个像素点设定固定数量的锚框,与真实框匹配后大部分像素点都属于背景,即负样本,负样本数量远远大于正样本数量。通常一些算法采取某种策略来缓解这个问题,如SSD算法在网络训练时将正负样本数量设为1∶3以减少负样本数量,RetinaNet算法使用降低负样本权重的Focal loss函数等。
为了解决正负样本不平衡的问题,在YOLO v3特征融合层后添加卷积模块对样本进行目标背景分类,再设置一个阈值(设为0.03)生成mask,对于预测为负样本且得分高于阈值的位置,mask值设为0,其他位置mask值设为1。最后在预测阶段将mask映射到预测层上,mask值为0位置的样本将不参与训练及预测。
3.4 损失函数
改进的YOLO v3损失函数由两部分组成,一部分是增加模块部分的损失函数Ladd,另一部分是原检测网络损失函数Ldet。其中Ladd分为两个部分,锚框的宽高损失Lsize及前景背景类别损失Lconf1,表达式为
式中:s1,s2和s3为特征图的尺寸,多尺度预测分别在13 pixel×13 pixel,26 pixel×26 pixel和52 pixel×52 pixel三种尺寸的特征图上进行,此时s1=13,s2=26,s3=52;B为锚框个数,特征图中每个网格(grid)预测三个锚框,此时B=3;i为预测层特征图中第i个特征网格(三种尺度共有13×13+26×26+52×52个特征网格);
最后检测网络部分的损失函数Ldet由三部分组成,坐标损失Lloc、置信度损失Lconf2和类别损失Lclass,表达式为
式中:
4 实验结果分析
实验仿真在TensorFlow框架下进行,训练及测试的计算机硬件配置CPU为Intel XeonE5-2620 V4,GPU为NVIDIA GeForce GTX 1080Ti,操作系统系统为Ubuntu 14.04。
4.1 实验数据集
实验选取标准化数据集为PASCAL VOC进行图像识别和分类,其包含20种类别的数据。模型训练阶段,选取VOC2012训练验证集及VOC2007训练验证集作为训练数据(共有16551张),将VOC2007训练验证集部分数据作为验证集。模型测试阶段,选取VOC2012测试集作为测试数据(共有4952张)。
4.2 实验细节
采用端对端的方式来优化模型,使用多任务损失函数来优化网络参数。锚框由VOC数据集聚类而成,得到三种尺度9个锚框,宽高分别为(24×34),(46×84),(68×185),(116×286),(122×97),(171×180),(214×327),(324×193)和(359×359)。
整个训练过程中使用批量随机梯度下降法来优化损失函数,共进行60000次迭代。初始学习率设为0.01,权重衰减值设为0.0005,批量大小设为64,在网络迭代20000次及50000次后,学习率分别设为0.001和0.0001。
利用TensorFlow工具中TensorBoard查看训练过程中损失函数曲线,如
4.3 实验结果及性能对比
使用平均精度(mAP)对算法性能进行评估。所有测试都选取VOC2007训练验证集和VOC2012训练验证集作为训练数据,选取VOC2007测试集作为测试数据。
与基于区域的目标检测算法Faster R-CNN(VGG)和Faster R-CNN(Residual-101)的检测结果相比,改进的YOLO v3算法的检测精度分别提高7.0个百分点和3.8个百分点,与R-FCN的检测效果相当。与一次性回归的检测算法对比,其检测精度比SSD321,YOLO v2,YOLO v3分别提高3.1个百分点,3.4个百分点和0.8个百分点,比SSD500(Residual-101)低0.4个百分点。
表 1. 各种算法在VOC2007数据集上的测试结果
Table 1. Test results of various algorithms on VOC2007 dataset
|
4.4 数据增强对模型精度的影响
为了提高模型的泛化能力同时增加训练的数据量,实验采取数据增强的策略对输入的图像分别进行水平翻转变换、随机裁剪、色彩抖动和平移变换处理。
表 2. 数据增强前后对模型精度的影响
Table 2. Impact of data enhancement on model accuracy
|
4.5 不同模型对训练速度的影响
在原网络中添加的二分类网络和回归网络是共享权重参数,如
使用早停法训练
图 6. 不同方案模型图。(a)第一种;(b)第二种
Fig. 6. Model diagram of different schemes. (a) 1st kind; (b) 2nd kind
表 3. 不同模型对模型训练时间的影响
Table 3. Influence of different models on model training time
|
从
4.6 测试集上的实验效果图
测试集上的实验效果如
5 结论
提出了基于YOLO v3的改进算法,在YOLO v3的基础上增加了CNN层以进行正负样本筛选及锚框的粗调整。利用VOC数据集进行实验,证明改进的方法使得模型的检测精度有所提升,设计的前景目标二分类网络及锚框回归网络有效。从评估指标mAP可以看到,与大多数目标检测算法相比,所提算法具有更好的检测性能。从实验效果图可以看到,所提算法对遮挡较为严重的物体,检测效果略有下降,因此在后续工作中将研究如何提升遮挡严重目标的检测效果。
[1] ViolaP, JonesM. Rapid object detection using a boosted cascade of simple features[C]∥Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition. CVPR 2001, December 8-14, 2001, Kauai, HI, USA. New York: IEEE, 2001: 511- 518.
[2] 马娟娟, 潘泉, 梁彦, 等. 基于改进Grassberger熵随机森林分类器的目标检测[J]. 中国激光, 2019, 46(7): 0704011.
[3] GirshickR, DonahueJ, DarrellT, et al. Rich feature hierarchies for accurate object detection and semantic segmentation[C]∥2014 IEEE Conference on Computer Vision and Pattern Recognition, June 23-28, 2014, Columbus, OH, USA. New York: IEEE, 2014: 580- 587.
[5] GirshickR. Fast R-CNN[C]∥2015 IEEE International Conference on Computer Vision (ICCV), December 7-13, 2015, Santiago, Chile. New York: IEEE, 2015: 1440- 1448.
[6] Ren S Q, He K M, Girshick R, et al. Faster R-CNN: towards real-time object detection with region proposal networks[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017, 39(6): 1137-1149.
[7] 曹宇剑, 徐国明, 史国川. 基于旋转不变Faster R-CNN的低空装甲目标检测[J]. 激光与光电子学进展, 2018, 55(10): 101501.
[8] DaiJ, LiY, HeK, et al. R-FCN: object detection via region-based fully convolutional networks[C]∥Conference and Workshop on Neural Information Processing Systems, December 5-10, 2016, Barcelona, Spain. New York: Curran Associates, 2016: 379- 387.
[9] Lin TY, DollarP, GirshickR, et al. Feature pyramid networks for object detection[C]∥2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), July 21-26, 2017, Honolulu, HI. New York: IEEE, 2017: 2117- 2125.
[10] RedmonJ, DivvalaS, GirshickR, et al. You only look once: unified, real-time object detection[C]∥2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 27-30, 2016, Las Vegas, NV, USA. New York: IEEE, 2016: 779- 788.
[11] RedmonJ, FarhadiA. YOLO9000: better, faster, stronger[C]∥2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), July 21-26, 2017, Honolulu, HI. New York: IEEE, 2017: 7263- 7271.
[12] IoffeS, Szegedy C. Batch normalization: accelerating deep network training by reducing internal covariate shift[EB/OL]. ( 2015-03-02)[2019-11-01]. https:∥arxiv.org/abs/1502. 03167.
[13] 魏湧明, 全吉成, 侯宇青阳. 基于YOLO v2的无人机航拍图像定位研究[J]. 激光与光电子学进展, 2017, 54(11): 111002.
[14] LiuW, AnguelovD, ErhanD, et al. SSD: single shot MultiBox detector[M] ∥Leibe B, Matas J, Sebe N, et al. Computer vision-ECCV 2016. Lecture notes in computer science. Cham: Springer, 2016, 9905: 21- 37.
[15] FuC, LiuW, RangaA, et al. ( 2017-01-23)[2019-11-01]. https:∥ arxiv.org/abs/1701. 06659.
[16] 王俊强, 李建胜, 周学文, 等. 改进的SSD算法及其对遥感影像小目标检测性能的分析[J]. 光学学报, 2019, 39(6): 0628005.
[17] RedmonJ, Farhadi A. YOLOv3:an incremental improvement[EB/OL] ( 2018-04-08)[2019-11-01]. https:∥arxiv.org/abs/1804. 02767.
[18] Lin TY, GoyalP, GirshickR, et al. Focal loss for dense object detection[C]∥2017 IEEE International Conference on Computer Vision (ICCV), October 22-29, 2017, Venice. New York: IEEE, 2017: 2980- 2988.
[19] FanB, Niu JC, ZhaoJ. Three-phase full-controlled rectifier circuit fault diagnosis based on optimized neural networks[C]∥2011 2nd International Conference on Artificial Intelligence, Management Science and Electronic Commerce (AIMSEC), August 8-10, 2011, Deng Feng, China. New York: IEEE, 2011: 6048- 6051.
Article Outline
赵琼, 李宝清, 李唐薇. 基于改进YOLO v3的目标检测算法[J]. 激光与光电子学进展, 2020, 57(12): 121502. Qiong Zhao, Baoqing Li, Tangwei Li. Target Detection Algorithm Based on Improved YOLO v3[J]. Laser & Optoelectronics Progress, 2020, 57(12): 121502.