APP下载

基于CNN与Transformer的无人机图像目标检测研究

2022-06-13祝星馗蒋球伟

关键词:神经网络物体预测

祝星馗,蒋球伟

(华北计算技术研究所 系统七部,北京 100083)

无人机图像上的目标检测工作被广泛的应用于实际项目当中,例如野生动物保护[1]、作物病害检测[2-3]、安全监控等[4]。本研究致力于提高目标检测算法在无人机图像上的性能,为上述的多种实际应用提供帮助。

近些年来,深度神经网络在目标检测方向取得了重大的进展,大型的数据集作为神经网络训练和测试的基准,是这些发展的基石。自然图像的基准数据集主要包括:MS COCO[5]、pascal VOC[6];遥感、无人机图像的基准数据集包括:VisDrone[7]、DOTA[8]。然而,最先进的深度神经网络主要针对自然图像的数据集而设计。由于无人机拍摄图像的高度多变,拍摄视场大,拍摄场景复杂导致无人机图像与自然场景图像相比具有目标尺寸多变、背景复杂、遮挡严重、分布不均匀和小目标丰富等特点(如图1所示),针对自然图像的深度神经网络无法解决上述问题,这使得无人机图像检测成为了一项具有挑战性的工作。

图1 具代表性的无人机拍摄图像

目标检测算法通常分为两大类,即单阶段目标检测算法和双阶段目标检测算法。单阶段算法直接预测出目标的边界框与目标种类,是速度与精度的平衡,最具有代表性的单阶段检测算法是YOLO系列[9-12],集单阶段检测技术之大成。除此之外SSD[13]利用了多尺度的特征图,RetinaNet[14]提出了Focal Loss都为单阶段目标检测算法的发展做出了贡献。双阶段的检测算法首先通过区域提议算法提取出包含目标的区域候选框,然后基于候选区域做进一步的边界框回归以及目标分类。两个阶段的细分使得二阶段算法以检测速度的降低为代价获得了较高的检测精度。具有代表性的二阶段检测算法是Faster-RCNN[15]以及在其基础上改进的Cascade R-CNN[16]等。近些年随着Transformer[17]结构从自然语言处理(NLP)领域进入到计算机视觉领域,Transformer给目标检测注入了新的活力。Transformer结构打破了CNN有限的感受野限制,凭借注意力机制捕获整个特征图的长距离依赖关系,具有更强的建模能力,不足之处是计算量巨大。因此LIU等[18]等提出各种方法降低其计算量,DETR[19]是最具代表性的Transformer结构单阶段目标检测算法。

笔者提出的算法在YOLOv5的基础上,对YOLOv5的结构进行调整优化,并将Transformer结构与卷积神经网络相结合以解决上述无人机图像检测遇到的问题。Transformer模块被插入到骨干网络与颈部检测层当中来获取目标上下文信息,用于解决目标尺寸多变、分布不均和背景复杂的问题,并使用降维和滑动窗口处理以降低Transformer模块的计算量与内存消耗。颈部使用BiFPN[20]融合了多个特征层的信息,增强了对特征图的重用与特征提取,并添加了额外的大检测层用于获得丰富的小目标信息,使小目标的检测更加精准。为了进一步提高检测算法的性能,一系列技巧在算法训练测试的过程中被使用:训练阶段使用特殊的图像增强,测试过程采用测试增强(test time augmentation,TTA)来解决物体遮挡和尺寸变化的问题,最后采用模型融合增加算法的鲁棒性,获得更加准确的测试结果。

主要贡献如下:①在保证模型检测速度的情况下,将轻量Transformer结构引入到无人机图像检测当中用于解决目标尺寸多变、分布不均、目标遮挡与背景复杂问题。②使用BiFPN结构增强对特征图的利用,并使用大尺度的特征图解决小目标检测困难的问题。③使用特殊的图像增强、测试增强和模型融合技巧,解决目标相互遮挡和尺寸变化的问题,提高模型准确率。④在VisDrone2021数据集的验证集上,提出的算法平均精确率达到了42.5%,比YOLOv5提高了约7%,展现了算法对无人机图像强大的检测性能。

