王悦炜,焦良葆,2,高 阳
(1.南京工程学院 人工智能产业技术研究院,南京 211167;2.江苏省智能感知技术与装备工程研究中心,南京 211167)
军事民生方面的遥感目标检测具有越来越重要的意义。遥感目标检测要求从复杂的遥感图像中找到感兴趣的目标,并精确地标注目标的位置和名称[1]。同时,由于遥感图像的拍摄角度特殊,很大一部分遥感图像是从高空俯视的角度进行拍摄的,造成一幅遥感图像中常会包含很多无用信息,这大大增加了检测遥感目标的难度[2]。
这就需要高精度和对遥感目标检测有针对性的优化方法,但是遥感目标的检测除了拍摄角度问题,还存在着其他一些难题:由于小目标覆盖面积小、像素面积占比少、特征表达不充分、拍摄距离较远、图像覆盖范围较大而导致的目标形态畸变等特点,使得基于遥感图像的小目标检测面临更大挑战[3]。
随着机器学习的快速发展,深度学习越来越多地应用在目标识别方面,图像目标识别技术也越来越先进。当前,目标检测的主流方法大致分为两种:以R-CNN、Fast R-CNN、Faster R-CNN网络为代表的两阶段目标检测以及以YOLO、SSD为代表的单阶段目标检测[4]。由于两阶段目标检测在进行图像识别时需要先选出候选区域,再对选出的候选区域进行调整分类,这就使得双阶段比单阶段的检测精度高,但同时检测速度(FPS)大打折扣,并且随着单阶段检测算法YOLO的不断更新,单阶段目标检测已经能在保证较高检测速度的同时,兼顾良好的检测精度。
在单阶段目标检测中,检测模型存在因目标重叠带来的漏检、模型计算量大导致检测速度较慢、损失函数GIOU_LOSS本身缺陷导致特殊情况下无法判断预测框的位置状态,从而影响检测精度等问题。为解决上述存在的问题,张云佐[5]等人使用DIoU-NMS,以及在空洞空间金字塔池化ASPP基础上设置不同膨胀系数以获得不同的感受野,得到了更好的信息增强检测效果,提出了ASPP+模块,减少了传统NMS非极大值抑制对目标的漏检问题,提高了精度。成倩[6]提出了对yolov5检测端的优化,对于舰船等小目标来说,专门负责大目标的检测头并不能充分发挥作用,甚至会对于小目标的检测产生一定的干扰,所以将负责大目标的检测头进行移除,减少了不必要的计算量,在原网络基础上增加了检测速度。张宏群[7]将yolov5s(you only look once v5s)中使用的GIOU_LOSS损失函数更换为CIOU_LOSS,避免了当预测框在真实框内的时候GIOU_LOSS损失函数无法判断预测框的位置状态,进而提升了检测的精度。
随着YOLO模型算法的不断更新,对于遥感目标的检测不应单单局限于舰船、车辆等单一的目标。为了有效地对多种遥感目标进行检测,本文通过对DOTA数据集中的游泳池、客机、直升机、战斗机、运输机、网球场共6种待检测目标进行学习并检测,对yolov5s网络模型的激活函数、小目标检测能力、任务检测头三方面进行优化。
基于YOLOv56.0版本改进之后的YOLOv5s-MSY结构如图1所示。对YOLOv5来说共有5个不同的版本,根据模型的深度和宽度不同,分别是:YOLOv5l、YOLOv5m、YOLOv5n、YOLOv5s、YOLOv5x[8]。在这5种YOLOv5模型中,YOLOv5s模型相对于网络最小,速度最快[9]。
图1 YOLOv5s-MSY的网络结构图
对于YOLOv5s-MSY网络来说,结构分为4个部分,分别是:输入端、骨干网络Backbone、颈部网络Neck、预测网络Prediction。首先,YOLOv5s-MSY网络中的CBS模块更换为CBM模块,二者的区别在于在卷积Conv以及BN之后的激活函数不同,网络的激活函数由SiLu(Sigmoid weighted liner unit)函数更换为梯度图像更加平滑的Mish函数,比原网络更加方便让大量遥感图像信息深入流动,提升了检测性能、模型泛化能力。其次,该网络将空间金字塔由SPP改进为SPPF,比SPP速度快上很多。在SPPF中,数据首先经过CBM模块,然后依次递减的经过3个MaxPool最大池化层,最后将4个支路通过concat叠加,最后再通过一个CBM模块。在骨干网络Backbone中取消了原本的Focus层,取而代之的是一个卷积。同时对于CSP1_X以及CSP2_X进行了更新:CSP1_X中的一个分支首先经过CBM模块然后通过残差网络,另外一个分支仅通过一个CBM模块,然后两个分支进行concat叠加,最后再经过一个CBM模块,CSP1_X中的参数X指的是残差网络Resunit的数量。CSP2_X的两个分支中一个分支通过CBM模块,另外一个模块首先经过CBM模块再经过2*X个CBM模块,然后两个分支同样经过concat叠加,最后再通过一个CBM模块。对于输入端来说,YOLOv5s-MSY同样使用了Mosaic(马赛克)数据增强、自适应锚框计算、自适应图片缩放[10]。Mosaic数据增强:通过随机缩放、随机裁剪、随机排布的方式来拼接4张图片[11],丰富了数据集,做到同时计算4张图片数据,减少了GPU;自适应锚框计算:在设定了初始的预测框尺寸之后,与真实框的尺寸进行对比,再反向更新网络参数;自适应图片缩放:自动计算输入图像最适合的缩放比例,减少由图像填充带来的黑边干扰。在颈部网络Neck方面,依旧采用了自上而下的 FPN 结构和自底向上的 PAN 结构[12],PAN结构首先是在yolov4中提出的,在之前的yolov3中只使用FPN结构。FPN+PAN这种结构保证了在通过FPN将高层特征逐渐向底层传达强语义特征的同时,使用PAN将底层特征自下而上传达强定位特征。最后,通过预测网络Prediction中进行对指定对象的识别预测。
为提升对复杂遥感目标的检测性能,在网络中加入激活函数:激活函数是神经网络的核心单元,给CNN网络加入了非线性特性,大大提升了CNN网络的学习能力[13]。
在YOLOv5之前的版本中,激活函数使用的是带泄露修正线性单元函数,即Leaky Relu激活函数[14],该函数表达式如式(1)所示,函数形状如图2所示,通常α=0.01,该函数在大于0的定义域上为y=x直线,梯度为1;在小于0的定义域上为非零数值。但是该激活函数存在着一些问题:LeakyRelu激活函数在定义域大于0、小于0两个区间上都是线性分布的[15],而采用线性的激活函数就会影响模型对于一些非线性数据的表达能力;另外,因为LeakyRelu函数没有上界,如果网络单元输出过大,或者网络是循环结构的,就会导致梯度累积超过计算机的数值上限,造成“梯度爆炸”现象,由于遥感目标数据量大的特点,这种情况极容易发生。为改善上述情况,本文使用Mish激活函数,Mish表达式如式(2)所示,函数形状如图3所示:
图2 LeakyRelu激活函数形状以及梯度
图3 Mish激活函数形状以及梯度
LeakyRelu=max(αx,x)
(1)
(2)
在YOLOv5网络当中,激活函数由LeakyRelu函数更换为SiLU函数,该函数可在负数域对数据进行拟合[16]。此处改进的Mish激活函数与SiLU函数相似,SiLU函数表达式如式(3)所示,函数形状如图4所示,但是Mish函数对外有着更好的表现效果,下面以Mish函数进行说明:首先,Mish函数非饱和,避免了因为饱和而导致的梯度消失现象;存在下界,在负半轴有着较小的权重,即在负半轴Mish的输出无限趋近于0但又不等于0,保留了少量的负信息,防止了有些激活函数在定义域小于0的范围内函数输出为0,导致一些“网络单元”始终不被激活,这种情况也被称为“神经元坏死”现象;函数自身具有正则化效果,对应的梯度图像更加平滑,这样就更加容易地对其进行优化。同时随着网络逐渐加深,信息可以更深入地流动,提升了对遥感目标检测的泛化能力。
图4 SiLU激活函数形状以及梯度
(3)
现在的YOLOv5模型归根到底使用的是CNN卷积神经网络,所以YOLOv5会因为CNN卷积神经网络本身的不足而存在一些弊端。卷积神经网络在对大目标以及高分辨率图像的识别已经较为成功,但是早期的遥感图像存在较多小尺寸、低分辨率的目标,这是因为遥感的定义就是一切无接触的远距离探测,导致遥感图像存在背景复杂、目标方向任意和目标尺寸小等问题[17]。在待检测的遥感目标图像中,小目标与大目标常常一起出现。
而CNN在图像分辨率较低或物体较小时,检测性能迅速下降的原因是:CNN网络使用的是卷积步长层(strided convolution)或卷积步长层+池化层。这导致在每一次进行“卷积步长”操作之后,会伴随着一些细微的信息丢失,造成学习特征不足,在进行多次操作之后甚至会使得遥感图像中一些较小的待检测学习目标的特征消失,网络无法正常高效地对遥感目标进行学习,这也就是CNN网络对小尺寸、低分辨率遥感目标检测性能下降的原因。
在参考文献[18]中,作者提出了一种新构建的模块,称为SPD-Conv,这是由一个空间到深度(SPD)层与一个无步长卷积层组成。SPD层对输入的遥感图像特征进行下采样,与卷积步长层不同的是:SPD层保留了通道维度中的所有信息,有效避免了细微信息的丢失。作者将这种新型的组合方式成功应用在整个CNN网络。
SPD-Conv原理:
1)SPD模块:对于大小为S*S*C1的中间特征图X来说,属于X的一系列子特征图的尺寸如公式(4)所示(公式(4)、图5均来自于文献[18]):
图5 scale=2时的SPD-Conv示意图
f0,0=X[0:S:scale,0:S:scale],f1,0=
X[1:S:scale,0:S:scale],
......,
fscale-1,0=X[scale-1:S:scale,0:S:scale];
......
f0,scale-1=X[0:S:scale,scale-1:S:scale],f1,scale-1,......,
fscale-1,scale-1=X[scale-1:S:scale,scale-1:S:scale].
(4)
子特征图一般来说可以认为是从特征图X中剥离出来的,因此子特征图的w、h由可整除特征图X的w、h的所有元素组成。Raja Sunkara、Tie Luo二人在文章中给出了当scale=2时的例子,这里也按照scale=2的情况进行解释说明。例图如图5所示。
当特征图X输入之后,按照scale=2对X进行处理,由图可看出,特征图X尺寸为(S,S,C1),被分为了scale*scale=2*2=4个子图,每一个子特征图的尺寸为(S/2,S/2,C1)。之后,将这些子特征图沿着通道进行连接,得到了另外一个特征图X1,X1的尺寸为(S/scale,S/scale,scale*scale*C1)=(S/2,S/2,4*C1),通道长度变为了原来的4倍。
2)无步长卷积层Non-strided Convolution:
在得到了中间特征图X1之后,作者添加了一个带有C2滤波器的无步长卷积层(stride=1),其中C2小于中间特征图X1的通道数:C2 无步长卷积层的作用是减少CNN网络对遥感特征图中特征的丢失,尽可能保留遥感图片的特征信息,改善了网络对遥感目标检测的性能。例如:使用stride=4的4*4卷积,特征图在经过该卷积操作之后尺寸会缩小,但是该卷积只会对原输入特征图中的每一个像素点信息只进行一次采样,这样就会导致原始特征图的特征丢失。由于遥感目标中小目标居多,小目标中的图像特征本身就要比大目标的图像特征要少,所以这种特征丢失相比于大目标,对遥感小目标的影响更大。总的来说,只要卷积层的步长stride大于1就会导致图片的特征丢失,这也是CNN网络中的一种缺陷,使用SPD-Conv的无步长卷积层就是为了尽可能地减少特征丢失,这也就保证了网络对遥感小尺寸、低分辨率目标识别能力的提升。 在通常使用的目标检测网络中执行回归和分类任务时,系统常常共用一个检测头,即:二者对应的检测头是耦合的。导致二者会被迫使用一些相同的数据参数值,造成准确度下降以及收敛速度变慢。同时,遥感目标具有数量众多、目标小、训练参数大的特点,共用检测头容易导致数据“混乱”,造成“数据拥堵”。所以将YOLOX(you only look once X)中的解耦头[19]应用在YOLOv5的模型中,以此来增加遥感目标检测的准确度,YOLOX的解耦头以及耦合头的收敛速度如图6所示(图6、图7均来自于文献[20])。由图可看出(Decoupledhead曲线位于YOLO head曲线上方),将YOLO的耦合头部换成YOLOX中的解耦头,大大提升了收敛速度。在YOLOX中回归和分类任务分别使用不同的检测头,避免了由耦合检测头带来的检测性能下降。 图6 耦合头以及YOLOX解耦头的收敛速度示意图 图7 耦合头以及YOLOX解耦头示意图 同时,由图7可看出,分类、回归分别使用解耦的头部,可减少头部耦合时带来的任务冲突,防止“拥堵”,减轻了模型训练遥感目标时的负担,优化效果较好。 本实验所使用的数据集来自于DOTA遥感数据集,DOTA 数据集是用于对航拍图像进行目标检测的大型图像数据集,其中的目标涵盖了各种各样的规模、位置、形状[21]。它可用于发现和评估航拍图像中的物体。DOTA数据集无论从数量还是质量上来说,比同类型数据集具有很大优势。为了使训练后的模型具有较好的泛化能力,共使用1 162张遥感数据图,包含6种分类:客机(airplane)、直升机(helicopter)、运输机(transport plane)、战斗机(warcraft)、游泳池(swimmingpool)、网球场(tenniscourt)。数据集原图如图8所示,共包含上述提及的6种待检测目标。 图8 实验中所用数据集原图 将已经准备好的数据集图片放在images目录中,通过LabelImg软件进行这6种类别的标注,并将软件标注模式更改为YOLO,使标图产生的文件是YOLO网络模型训练可以直接使用的txt格式,并保存在数据集images目录的相同路径的labels目录中。然后将数据集按照训练集、验证集和测试集对应数量为670、245、247进行划分。 本次实验的模型训练的平台搭建在服务器上,相关配置如下:实验操作平台为Ubuntu18.04、CPU为AMD Ryzen Threadripper 3970X、GPU为NVIDIA GeForce RTX 3090显卡*3,显存24 G,内存128 G、软件框架使用Pytorch、编程环境为Python语言。 模型训练的参数设置如下:输入图片大小(imgsz)为640*640、迭代轮数(epochs)为300轮、批次大小(batch-size)为48,本文中的所有实验均是在不加载相应模型的预训练权重的情况下进行。 实验采用的参数指标:查全率、查准率(precision)、平均精度均值、训练所用的权重文件大小(MB)、检测帧数(FPS)。部分指标的计算公式如下所示: (5) (6) (7) (8) 上述公式中:TP(true positives)表示正确地将目标判断为正例;FP(false positives)表示错误地将目标判断为正例;FN(false negatives)表示错误地将目标判断为负例。其中P称为查准率,表示被检测出的目标当中真实目标所占的比例;R称为查全率,表示被正确检测出的目标占所有正例的比例。因为查准率、查全率二者通常有高有低、所以在二者变化不大的情况之下,以mAP(mean average precision)平均精度均值作为评判网络精度的标准。其中,r1,r2…rn是按升序排列的Precison插值段第一个插值处对应的Recall值。 2.5.1 目标检测算法对比 本阶段,在已发表的有关遥感论文(文献[22]、[23])的实验数据中,选取一些主流的目标检测算法进行对比,两阶段:Faster-RCNN,单阶段:SSD、YOLOv3、YOLOv4、YOLOv5s、YOLOX、YOLOv7。论文的实验数据如表1所示:不论是在平均精度均值mAP、查准率,还是在网络参数量、权重文件大小方面,使用YOLOv5s网络检测遥感数据集比其他网络具有明显的优势。 表1 主流目标检测算法对比 2.5.2 激活函数实验 为了证明更换Mish激活函数的有效性,该实验除了将YOLOv5s的激活函数由SiLU更换为Mish函数,还分别使用Hardswish、FReLU、MetaAconC三种激活函数进行对比,根据最终得到的实验数据进行评价,改进激活函数实验结果如表2所示。使用Hardswish函数会得到相对最快的检测速度,但是mAP要比使用Mish函数时低2%。对比FReLU、MetaAconC来说,虽然加入Mish函数的网络在检测速度上稍慢,但是在mAP方面提高了5.7%、4%,查准率、查全率方面也都得到了提升。所以,将激活函数更换为Mish对网络性能提升最为明显。 表2 激活函数对比实验结果 2.5.3 消融实验 相比于YOLOv5s,YOLOv5s-MSY共有三点改进:由激活函数SiLU更换为Mish激活函数、在网络模型中使用SPD-Conv模块、将YOLOX的解耦头应用在YOLOv5s模型当中。下面分别对单独加入特定模块、组合加入特定模块做消融实验,结果如表3所示。由表可知,单独加入Mish激活函数时,由于该函数梯度图像更加平滑,带来了网络在mAP上1.4%的提升;单独加入SPD-Conv模块时,由于该模块提升了对小目标、低分辨率目标的检测能力,带来了mAP上2.3%的提升;单独将YOLOX解耦头加入到YOLOv5网络中时,由于YOLOX解耦头减少了检测头耦合时造成的任务冲突,在mAP变化不大情况下,带来查准率4.8%的提升。网络在组合加入特定模块时也都有着不同程度的提升。3个模块均投入使用时,将网络命名为YOLOv5s-MSY,mAP提升了7%,检测速度也提升了16.95%,相比于原网络对于遥感目标的检测有较为明显的优势。 表3 消融实验结果 为了能够更加直观地观察YOLOv5s-MSY网络的精度提升,本文利用原网络以及YOLOv5s-MSY网络对于测试集进行目标检测。如图9所示,图9(a)和图9(b)分别对应不同网络。 图9 YOLOv5s网络与YOLOv5s-MSY网络效果对比图 由图可看出,改进之前网络对于运输机、客机、战斗机常会存在误检行为,对于直升机、网球场、游泳池会存在漏检行为。在使用改进后的网络进行检测时,上述情况都有了改善,减少了误检、漏检的行为,检测效果较好。 2.5.4 较大目标的对比实验 YOLOv5s-MSY网络相比于原始YOLOv5s网络更加注重小目标的学习。为了全面体现YOLOv5s-MSY的性能变化,再选出共200张目标较大的遥感图像进行学习,数据集按照6:2:2进行分配,共有3个种类:田径场(Groundtrack field)、公路环岛(Roundabout)、棒球场(Baseball court)。实验结果如表4所示,改进后mAP上升了19.31%、FPS下降了27.89%、查准率下降了9%。由此看出,YOLOv5s-MSY对于较大的遥感目标的检测速度有所下降。 表4 较大目标对比实验 由于遥感目标的距离通常较远,造成待检测目标较小、分辨率较低,导致YOLOv5s原网络模型的检测精度以及检测速度的效果不好,且存在误检漏检的问题,本文在YOLOv5s原网络模型基础上将激活函数更换为Mish,提升了模型的mAP;将YOLOX的解耦头使用在YOLOv5s模型当中,减少了耦合检测头的任务冲突,提高了模型的查准率;在原模型当中使用SPD-Conv模块,很好地提升了网络对小目标、低分辨率图像的检测精度。同时本文将这三方面改进整合在一起,对模型进行了综合优化。实验结果表明,YOLOv5s-MSY相比于YOLOv5s:mAP提升了7%,达到了87.8%;检测速度提升了16.95%,FPS达到了169.49。但是YOLOv5s-MSY在对小而密集的游泳池、直升机、运输机的检测还存在漏检误检的问题,影响了检测效果;对较大目标的检测存在检测性能下降的问题。由此看出,YOLOv5s-MSY算法还存在较大的上升空间,在后续工作当中,主要需要提高在检测目标尺寸较小、数据集较少的情况下网络的学习能力以及模型对于较大目标的检测速度。1.4 将YOLOX解耦头应用在YOLOv5
2 实验与分析
2.1 数据集的构建
2.2 数据集的处理
2.3 实验平台搭建
2.4 参数设置及评价指标
2.5 实验结果评估分析
3 结束语