吕方方,陈光喜,刘家畅,胡 灵,李翘楚
(1.桂林电子科技大学 计算机与信息安全学院,广西 桂林 541004;2.清华大学 计算机系,北京 100084;3.成都理工大学 地球科学学院,成都 610059)
典型的目标检测算法,如Haar特征+Adaboost[1]、Hog特征+SVM[2]和DPM[3]等,使用手工设计得到的低层特征,可以识别图像中存在物体的类别,但这些算法存在语义信息表达不足、可分性差等缺陷,导致分类错误率较高,准确率达不到实际要求。常用评价检测算法的2个主要检测要素为均值平均精度(mean average precision,简称MAP)和平均精度(average precision,简称AP)。AP对某类物品预测的准确度取平均值,能够具体地反映出此类目标检测效果的好坏,AP值越大,表明检测效果越好,而MAP则是对所有类别的AP取均值。传统算法DPM[3]在PASCAL VOC数据集上的MAP可达33.4%。为了提取表达能力更好的特征,Lecun等[4]利用深度神经网络从大数据中自动地学习高层特征,相比于设计的特征,能学习到信息更丰富、表达能力更强的特征语义,获得比DPM算法更高的准确度。这些典型算法[1-4]也可以完成对小目标物体(小于长宽为原图像尺寸的0.1[5])的检测,但识别准确率不高。
Girshick等[6]利用selective search方法从待检测图像中选择较好的候选区,再用AlexNet判定候选区所属类别,识别效果较好,极大地提高了检测精确度,MAP达到了44.2%,但如瓶子等小物体的AP却只有32%。Chen等[7]通过提出的基于上下文模型和小区域建议生成器的方法来优化R-CNN算法,从而提高小目标检测性能,目标检测的MAP比RCNN[6]算法提高了29.8%,但AP依然无明显改变,且运行速度慢。为了提高RCNN模型的检测准确度,Ren等[8]提出一种Faster RCNN算法,采用端到端的方式进行训练,引入RPN来替代选择性搜索算法,产生高质量的候选框,并与检测网络共享整图的卷积特征,使得候选框的计算几乎不额外占用时间,AP、MAP均有3%左右的明显提升,速度也快了很多。虽然Faster RCNN检测速度有所提升,但与one-stage检测算法(如YOLO、YOLOv2[9])相比,速度的差距依然较大。
为了解决YOLO算法定位与检测精确度较低的问题,Liu等[10]提出一种利用多层特征图进行检测的SSD算法,在保持检测速度的同时,将MAP提升至77.5%,但对小目标检测的AP只有50.5%,仍不理想。Fu等[11]针对SSD算法在小目标检测上存在的问题,提出改进的DSSD算法,将基础网络改为ResNet-101,增强了网络提取特征的能力,通过结合多尺度特征的信息,使得检测MAP、AP分别提高至78.6%、53.9%。然而,DSSD网络忽略了低层特征与高层特征之间的联系,对图像中形状、大小都不同的物体作卷积操作,其感受也不同。Lin等[12]提出一种特征金字塔网络(FPN),利用多尺度特征和自上而下的结构来实现对目标的检测,但对小目标的检测依然存在漏检和误检。焦天驰等[13]将多个反残差块叠加,构建了Mobilenetv2网络,更好地利用了高层特征图的语义信息。Eggert 等[14]则通过在自下而上的特征提取结构上引入自上而下的网络结构来融合多尺度特征信息,从而使检测精度有所改善。Mao等[15]通过一个由多层卷积与反卷积计算组成的全卷积编解码框架来恢复图像细节并去除噪声干扰,但随着网络深度的增加,易发生梯度消失现象,造成网络难以收敛,且参数的增多也会加大计算量,使得训练时间长、检测速度慢。上述方法对小目标的检测效果均有改善,但都只使用了信息丰富的高层特征进行检测。低层特征图中含有目标丰富的细节和边缘信息,这些特征在经过层层池化后丢失了,但这些缺失的信息对小目标检测的效果具有重要意义。
Faster R-CNN算法由RPN候选区域提取和Fast R-CNN检测2个子模块组成,如图1所示。利用VGG16网络提取输入图像的特征图,将其传入RPN网络中,生成并修正锚点框,得到位置、大小都固定的候选区域,再将VGG16得到的最后一层feature map与region proposal一起传到RCNN网络中,得到固定大小的区域建议特征图,利用全连接操作进行目标识别和定位,并输出预测结果。在Faster R-CNN中,预训练模型VGG16以13个卷积层和5个池化层通过堆叠(stack)的方式构成,卷积层与池化层均采用相同参数的卷积核/池化核,易形成较深的网络结构,但VGG16最后一层特征图经过多次池化后,缺少特征的细节信息,对本身语义信息不丰富的小目标来说,检测准确率低,且也未利用各层特征信息之间的联系。
图1 Faster R-CNN网络结构
在RPN网络中,对生成的锚点框进行裁剪过滤后,使用分类器(softmax)判断锚点属于前景(foreground)还是后景(background),即判断是不是物体;同时另一分支边界框(bounding box)回归修正anchor-box位置,形成定位较精确的候选建议框(proposal)。预设锚点框尺寸大小由128 px×128 px、256 px×256 px、512 px×512 px三种面积和1∶1、1∶2、2∶1三种长宽比组成,对大尺度目标的检测有较高准确率,但仅有输入图像尺寸0.1大小的小目标远小于所设定锚点的最小面积,明显过大的锚点框会带来较多噪声,不利于检测小目标物体。在边界框回归分支中,仅通过对边框做简单的平移、尺寸缩放来微调proposal位置,得到定位更精确的proposal,对大目标定位精确度较高,但对于自身面积较小的小目标,定位不准确可能会导致大量的小目标误检,因此对proposal定位要求较高。
鉴于此,对Faster R-CNN算法进行3个方面的改进:
1)针对网络提取特征信息缺失、不充分的情况,通过一个稠密连接块之间全连接的方法融合特征信息,实现对各层特征信息的复用,弥补特征信息的缺失;
2)区域生成网络(RPN)生成的候选建议框与真实小目标的定位之间存在偏差,通过数学推导确定适合小目标检测的锚点尺寸,并验证其有效性;
3)在网络中加入超分辨率技术,通过一种跳跃的残差网络修正建议(proposal)位置来提高模型的定位性能,加快训练收敛速度。
改进的Faster R-CNN算法的网络结构如图2所示。在Faster R-CNN算法框架上,针对小目标检测时特征信息不充分的问题,在特征提取网络中添加了稠密连接块,并通过全连接的方式融合特征,补充、丰富语义信息,以达到提高检测精确度的目的;采用适合小目标的锚点框尺寸替换原尺寸,便于检测小目标物体;对边界框回归支路部分进行改进,利用全卷积网络来实现目标边框定位的精确度修正,在得到proposals后,通过一个超分辨率模块对候选框位置信息进行弥补,再进行一次回归(regression)操作后,送入分类器(classifier)进行分类。
图2 改进的Faster R-CNN算法的网络结构
对深度学习来说,网络层深对分类与识别的效果有较大影响,理论上是把网络层次设计得越深,效果就越好,但随着网络深度增加到一定程度后,梯度消失的现象就越来越明显,后向传播时不能将梯度反馈给前面的网络层,使得网络参数无法更新,导致训练网络的效果较差。残差网络结构[16]通过增加一个恒等映射跳过本层或多层的运算,可以在增加网络层深的同时,在后向传播过程中将后一层网络的梯度直接传递给前一层网络,改变了前向和后向信息之间的传递方式,结构更加简单,从而促进了网络结构的优化。残差学习方法只需学习输入图像与标签图像的区别(即残差),就能够有效地降低整个网络的权重,使得网络不用记录太多的图像细节,也能解决深层网络梯度消失、爆炸的问题,在加快网络信息流动的同时,也加快了网络收敛的速度,获得训练更深层网络的能力,从而拥有更高的检测准确度。
目前主流的RCNN框架大多数是以VGG16、ResNet101为基础网络进行改进,尤其是ResNet101,对通用目标检测的效果较好,但使用的残差网络结构只是以一个简单的短连接将前层的输入与输出做相加操作(concat),省略全连接层,只利用最后一层网络输出的特征图做检测,未复用其他层的特征信息。本网络在大型数据集ImageNet101上预训练,使用一种对稠密连接块进行全连接的网络(FDB)来提取特征并融合特征信息,共添加了3个稠密密度块(dense-block),将前一个密度块的输出与输入做concat操作后,作为下一个密度块的输入,以跳跃式的短连接方式使多层特征得到复用;在相邻的2个密度块之间增加过渡层(transition layer),过渡层包含一个1×1卷积层和一个调整特征图尺寸的池化层,目的在于修正特征图的大小,以便各层之间进行concat操作。特征融合模块结构对比如图3所示。
图3 特征融合模块结构对比
相比于ResNet101网络分类器直接依赖于网络最后一层(复杂度最高)的特征,本网络每层的输入都来自前面所有层输出的并集,在减轻梯度消失的同时,加强了对特征的传导与利用。通过在特征通道上的连接实现对特征的复用,弥补较小目标缺失的部分语义信息,可以综合利用浅层的低复杂度特征,因而更易得到一个光滑且具有更好泛化性能的决策函数。在增加深度的同时,加宽了每个dense-block的网络层宽度,即通道数增加,使网络识别特征的能力增强。由于dense-block的横向结构类似于Inception-block结构,使得需要计算的参数量大大降低,加快了训练速度。
在Faster R-CNN网络结构中,RPN网络对通用目标生成候选建议框时,使用尺寸为128 px×128 px、256 px×256 px、512 px×512 px的anchor-box,取得了较好的检测性能,但对小目标的检测不同于其他通用目标,明显过大的anchor-box会带来较多噪声,导致通过训练得到的网络对小目标检测时,由于受到复杂背景特征信息的干扰,检测效果不佳,且对小目标生成候选建议框的性能较差,不易于检测出小目标,需对其进行修改。小尺寸有利于检测出较小的目标,因此在RPN网络中做了修改,将anchor-box改为{16 px×16 px,25 px×25 px,32 px×32 px,45 px×45 px,64px×64px,90 px×90 px}(即MA),使其能够很好地完成对小目标检测的特定任务。
一般情况下,通过查看IoU是否大于阈值(通常为0.5)来确定检测的候选区域是否准确。如图4所示,假设anchor-box和真实背景(ground truth)框都是正方形,那么Sgt表示ground truth的边长,SA表示anchor的边长,因此anchor和ground truth之间的IoU表示为
图4 IoU示意图
(1)
(2)
为了找到一个较好的阈值t,即min(IoU)≥t,在只考虑SA≥Sgt的情况下,由式(1),经过进一步推导,得到式(2),其中尺寸大小依赖于所使用的数据集,而d值取决于模型主干网络的下采样次数。由于选择在第3个卷积块后固定anchor-box,可知d=16,从而确定了ground truth锚点框尺寸的上限。当t=0.5时,结合对数据集中小目标尺寸的分析并采用与faster RCNN相同锚点宽高比的情况下,得到适合小目标的锚点框:{16px×16px,25px×25px,32px×32px,45px×45px,64px×64px,90px×90px}。
RoI Pooling操作会丢失可识别的特征信息,尽管大规模升级会增加不需要的模块,并导致图像产生噪声,但升级后的候选建议框用于分类时的性能却更好。因此,可利用超分辨率技术去除图片中的噪声,得到一个分辨率更高的图像。超分辨率方法一般都是先对低分辨率的图像进行高清晰处理,再用CNN对图像进行除噪处理。
针对网络层次越深越难训练的问题,对proposals区域使用一个具有跳跃连接的convolutional-deconvolutional网络结构(即SPR),在卷积层与反卷积层之间进行跳跃层连接,如图5所示,网络结构对称,使用这种类似跳跃的连接方式可以使网络更容易训练、收敛,与此同时,还可以保证反卷积层能够使用卷积层所捕获到的语义信息,检测效果更好。当卷积层将输入图像尺寸减小后,通过反卷积层的上采样调整尺寸,将其变大,得到尺寸统一的输入、输出。每组相互对应的卷积层与反卷积层之间都具有短捷径连接(short-cut)结构,将卷积层与其对应的反卷积层的特征做相加操作,输出的特征用于下一个反卷积层中,类似ResNet的残差结构。每个卷积层都有对应的反卷积层,卷积层用来获取图像的抽象内容,反卷积层用来放大特征尺寸并恢复图像细节,卷积层和反卷积层所学习的特征信息是目标图像与低质图像之间的残差,使用均方误差作为损失函数。
图5 原始Faster R-CNN与Convolutional-Deconvolutional结构对照图
实验运行在LINUX 64 bit操作系统的Ubuntu 16.4环境下,使用一块显卡型号为NVIDIA GeForce RTX 2080Ti的GPU,CPU为Intel(R)Core(TM)i7-6700 CPU@3.40 GHz,内存为16 GiB,加速库为CUDA 10.0和CUDNN 6.0。实验程序在深度学习框架Pytorch下,使用Python编译语言实现。
模型中提取的特征对检测结果至关重要。在本实验中,以端到端的方式对网络进行训练,并在ImageNet数据集上初始化DenseNet网络权重,其他部分权重取随机的初始化值。训练网络的初始学习速率为0.000 1,衰减因子为0.1,IOU阈值为0.5,最大迭代次数100 000次,学习率的衰减尺度为50 000、75 000。由于计算资源限制的问题,实验中batch size设为1,NMS阈值设为0.7,纵横比与Faster R-CNN相同,分别为1∶1、1∶2和2∶1。
训练过程如下:
1)对VOC 2007训练数据集预处理;
2)对训练数据做增强处理,在一定程度上避免过拟合问题;
3)平衡网络的正负样本数量为1∶1,避免因负样本数过多而影响模型性能;
4)训练过程中对学习率的调整遵循衰减尺度,衰减系数为0.1;
5)采用SGD算法优化损失函数,获得最优的模型参数。
由于部分算法实验的数据集并非公开,所有实验都在公开的标准数据集PASCAL VOC 2007上训练与测试。通过分析数据集中目标尺寸与anchor之间的关系发现,适当的anchor对较小目标的proposal提取影响较大,因此实验中所选的锚点必须覆盖数据集中的整个较小目标的范围。为了证明其影响,在anchor中增加40×40、100×100两个尺寸,却发现添加更多的尺寸会使性能下降到74.6%。此外,在端到端的网络训练中,将密度块添加在dense-block3后生成的候选框比添加在dense-block2或dense-block1后的检测效果更好。
针对构建的FDB、MA和SPR,用设计消融实验衡量各改进点对最终检测结果的影响。消融实验结果如表1所示。以MAP作为算法的定量评估指标,并以MAP为73.2%作为baseline基准算法,通过FDB、MA和SPR的联合使用增强了模型的鲁棒性,验证了本算法的有效性。相比baseline,本算法的检测结果获得较大的提高,对某些较小目标的检测结果均有所改善。
表1 消融实验结果
为了验证本算法的有效性,与DMP及近年来主流的Faster R-CNN[8]、SSD[10]、DSSD[11]、FPN[12]等算法进行对比,实验结果如表2所示。采用MAP衡量模型的质量,本算法在小目标物体检测的性能上有1.1%的提升。为了验证对小目标效果的提升,从测试集中随机选取4张包含众多小目标的图片进行测试,测试结果如图6所示。
表2 VOC2007检测结果
图6 小目标检测效果图
除此之外,还使用了一种区域特征聚集方式(ROI align),很好地解决了ROI pooling操作中2次量化造成的区域不匹配(mis-alignment)的问题。此方法取消量化操作,用双线性内插方法得到坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作,同时在遍历上比ROI pooling的取样点数少,减少了计算量,提高了性能。在检测图片中大目标物体时,2种方案的差别较小,但若在图片中有较多小目标物体需要检测时,选择ROI align将会更加精准。
在Faster RCNN基础上提出一种对稠密连接块进行全连接的小目标检测算法,将多层特征图的特征语义信息进行融合,充分利用高层特征语义信息与低层特征细节信息之间的关系,弥补信息不丰富的模糊小目标的特征信息,再进行下一步的分类和回归,可提高算法整体的检测效果。另外,在proposal区域添加一个具有短捷径连接(short-cut)的超分辨率模块,可加快收敛速度。对比实验结果表明,本算法在在PASCAL VOC数据集上对小目标的检测准确率有明显提升,mAP从78.4%、80.5%提高到了81.6%。