基于一阶段模式的目标检测模型的设计与调优
2020-11-12王俊彦
王俊彦 张 昱
(中国科学技术大学计算机科学与技术学院 安徽 合肥 230027)
0 引 言
智能监控、无人驾驶和智能机器人等正逐步渗透到日常生活中,它们均需要通过目标检测技术来对关键目标进行识别与定位。实际的生产生活要求智能应用兼具实用性和安全性,从技术上讲便是要求高度的实时性和准确性。目标检测作为智能应用的重要部分之一,保证实时性、提升准确性至关重要。
2013年,Girshick等[1]首先提出利用卷积神经网络(CNN)来进行目标的特征提取。神经网络能从大量的训练样本中自主学习各类目标的关键特征,使得一个模型能适应多种不同场景。此外,大量数据的支撑使得它提取到的特征更加全面,催生出更好的检测效果。起初的神经网络目标检测模型[1-2]包含两个阶段:推测出所有可能的候选框,确定有效框及目标类别,耗时较长。之后Redmon等[3-4]提出YOLO模型,采用联合学习的方式,将两阶段揉合为一阶段,消除了遍历候选框的过程,提升了检测速度。
很多神经网络模型在检测小物体上稍显无力,为了优化该问题,前人已经做了各个方面的优化工作。 SSD[5]利用一层浅层特征与最后的特征金字塔来共同预测。DES[6]通过引入深层和浅层的语义特征来克服SSD没有使用语义特征的缺陷。SNIP[7]改进训练方式,采用新的梯度回传方式以缓解数据集中大小物体数量不平衡的问题。最新的FSAF[8]则从基准框anchor box的选择着手,通过为大小各异的目标分配对应尺寸的基准框来提高不同物体的检测效果。
上述模型尽管着眼点不同,但均利用了浅层特征来辅助预测,不过也只采用特定的几层浅层特征辅助预测。本文基于所有浅层特征均能发挥一定作用的推测,以YOLOv2[4]为基础框架,采用密集连接[9]的形式重构其特征提取网络,其特殊的连接形式与现有的小物体优化方式相结合时,所有的浅层特征均直接参与最终的预测。该网络每层输出的特征数量较少,大幅减少单层的计算量,所以虽然本文的网络较深,但其计算量并不明显增加,保证其检测的实时性。
另一方面,本文对YOLOv2的小物体优化方式进行改进。YOLOv2通过重定形操作,将部分尺寸较大的浅层特征变换为较小尺寸的特征,然后与最终特征连接起来作为预测的依据,取得一定效果。不过该方法的重定形过程较为耗时,所以只采用了一个浅层,并且存在割裂相邻图块语意联系的缺陷。针对该问题,本文采用基本的池化操作来代替原本的重定形操作,简化该过程并减弱语意缺陷,使得模型更加快速有效。
综上所述,本文贡献如下:
1) 采用密集连接结构重新设计YOLOv2模型的特征提取网络,首次利用全部浅层特征来辅助对小物体的检测,并保证其能满足实时性要求。
2) 改进YOLOv2的浅层特征融合方式,通过多种尺寸的池化操作来简化YOLOv2的重组过程,使得融合操作更为高效和准确,提高对小物体的检测能力。
1 YOLO检测模型
1.1 模型框架
YOLO模型是最早的一阶段目标检测模型,该模型有多种不同版本[3-4],各版本均遵循图1的框架。
图1 YOLO模型结构图
预处理步骤进行数据增强并输出RGB格式的图片数据作为后续神经网络的输入,该输入为W×H×3的三维数组,W、H为图片宽和高,3为通道数(下文记为C)。特征提取卷积层对输入图片进行逐层抽象,将其映射为具有高层语意的特征,其输出同样是W×H×C的三维数组,W、H表示一幅特征图的宽和高,C刻画特征图的数目。YOLO将原图均分为S×S块,目标映射将高层特征映射为目标数值,输出为S×S×(25×N)数组。S×S对应原图片的S2个不同图块,对每个图块预测N个包围框,每个包围框由长为25的向量进行描述,向量第1个元素表示其包含目标物体的概率p0,后续20个元素保存着其属于各个类别的概率,记为p1-p20,最后4个刻画包围框的位置,记为tx、ty、tw、th,下标分别代表包围框中心坐标及宽高。
1.2 浅层特征辅助预测
浅层特征利用方式如图2所示。
图2 一种浅层特征利用方式示意图
图2中每个小矩形代表一层卷积,靠在一起的卷积层表示其输出的特征图的尺寸是一致的,箭头下方数字代表输出特征图的大小,图中略去了非卷积层。
由图2可得,该方式可将第3、6、9层浅层特征(即输出尺寸发生变化的前一层,下文也称关键浅层)旁路到最后一层来辅助预测,YOLOv2便单独利用了第9层,除此以外的其他层特征都被认为是无用的。
1.3 重组方式的弊端
YOLOv2将第9层特征旁路到最后一层之前,需要将27×27大小的特征图重组为13×13大小,即以2为步幅,分别从左上角的2×2个像素开始进行采样,得到4幅13×13的特征图。该方式将局部区域的相邻像素割裂开来,没能保持其局部区域空间上的联系,而原本小物体占据的像素点就非常少,这种割裂导致的空间语意的混乱更为严重。如图3所示,显然新的特征图各个部分互相错乱了。
图3 YOLOv2重定形效果
2 模型设计
本文通过密集连接结构,将所有浅层卷积的输出旁路到与其输出尺寸一致的最后一层卷积上,再结合1.2节的浅层特征辅助预测法,实现对所有浅层卷积的全部利用,最后改进YOLOv2的重组方式,并进行相关实验验证。
2.1 全部浅层特征的引入
图4为密集连接的结构,其中L为连接操作,W×H×C1与W×H×C2的数组连接的结果为W×H×(C1+C2)的数组。箭头越粗代表特征的通道数越多。图2中靠在一起的卷积层(简称卷积块)使用了这种结构。
图4 密集连接结构
假设最终的网络包含B个卷积块,每个块包含D层卷积,记f为卷积操作,⊕为连接操作,O为卷积的最终输出(即下一层卷积的输入),根据密集连接结构,块内卷积层的输出可表达为:
Ok=fk⊕Ok-1O1=f1
k∈[2,B×D]∩k≠D×i+1,i∈N
(1)
记目标映射函数为g,则网络输出pre为:
pre=g(OD×1⊕…⊕OD×B)
(2)
综合式(1)、式(2),可得式(3),即所有前置卷积层输出的特征均直接参与最终的预测。
pre=g(f1⊕…⊕fB×D)
(3)
计算量说明:
模型的浮点乘法运算次数可以估计模型的总计算量,每个卷积层的浮点乘法运算次数为:
Ops=K×K×Cin×Wout×Hout×Cout
(4)
式中:K为卷积核大小,通常为3;Wout、Hout为输出特征的宽和高;Cin、Cout为输入、输出通道数。
在密集连接结构中,每个卷积层的Cout是一个固定的小值(在本文实验中为32),YOLOv2(32~1 024不等)相比,只要保证Cin相仿,则其每层卷积的计算量便小得多。
本文采用一个124层的网络结构,虽然其层数约是YOLOv2的6倍,但是由于单层计算量的减少,其总计算量跟YOLOv2是相当的,这保证了它的实时性。
2.2 浅层特征重组方式优化
另外,由于重定形方式较为耗时,YOLOv2只采用一层浅层辅助预测,例如在深度学习框架PyTorch中,需要4次改变视图的操作和3次转置操作才能完成该重定形。相较于该方式的复杂操作,池化只是非常基本的一个操作,速度较快,因此可以使用更多的浅层辅助预测。然而,不同浅层的特征尺寸也不相同,它们均需要重组并连接到最后一层特征来辅助预测,为此需要将它们变换到统一尺寸。借鉴感兴趣区域池化[10]的思想,本文对不同浅层特征使用不同大小的池化核强制性地对输出特征尺寸进行限定。假设浅层特征尺寸为W1、H1,最后一层特征尺寸为W2、H2,则该浅层的池化核尺寸为(W1/W2,H1/H2),本文称该融合方法为感兴趣区域池化融合(Region-of-interest Merge,RM)。
2.3 回归部分的损失函数微调
包围框回归即对包围框的中心点坐标和宽高共4个值作出预测。最简单的做法是让网络直接输出这4个值,但是这种做法输出的值域不受限,会使得模型出现训练不稳定的情况。这里仿照文献[4]将图片划分为S×S的网格,针对每个网格预测N个包围框,使用基址+偏移的方法来预测中心坐标值。其中:网格长宽为单位长度1;偏移范围为(0,1),神经网络通过预测偏移来预测中心坐标。使用Sigmoid进行网络输出到偏移的映射,因为其值域刚好为(0,1)。这里会事先选定N个粗糙的预测框,称为anchor,在此基础上进行调整来得到最终的包围框,如图5所示。
图5 回归计算
Lloc=L2(bx,lx)+L2(by,ly)+
SmoothL1(bw-lw)+SmoothL1(bh-lh)
(5)
式中:L2为均方误差,L2=(b-l)2。
SmoothL1[2]为:
(6)
对中心坐标值域的限制,可以使预测值与真实值较为接近,L2损失不会出现异常大的值,从而有效地避免梯度爆炸现象;而由于没对宽和高进行限制,故使用SmoothL1作为该部分的损失函数能有效避免预测值偏离过大时导致的梯度爆炸,使得模型更为稳定。
2.4 其他组成部分
在预处理阶段,为了使有限的训练数据能较好地反映目标类别所有个体的特征,本文对图片进行数据增强。这里使用了以下增强操作:
1) 随机裁剪:可使训练数据更为多样化。
2) 缩放:神经网络要求同一批次的输入拥有同样的尺寸,该操作将不同大小的输入缩放至同等大小。
3) 对比度增强:可使数据中的不同物体间的区分度更高。这里对饱和度和亮度进行了归一化。
4) 水平翻转:保证物体方向的多样性。
最后进行数据归一化来使训练过程更加稳定。
目标映射部分采用简单的一层1×1卷积进行映射,分类则采用热门的Softmax交叉熵损失函数[11]。最终的模型图如图6所示。
图6 密集连接检测器模型图
3 实 验
3.1 实验平台和模型配置
为了检验模型的准确率和检测速度,本文使用PASCAL VOC2007+2012目标检测数据集[12]和PyTorch 0.3.1深度学习框架,在搭载着CentOS 7.4系统和5块Tesla V100 GPU卡的Xeon E5-2695 v4服务器上进行训练和测试。
首先将图 6最后4层卷积层替换为一对全局平均池化层和全连接层得到分类模型,使用ImageNet 1000分类任务[13]对该模型进行预训练,然后使用预训练好的模型对原始模型进行初始化,再在PASCAL VOC数据集上进行一次全局(所有层均参与训练)的微调,得到最终的模型。
另外,在训练中采用原始的批量梯度下降训练方法,并在微调时采取热身策略,即采用一个较小的学习率矫正梯度下降方向,再增大学习率。本实验的热身过程学习率设置如表1所示,实验共进行了300次完整迭代,每次迭代包含259个批次。
表1 学习率的设置
3.2 引入全部浅层效果验证
在使用YOLOv2原有的浅层特征重组的前提下,将其特征提取网络替换为密集连接型网络(记为DCOD模型),以验证引入全部浅层特征后模型的表现。在PASCAL VOC2007 测试集上的结果见表2的Fast RCNN行至DCOD行。其中RCNN和SSD0系列的数据采用自源论文,而YOLOv2作为本文着重比较的对象,这里采用作者提供的训练好的模型进行实测。PASCAL VOC数据集包含20类目标,这里除了给出所有类别的平均准确率之外,还给出了各个类别的准确率。
表2 PASCAL 2007/test上的检测精度与速度
从mAP指标栏可以看出,DCOD相对于YOLOv2,整体提升了0.2 %,初步说明全部浅层特征的引入对检测结果产生正面作用,与其他的知名模型Fast RCNN、Faster RCNN、SSD 300等相比,也表现得更为出色。从细节看,对于数据集中存在较多小物体的类别:bird和bottle,DCOD相比于YOLOv2在mAP上均有明显提升,不过可能由于过多浅层特征的引入对部分原本表现较好的大物体检测造成干扰,综合起来总的mAP提升不是非常明显。
检测速度方面,DCOD、SSD300、YOLOv2均达到了实时性要求的30帧/s。事实上,虽然DCOD的深度是YOLOv2的6倍,但其特征提取层需要的浮点运算次数约为22.5×107次,与YOLOv2的22.2×107次是相当的,即DCOD没有随着深度的增大而成比例的增加所需运算次数,没有大幅增加检测时长。
3.3 重组优化效果
为检测重组优化的有效性,本文将DCOD中的浅层特征重组方式替换为RM,得到DCOD+,并与DCOD进行对比见表2的最后两行。
从整体的平均准确率mAP来看,DCOD+比DCOD准确率提升0.3%;从细节上看,对于bird和bottle两类小物体,DCOD+也各自有0.5%和0.7%的提升。上述两方面观察共同说明本文的改进是合理的。
检测速度方面,进行小物体检测优化的DCOD+比DCOD快了2.3帧/s,这是在旁路重组了4层关键浅层特征的情况下达成的,相比于DCOD只旁路1层关键浅层特征,本文的优化在计算效率上占据着明显的优势。
图7为本文的模型跟其他模型的对比情况。可以看到,DCOD+在保证实时性的前提下,最大地提高模型的检测准确率。
图7 各个模型的整体比较
4 结 语
针对小物体优化问题,本文首先采用密集连接结构重构YOLOv2模型的特征提取网络,首次利用全部浅层特征来辅助对小物体的检测,并保证其能满足实时性要求。其次,改进YOLOv2的浅层特征融合方式,通过多种尺寸的池化操作来简化YOLOv2的重组过程,使得融合操作更为高效和准确。最后通过实验验证两种优化方式的有效性。
本文对小物体的优化对其他物体的检测造成了些微的不良影响,仍然存在提升空间。除此之外,形状变化多端的物体也难以检测,有待进一步研究。