1 相关理论

1.1 数据增强

数据增强是对数据集进行扩充,相当于增大了神经网络的训练数据量,使模型能够对复杂环境下获得的图像具有更好的识别效果。通常数据增强包括光度畸变(photometric distortions)和几何畸变(geometric distortions),光度畸变中的图像的色调、饱和度和光照强度的调整被用在文章算法的数据增强中。在几何畸变方面,使用了随机缩放、图像裁剪、图像平移和旋转操作。光度畸变与几何畸变都是传统的全局像素增强方法,近些年还出现了将多个图像的特征进行合成的特殊图像增强处理,这些方法包括MixUp[21](图像混和)、CutMix[22](图像裁剪混合)和Mosaic(马赛克混合)。图像混合方法是随机抽取训练集中的两个图像,对两张图像的像素值按照任意的比例进行加权求和,图像中实例的标签也按照相同比例进行对应的加权求和。图像裁剪混合与通常的图像裁剪(Cutout)方式不同,图像裁剪使用0值也就是黑色图像块来遮挡切下的图像块,CutMix则使用另一张图像中样本的某个区域来覆盖裁剪下来的区域。马赛克增强是图像裁剪混合的改进版本,马赛克增强会选取4张图片进行拼接组成一张输入图像,这种操作扩充了检测图像包含的特征,使得一张增强后的图片包含4张图像的部分特征。此外,使用拼接后的图片在批量归一化计算时,每层相当于使用4个不同图像激活统计数据。数据增强方面,笔者使用了MixUp、Mosaic和光度畸变、几何畸变的组合训练图片,数据增强效果如图2所示。

图2 混淆(MixUp)、马赛克(Mosaic)算法和光度畸变、几何畸变相结合的数据增强效果

1.2 目标检测算法

目标检测神经网络可以按照结构划分为3个不同的部分:骨干网络、颈部和头部。骨干网络通常使用图像分类任务中的神经网络来提取出图像特征图,因为这些神经网络在图像分类任务上获得了很高的精度,证明它们具有强大的特征提取能力。颈部的作用是对骨干网络提取的图像特征进行进一步的利用,已被证明能够大大提升目标检测网络的检测精度,是目标检测框架中的关键环节。通常,颈部会对骨干网络提取的特征经过几个自下而上和几个自上而下的路径进行进一步的计算处理,通过反复将主干网络获得的特征图形扩大与缩放,对其进行重新计算与聚合以获得更丰富的特征信息。头部的作用是在颈部提取的特征图上进行目标的定位与分类,输出预测的结果。

目标检测模型总体来说由以下4部分组成。①输入:图像、图像块。②骨干网络:VGG、ResNet[23]、EfficientNet、CSPDarkNet、vision Transformer、Swin Transformer、MAE。③颈部-路径聚合模块:Feature Pyramid Networks (FPN)、Path Aggregation Network (PANet)、BiFPN、NAS-FPN,各种特征金字塔网络结构如图3所示;颈部-额外的模块:Spatial Pyramid Pooling (SPP)、Atrous Spatial Pyramid Pooling (ASPP)、Convolutional Block Attention Module (CBAM)。④头部-单阶段检测算法:YOLO、SSD、RetinaNet、CenterNet、FCOS、DETR;头部-双阶段检测算法:Fast-RCNN、Faster-RCNN[15]、Mask RCNN、Cascade RCNN。

图3 各种特征金字塔网络结构

1.3 测试增强与模型融合

数据增强是对训练集进行处理,与其类似,测试增强是对测试集进行处理。在测试增强的过程中测试集图片会经过一系列的空间畸变与色彩畸变操作,然后使用检测算法对测试增强获得的测试图片与原图进行多次检测,最后将多个结果进行合成得到最终的结果。

