作者:赵继达,甄国涌,储成群
来源:《计算机工程》
编辑:东岸因为@一点人工一点智能
在无人机(UAV)目标检测任务中,存在因检测目标尺度小、检测图像背景复杂等原因导致的漏检、误检问题。针对上述问题,提出改进YOLOv8s的无人机图像目标检测算法。
首先,针对无人机拍摄目标普遍为小目标的应用场景,减少算法骨干网络(Backbone)层数,增大待检测特征图尺寸,使得网络模型更专注于微小目标;其次,针对数据集普遍存在一定数量低质量示例影响训练效果的问题,引入Wise-IoU损失函数,增强数据集训练效果;再次,通过引入上下文增强模块,获得小目标在不同感受野下的特征信息,改善算法在复杂环境下对小目标的定位和分类效果;最后,设计空间-通道滤波模块,增强卷积过程中目标的特征信息,滤除无用的干扰信息,改善卷积过程中部分微小目标特征信息被淹没、丢失的现象。
在VisDrone2019数据集上的实验结果表明,该算法的平均检测精度([email protected])达到45.4%,相较于原始YOLOv8s算法提高7.3个百分点,参数量减少26.13%。在相同实验条件下,相比其他常见小目标检测算法,检测精度和检测速度也有一定提升。
00 引言
近年来,无人机(UAV)技术因具有视野范围广、飞行速度快的优势而逐渐应用于目标检测领域,但是无人机目标检测存在的目标尺度小、容易受到环境干扰等问题,限制了算法的目标检测性能。因此,提高小目标的检测精度成为了近年来的热点问题。
在目标检测领域存在2种算法:传统的目标检测算法和基于深度学习的目标检测算法。传统的目标检测算法鲁棒性差,检测效率和准确度都很低,本文不做考虑。
基于深度学习的目标检测算法分为2种:两阶段目标检测算法(如R-CNN系列算法)和单阶段目标检测算法(如YOLO系列算法、SSD系列算法)。两阶段目标检测算法虽然检测精度比较高,但是算法复杂度高,不适用于无人机快速运动、快速检测的运行环境。在检测速度较快的单阶段目标检测算法中,开发程度较高的YOLO系列算法对检测精度和检测速度有很好的平衡性。其中,2023年1月发布开源的YOLOv8算法是YOLO家族最新成员,可以更好地平衡算法的检测速度和检测精度。因此,本文将YOLOv8算法作为无人机目标检测基础算法并加以改进[1]。
本文研究的重点和难点主要集中在以下几个方面:特征信息不容易提取[2];通用的模型适用于中等大小的目标和大目标,对于小目标效果不佳;小目标数据集样本质量不如一般数据集[3]。
针对以上问题,研究人员首先基于锚框(Anchor)机制对小目标检测算法进行优化,如ZHANG等[4]提出加入锚框密度参数,在令不同锚框具有相同密度的情况下提高了小目标检测的召回率。
虽然锚框有很大的作用,但是近年来大量实验表明,基于锚框的目标检测算法也有不足:预设锚框会导致正负样本失衡,而且需要对锚框大小、数量和比例进行计算,这提高了算法复杂度。
因此,近年来无锚框(Anchor-free)机制因其优良的特性而逐渐兴起,例如:LAW等[5]提出一种CornerNet网络模型,根据左上、右下2个角点实现定位,避免了原来固定尺寸的锚框对小目标检测不友好的缺点;DUAN等[6]提出CenterNet网络模型,在CornerNet基础上增加了中心点参数,取得了比CenterNet更好的效果。其次,研究人员基于模型网络结构进行了优化,如谢星星等[7]提出一种动态特征融合网络,该网络可以动态调整特征融合的权重,有效减少特征融合过程中小目标特征的丢失。
近年来,在目标检测优化方面,注意力机制的引入也成为了研究热点,如LIM等[8]提出一种融合目标上下文信息的注意力机制,使网络聚焦于需要的部分从而降低背景信息的干扰,间接增强了所需要的小目标特征信息。
此外,还有直接增强小目标特征的优化方法,主要有以下几类:设计生成对抗网络(GAN)[9],如BAI等[10]提出的SOD-MTGAN、RABBI等[11]提出的EESRGAN等,都是对GAN方法的改进;对训练用数据集进行数据增强,如KISANTAL等[12]提出的将小目标复制增多的方法,提高了网络对小目标的训练量,ZOPH等[13]提出的强化学习的方法,先将质量好的数据进行筛选再训练,有效提高了检测性能;由于不同尺度的特征图有不同的特征信息,通过融合多尺度特征图也可以有效提升检测精度,有很多基于经典特征融合网络——特征金字塔网络(FPN)的改进,如ZENG等[14]提出的空洞空间金字塔池化平衡特征金字塔网络(ABFPN),创新性地使用了跳跃连接,大幅提升了多尺度特征融合效果。
为了提高小目标检测的测量精度,本文提出YOLOv8-smr模型,相较于YOLOv8s做出的改进主要有以下4点:
1) 针对无人机拍摄目标普遍为小目标的应用场景,减少YOLOv8s算法骨干网络(Backbone)的层数,增大检测头(Head)部分待检测特征图的尺寸,保留更多小目标特征信息;
2) 针对数据集存在一定数量低质量示例的问题,引入Wise-IoU损失函数优化数据集训练效果;
3) 引入上下文增强模块(CAM),通过不同扩张率的扩张卷积将待检测目标本身及其周围特征信息结合起来,改善模型在复杂环境中对小目标的定位和分类效果;
4) 设计空间-通道滤波模块(SCFM),通过滤除干扰信息、增强小目标特征信息,缓解卷积过程中微小目标特征信息被淹没的问题。
01 系统模型
1.1 YOLOv8网络结构
YOLOv8的总体结构包括Backbone、颈部网络(Neck)、Head这3个部分。根据具体的需要,将模型按照网络模型的大小分为YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l和YOLOv8x这5种模型[15]。
Backbone部分采用的结构为Darknet53,其中包括基本卷积单元(Conv)、实现局部特征和全局特征的featherMap级别的融合的空间金字塔池化模块(SPPF),以及增加网络的深度和感受野、提高特征提取能力的C2f模块。C2f模块结构如图1所示。
图1 C2f模块结构
Neck部分采用PAN-FPN结构实现多个不同尺寸特征图的特征融合,其中同样使用了C2f模块作为特征提取的主要模块。
Head部分采用解耦头结构将分类和检测分离,同时在检测过程中采用效果较好的Anchor-free机制。解耦头模型结构如图2所示。
图2 解耦头模型结构
在损失函数计算方面,采用了Task Aligned Assigner正样本分配策略,由分类损失(VFL)和回归损失(CIoU+DFL)2个部分的3个损失函数加权组合而成。
1.2 本文网络结构
经过在YOLOv8s的基础上优化模型结构、优化损失函数、添加上下文增强模块、添加SCFM模块,本文最终的无人机目标检测算法网络模型如图3所示。下面各节分别对各个优化模块的具体结构与算法进行介绍。
图3 本文目标检测算法模型结构
1.3 模型结构优化
YOLOv8s模型输入图片的大小会被resize为640×640×3像素,最终检测的3个特征图的大小为80×80×128像素、40×40×256像素和20×20×512像素。当待检测目标普遍为小目标的时候,特征图尺寸最小被压缩到20×20×512像素,这会造成小目标特征信息有较大的损失,而且经过深层卷积会导致小目标的特征信息被淹没,从而影响检测精度。
因此,本文将Backbone部分的Stage Layer3去除,令网络模型不进行过于深层次的卷积,同时将待检测特征图的尺寸放大到160×160×64像素、80×80×128像素和40×40×256像素。
通过改进,模型可以保留更多的小目标特征信息。在VisDrone2019数据集上,本文将所优化的模型结构与直接增加一层小目标检测层的模型YOLOv8-large[16]以及初始模型YOLOv8s进行实验对比,实验结果如表1所示,用每秒10亿次的浮点运算数(GFLOPs)衡量算法复杂度。
与常见的直接增加一层小目标检测层的模型相比,本文模型结构的算法复杂度大幅降低,但检测精度差别不大,与初始YOLOv8s算法相比,优化参数量明显下降、精度明显提升,证明降低网络卷积层次在大幅提升小目标检测性能的同时,不会带来复杂的算法开销,能够实现模型复杂度和精度之间更好的平衡。
表1 3种算法复杂度和精度比较
1.4 损失函数优化
损失函数的计算是目标检测算法的重要组成部分,YOLOv8s算法的损失函数由VFL和CIoU+DFL这2个部分的3个损失函数加权组合而成。其中,CIoU是对边界框的损失进行计算,它加入了纵横比的损失计算,但是没有考虑数据集样本本身的平衡问题。
以往的大多数损失函数很少考虑数据集本身标注示例的质量,而是不断致力于强化边界框损失的拟合能力,导致一些低质量标注对检测性能有很大的影响[17]。因此,本文引入Wise-IoU作为新的边界框损失函数。Wise-IoU定义为:
其中:(x,y)和(xgt,ygt)分别为锚框和目标框中心点的坐标;Wg和Hg是最小包围框的尺寸;RIoU表示交并比(IoU),是度量预测框和真实框的重叠程度的常见量;α和β作为超参数,通常设定为1.9和3.0[17]。
通过引入离群度参数来描述锚框的质量,β与锚框质量负相关。离群度计算公式为:
其中,L∗IoU为单调聚焦系数的梯度增益,与LIoU定义相同,这里的*表示在训练过程中会根据每个目标检测的情况不断计算更改;¯LIoU为动量m的滑动平均值,引入¯LIoU意味着可以根据训练进程动态调整最高梯度增益。动量m的计算公式为:
其中:t为epoch的值;n为batch size的值。引入动量m的意义是经过t轮训练以后,WIoU将小梯度增益分配给低质量锚框以减少有害梯度。
WIoU所增加的计算成本主要在于聚焦系数的计算和IoU损失的均值统计。在相同实验条件下,WIoU因为没有对纵横比进行计算反而有更快的速度,所以在更换损失函数后,在精度提高的基础上,训练时间也得到有效降低。
1.5 上下文增强模块
通过对数据集的观察分析可以发现,在无人机目标检测过程中,待检测目标小而密,小目标检测可以通过上下文信息作为特征的一部分。因此,本文引入上下文增强模块,通过扩张率为1、3、5的扩张卷积增大检测感受野,同时将待检测目标及其周围的特征信息相结合,变相增强小目标的特征信息,增强算法对目标的理解能力。
CAM结构如图4所示。将Backbone部分输出的图像经过扩张率为1、3、5的扩张卷积处理,将目标自身特征与目标周围环境的相对特征都考虑在内,再将处理后的3个特征图经Concat函数拼接后输入网络结构的下一层进行处理。
图4 CAM结构
1.6 空间-通道滤波模块
在YOLOv8s模型结构中,Neck部分使用了PAN-FPN结构,可以实现多个不同尺寸特征图的特征融合。但是在卷积过程中,网络各个层的特征图中会存在大量的干扰信息,这些干扰信息在不断卷积的过程中会导致部分特别小的小目标的特征信息丢失,严重影响检测精度。因此,本文设计空间-通道滤波模块,这种结构可以有效地从通道和空间滤除特征图的干扰信息,增强小目标特征信息。SCFM结构如图5所示。
图5 SCFM结构
首先,将输入的特征图在通道方向上进行压缩,再将其分别输入空间滤波模块(SPM)和通道滤波模块(CPM)。
空间滤波模块将压缩处理后的特征图采用Log_Softmax激活函数处理,在空间上对特征图过滤增强特征信息。Log_Softmax算法是在Softmax算法基础上对结果进行Log操作,生成所有位置相对于通道的相对权重。
Softmax算法公式为:
Log_Softmax算法公式为:
其中:Z为输入向量,Zj和Zi表示其中某个元素。
由两者的算法公式可以得,虽然Log_Softmax和Softmax都是单调的,但是它们对损失函数相对值的影响不同,使用Log_Softmax函数可以更高地惩罚似然空间中的误差,使算法收敛得更快。
通道滤波模块结构如图6所示。将特征图输入CPM后,分别经过平均池化和最大池化,两者结合将会得到更详细的全局特征,引入2层卷积层和Hardswish激活函数对小目标特征进行增强,最后经过最邻近上采样操作将特征图尺寸大小还原,再将2个经过滤波的特征图相加得到CPM模块最终的输出。
图6 CPM结构
Hardswish激活函数计算方式如式(8)[18]所示:
在这里引入Hardswish作为激活函数,是因为Hardswish不但具有Swish函数的优点,即有助于防止慢速训练期间梯度逐渐接近0并导致饱和、平滑度在优化和泛化中起了重要作用,以及导数恒大于0,而且在Swish函数的基础上使用常见的算子组合而成,在达到相似效果的情况下大大降低了算法模型的计算量。
02 实验与分析
本文实验均基于VisDrone2019数据集。VisDrone2019数据集有6 471张图片用于训练、548张图片用于验证,由配备摄像头的无人机在不同地点和高度拍摄,包括pedestrian、person、car、van、bus、truck、motor、bicycle、awning-tricycle,以及tricycle的10个预定义类别,几乎包含了交通运输的全部常见目标种类,是小目标检测常见的训练评估用数据集。
实验软件环境为Python 3.8.13、PyTorch 1.7.1、cuda 10.1,硬件环境为NVIDIA GeForce RTX 2080 Ti显卡。所有实验都在相同超参数下进行。性能评价指标有[email protected]、[email protected]∶0.95、GFLOPs、检测帧率(FPS)。其中:[email protected]表示阈值为0.5时所有类别(共10类)待检测目标的平均检测精度;[email protected]∶0.95表示阈值为0.5~0.95时所有类别待检测目标的平均检测精度;GFLOPs用来衡量算法复杂度;FPS用来衡量算法检测速度。
为了证明本文提出模块的有效性,通过消融实验来验证不同模块对小目标检测算法性能的影响,与此同时,通过展示同一张图片的处理结果来可视化这种差异。通过与其他经典目标检测算法以及近年来具有代表性的小目标检测算法的对比实验,体现本文所提出的整体算法模型在小目标检测领域的优越性。
2.1 消融实验
为了证明本文所提出的各个改进模块的优越性,进行消融实验,实验结果如表2所示,其中加粗表示最优值。
通过优化YOLOv8s模型结构得到的YOLOv8s-smr结构,较原模型[email protected]提升5.5个百分点,[email protected]∶0.95提升3.8个百分点,参数量下降70.3%,算法复杂度基本一致,这里FPS下降较多是因为待检测特征图尺寸加大之后后处理时间由5.5 ms增加到9.3 ms造成的。
将YOLOv8s原来的损失函数由CIoU替换为WIoU,[email protected]提升1.0个百分点,FPS提升9.1帧/s,这是因为更换的损失函数降低了数据集中低质量示例的影响,而且与CIoU相比,WIoU因为没有对纵横比进行计算,所以有更快的计算速度,其余参数变化较小。
如图7所示,在相同模型下将损失函数替换为CIoU、SIoU和WIoU进行对比实验,在设定耐心值为30的情况下,CIoU、SIoU在138个epoch的训练完全收敛,CIoU、SIoU和WIoU下精度分别为43.67%、43.64%和44.67%,虽然WIoU收敛较慢,但是明显达到较高的精度,说明WIoU的加入对提升小目标检测精度有效。通过直观对比也可以发现WIoU漏检和误检最少。
在YOLOv8s-smr-WIoU基础上加入CAM后,[email protected]和[email protected]∶0.95都提升0.3个百分点,证明CAM扩大感受野的操作对于小目标检测确实有明显提升。在此基础上加入SCFM后,通过将特征层中的小目标特征进行增强,[email protected]提升0.5个百分点,[email protected]∶0.95提升0.2个百分点。
最终算法模型的实验结果表明,相较于基础YOLOv8s算法模型,本文提出的算法模型[email protected]提升7.3个百分点,[email protected]∶0.95提升4.8个百分点,参数量下降26.13%,算法复杂度增加45.26%,FPS下降24.1帧/s。虽然算法复杂度有所增加,但是FPS可以达到62.1帧/s,表明本文目标检测算法可以满足实时性的要求。
表2 消融实验中目标检测精度和算法复杂度对比
图7 不同损失函数下目标检测精度对比
目标检测效果可视化对比如图8所示。可以看出,通过改进,红框标注的地方漏检情况相比于上一张图明显减少,蓝框标注的地方误检率也有下降,每一代算法模型在误检和漏检方面都相比于前一代有一定的改进,最终算法模型相比于前几代模型也取得了更好的目标检测效果。
图8 消融实验目标检测效果可视化对比
通过检测结果的直观对比,可以看到小目标检测精度不断地提升。但是可以明显看到,虽然算法经过多轮改进,但还是不可避免地存在漏检和误检的问题,这也是最终算法的[email protected]只有45.4%的直观体现。
2.2 对比实验
为了体现本文所提出的算法在检测精度和检测速度上的优越性和平衡性,将本文算法与目前主流的经典的小目标检测算法进行对比,包括RetinaNet[19]、Faster-RCNN[20]、CornerNet[5]、YOLOv5s[21]、Deformable DETR[22]、TPH-YOLOv5[23]、YOLOv7[24],以及最近公开发表的小目标检测精度最优算法YOLO-DCTI[25]、速度最优算法YOLO-PWCA[26],在相同数据集和软硬件条件下进行比较,验证本文算法模型所作改进的有效性和优越性。
表3给出了不同算法的指标对比,图9给出了部分算法目标检测效果的可视化对比。
在检测效果可视化对比中,观察各个算法检测结果的红框标注部分出现的漏检和误检现象可知,本文算法相较于精度最高的YOLO-DCTI方法,虽然检测率略低,但是图片右侧误检现象有所减少,相较于其他算法,左上角微小汽车以及图像中央的motor、bicycle的检测率更高。
在指标对比中,本文算法的检测精度虽然不是最高,但是精度最高的YOLO-DCTI方法是以牺牲检测速度为前提的,11帧/s的检测速度无法满足实时性,而YOLO-PWCA算法虽然速度非常快,达到181帧/s,但是检测精度是明显短板。
对比以上多种算法,本文算法虽然精度没有达到最高,速度也不是最快,但是可以在满足62帧/s实时目标检测的条件下达到最高精度,在精度和速度之间达到了更好的平衡,更适合无人机的应用环境。以上对比结果可以证明,本文所提出的算法在小目标检测方面的精度和速度更加平衡,具有优越性。
表3 对比实验结果
03 结束语
本文提出一种改进YOLOv8s的小目标检测算法,用于提高无人机目标检测精度,从目前主流的几个方向优化,包括网络结构、数据集、注意力机制,使得经过改进的网络模型更适用于小目标检测的应用场景。
本文放大待检测特征图的尺寸而不是单纯地增加小目标检测层,通过这样的改进可以使网络专注于小目标的特征信息,而且不会带来很大的计算开销,更适合无人机目标检测的应用场景;将损失函数更换为WIoU可以将数据集本身标注示例的质量加入训练参数;加入CAM将目标与其周围的特征信息联系起来,可以改善对目标的分类识别效果;设计SCFM,通过滤除干扰信息、增强小目标特征信息,可以改善卷积过程中部分微小目标特征信息被淹没的问题。通过消融实验结果可以看出,以上所做出的改进都对检测精度有一定提升作用。
本文所提出的算法相对于YOLOv8s算法虽然复杂度有所增加,但是最终模型的检测速度可以满足应用需求。与目前主流的经典目标检测算法以及近年来公开发表的具有代表性的小目标检测算法相比,本文所提出的改进算法在小目标检测精度和检测速度上可以达到平衡,具有一定的优越性,算法模型的[email protected]达到了45.4%,实现了较大的精度提升。
为了使无人机在光照条件恶劣的情况下保持高精度目标检测,下一步计划添加图像预处理模块,包括图像增强和曝光校正2个部分。此外,还将对算法做进一步轻量化处理,包括但不限于更换主干网络等,将其部署到嵌入式GPU设备Nvidia Jetson AGX Xavier上,在无人机有限的算力与功耗资源上实现实时目标检测。