郭健忠,余腾飞,崔玉定,周兴林
(1.武汉科技大学 汽车与交通工程学院,湖北 武汉 430065;
2.武汉科技大学 机械自动化学院,湖北 武汉 430065)
近几年来,随着计算机视觉技术的快速发展,基于神经网络的目标检测技术不断增强,其在汽车行业的运用受到了广泛的关注和研究。目前,百度、滴滴、博世等公司已把神经网络算法运用到汽车无人驾驶上,并取得了良好效果。可以预见的是,神经网络算法必将在无人驾驶领域大放光彩。
但是在实际应用当中,有两个难点需要解决,一是车载设备的计算能力和存储空间往往受到诸多限制,故算法必须对硬件资源的需求少;二是算法要对远距离上的小目标有较强的检测能力,检测速度快,以便汽车有充足的时间应对。采用轻量型神经网络如MobileNet可以有效降低模型对硬件的要求。2016年,Iandola等人[1]提出Squeeze Net,采用1×1卷积核对上一层的特征图进行卷积,主要目的是减少特征图的维数。后来,Sifre等人[2]提出了深度可分离卷积的结构,进一步减少了网络的参数量和计算量。而深度可分离卷积的本质是使用深度卷积和逐点卷积将卷积操作分解为冗余信息更少的稀疏化表达。2017年,谷歌公司的Howard等人[3]发布了一种可以在手机等移动终端运作的神经网络结构:MobileNet,采用了深度可分离卷积的结构。之后,Howard等人[4]尝试对MobileNet进行改进,提出了MobileNetv2,主要利用了线性瓶颈层和倒残差对网络进行改进,明显地提升了网络的预测精度。即使如此,在车载设备的限制和要求下,MobileNetv2的检测精度仍不令人满意。为提高其检测精度和对小目标的检测能力,可考虑结合其他算法,取长补短,以期提高整体算法的性能。
卷积神经网络中因对目标检测的方式不同,可把算法大致分为基于候选区域和基于回归的目标检测算法两类[5]。基于回归的目标检测算法省略了候选区域生成步骤,直接将特征提取、目标分类以及目标回归在同一个卷积神经网络中实现,将目标检测过程简化为一种端到端的回归问题,使基于深度学习的目标检测算法在速度上有了大幅度提升,这无疑比基于候选区域的算法更适合。这类算法的代表有:YOLO系列[6-7]、SSD[8]、FPN[9]以及Retina Net[10]。其中,SSD网络是当中检测精确度相对更高的网络结构。为提升SSD模型在中小目标检测方面的能力,很多学者对此进行了研究。例如,Tang等[11]在原有SSD模型的基础之上采用多视窗的方法进行检测从而提升准确率,但是这种方法的区域划分不固定,对于目标检测的准确性和鲁棒性产生了一定的影响。Jeong等[12]提出了RSSD模型,改善了SSD的特征融合方式,利用分类网络增加获取的Feature Map之间的联系,减少了重复框的出现,同时增加了Feature Map的个数使得模型能够检测到更多尺度的目标;Fu等[13]提出了DSSD,使用Resnet-101替代原来的VGG Net,在分类回归之前使用残差模块,在辅助的SSD额外特征卷积层后面添加了几层反卷积层,整个网络呈现出宽窄宽的结构,提高了小目标的检测精度。陈幻杰等[14]对SSD模型的改进,通过小目标特征区域进行放大提取,额外提取多个高层特征层的信息,利用更深的网络结构改善中等目标的检测结果等方法,较大地提高了对中小目标的准确率,检测速度相比原有的SSD模型下降了将近一半,在满足准确性的基础上实时性受到了较大的影响。
该文结合MobileNetv2和SSD模型构成MobileNetv2-SSD网络,并对网络结构进行改进,增强对特征的提取效果,使网络对小目标有更强的检测能力,同时降低了对硬件资源的需求。实验表明,改进后的网络有更强的小目标检测能力。
在车辆目标检测阶段,因需要迅速、准确地识别目标,所以基于回归的目标检测算法更加适合。考虑到SSD在准确度和检测速度上比其他基于回归的目标检测算法更有优势,故该文采用SSD网络进行目标检测。但SSD网络对小目标的检测效果较差,而且整个模型相对较大,在实际应用时对硬件要求高,考虑到硬件成本问题,应结合使用规模较小的网络,降低对硬件配置资源的需求,而MobileNetv2作为轻量化的较为符合需求。基于以上分析,考虑结合MobileNetv2和SSD网络。结合后的网络兼具SSD网络检测速度快、准确度高和MobileNetv2网络参数少、模型小的特点,较为符合要求。
SSD模型是当中检测精确度相对较高的网络结构,其在不同大小的特征图上预测目标。SSD网络检测目标时,以每一个网格为基础,生成多个先验框,之后每一个先验框都会检测框内是否有目标,若判断出框内有目标,就根据目标的大小和位置,计算出每一个先验框的宽高偏差和中心点的偏移量,通过解码得到预测框的中心和宽高。利用框中物体的置信度对框进一步筛选,经过非极大值抑制处理,筛选出得分最高的框,标记在图片上。
MobileNetv2是一种轻量化的卷积神经网络,它对输入图像先升维、深度分解卷积、再降维,这种被称为倒残差的结构可以减少参数量和计算量。在ImageNet数据集上做实验,MobileNet与VGG16的准确率几乎一样,但参数量和计算量只有其1/9。
MobileNetv2-SSD网络结合两种网络的优势,检测速度快,检测准确度高,然而它对小目标的检测效果不尽如人意。在目标检测物的在图像中占比较小时,也会存在如下问题:
(1)小目标呈现的信息量较小,导致检测效果不佳,训练时需要反复挖掘信息。
(2)在训练阶段,对于小物体的标注容易存在偏差,在目标物体较小的情况下,标记的误差会对检测效果产生较大的影响。
(3)实际应用场景中,小目标数量较少,使得网络训练时负样本过多,导致模型的退化,严重制约了检测网络的性能。
为解决以上问题,该文提出特征增强和特征融合的方法使网络反复挖掘小目标的信息,以加强网络对小目标的检测能力。同时,为了进一步减少参数量和计算量,并使得网络更符合检测车辆特征和实际应用的需要,对先验框进行改进。
改进后的模型结构如图1所示。输入为300×300×3的图片,经过一次标准卷积和两次深度可分离卷积后进入图1所示结构。用MobileNetv2网络取代原本SSD中的VGG网络,用于多尺度特征提取,之后用特征增强模块挖掘提取到的信息。考虑到大特征图更易提取小目标,故对大特征图进行特征融合,以加强对小目标的提取能力。然后,对增强或者融合后的特征图进行归一化和使用leaky ReLU等操作,防止梯度消失和梯度爆炸。最后,用非极大值抑制进行目标分类。
模型主要分为两个部分,第一部分是用于提取目标特征的MobileNetv2基础模块和SSD基础模块,一步步缩小尺度,得到不同尺度下的特征图;第二部分是多尺度特征检测网络,其作用是进行不同尺度条件下的特征提取,并把提取到的特征进行增强和融合,然后进行归一化处理和线性修正,最终得到一维向量进行目标检测。从图1可以看出,检测模块(detections)得到6个特征图中目标的置信度和坐标,通过非极大值抑制(non-maximum suppression,NMS)模块过滤掉重复预测的目标。通过该模型可以有效提取待识别目标的信息,且具有准确度高和检测速度快等优点,对变化目标具有较好的鲁棒性。
图1 M2-SSD网络结构
网络的基本配置如表1所示。表中t是输入通道的倍增系数(即瓶颈层中的通道数是输入通道数的多少倍);n是该模块重复的次数;c是输出通道数;s是该模块第一次重复时的stride(后面重复都是stride=1)。
表1 M2-SSD网络基本配置
瓶颈残块(bottleneck residual block)是网络中很重要的结构。它把数据先升维,使用轻量级深度卷积做过滤;再应用深度可分离卷积进行处理。为便于实际应用,如果维度越低,卷积层的乘法计算量就越小,想要减少运算量,就需要尽可能将网络设计成低维度的。如果整个网络都是低维的,那么整体计算速度就会很快。但是如果维度太低,激活变换ReLU函数可能会滤除很多有用信息,造成信息丢失或破坏。针对这个问题,使用linear bottleneck来代替原本的非线性激活变换,而在提取特征数据阶段,高维张量更能提取到足够多的信息,故先对数据进行升维,再降维。
为了提高大特征图对小目标的检测能力,丰富不同尺度特征图的特征信息,提出了特征增强模块。如图2所示,模块整体为一个残差网络结构,相比于学习原始的信号,残差网络学习到了信号的差值,还增加了网络的宽度。残差网络可以通过跳层连接,增强了梯度的流动,从而使得信息前后向传播更加顺畅,不对称的结构使得反向传播时,错误信号可以不经过任何中间权重矩阵变换直接传播到低层,一定程度上可以缓解梯度弥散问题。多重1×1和3×3的卷积可以充分挖掘特征图信息,而批量标准化可以解决梯度消失的问题,由于小目标的文本信息量较少,故这样设计特征增强模块可以有效增强对小目标的检测能力。
图2 特征增强模块结构
为了加强各个尺度特征图之间的联系,增强检测能力,提出特征融合模块,结构如图3所示。首先,用1×1的卷积核对两个特征图进行卷积,使其通道统一,然后采用双线性插值使特征图的大小统一,之后用concat函数进行合并。特征融合能使得特征图的语义更丰富,对大尺度特征图进行特征融合可以提高对小目标的检测能力。
图3 特征融合模块结构
SSD模型在目标检测部分与图像金字塔有着相似的结构,对图像下采样得到不同大小的特征图。由于大尺寸特征图的细节特征信息丰富,能检测出细微轮廓,而小尺寸的特征图丢失较多细节信息,但对较大轮廓检测效果好,因此对不同特征层进行融合能够提高网络语义信息,增强细节与整体之间的联系,提高网络对小目标的检测能力。
特征融合具体步骤如下:该文采用特征融合的思想,在以上特征增强的基础框架上,首先对不同大小特征层,用padding=0的1×1卷积核在这些特征图上做卷积操作,保证了融合时的通道统一。由于这里把不同大小的特征图进行融合,所以需采用双线性插值操作使特征图大小统一。改进后的特征层有更丰富的语义信息,能更好表征目标的特性,对车辆小目标检测的准确率有较大幅度改善。由于SSD中的检测模块的特征层尺寸较小,且包含语义信息较强,不再进行特征增强。
传统的SSD网络检测目标时,会对所有先验框解码,然后进行置信度排序,置信度低的被删除。该文提出的改进是在解码前先对先验框进行置信度排序,在每个同目标类别中去除置信度较低的先验框,保留一定数量的高置信度先验框,再进行解码得到真实框,如图4所示。这样做的目的是减少需要解码的先验框个数,减少了计算量。
图4 先验框改进后解码过程
考虑到本实验中目标种类较少,且要求模型轻量化,故只保留50个同类别的先验框。即对先验框进行置信度排序后,同一目标类别中,只保留50个置信度最高的先验框。之后对每一类别的50个先验框进行解码,把大小和位置修正,再从中选出IOU最大的预测框作为真实框输出。
为了提高对小目标的检测能力,调整先验框的尺寸。特征图先验框的个数预测依次为4、6、6、6、4、4。先验框长宽比依次为1∶1,2∶2,1∶2,2∶1,1∶3,3∶1,先验框尺度计算公式如式(1)所示。
(1)
式中,Sk表示先验框的尺寸相对于原图的比例,Smin和Smax分别表示比例的最小值与最大值。为了更好地检测小目标,将Smin和Smax的值调整为0.16和0.88,这样能够有效避免由于目标过小导致在训练阶段真实标签无法找到相应的先验框与之匹配的问题。尺寸调整后的先验框大小如表2所示。
表2 先验框尺寸
(2)
由于针对小目标检测,正负样本特征的不平衡,往往造成简单的负样本主导网络的训练并导致模型的退化,这严重制约了检测网络的性能。为解决此问题,该文引入Focal Loss损失函数。具体可以表示为:
FL(pt)=-αt(1-pt)γlog(pt)
(3)
其中,αt用于控制正负样本的权重,取比较小的值来降低负样本的权重;(1-pt)γ用于控制难易样本的权重,目的是通过减少易分样本的权重,从而使得模型在训练的时候更加专注难分样本的学习;pt表示某个目标的类别概率。
损失函数由位置损失和分类损失加权组成,公式如下:
(4)
其中,t*为真实的目标类别,t为预测目标类别,b*为真实的标签框位置坐标,b为预测目标坐标,N表示与真实框相匹配的先验框的个数,Lclass(t*,t)为分类损失函数,a为权重,Lloc(b*,b)为位置损失函数。
位置损失可表示为:
(5)
其中,Pos表示正样本,m为先验框的位置m∈{x,y,w,h},x,y表示先验框的中心点坐标,w,h分别表示先验框的宽和高。SmoothL1损失函数在Fast R-CNN中被提出,主要目的是为了防止梯度爆炸。
分类损失可表示为:
(6)
本实验用的计算机配置为windows10操作系统,Intel Core(TM)i9-10900K处理器,内存为16 GB,显卡为NVIDIA GTX 1080,开发环境使用的是Tensorflow1.8。
实验使用的是KITTI数据集,并进行了调整。KITTI数据集是目前国际上最大的自动驾驶场景下的计算机视觉算法评测数据集,该数据集包含市区、乡村和高速公路等场景采集的真实图像数据,每张图像中最多达15辆车和30个行人,还有各种程度的遮挡与截断。KITTI数据集有8个类别,将标注文件中“Van”、“Truck”、“Tram”和“Car”类别合并为“Car”类,其他类别作为背景。
为了增加训练的数据量,提高模型的泛化能力,同时增加噪声数据,提升模型的鲁棒性,对数据集进行数据增强。比如使用随机缩放和旋转对样本做一点处理,随机地缩放小目标的size(20%以内)还有随机旋转(15°左右),或者对样本进行随机反转、裁剪、平移、添加噪声。
经过数据增强后,数据集总共有7 600张图片,选用其中6 200幅图像作为训练集,剩下1 400幅图像作为验证集。实验中设定冲量常数为0.9,权重衰减系数为0.000 5,学习速率为0.000 8。在训练集中每次迭代处理8个样本,进行240个迭代周期,训练迭代次数为54 000次。
以模型训练时的损失函数变化和测试时的各类别AP的平均值作对比分析,评价模型性能的优劣。其中,损失函数由位置损失和分类损失加权组成,计算总损失值与迭代次数的关系,各类别AP的平均值即mAP(mean average precision)由召回率和精确率得出。
召回率的计算方法为:
精确率的计算方法为:
式中,TP(true positive)指正样本中预测为正的数量,FN(false negative)指正样本中预测为负的数量,FP(false positive)指负样本中预测为正的数量。
模型对数据增强后的KTTI数据集进行检测,得到的实验结果如图5所示。图5(a)为损失函数的损失值与迭代次数之间的关系图,训练完成后的损失值为0.03,图5(b)为训练时改进后的先验框的置信度得分和训练次数的关系图。
实验结果表明,改进网络的损失值较小,置信度得分较高,证明了网络的有效性。
图6为改进型MobileNetv2-SSD网络的检测效果。其中,(a)为算法对远处的多个小目标的检测效果;(b)为在强光照条件下,算法对正面目标和背面目标的检测效果;(c)为算法对侧面目标和被截断目标的检测效果;(d)为目标处在被遮挡的阴影背景下算法的检测效果。可以看到,在复杂多变的应用场景下改进后的算法仍有较好的检测效果。但为了突出其先进性,需与其他算法进行对比分析。
(a)远处多重目标 (b)强光照目标
(c)侧身目标和半截目标 (d)弱光照被遮挡目标
首先与未进行改进的MobileNetv2-SSD网络作对比。图7(a)为原本的MobileNetv2-SSD网络的检测效果,(b)为改进型MobileNetv2-SSD网络的检测效果。可以看出,原本的MobileNetv2-SSD网络对远处的小目标检测有遗漏,对被截断的目标无法识别,对给较少信息的目标检测能力较差,而改进型MobileNetv2-SSD网络有针对性地提高了对小目标的检测能力,对目标信息反复挖掘,所以检测效果较好。
(a)原本的MobileNetv2-SSD网络检测效果 (b)改进型MobileNetv2-SSD网络检测效果
之后是与其他算法作对比分析。表3是不同检测算法在KITTI数据集上的检测结果对比,Faster R-CNN由于把目标识别和定位分两步完成,导致模型较大,而且检测速度较慢。其他的算法都是单步识别网络,同时进行目标的识别和定位,所以检测速度较快。其中,YOLOv2有着最快的检测速度,是SSD300检测速度的两倍,但检测准确度比不上SSD300。YOLOv3有着最高的检测准确度,达到了91.58%,但网络仍比较大。而文中的检测网络在检测速度上仅次于YOLOv2,检测准确度上仅次于YOLOv3,而且基本持平,网络大小上远小于其他网络。由此证明,文中的检测网络在综合性能上有较强的优越性。
表3 不同检测网络的检测结果
基于MobileNetv2-SSD网络进行改进,针对SSD网络的小目标检测能力不足的问题增强特征的提取和运用,为减小计算量,对先验框的使用过程进行改进。实验表明,改进后的网络相比原网络有更高的准确度,同时检测速度更快,这在车辆小目标检测中有较高的应用价值。该实验的进一步研究是扩大检测目标的种类,增加对行人、电动车、摩托车等目标的检测,以增强应用价值。