模型融合能够提高神经网络算法的精度。神经网络算法具有很强的拓展性,同一个网络可以使用不同的数据进行训练产生不同的结果,还可以根据训练集的大小对网络的深度与宽度进行成比例的扩展,增加网络的信息容量。这种灵活性也会带来一些弊害,那就是训练过程的随机性:神经网络算法可以认为是一种复杂的非线性函数,神经网络通过梯度下降优化算法进行随机的学习过程,每次的学习过程中数据输入的顺序与组合都不会相同,这就造成了每次训练的神经网络权重都不尽相同,从而导致每个神经网络的预测结果各有千秋,预测结果的分布方差较高。降低神经网络模型方差的方法是训练多个模型,并将这些模型权重或者模型的预测结果通过一些算法融合起来,而不是仅仅使用单个模型的预测结果。

对模型检测结果的融合方法有非极大值抑制(non-maximum suppression,NMS)、NMS算法的一些变体以及加权框融合[24](weighted boxes fusion,WBF)等。在NMS方法中,如果多个预测框之间的交并比(intersection over union,IoU)高于某个阈值,则算法认为这些预测框属于同一目标。对于每个目标,NMS只保留一个置信度最高的预测框,其他置信度较低的预测框将被直接删除。预测框的滤除过程取决于IoU阈值的选取,该值的大小会对模型结果产生很大影响,而且置信度高的预测框只是代表分类效果较好,位置不一定准确,简单的滤除低置信度的预测框会影响模型的定位效果。不同于NMS删除所有置信度较低的预测框,WBF会根据置信度来合并所有的预测框以形成最终结果,不浪费每个预测框的信息,因此预测框的位置更加的准确,两种算法的结果对比如图4所示。

图4 NMS融合算法与WBF融合算法的结果对比

2 CNN与Transformer融合神经网络

2.1 网络的整体结构

网络的整体结构如图5所示,每个模块的编号用数字标注在模块左侧。骨干网络主体部分采用CSPDarkNet53的结构,其中0、1、3、5、7模块采用步距为2的卷积模块对图像进行下采样,分别将输入图像的大小缩小为2、4、6、8、32倍。2、4、6、8模块采用大小为3步距为1的卷积核对特征图进行特征计算,特征图的大小不发生变化。模块9采用Transformer模块,对特征图进行全局信息的处理。这样骨干网络首先使用CNN获取具有平移不变性的特征图,再使用Transformer获取特征图之间的全局关联,结合了两者之间的优点。

图5 神经网络结构图

网络的颈部由两个特征金字塔结构组成,分别是模块10~21和模块22~30。由于无人机图像中小目标丰富,下采样倍率过大会导致小目标特征的消失,加大了小目标定位和分类工作的困难,最适合的特征图下采样倍率是目标大小的1/8,因此模块11、15、19对特征图进行双线性插值的上采样操作,用于获得更大的特征图。P2特征图是原图下采样4倍因此适合原图中边长约32像素的小目标检测。模块22~30对特征图进行重计算和下采样,在输出特征图之前采用Transformer结构来获取上下文信息,增强对难以分辨物体的检测效果。

网络的头部采用YOLO原版的头部对目标进行分类和位置回归,头部的通道数为b×(4+1+c),b表示在特征图上每个特征格的预测框的数量,一般取3;数字4表示预测框的四个位置属性(x,y,h,w);数字1表示框内是否有物体;c代表预测种类的总数。

网络采用的损失由3部分构成:①预测框中是否存在物体的置信度损失,②预测框中目标类别的分类损失,③预测框与真实框之间的误差造成的边界框定位损失。总体损失函数的表达式为:

L=λ1Lconf+λ2Lcls+λ3Lloc

(1)

式中:L为总体损失;λ为权重;Lconf为置信度损失;Lcls为分类损失;Lloc为定位损失。

