基于图像自适应增强与特征融合的目标检测方法
2024-04-15朱海红李思宇李林峰胡伦庭
于 璐,朱海红,李思宇,李 霖,李林峰,胡伦庭,龙 雪
(1.武汉大学 资源与环境科学学院,武汉 430000; 2. 武汉海微科技有限公司, 武汉 430000; 3. 北京强度环境研究所, 北京 100000)
近年来随着硬件的不断迭代升级和深度学习技术的发展,目标检测算法被广泛应用于自动驾驶、智慧交通、人脸识别等各个领域[1]。目标检测算法可以根据采集图像的特征,自动提取感兴趣目标的位置并识别出目标类别,不需要过多的人工干预且占用空间小、方便部署,在测绘地理信息领域也有较为成熟的应用[2],如摄影测量、遥感目标检测以及交通标志和信号灯检测等。
早期的深度学习神经网络模型大多应用于图像分类,通常需要借助其它算法才能同时完成目标定位和分类识别任务。目标检测算法则将特征提取、目标定位和分类任务都整合在了一个网络中,省去了繁琐复杂的特征设计过程,模型训练更加简洁方便,在检测与识别效果方面显著优于传统的基于颜色、形状等简单特征的算法,检测准确度与速度也高于常用的手工特征算法。其中,以目标的定位和分类是否同时进行为区分标准,目标检测算法被分为单阶段网络和两阶段网络两种类型。两阶段网络以Faster R-CNN[3]为代表,先生成目标所在候选区域,再获取该区域特征图用于判定目标类别,这种方式的检测精度较高,但相对于单阶段网络占用空间大、检测速度慢。单阶段网络没有用于生成候选框的阶段,直接对目标的位置和类别进行回归,节约计算成本并提高了检测速度,常用的单阶段网络包括SSD[4](single shot multi-box detector)、YOLO[5](you only look once)系列等。
在目标检测算法中,网络的不同层级包含的信息不尽相同,无论是单阶段网络还是两阶段网络,都依赖于深层的网络结构来提取高维语义信息。而在实际的目标检测应用中,不同目标的尺度变化较大,当算法的网络较深则易丢失浅层的细节特征信息,不利于小目标检测,因此常用的目标检测算法都存在对小目标检测能力不足的问题,从而引起了算法整体的检测精度下降,对此许多学者对小目标检测困难的问题做出了不同方向的改进。Yang等[6]在SSD算法中引入了空洞卷积和注意力残差模块,将低分辨率高语义特征层和高分辨率低语义特征层进行融合,使得算法更注重底层特征,在应用于微小目标检测时降低了18.01%的误检率和18.36%的漏检率。Fu等[7]提出了DSSD(deconvolutional single shot detector)算法,在SSD算法的扩展特征层后加入了反卷积模块,通过自上而下的结构实现了不同层特征的融合,除此之外还优化了用于分类和定位的预测模块。Li等[8]对YOLOv3算法的3个输出层的有效感受野进行分析,根据有效感受野分配候选框,并增加了上下文信息,显著改善了小目标的检测困难问题。Zhao等[9]为提升航空遥感影像的小目标检测准确率,构建了并行高分辨率网络,将多个子网络并行连接,对不同分辨率的特征层反复融合,增强了小目标特征。
在不同环境下,采集图像的质量也会产生差异,进而对提取目标特征造成较大影响,因此除了改进网络结构这一方法外,数据增强也是一种提高算法对各尺度目标检测能力的有效方法,通过各种图像增强算法能够提升图像质量并丰富监督信息,从而获取更可靠的特征空间[10]。这种方式不会占用太多内存空间,不需要增加硬件成本,但可以有效提升检测算法的准确度和泛化能力[11]。Lv等[12]使用基于Retinex理论的图像增强算法进行原始低照度图像的增强, 联合利用原始图像与增强图像之间特征差异性,设计了双分支SSD结构。Huan等[13]构建基于双边滤波的高斯金字塔变换Retinex图像增强算法融入模型,有效解决了在复杂场景下由于光照不均、事务遮挡下检测精度差、实时性低的问题。
基于以上背景,文中提出了一种自适应图像增强、引入注意力机制的特征融合的改进SSD算法。首先,根据图像的全局特征预测图像预处理算法的超参数,实现检测图像的自适应增强,减轻由于检测环境差异导致的采集图像质量不一,进而引起的目标特征丢失问题;其次,将特征提取的主干网络替换为ResNet50,优化特征金字塔结构,使其更适用于小目标图像的特征提取;最后,将特征金字塔中的浅层特征和深层信息进行特征融合,并引入SENet结构获取通道间权重,用于抑制融合后的特征对于原有细节特征的干扰,实现了语义信息和细节信息的有效融合,提高了算法对于各尺度目标的检测性能。
1 算法介绍
1.1 SSD算法
SSD是一种单阶段(one-stage)目标检测网络,在多尺度特征图上以回归的方式同时得到目标的类别和位置。相较于位置回归与类别预测需要分阶段进行的两阶段(two-stage)网络,SSD的速度更快、占用内存更小。SSD算法框架如图1所示,主要包含4个部分,即输入(input)、主干网络(backbone)、颈部(neck)和头部(head)[14]。输入部分用于训练图像预处理与增强,如随机旋转、裁剪和放大等;主干网络用于提取图像特征,SSD算法的主干网络为修改后的VGG16[15]网络;颈部为特征金字塔即多尺度特征图部分,将主干网络提取出的特征通过一系列的额外卷积层构建不同尺度的特征图;在头部对特征金字塔中各个特征图的不同位置进行密集抽样,抽样时采用不同的定位框尺度和长宽比,同时进行物体分类和先验框(anchor box)的回归。
图1 SSD算法框架
文中主要对输入、主干网络和颈部3个部分进行了改进。输入部分,在原有的随机裁剪、旋转、放大等操作的基础上,增加了改善图像亮度和细节特征的自适应增强模块。在主干部分,使用ResNet50网络替换VGG16网络,提取更深层的信息用于分类。在颈部部分,加入了带有注意力机制的特征融合模块,在浅层特征图中融合了上下文信息和深层的语义信息。
1.2 基于图像自适应增强的预处理方法
由于采集环境差异会对图像造成不同程度的影响,因此在目标检测任务中图像增强是一项重要环节,可以通过图像增强有目的的强调局部或整体特征,扩大图像中不同物体特征的区别,提高图像质量并丰富信息量[16]。除了对训练图像进行随机裁剪、旋转和缩放外,根据图像本身的特征进行针对性的图像处理可以进一步提高图像的质量。在本文算法中,选取改善图像亮度和对比度的图像增强算法,有助于改善灰度畸变现象,增强图像细节特征,有利于拥有丰富细节特征的小目标检测。本文参考IA-YOLO[17]中的图像自适应增强框架,通过构建一个弱监督的CNN网络来预测图像增强模块的超参数,根据预测的超参数在可微图像处理模块对训练图像进行自适应增强,并根据检测的损失值反向传播来优化这些参数。与常规图像预处理方法不同的是,该方法并不局限于提高整幅图像质量,而是对提升模型检测性能有用的特征进行针对性增强。图像自适应增强模块由两部分组成,一个是CNN参数预测模块(CNN predict module),一个是可微图像处理模块(DIP module),整体结构如图2所示。
用于预测参数的CNN网络主要包括5个卷积层和两个全连接层,每个卷积层包括一个步长为2的3×3卷积层和一个Leaky Relu层,最终全连接层输出可微图像处理模块需要的超参数。CNN参数预测网络是根据全局的图像特征,例如色调、亮度等,去预测图像滤波处理的参数,将原本需要手动调整的超参数,交给CNN网络预测,并根据检测的损失函数反向传播从而不断进行优化和学习,使得图像能够自适应地朝着有利于检测的方向进行增强。因此,该模块只需要输入下采样后低分辨率的图像,经过一个简单的CNN网络即可得出预测参数,并随检测的损失值不断更新预测参数。
针对不同环境对采集图像属性的影响,在图像增强算法上选取了能够改善图像整体亮度、对比度和色调的Gamma校正、对比度变换和白平衡的变换算法,以及增强图像边缘和细节特征的USM锐化算法,各个滤波器算法如表1所示。
其中,Pt为图片的像素值;ri、gi和bi为各通道对应位置的像素值;Gamma用于校正图像的明暗;参数γ可以通过反向传播不断学习,调整图像的明暗。白平衡用于解决不同的光源条件下,同一个物体反射的光线有所差别的问题,通过三通道各个像素值乘以一个用于学习的参数,来调整图像的色彩比例。图像的对比度是一幅图像中最亮和最暗的像素值之间的反差大小,反差越大代表图像对比度越大,反差越小代表图像像素更接近、对比度越小。图像锐化采用USM算法[18],这种锐化的方法就是对原图像先做一个高斯模糊,然后用原来的图像减去一个系数乘以高斯模糊之后的图像,该方法可以去除一些细小的干扰细节和噪声,比一般直接使用卷积锐化算子得到的图像锐化结果更加真实可信。
1.3 特征提取网络改进
SSD算法采用的VGG16网络虽然在增加CNN网络深度方面做出了贡献,但当网络深度到达一定限度时,易出现梯度消失和退化现象。随着网络深度的不断增大,用于非线性转换的激活函数也不断增多,高维信息更加离散,导致网络难以实现恒等映射(identity mapping)。VGG16中采用的激活函数为ReLU非线性激活函数,ReLU计算式如式(1)所示。
f(x)=max(0,x).
(1)
当输入值为负值的情况下输出值被设置为0,代表当前神经元不会被激活,从而保证网络中神经元的稀疏激活性,加快网络的收敛速度。但这种激活方式存在输入与输出的不可逆性,然而在网络的低维空间中信息通常较为集中,ReLU激活函数会造成较多不可逆的信息损失,因此难以实现输入与输出的恒等映射,进而导致网络过深时出现退化现象。ResNet[19](deep residual network, ResNet)网络通过引入残差学习的方式,在网络层间加入了如图3 (a)所示的残差模块,将网络的不同特征层进行快捷连接(shortcut connection),使网络深度达到成百上千层时仍然保持良好的分类效果。如图3所示的残差模块,通过在不同层间加入快捷连接,将输入x传入输出层中与之相加,输出结果可用式(2)表示。
图3 残差模块与BottleNeck结构
H(x)=F(x)+x.
(2)
通过以上算式,可以将网络转化为学习残差的过程,当F(x)=0时,就构成了恒等映射H(x)=x,使得网络可以自主选择跳过冗余层,并且减小了计算参数量。为进一步获取网络深层信息、提升检测效果,文中将特征提取网络由VGG16替换为深度残差网络ResNet50,可以有效缓解随深度增加带来的退化现象,从而获取到更深层的有助于分类的信息。ResNet50网络主要包含4个部分,每部分分别包含3、4、6、3个BottleNeck结构。BottleNeck结构如图3 (b)所示,遵守尺寸不变通道数不变、尺寸减半通道数翻倍[20]的设计原则,由两个1×1步长为1的卷积层和一个3×3步长为2的卷积层以及残差连接构成,1×1的卷积层用于特征降维,3×3的卷积层用于提取深层特征。每个部分输出的特征层记为{C1,C2,C3,C4},假设输入的图像大小为300×300,则每部分输出的特征层尺寸分别为{75, 38, 19, 10}。
在SSD算法中使用的特征金字塔结构主要用于提取不同尺度的特征,保障了算法对于多尺度目标的检测能力,但其中用于小目标检测的浅层特征仅有一层,缺乏足够的细节特征表达,因此SSD算法存在小目标不敏感的缺陷。由于本文实验数据集中以中小目标为主,且需要微小细节信息来判定目标类别,因此文中选取ResNet50网络输出的浅层特征层C2作为特征金字塔的初始特征图,并根据以下算式构建特征金字塔。
Pi+1=F(f3×3(F(f1×1(Pi)))),
(3)
F(xi)=ReLU(BN(xi)).
(4)
其中,i∈{0, 1, 2, 3, 4},P0=C2,f3×3和f1×1分别为卷积核大小为3、1的卷积层,f3×3卷积层的步长为2。BN为批标准化处理(batch normalization),批标准化处理用于消除网络训练过程中数据分布发生变化导致学习速度降低的问题[21]。ReLU表示ReLU激活函数,可以缓解由于网络过深产生的梯度消失现象。最终输出特征图集合表示为{P0,P1,P2,P3,P4,P5},特征图尺寸分别为{38, 19, 10, 5, 3, 1}。
1.4 引入SENet的特征融合模块
在特征金字塔输出的特征图中,特征随网络加深逐渐抽象[22],深层输出的特征通常包含更丰富的语义信息,但同时也会丢失部分细节特征信息。因此,将浅层特征与深层特征以特定的方式融合,添加上下文信息,可以有效提高小目标的检测能力,文中参考FSSD算法[20]和文献[23]中的特征融合结构,将浅层的特征与深层的语义信息进行融合,使得用于小尺度目标检测和定位的浅层特征图能够同时包含细节和深层语义信息。特征融合结构可以由以下算式表示。
Tf=Concat(f{Xp},f{Up{Xq}}),
(5)
f(xi)=ReLU(L2(xi)),
(6)
Up(xi)=ReLU(BN(f1×1(Bilinear(xi)))).
(7)
其中,Billinear表示双线性插值法,对于与目标尺寸不同的待融合特征图,先通过1×1的卷积层降维后,使用双线性插值法将尺寸较小的深层特征图上采样处理。f表示所有待融合特征图通过L2正则化将数据归一化至同一范围内,便于后续的拼接。拼接方式选取串联(concatenation)操作,将未经上采样的特征图Xp和经过插值后的特征图Xq在通道维度拼接,再通过一个3×3的卷积层消除拼接后的混叠效应。
由于直接融合的方式容易导致原有信息被干扰,可能会造成小尺度目标信息的丢失,本文在特征融合模块中引入SENet,使网络在训练的过程中更专注于融合通道间有效的特征。SENet[24](squeeze and excitation) 结构如图4所示,是一种能够对卷积特征的通道间相互依赖关系进行显式建模的结构,输入SENet的特征层首先通过一个全局平均池化层得到全局空间信息,再通过两个全连接层和两个激活函数对全局信息进行压缩再升维,最终获取各个通道的权重并与对应的特征图相乘,从而获取各通道间的关联关系。将SENet插入到L2正则化和ReLU激活函数之后、串联操作之前,获取拼接前各通道的权重,以取得更有效的特征融合结果。
图4 SENet结构
文中采取了如图5所示的特征融合结构,将特征金字塔输出的P0与主干网络输出的C3融合,替换用于检测与定位的尺寸为38的特征图P0,记为T0;将P1与{C3,C4}融合替换尺寸为19的特征图P1,记为T1。最终,用于定位和检测的特征图集合为{T0,T1,P2,P4,P5},特征图尺寸分别为{38, 19, 10, 5, 3, 1},每层生成的候选框个数分别为{4, 6, 6, 4, 4},将特征图尺寸与每层生成的候选框个数对应相乘后,共输出8 732个候选框。并将以上候选框进行NMS筛选,NMS(non-maximum suppression)为非极大值抑制筛选,用于选取得分最高的候选框并抑制多余的候选框。
图5 改进SSD算法结构
1.5 损失函数
SSD算法的损失函数主要包含两部分,即置信度损失Lconf和定位损失Lloc,计算式如式(8)所示。
(8)
其中,N表示匹配的候选框个数,当N为0时损失值设置为0;α为权重系数,当交叉验证时设置为1;c为置信度得分,l表示候选框参数,g为真实标注框参数。
定位损失,是候选框与真实标注框的SmoothL1损失。如式(9)所示:
(9)
(10)
(11)
(12)
(13)
2 实验结果与分析
2.1 数据集
文中的实验数据集为以中小目标为主的车载屏幕部件数据集,由部署在工业生产线的工业相机采集。数据集为未经处理的车载屏幕背板图像,类别包含导电泡棉正常、导热泡棉正常、排线正常、排线缺失、排线歪斜、排线未扣紧和排线翻转7个类别,图6、图7分别为车载屏幕背板图像和各类别图像。
图6 车载屏幕部件数据集图像
图7 各类别图像
文中提出的算法可以对采集图像数据进行自适应的图像增强,为验证算法对采集图像质量差异的处理能力,数据集中包含的图像是未经过图像增强处理的原始图像。数据集共包括训练集数据2 251张,测试集数据214张,验证集数据563张,图像分辨率为2 448像素×2 048像素,各类别具体数目如表2所示。
表2 训练集各检测类别数目
通常测试集的划分方式是从已标注图像中随机划分出一定比例数量的图像作为测试集,但文中研究对象的检测受环境光照影响较大,因此从已采集图像中挑选了214张环境光照有差异的图像来测试模型对光照条件的适应能力。
2.2 模型训练信息与评价指标
使用在ImageNet数据集[25]上预训练的ResNet50模型对主干网络部分进行预训练,将前50轮训练的主干网络权重进行冻结,共迭代300轮。优化器选择SGD(stochastic gradient descent)优化器,初始学习率定为0.002,学习率衰减采用余弦退火策略进行周期性衰减。实验的操作系统为Windows,使用Pytorch1.5框架开发,实验的硬件环境CPU为Intel i7-9700 CPU@3.00 GHz,内存为16G,GPU为NVDIA GTX 1650 super。
评价指标有平均精度和平均精度均值等[26],其中平均精度就是Precision-recall曲线下方的面积,按模型给出的置信度由高到低对候选框进行排序,得到一组包含精度、召回率的有序数组。平均精度由以下算式得出:
(14)
平均精度均值(mAP)指所有类别平均精度(AP)的平均值。
(15)
其中,N为类别的总数;AP(i)为各类别的平均精度。
2.3 消融实验
为验证各个模块对于检测精度提升的有效性,进行了图像自适应增强模块、特征融合模块和注意力模块的消融实验。在表3消融实验中,Feature_Fusion和Fusion指的是特征融合模块,Fusion_Layers表示进行特征融合的结构,即图8中(a)、(b)结构,SE Block表示SENet结构的注意力模块,IADA指图像自适应增强模块。从表3中的结果可以看出,各模块都对检测精度有一定的提升。其中特征融合模块,在未加入注意力模块前,结构(a)相较于原始SSD算法提高了4.6%,高于结构(b)的2.04%。说明结构(b)的浅层特征加入了更深层的语义特征后,原有的细节特征被干扰。注意力机制可以使模型通过训练不断调整特征融合后各通道的权重,选择有利于模型检测的信息,因此加入注意力模块之后,结构(b)提升了4.97%,高于结构(a)。图像自适应增强模块对于模型检测性能也有较大幅度的提升,在主干网络为VGG16和ResNet50的实验中,分别提升了4.05%和1.86%。最终,采用图8(b)的特征融合结构,加入注意力模块和图像自适应增强模块后,模型的检测精度得到较大幅度提升,相较于原始SSD算法提升了5.2%。
表3 消融实验
图8 Fusion Layers 结构
2.4 检测结果对比与分析
2.4.1 检测结果
文中算法能够精准地检测出实验数据集中的中小目标部件,并实现了较高的定位精度。在图9的检测结果示例中,为了验证模型在不同光照环境下的检测性能,挑选了不同环境的检测图片,并与原SSD算法的检测结果作对比。从图10可以看出,在明暗度不同的环境下,SSD算法出现了漏检和误检的现象,改进后的SSD算法则可以在昏暗和明亮的情况下检测出正确的类别并精准定位。
图9 检测结果示例
图10 不同光照条件下的检测结果
2.4.2 改进算法与其他算法对比结果
将不同的目标检测模型与文中改进SSD算法作对比,实验结果如表4所示,其中Param代表参数量,即算法的参数所占内存大小;FLOPs(floating point operations)表示浮点运算次数,表示每次检测时运行浮点操作的次数,用于衡量算法的计算复杂度。文中算法相较于经典目标检测网络Faster R-CNN精度提升了7.25%,参数量与浮点运算次数都大幅度降低。相比YOLO系列网络,文中算法在多尺度缺陷目标的表现更好,在检测精度上高于经典的YOLO-v3和YOLO-v5网络。在SSD系列网络中,文中改进算法较原始SSD算法精度提升了5.2%,同时也高于其他的改进SSD网络如DSSD、FSSD等,且参数量和计算量较小,适合在移动端进行部署。
3 结 论
文中通过引入图像自适应增强和融入注意力机制的特征融合,提升了SSD算法的检测能力,实现了对中小目标准确、有效的定位。改进算法通过在图像预处理阶段加入自适应图像增强模块,提升了在不同光照条件下算法的检测性能,对于真实场景下的各种检测环境具有良好的适应性;通过引入SENet结构的特征融合模块有效提升了对小尺度目标的检测能力,从而实现对多种尺度目标的精准检测。基于车载屏幕背板数据集的对比实验以及消融实验证明了改进算法对中小目标的检测总体精度高于经典的目标检测算法和部分常用的SSD改进算法,且具有较低的内存占用和计算复杂度,对于不同环境的适应能力更强,为解决目标检测算法的实际应用中的难题提供了可行的改进方式。