傅 强,卢志伟,潘 磊
(中国民用航空飞行学院计算机学院,广汉 618307)
无人机如今被广泛应用在城市巡检、农业、环境治理等方面。城市巡检中,无人机用于检测乱搭乱建;在农业上,无人机用于虫害检测、农作物监管等;在环境治理上,无人机运用在森林防火、湖泊治理等方面。而这些典型的行业应用,都离不开航拍图像的目标检测技术。
无人机航拍图像目标检测相对于静态图像的目标检测任务,其任务场景中的目标所占像素很小,角度为垂直向下或倾斜角度向下,摄入区域背景大,干扰因素很多,较静态图像的检测任务更难。同时由于无人机的硬件限制,很难搭载大型运算平台,无法部署复杂度较高的网络模型,需要兼顾较好实时性和较高的检测精度比较困难。因此,区别于传统的目标检测技术,基于无人机的航拍图像检测技术具有更多的困难与挑战。
目前的主流目标检测框架大致可分为两类:单阶段算法和两阶段算法。单阶段算法以YOLO[1]系列、SSD[2]等为代表。两阶段算法以Faster R‑CNN[3]、Mask R‑CNN[4]等为代表。两阶段算法的网络一般分为三部分:头网络、可能目标检测层、末端功能层,由于网络结构更复杂,整体性能更好,但是对算力要求也更高。单阶段算法则取消了可能目标检测层,直接通过特征图预测物体位置和分类结果,计算量明显减少,检测性能相对有所下降,但是可以搭载在小型设备上。
为了同时兼顾实时性和准确率,常用的解决途径是对单阶段算法加以改进。例如,主要的改进方案是对特征金字塔网络[5](feature pyra‑mid network,FPN)进行优化。Google 在2019 年提出了NAS‑FPN[6], 在2020 年又提出了BiFPN[7],都是在FPN 中寻找一个有效的Block,然后重复叠加,以弹性控制FPN 的大小。Liu等[8]提出了ASFF,在YOLOv3 的基础上研究了每一个阶段再次融合三个阶段特征的效果,并采用了注意力机制,以控制其他阶段对本阶段的贡献度。Qiao 等[9]提出了Recursive‑FPN,将FPN 输出作为backbone 对应层的特征进行卷积,卷积后的结果输出到FPN,再与上次FPN 输出的结果结合。Wang 等[10]基于深度均衡模型DEQ,提出引入隐函数对FPN 进行建模,称为i‑FPN,引入类似残差模块以有效更新隐态,通过非线性转换器提高模型的非线性拟合能力。Zhang 等[11]提出了规模均衡特征金字塔网络(SEFPN),通过迭代融合每个层次的特征来生成多个不同规模的特征,且通过平衡每一层特征的语义表示来提高网络的整体性能。
因此,本文遵循上述思路,提出了一种新的CC‑YOLOv5 目标检测算法。一方面,算法改进了Neck部分的FPN 结构,在Neck中多加了两层,并改变特征融合层;另一方面,在Back‑bone 部分集成CBAM 模块,丰富网络获取的目标特征信息,降低网络的复杂度,以满足算法在实时性要求下的较高准确率。
本文基于传统的YOLOv5网络,提出了一种新的CC‑YOLOv5 目标检测算法。整体框架如图1 所示。模型由用于特征提取的主干网络Back‑bone、用于特征融合的颈部Neck 和进行最终分类和回归操作的检测头Head 三部分组成。图像输入网络后,首先通过Backbone 进行5 次特征提取,得到F1、F2、F3、F4、F5,随后传入Neck 部分。本文改进了Neck 部分的FPN,在YOLOv5 的基础上又加入两层,由原本的4 层变为6层,以增强网络的特征融合能力,同时每一层不仅融合来自Backbone 部分的feature map,也融合来自Neck 部分前三层对应维度和尺度的feature map。此操作可以更好地获得目标的语义信息和几何信息,从而更好地检测到目标。输出的P4、P3、P2、P1 传入检测头Head 做检测,输出最终结果。
图1 CC⁃YOLOv5的整体框架
CC‑YOLOv5 替换了Backbone 最后一层和Neck 最后一层的C3 为C3TR,使其能够更好地提取全局信息,提高其对目标的检测性能。自Ultralytics 提出了YOLOv5[12]以来便不断更新,设计出很多不同的模块。YOLOv5 加入了C3TR[12]模块,该模块结合了Transformer,是对多头自注意力模块[13]和位置编码[14]进行应用。用C3TR 模块替换C3 模块,可以减少FLOPs,加快训练和检测的速度。
CC‑YOLOv5 在Backbone 部分集成CBAM 模块,丰富网络获取的目标特征信息,降低网络的复杂度。双通道注意力机制(convolutional block attention module,CBAM)[15]是轻量级的卷积注意力模块,它结合了通道和空间的注意力机制模块。结构如图2 所示,包含CAM(channel attention module)和SAM(spartial attention module)两个子模块,分别进行通道和空间上的Attention。
图2 CBAM的结构
通道注意力模块使通道维度不变,压缩空间维度。该模块关注输入图片中有意义的信息,在本研究中,即所检测目标的信息。而空间注意力模块则空间维度不变,压缩通道维度,该模块关注的是目标的位置信息。在网络中集成CBAM,能够节约参数和计算力。
卷积网络中,深层网络相对容易提取语义特征,浅层网络则容易提取图像特征。然而,在目标检测中这个特征往往会产生一些问题:深层网络虽然包含更丰富语义,但是由于Fea‑ture Map 的尺寸太小,拥有的几何信息并不多,不利于目标的检测;浅层网络虽然包含较多的几何特征,但是图像的语义特征并不多,不利于图像的分类。这个问题在小目标检测中更为突出。对于航拍图像而言,目标尺度变化较大,且背景复杂,导致网络在特征融合阶段可能会损失部分特征信息。
CC‑YOLOv5对YOLOv5m 的FPN 层进行了改进,在增加两层的同时,改变特征融合的层,使网络能够更好地融合不同feature map 中的特征信息。改进的FPN 称为CCFPN,详细结构如图3所示。
图3 CC⁃YOLOv5的详细结构
图4 边缘计算设备
由图1和图3,Backbone部分F1由输入图像执行一次Focus 和Conv 操作,图像大小变为输入图像的1/2,其后F2、F3、F4 都执行一次C3和一次Conv,每次均使输入的feature map 变为原来的1/2,然后F5则执行一次C3TR和SPPF操作,C3TR 结合了Transformer,可以提高对全局信息的提取,从而增大对目标的特征提取能力,提高目标的检测能力。随后F5 通过CBAM 操作后,与原本的F5 一起输入Neck 部分的P6。C3TR 和CBAM 都可以提升网络的精度和速度,为了兼顾精确性和实时性,本文遂替换并加入了C3TR和CBAM。
由于无人机航拍图像的特性,目标尺度变化较大,本文认为原本的YOLOv5 的Neck 部分只有4 层,并不能很好地融合feature map,为此本文在FPN 中又加了两层,以期望能够更好地融合特征信息。Neck 部分的P6、P5、P4 由Conv、Upsample、Concat、C3 组成,P3、P2 由Conv、Concat、C3 组成。P6 中Concat 的输入为由上一步执行完Upsample 输出的feature 和F4 输出的feature,P5 的则是F3 的输出,P4 的为F2的输出,P3 中Concat 的输入为上一步Conv 的输出、F2 的输出和P5 的输出,P2 则是F3 的输出和P4 的输出,以此来丰富目标的语义信息,融合更多的特征信息,提升检测精度。P1 则由Conv、Concat、C3TR 组成,Concat 的输入为上一步Conv 后的输出和F5 经过CBAM 操作后的输出。最后的检测则分别取自P3、P2、P1 Conv后的feature map 以及最后经过C3TR 处理后的fea‑ture map。
实验数据集为VisDrone2019[16],由10209张带标注的图像组成,图片均由无人机拍摄采集,其中用于训练的图片6491 张,用于验证的图片548 张,以及用于测试的3190 张,总共包含10个类别:行人、人、汽车、面包车、巴士、卡车、摩托车、自行车、遮阳篷三轮车和三轮车,目标总数量达260 万。本文基于PyTorch 框架,在VisDrone2019 数据集上进行训练,GPU 为两张Nvidia RTX3080 Ti,输入图像尺寸为640×480,批处理大小为8。用参数量及每秒10 亿次浮点运算次数GFLOPs(Giga floating‑point opera‑tions per second)来评价模型的复杂度,以平均均值精度mAP(mean average precision)作为目标检测性能的评价指标,平均精度AP(average pre‑cision)作为单个目标的检测性能的评价指标。
本文选取了YOLOv4[17]、YOLOv5m[12]、Faster R‑CNN[3]、Cascade R‑CNN[16]共4 种典型的目标检测算法进行对比。表1是基于VisDrone2019数据集中10类目标的AP与mAP实验结果对比。
表1 不同算法在VisDrone2019数据集上的AP与mAP对比
从表1 可以看出,CC‑YOLOv5 比其他算法的准确率高,mAP 达到了33.5%,除了人和车两类目标外,均取得最好的检测性能。相比于YOLOv5m 而言,CC‑YOLOv5 对每一类别均取得了提升。
为了验证CBAM[14]以及CCFPN 结构的有效性,在VisDrone2019 数据集上进行了一系列的消融实验,以YOLOv5m 作为Baseline 网络,同时对比了YOLOv5n、YOLOv5s、YOLOv5l和YO‑LOv5x,以mAP、参数量及每秒10 亿次浮点运算次数为评价指标,最终结果如表2所示。
表2 VisDrone2019数据集消融实验结果
消融实验结果表明,CC‑YOLOv5 网络比YOLOv5m 的参数量多了2.9 M,每秒10 亿次浮点运算次数GFLOPs 增加了11.5,mAP 提升了3.3 个百分点,精度的提升也体现了加入C3TR、CBAM,以及CC‑YOLOv5 结构增强目标检测性能的能力。值得注意的是,相比于YOLOv5l 和YOLOv5x,CC‑YOLOv5的参数量和GFLOPs都小很多,但精度相比于YOLOv5l 却高得多,且跟YOLOv5x 的精度相差无几。考虑到该算法要搭载在小型边缘计算设备上,模型过大会出现延迟较高或者检测掉帧的问题,所以本文在改进时选择YOLOv5m,兼顾实时性的同时,能够在精度上有所提升。C3TR 结合了transformers,能够有效提取全局的信息,增强对目标的检测性能;CBAM 结合了通道和空间的注意力机制模块,分别进行通道和空间上的Attention,精度有所提升,并且可以看出其有效减少了参数量和模型的GFLOPs;将YOLOv5m 的FPN 替换为本文的FPN 后,由于在Neck 部分增加了两层,参数量和GFLOPs都有所增加,精度提升不是很明显,但是加入C3TR 和CBAM 后精度提升较大,本文认为是因为经过CBAM 和C3TR 的fea‑ture map 携带更加丰富的语义信息和几何信息,在融合时获取了更好的特征信息,从而导致精度的提升。由于CBAM 可以有效节约计算成本,C3TR可以提升对目标的检测性能,因此保持了良好的实时性。CCFPN 融合了来自网络前面的feature map,即能够融合深层网络的语义信息与浅层网络的几何信息,有效获取航拍图像的特征信息,从而使得算法的精度提升。综上所述,CC‑YOLOv5 提升了检测性能,维持较小的计算成本,可以搭载在小型边缘计算设备上。
由于小型无人机的硬件限制,不能在机体上部署大型运算平台,致使无人机上无法部署更为复杂的算法。为了验证本文算法的实时性水平,将算法搭载在Nvidia Jetson Nano 小型边缘计算设备上进行实验。Nvidia Jetson Nano配备了四核Cortex−A57 处理芯片,包括4 GB LPDDR内存以及128 核Maxwell GPU,能够运行多种算法和AI 框架,如TensorFlow、Keras、PyTorch、Caffe 等。该边缘设备质量为200 克左右,可以直接安装在小型无人机上。
本文与YOLOv5m对比,分别对VisDrone2019数据集中的3190 张测试图片做检测,以每张图片的平均检测时间做对比,考虑到YOLOv5x的mAP 与本文算法相差无几,所以也对比了YOLOv5x 的时间。表3 是对比结果,图5 是检测结果。
表3 检测时间对比
图5 检测结果对比
从表3 可以看出,在输入图像大小同为640 × 480 的情况下,CC‑YOLOv5 与YOLOv5m都完全满足实时性要求,但CC‑YOLOv5 的准确率更优,比后者高3.3 个百分点。YOLOv5x的平均检测时间达0.725 s,产生了很严重的掉帧及卡顿问题,无法满足实时性要求。
对图5的实验结果进行评价,本文方法表现出更为优异的检测性能,能够较为准确地识别出图像中的各类多尺度目标。例如,YOLOv5m检测不出来的远景小目标,CC‑YOLOv5 也能识别出来。一些YOLOv5m 误检的目标,本文算法也能准确地分类。但也注意到,对于个别的极小目标,偶尔还存在着误检的情况。这是由于输入图像的分辨率太低,极小目标的视觉信息太少所导致,后续可考虑融合超分辨率的方法来解决该问题。
本文针对无人机航拍图像的特点与挑战,提出一种新的目标检测算法CC‑YOLOv5。通过C3TR 和CBAM,提升全局信息的提取,更好地融合了获取的深层网络的语义信息与浅层网络的几何信息,丰富了网络获取的特征信息,同时改进的FPN 层更好地融合了这些获取的特征信息,提升检测性能,并且参数量和GFLOPs增加不多。实验结果表明,本文算法在满足无人机边缘计算平台的实时性要求下,具有更为优异的检测准确性。