置信度损失描述的是输出检测框内物体存在的概率与真实物体存在概率之间的差异,使用二值交叉熵(BCE)作为损失函数:

Lconf(o,c)=-∑(oi)ln(sigmoid(ci))+

(1-oi)ln(1-sigmoid(ci))

(2)

式中:oi为预测目标边界框i中实际物体是不是存在;ci为预测值。

目标类别损失代表预测类别与真实标签之间的差别,使用的二值交叉熵作为损失函数:

(1-Oij)ln(1-sigmoid(Cij))

(3)

式中:Oij为预测目标边界框i中实际物体是不是当前类别;Cij为预测值。

目标定位损失代表了预测框与真实框之间的差异,YOLOv5采用CIoU[25]损失作为目标定位损失,表达式为:

(4)

式中:IoU为预测框与真实框的交并比;ρ2(b,bgt)为预测框与真实框的中点之间的欧氏距离;c为能同时包含预测框与真实框的最小闭包对角线距离;α为权重系数;v用来衡量长宽比的相似性,定义为:

(5)

式中:w、h为预测框的宽和高;wgt、hgt为真实框的宽和高。

2.2 BiFPN和针对小物体的检测层

与自然图像比起来,无人机图像中包含更多的小目标,VisDrone数据集与MS COCO数据集之中不同大小目标所占比例的对比如图6所示。

图6 不同面积范围内包含目标数量对比(像素)

在自然图像上进行目标检测网络是为了检测大物体,提高网络的速度会在对图像降采样16倍以上的特征图上进行图像预测。但是无人机图像中很多小的物体经过降采样后在特征图上的像素值减小为1,甚至消失,导致检测与回归无法满足要求,这样就造成了小物体的检测困难。由表1可知即使在MS COCO数据集上,APS(小物体的平均精度)远远小于APL(大物体的平均精度)。

表1 MS COCO数据集上目标检测网络精度对比 %

为了解决小物体检测的问题,大多数目标检测算法采用的都是在目标检测网络的颈部使用特征金字塔结构FPN,与FPN的各种变体,这种结构能够将神经网络中高层特征与低层特征糅合达到取长补短的效果。低层特征图的分辨率高,能够对物体的位置进行准确回归,但是包含的语义信息较少,分类效果很差。与之相反,高层特征图中包含了充足的语义信息,但是由于特征图的低分辨率,对位置信息的回归造成了很大的困难。所以将神经网络中底层的特征和高维度特征结合在一块就能提高神经网络对于物体边界框的回归性能和物体类别的分类性能。文章采用复杂的BiFPN网络结构(如图7所示),使用下采样4、8、16、32倍的4个特征图用于不同大小的目标检测,图7右侧的检测层便是用于最终检测的P2、P3、P4、P5层。P2是低层特征图分辨率很高,只对原图的物体下采样了4倍,因此对微小物体更敏感,能对原图中10~100像素左右的小物体进行定位检测。P5是高层特征图分辨率低,但是语义丰富,能对原图中768左右的大物体进行检测。文章使用的四层BiFPN结构能对小物体和大物体都有较好的检测效果,可以减轻物体尺寸急剧变化造成的弊端。越多的检测层会消耗越多的内存与计算成本,为了平衡精度与速度只对4个不同分辨率的特征图进行特征融合与检测。同时BiFPN还采用了不同的残差连接将早期提取的特征直接与输出特征图相连接,使得小目标的特征不会在计算中逐渐消失,提升了小目标的检测性能。

图7 加权双向特征金字塔网络(BiFPN)结构

2.3 Transformer结构

受到DETR和Swin transformer工作的启发,使用Transformer 模块代替了骨干网络和颈部的一些卷积模块,使得神经网络突破了卷积神经网络的局限获得了全局的感受野。算法仅在骨干网络的最后和BiFPN的末端添加Transformer结构,骨干网络的末端特征图经过了32倍下采样所需的计算资源较少,若将整个网络替换为Transformer结构将增加巨大的计算成本,无法支撑大分辨率的训练图像,也失去了卷积的平移不变性和强大的局部特征提取能力。Transformer模块的结构如图8所示。

图8 Transformer模块组成结构

每个Transformer模块由多个子层搭建而成,主要功能由两层实现:多头注意力(Multi-Head Attention)和多层感知机(MLP),每层之间使用ResNet中的残差结构进行连接,注意力的计算过程如图9所示。

图9 注意力机制的计算过程

首先通过输入序列X生成对应的查询(query,Q)、键(key,K)和值(value,V):

Q=X×WQ

K=X×WK

V=X×WV

(6)

式中:X为输入的样本序列特征,X与不同的权重矩阵WQ、Wk、WV相乘生成对应的Q、K、V。然后通过Q、K、V之间的计算得到注意力特征图,即加权处理后的V矩阵:给出一个Q,计算Q与所有K的相关性,然后根据Q与每一个K的相关性去找到最合适的V。具体的计算过程是将Q与K相乘,因为Q和K都是张量,因此Q与K越相似,那么得到的乘积也就会越大,将所得的乘积除以根号下K矩阵维度dk后进行SoftMax处理得到权重矩阵WA,计算公式为:

(7)

将WA与V矩阵相乘,那么就对V进行了一个加权处理,这样就得到了加权后的特征图矩阵:

(8)

与原始的卷积模块相比,Transformer模块中的多头注意力机制能够能计算整张特征图的所有特征之间的相关性来获得全局视野和充足的上下文信息,卷积模块的感受野是有限的,这就让它比卷积模块对大物体和难以辨认的物体有更好的特征提取能力。

但是Transformer模块的不足之处是它对计算量的需求是巨大的,由于需要捕获全局信息,Transformer模块会计算特征图内所有像素之间的相关联系,而卷积模块只用计算相邻像素(通常是3×3)之间的联系,这就使得Transformer模块需要的计算量与显存远远多于卷积模块。无人机图像通常比较大,MS COCO数据集上通常使用608大小的图片进行训练,而VisDrone中图像的平均尺寸是1 920×1 080,直接使用Transformer模块会使得神经网络占用内存过多而无法进行训练。因此采用Swin Transformer中的滑动窗口机制和空间降维注意力(spatial-reduction attention)方法来减小计算量,不同多头注意力机制的计算方法对比如图10所示。

图10 不同多头注意力机制的计算方法对比

Swin transformer模块中将输入的特征图拆成更小的窗口计算局部注意力来减少计算量,但是分割为窗口后,窗口内的特征能够进行信息交互,不同的窗口之间特征无法交流。进一步的解决办法是将不同Transformer层的窗口进行滑动,这样不同层就能计算不同的窗口包含的特征之间的关系,这样既降低了计算量也获得了全局的特征依赖关系。空间降维注意力减少计算量的方法是在K、V矩阵相乘之前对他们进行了空间降维操作,在保留重要信息的同时降低K、V矩阵的高和宽以减小计算量。结合这两种方法大大降低了Transformer结构的计算量使得融合的神经网络在计算量并不增加很多,保证算法实时性的情况下获得了Transformer结构的优点和更高的检测精度。

2.4 算法工作流程

整个算法的训练检测流程如图11所示,首先训练图像经过一系列的数据增强后输入到神经网络中对目标检测网络进行训练,训练完成后的网络接收测试增强后的测试图像,并输出检测网络的预测结果。测试增强包括图像的缩放和水平翻转操作,首先将图像缩放为1.3倍、1倍和0.87倍,然后将其水平翻转,这样就得到了6张不同的测试图像,将6张不同测试图像的检测结果通过NMS和WBF算法进行模型融合后便得到最终的预测结果。同时网络的训练过程会进行多次以得到多个权重不同的目标检测模型,最后将多个模型的预测结果经过模型融合以获得更加精确的预测结果。

图11 目标检测算法工作流程

3 实验结果分析

3.1 数据集

CNN与Transformer融合的目标检测算法在VisDrone2021数据集的训练集进行训练,竞赛测试集与验证集进行测试,VisDrone2021数据集与VisDrone2017数据集一样,这几年未经过改变。算法采取目标检测中广泛使用的平均精确度mAP和AP50作为评价指标。

3.2 算法实现细节

目标检测算法在Pytorch v1.10上实现,所有的模型均使用一块NVIDIA GTX 3090显卡进行训练与测试。训练时使用了YOLOv5在COCO数据集上的预训练权重进行迁移学习,算法在VisDrone 2021训练集上采用多个尺度的图像训练65轮,图像大小从768到1 536之间变化,后在1 920×1 080的大图像上进行微调。算法使用AdamW优化器进行训练,并使用3×10-4作为初始学习率,前两轮的学习率从零开始缓慢增长用于模型的预热,学习率采用余弦函数逐步衰减,最后一轮衰减到初始学习率的0.12。

3.3 与经典算法的比较

笔者提出的算法曾参与VisDrone2021无人机图像检测比赛,比赛过后进行了进一步的优化与改良。竞赛的测试服务器在2021年8月关闭因此无法继续在竞赛服务器中的竞赛测试集中测试,后续改进只能在本地验证集上进行实验。未完全改进算法所获得的分数与竞赛委员会提交的算法分数和历年最高分的结果对比如表2所示,可知笔者提出的算法取得了优秀的成绩,刷新了历史记录。

表2 各个算法在VisDrone竞赛数据集上的结果对比

3.4 对比实验

在本地的VisDrone2021验证集中分析了目标检测算法每个改动的重要性,对性能的提升,每个改动的影响如表3所示。

表3 算法每个改动在VisDrone2021验证集上的对比试验

算法在具有代表性的无人机图像上的检测结果如图12所示,可知该算法对背景复杂的目标、多尺寸目标、小目标、遮挡严重的目标具有很好的检测效果。每个改动对于模型准确率都产生了不错的效果,与此同时也带来了更多的时间损耗。测试增强使用了6张测试图片,因此会额外消耗6倍模型的检测时间与模型融合的时间。使用BiFPN并增加大尺度的特征图用于检测小的物体,这让YOLOv5x的层数从567层变为643层,由图12的左下方可知,算法在检测小物体时表现良好,因此增加的层数是值得的。在使用Transformer模块后,模型的总层数从643层增加到了786层,从图12第一排可以看出算法对于密集物体、遮挡物体都有很好的检测效果,计算量的增加也是值得的。

图12 目标检测算法检测结果样例

4 结论

笔者在YOLOv5中添加了前沿技术并使用了一些经验和技巧,把计算机视觉新兴的Transformer模块引入到了无人机图像检测领域,将CNN与Transformer相结合,构建出无人机图像检测任务中最先进的检测算法之一,该神经网络算法尤其擅长无人机图像中的目标检测任务,刷新了目标检测算法在VisDrone数据集上的记录。通过在VisDrone2021验证集上的实验验证了算法各个模块的有效性,以期帮助开发者和研究人员在分析和处理无人机图像方面获得更好的经验。

猜你喜欢

神经网络物体预测
无可预测
基于神经网络的船舶电力系统故障诊断方法
选修2-2期中考试预测卷(A卷)
选修2-2期中考试预测卷(B卷)
选修2—2期中考试预测卷(A卷)
MIV-PSO-BP神经网络用户热负荷预测
基于改进Hopfield神经网络的对地攻击型无人机自主能力评价
三次样条和二次删除相辅助的WASD神经网络与日本人口预测
揭开物体沉浮的秘密
为什么同一物体在世界各地重量不一样?