APP下载

DS-YOLO:一种部署在无人机终端上的小目标实时检测算法

2021-03-24庄幸涛王雪力陈云芳李延超

关键词:剪枝卷积特征

张 伟,庄幸涛,王雪力,陈云芳,李延超

(南京邮电大学计算机学院,江苏 南京 210023)

近年来,无人机(Unmanned Aerial Vehicles,UAVs)凭借其体积轻便、运动灵活和能耗较低等优势,在军事与民用领域发挥了不可替代的作用。同时,图像分类[1]、语义分割[2]和目标检测[3]等计算机视觉技术的应用极大地提升了其感知能力,辅助用户甚至独立地处理一些特定的感知和计算任务。军事方面,无人机可在危险地区执行情报搜集、航线侦察、安防巡检、目标监控和精确打击等多种作战任务;民用方面,其在航拍记录等单一任务中的应用已成为行业常态。然而,对于一些复杂的民用任务,无人机的应用大部分仍还停留在试验阶段,其很大程度上是因为无人机所依赖的定位导航、信号传输以及智能计算等系统在工作环境方面存在较高的要求,限制了无人机应用的普及。

目标检测是指从图像中检测出目标位置并识别目标类别,是城市安防、自动导航、医疗诊断、增强现实等领域最基础、最重要的应用之一[4]。RCNN[5]、YOLO[6]、SSD[7]等基于卷积神经网络的目标检测方法克服了手工构建特征等问题,获得了较好的实用性能,但这类方法往往需要高算力服务器[8]的支持,由此带来的硬件成本和传输时延对于需要在移动设备终端部署、实时性要求较高的目标检测任务依然是无法接受的。

在移动端部署深度神经网络算法实现有效的目标检测其难点主要体现在两个方面:

(1)移动平台算力资源有限。随着目标检测算法在基准数据集上的表现不断提升,目标检测器的特征提取主干网络也呈现出越来越深、越来越密集的发展趋势,这同时也带来了巨大的算力消耗。例如,YOLOv3主干网络Darknet-53所借鉴的ResNet-152拥有230 MB的参数量,处理单帧分辨率仅224×224的图片就需要进行超过113亿(11.3 G)次浮点运算(Floating Point Operations,FLOPs)[9]。 即使在这样的低精度画面上提出实时检测的需求,许多移动设备、可穿戴设备或者物联网设备也很难完成:以小巧高效为特点的树莓派4(Raspberry Pi 4)为例,其搭载的GPU架构VideoCore最高可进行每秒240 亿(24 G)次 FLOPS[10],远达不到实时检测的算力需求。在市场需求刺激下,更多针对性的AI计算设备陆续被推出。如今,NVIDIA Jetson系列的嵌入式计算平台的计算速度已经可以达到万亿级(1T)FLOPS,成为许多边缘计算产品的首选;Intel的神经计算棒(Neural Compute Stick,NCS)在 1W 的极低功耗下也可以达到最高100 GFLOPS的表现,可以为算力不足的移动设备提供快速提升方案。这类设备部分解决了业界面临的硬件算力和能耗问题[11],也为无人机终端部署实时检测算法的设计提供了可能[12]。

(2)任务场景特殊需求。主流的目标检测算法从早期的 AlexNet[1]、VGGNet[13]及 GoogleNet[14]到ResNet等,普遍专注于解决通用的目标检测任务,如 ImageNet[15]、COCO[16]等,这类任务场景大部分都采取常规的平拍视角,且目标尺度较大、特征较明显。而实际应用中的任务场景和检测目标往往具有某些特殊属性,如果直接使用通用算法而不针对结构加以重新设计,检测性能必然会有所下降。相比常规的检测任务,无人机的拍摄画面内容复杂、待检目标尺度小且特征模糊,不是主流算法的网络设计所针对的任务类型。这种情况下,单纯通过解决硬件性能问题、甚至提供更高水平的硬件都不足以对检测性能带来显著的改善,必须根据任务特点对网络结构加以改进,才能有效提升检测效果。

因此,为了更好地实现无人机平台下的实时小目标检测,本文提出针对性的改造方法:一方面基于无人机拍摄的独特视角,改造算法的主干网络结构来提升其小目标特征提取能力;另一方面,在基本保持检测效果的前提下寻求模型压缩与优化,以降低实时算法对硬件算力的要求。此外,还引入了数据增强技术来扩充特殊场景下的训练集,解决实际数据收集难的问题。

1 相关工作

1.1 小目标检测

目标检测任务中的小目标定义分为相对尺寸与绝对尺寸两种。相对尺寸定义将长宽比例是原图像尺寸0.1的目标认为是小目标,绝对尺寸定义则将小于32像素×32像素的目标定义为小目标。小目标检测作为物体检测领域的一个挑战性难题,对算法挖掘和利用微小特征的能力提出了相当高的要求。近年来致力于解决小目标检测问题的算法层出不穷,大部分方案较为重视已有深度学习通用检测器的成熟度和稳定度,保留了通用算法的主体架构基本不变,主要通过图像缩放、改变网络深度等微调操作或结合一些高效的网络结构或模块设计,提升算法在小目标检测任务中的表现。

基于深度学习的通用检测算法可分为基于候选区域的两阶段算法和基于回归的单阶段算法两类。

由Girshick等提出的两阶段算法R-CNN第一次尝试将深度学习应用到目标检测任务中。R-CNN使用 Selective Search作为区域选择算法(Region Selection Algorithm)搜索出图像中的感兴趣区域(Region of Interest,ROI)。由于每个区域都需要送入卷积神经网络进行特征提取,其中包含的重复运算导致R-CNN处理速度很难满足实时检测。此外,由于占用大量内存和网络的复杂性,R-CNN也难以应用在无人机上[17-18]。针对这一问题,Fast R-CNN[19]仅对整张输入图像进行一次特征提取操作,有效提升了算法速度,但其仍然使用独立的阶段来进行区域选择。因此,Ren等进一步提出Faster RCNN[20]算法,将新的区域选择方法(Region Proposal Network,RPN)[20]与 CNN 特征提取方法整合到一个模型中,初步展现出端到端算法的速度优势。

一般认为,两阶段算法在准确率方面占据优势,但执行的计算成本高、运行时间慢。单阶段算法将目标检测看成一个回归问题,省去了区域选择的阶段,直接从图片中获得物体的类别概率和位置坐标值,更加契合实时检测的任务场景。一阶段检测算法以Redmon于2016年提出的You Only Look Once(YOLO)算法为代表,该算法由神经网络直接端到端输出类别概率与检测框坐标等检测结果,处理速度可以达到45 FPS,满足了实时检测的要求。但由于YOLO只做一次边框回归,对于小目标的训练不够充分,算法对于目标尺度较为敏感。同年提出的SSD[7]算法进一步采用了金字塔结构,速度上与YOLO相当,且检测精度可以和Faster R-CNN媲美,然而对小目标的检出率仍然一般。这主要是SSD提取低级特征的卷积层深度不足,导致小目标的特征提取不充分[21]。随着基础网络的发展,YOLO系列继续提出 YOLOv2/YOLO 9000 算法[22],使用更加简化的Darknet-19作为特征提取网络,进一步提升算法处理速度。YOLOv3采用darknet-53的主干网络[23],利用多尺度特征检测目标,在VOC数据集上实现了76%的准确率。但是由于缺乏训练数据和有限的感受野,该方法仍然不能很好地用于无人机小目标的检测。最新的YOLOv4算法则使用了全新残差连接方式的CSPDarknet53主干网络[24],同时引入独创的数据增强方案Mosaic以及SPP等模块,大大提高了算法在现实任务中的可用性。

针对小目标检测问题,现有研究在通用检测器的基础上分别从精度、速度等不同方向上尝试做出改进,通过主干网络替换、高效模块引入等方式进一步提升无人机终端部署算法的可行性及检测率。LaLonde等在 2018 年提出的 ClusterNet[25]以 Faster R-CNN为框架,提出了全新的轻量特征提取网络SlimNet与分类网络FoveaNet,在城市小目标检测数据集UED上的平均精度相比ResNet-152提高了12.3%,相对简单的结构也为算法带来了训练和检测速度的提升。2019年 Yang等提出的SCRDet[26]也是以两阶段算法为框架,使用了多特征融合的SF-Net主干网络以及注意力机制,提高了算法在遥感图像中检测小目标的灵敏度。但即便是更换了简化的主干网络,这类两阶段结构的方法仍然需要后台提供高算力服务器支撑。因此,更多的小目标检测算法均选择速度占优的一阶段算法作为基础。文献[27-29]等算法都是针对小目标检测任务,在传统SSD方法的基础上引入特征金字塔结构或空间上下文分析方法,增强算法识别多类小目标的能力。

2020年提出的UAV-YOLO[30]则在YOLOv3的基础上,增加早期卷积层数来丰富特征信息,并连接输入尺度相同的ResNet单元来增加网络的特征复用能力,该方法在无人机视角的目标检测任务中的IoU及小目标检测mAP均优于原版算法,但该算法在算力较强的TITAN X上才达到20 FPS,远远达不到实时检测的需求。相比之下,Zhang等在2019年提出的SlimYOLOv3[31]同样也是以 YOLOv3-SPP 算法为基础,结合通道剪枝技术更好地平衡了嵌入式设备算力与小目标检测性能。虽然该方案限制了网络结构的进一步改进,但仍然体现出YOLO系列算法在小目标识别,尤其是无人机视角检测任务中的优势。

本文所针对的场景是一种算力有限的边缘计算任务,要求运行在无人机平台上,因此选择一阶段YOLOv3-tiny算法作为原型,以优先保证算法的运行速度。YOLOv3-tiny是YOLOv3算法针对移动设备简化后的版本,具有网络简单、计算量小的优点,但同时也存在分类正确率、候选框精度低的缺点。因此将在该算法的基础上,通过密集连接以及加深网络深度的方式,来增强网络的特征挖掘和复用能力,同时引入改进的空间金字塔池化(Space Pyramid Pooling Module,SPP)模块以加强算法的多尺度特征融合。

1.2 网络压缩

对于层数更深和节点更多的神经网络,减少其存储和计算成本变得至关重要。一方面,对于实时检测、自动驾驶等实时性要求较高的任务,检测速度是人们选择算法时的主要考虑因素。另一方面,人们的生活越来越依赖移动设备,使用网络压缩让深度模型在资源(算力、能源、带宽等)有限的移动端运行也成为一种必要的处理[32]。现有的模型压缩方法主要包括低秩因子分解(Low-Rank Factorization)[33]、知识蒸馏(Knowledge Distillation)[34]和参数剪枝(Parameter Pruning)[35]等。

低秩因子分解技术使用张量分解来估计深度神经网络的信息参数,该方法计算成本高昂,实际应用中较难实现。知识蒸馏的方法则是将大型网络视为教师模型,尽可能地训练出一个输出和教师模型的输出相近但网络结构更加紧凑的学生模型。Hinton等[36]在2015年的工作引入了知识蒸馏框架,训练学生模型以预测教师的真实标签输出,实验表明这种方法在各种图像分类任务中表现出较好的结果。但是此类方法大多需要设计复杂的代价函数和训练方式,并且这些方法多用于图像分类、两阶段目标检测等任务,较少用于一阶段目标检测。

相比以上两种方法,参数剪枝的方法往往成为更多模型压缩方案的选择。该方法需要先对网络中各组件的冗余性做出判断,再删除其中对准确率影响不大的部分。Han等[37]提出的Deep Compression对网络的冗余连接进行初步修剪并重新训练,通过减少连接数的方式有效降低了网络复杂度,然而其在处理GoogleNet等大型CNN网络时存在准确率降低的缺点。在此基础上,Singh等[38]在2019年的研究中根据卷积核扰动对损失函数的影响大小来评价其重要性,然后剪除不重要通道,实验表明该方法在ResNet和Faster R-CNN等不同架构的模型上能有效降低计算量。Elkerdawy等[39]的工作表明,根据通道重要性进行剪枝可以在维持精度基本不变的情况下,移除网络中的大量卷积核及权重参数。这种策略还可以进一步延用至网络模块[40]等不同规模的剪枝中,并且在处理时延上可以超过ShuffleNet、MobileNet等手工打造的轻量化网络。SlimYOLOv3也体现了相同的思路,其以YOLOv3-SPP[23]为原始算法,选择卷积层的缩放因子来评价各通道的信息量,最终裁剪信息量较低的通道以实现网络压缩。该方法可以将精度损失控制在10%以内,同时提升75%左右的检测速度、压缩50%~90%的网络权重。但这种策略目前仅适配YOLO系列所使用的普通卷积层与shortcut连接层,对于route层等其他高效的网络结构则实现较为复杂,这限制了算法在网络结构方面的改进,也降低了该策略的可移植性。

本文提出的DS-YOLO的新主干网络受到DenseNet[41]的启发,采用密集连接以保持对细节特征的提取。已有的研究在对DenseNet这类网络结构进行热力图分析时,发现同一模块内存在着不少利用程度较低的无效连接,因此进一步考虑采用合理的剪枝策略以提升网络连接效率。在具体剪枝过程中,考虑到层级剪枝的粒度过粗、不够灵活,DSYOLO采用更细粒度的通道级剪枝策略,准确定位网络中无助于小目标检测的通道并加以剪除。

2 DS-YOLO算法

为了满足处理速度这个首要需求,DS-YOLO选择原版YOLOv3-tiny为原型。原版YOLOv3-tiny为了达到轻量化的目的,采用了只有7层Conv+Max-Pooling的主干网络提取特征,难以提取出更高层次的语义特征。同时检测头对13×13与26×26尺度的特征图进行最终分类,特征图尺度信息不够充分,检测精度很难提高。此外,YOLOv3-tiny的部分卷积层需要使用512个甚至更多的卷积核,导致权重参数量增多、文件体积增加、限制条件下检测速度慢等问题。为了解决YOLOv3-tiny在无人机平台上存在的问题,本文从权重大小、检测速度和准确度等方面综合考虑,提出了更快、更准的DS-YOLO算法。图1展示了DS-YOLO的网络结构。

图1 DS-YOLO网络结构图

为了提高检测准确率,DS-YOLO首先在原有主干网络层数的基础上适当增加网络深度,并且通过密集连接和空间金字塔池化等设计增加特征复用效率,形成了全新的主干网络结构。其次,DS-YOLO设置了2种更大尺度的检测头,使用了更大尺度的52×52特征图替代原有的13×13进行检测,尽可能地保留小目标的细节信息,使之作用于最后的分类结果。最后,为了找到减少参数量和保证检测度之间的平衡点,DS-YOLO使用了通道级剪枝策略,剪除重要性较低的卷积核。

2.1 DS-YOLO主干网及特征模块设计

2.1.1 主干网络

YOLOv3系列算法借鉴ResNet-152采用了Res Unit作为基础单元。Res Unit特征复用的设计是:第l层网络首先对输入信息xl-1施加非线性变换Hl,再将变换结果与原输入xl-1进行累加得到输出。式(1)即表示了此类网络层的非线性转换方式。

Res Unit的层间直连仅局限在相邻的前后层,并采用相加的方式进行信息融合,这在一定程度上阻碍了信息在网络中的流动。为了改善这一情况,DS-YOLO借鉴密集连接主干网络(DenseNet)的思想,采用了层间直连更加密集和广泛的Dense Block替换Res Unit结构。由于直连涉及到的层数更多,Dense Block的结构不仅仅包含相邻两层卷积层,而是由数量更多的Dense Layer构成,具体如式(2)所示。 之前所有层的特征图xi(i=0,1,…,l-1)将通过通道级联的方式连接在一起,构成各层Dense Layer非线性转换的输入。

相比Res Unit,Dense Block的密集连接实现了更加高效的特征复用,但频繁的通道级联在提升网络性能的同时,也同时使得特征图通道数迅速累加,导致网络参数量增加、网络推理速度下降。

为了解决这一问题,在每一层Dense Layer中加入了瓶颈层(bottleneck layer)来降低级联后的输入特征图的通道数,保证网络宽度维持在一定范围内。如图2所示,第l层网络对于输入尺寸为W×H×Cl-1的特征图,原始设计直接采用一次3×3卷积来获得通道数Cl=k的输出,而瓶颈层则预先使用1×1卷积将特征图维度降低到4k,再对降维后的特征图执行3×3卷积。通过计算可以得出,第l层网络原始设计的参数量N_Originl与加入瓶颈层后的参数量N_Bottleneckl分别如式(3)、式(4)。

图2 引入瓶颈层的Dense Block设计

在本文中,设置生长率k为32,即每经过一层网络层,特征图通道数C将以k=32的速度逐层递增。若当前Dense Block的初始输入通道数为C0,则第l层Dense Layer输入的特征图通道数Cl-1与生长率k之间存在如下的对应关系

代入式(3)、式(4)可以计算出,当l≥6.2 时Numorigin≥Numbottleneck。由此可以发现引入瓶颈层设计的神经网络只有前6层参数量略大于原始设计,随着图像数据的深入计算,1×1卷积核对于参数量的削减作用将越来越明显。本文主干网络中的Dense Block包含的层数 Block Layers分别为6、12和 8,初始通道数C0分别为 64(2k)、128(4k)和 256(8k)。 结合式(3)至式(5)可以计算得到原始设计下的网络参数总量为

此外,引入Dense Block的新主干网络还需要解决下采样的问题。缩小特征图尺度的下采样几乎是每个CNN检测器所必须的操作,而通道级联则要求同一Block内的所有层都必须维持相同的尺寸,这导致无法在Dense Block单元内部实现池化或Stride>1的下采样。对此,在相邻的Block之间增设Transition层,专门用于实现特征图的尺度转换。在本文中,Transition层下采样主要通过2×2平均池化的方式完成。

2.1.2 Spatial Pyramid Pooling(SPP)改进

无论是Res Unit的累加还是Dense Block的级联,操作对象都是某一卷积层的特征图整体。这种设计不能挖掘出同一特征图内局部特征之间的潜在关系。因此本文引入了改进的空间金字塔池化模块,加强模型对于特征图内局部特征的融合能力,从而提升目标检测准确率。

传统的空间金字塔池化层是为了解决CNN对输入图片尺寸的限制。由于全连接层的存在,与之相连的最后一个卷积层的输出特征需要固定尺寸,从而要求输入图片尺寸也要固定。而采用裁剪或变形会导致图片的信息缺失或变形,直接影响识别精度。对此,引入SPP通过池化使任意输入转换为固定输出。

如图3(a)所示,传统的SPP模块接收尺寸为W×H的输入特征图,将分别通过i组并行的池化层处理得到ni×ni大小的固定输出。

图3 传统SPP模块与调整后的SPP模块对比

为了达到这样的功能,各层的池化窗口尺寸Wpooling×Hpooling与步长 stride应设置为

若取定ni=2i-1,按式(6)设置窗口大小分别对输入特征图的某一通道进行最大池化,并将池化后的结果进行一维拼接,则可以得到长度固定为1×1+2×2+4×4=21的特征向量。

为了加强多尺度特征融合,本文在检测头部与主干网络之间也引入空间金字塔池化模块,且同样使用3组并行的最大池化层,但不同于传统SPP处理后面向的全连接层,DS-YOLO后续仍然需要进行卷积运算。因此在特征融合的方式上,采用级联替代原版的拼接方式,以产生“特征图”形式的输出。这就需要保证各池化层输出的尺寸一致,因此各层池化窗口及步长的设置与传统SPP也有所区别。

具体如图3(b)所示,对于尺寸为W×H的输入,首先使用1×1卷积将输入特征图通道数固定为256,然后分别使用尺寸为的窗口以及固定为1的步长进行池化,得到3组尺度统一为W×H×256的输出特征图,最终与256维的原输入共同级联,得到固定尺度为W×H×1 024的混合输出。

2.2 模型压缩

DS-YOLO模型压缩可以看作是多阶段迭代式的学习过程,即对网络进行多次“瘦身”,从而得到一个更加紧凑的模型。每一轮迭代将包含稀疏训练、剪枝与微调等多个步骤,其流程如图4所示。

图4 迭代式模型压缩流程

2.2.1 稀疏训练

稀疏训练的目的是使不重要通道的权重趋近于0,从而网络信息可以更多地在保留下来的重要通道上流通。从网络权重分布的角度来看,越多的通道权重变为极小值,网络总体的稀疏程度就越高,在剪枝阶段可裁剪的通道也就越多。

对此,首先利用CNN中广泛使用的Batch Normalization(BN)层来实现网络的稀疏化。BN层的引入原本是为了加快网络收敛速率、提高网络泛化能力,在模型压缩任务中,利用BN层归一化处理各通道数据的能力,衡量各通道在信息流通中的重要性,从而进一步抑制那些利用率较低的通道,整个网络也会因为这些通道的权重降低而变得越来越稀疏。

BN层在训练过程中归一化处理数据的方式为:针对一个 batch中的训练集图片xi∈B{x1,x2,x3,…,xbatch_size},需要先进行归一化处理得到相对标准的输入,神经网络在多轮迭代和海量样本-标签对的训练下将学习得到最佳的权重数据(γ,β)。其算法流程如下。

从BN层最后的“scale and shift”操作可以看出,γ作为标准化输入项的系数,直接影响了输入信息在分类结果中的占比。在多轮的训练过程中,若该通道包含小目标分类的重要信息,则对应的γ系数将受到损失函数的激励而不断递增;若该通道包含分类无关的信息,则γ系数将因为提供错误信息导致损失函数提高而受到惩罚。因此,训练完成后的γ系数将趋于一个稳定的数值,这个数值可以视为通道重要性的量化指标。

为了利用γ系数提高网络稀疏化的程度,将权重稀疏化与目标检测的训练过程相结合,提出了新的损失函数,如式(7)所示。

其中,(x,y)分别代表训练数据和标签,是网络的基本训练参数。第一项是保留了原CNN的训练损失函数不变,第二项则主要是针对缩放因子γ施加的惩罚函数g(γ)=|γ|,即稀疏中经常使用的L1-正则化。该惩罚函数使得网络在正常优化损失函数的同时,进一步使权重分布向关键通道处集中。

2.2.2 通道剪枝

由2.2.1节可知,稀疏训练将会使网络中大多数通道的缩放因子γ趋近于0。但同时由于γ对于网络输入具有缩放作用,所以这些通道的输出值也会变得极小,最终导致通道对网络分类结果的贡献微不足道。因此,在通道剪枝阶段选择裁剪对象时,选择γ参数相对较小的卷积通道进行剪枝,如图5所示。

图5 通道剪枝策略

首先,对稀疏化后的缩放因子γ绝对值进行升序排序,同时根据需求为整个网络指定一个剪枝率per(0~1之间),其代表计划网络体积减少的程度。其次,将按照剪枝率剪除对应数量的γ较小的卷积通道,最终得到一个参数量、计算量、运行时内存只占原始网络per百分比的紧凑网络。需要注意的是,一般剪枝后网络性能会降低,为了恢复网络性能,对压缩后的模型还需要继续通过迭代训练的方式来微调网络权重。

3 实验结果与分析

3.1 硬件平台

实验的算法训练环境为Ubuntu 19.10.5.3.0-18-generic GNU/Linux系统的服务器,搭载 Intel(R)Xeon(R) CPU E5-2650 v2@2.6 GHz(8-cores)、16 GB RAM和一块8 GB显存的NVIDIA GeForce RTX2080 GPU,项目代码基于PyTorch深度学习框架开发。

应用于无人机航拍的CNN目标检测任务大多将待检测图像上传至高算力服务器进行云计算,再将云端的识别结果返回至终端用于后续处理。这种模式虽然解决了CNN的算力需求,但需要保证无人机终端与服务器端的稳定连接,在实际任务中并不实用。因此,选择将训练好的轻量化CNN网络部署到具备一定运算能力的嵌入式AI计算设备上,使得无人机终端在获取图像的同时,能依靠该嵌入式设备独立完成目标识别任务。

在检测任务测试阶段,使用8 GB显存的NVIDIA Jetson TX2(256 CUDA cores)开发者套件作为嵌入式AI计算设备,其外形小巧、节能高效,非常适合机器人、无人机、智能摄像机等智能边缘设备。考虑到无人机有限的装载空间和复杂的工作环境,进一步将TX2套件的运算核心移植到更小体积的RTSO-9003U载板上,以更加适应紧凑型的部署需求。

无人机平台方面,使用的是F450套装无人机搭载pixhawk 2.4.8飞控,最大载质量800 g,最大飞行续航可达20 min,续航里程10 km。航拍平台则选用Hawkeye FIREFLY 7SE运动相机,可捕获最高4 K清晰度、24 FPS的城镇地面影像。

3.2 数据集

本文中的所有模型都在Visdrone2019训练集上完成训练,并在其测试集上进行评价。VisDrone2019数据集共288个视频片段(272 117张视频帧)与7 019张静态图像,均使用无人机采集。该数据集包含260多万个城市交通地面目标(如行人、汽车、自行车和三轮车等),且不同的拍摄高度、场景使得目标受到不同程度的遮挡、干扰,大大增加了目标检测的难度,如图6所示。

图6 Visdrone数据集

3.3 公共评价指标

目标检测算法公认的性能评价指标包括衡量算法检测准确程度的 Precision(P)、Recall(R)、Average Precision(AP)、mean Average Precision(mAP)等,衡量算法检测速度的FPS等,本文算法评价也采用这些公共指标。

准确率(Precision)与召回率(Recall)。 一个可以识别C类目标的检测系统,在任务执行过程中检测到包含第i类物体的图像共Mi帧,其中i∈{1,2,…,C},选取其中置信度最高的前N(top-N)帧图像(N∈{1,2,…,M}),计算每幅图中系统预判的Bounding Box与目标对应实际区域的交并比。将交并比大于一定阈值的图像归类于预测准确的真正类(True Positive,TP),并用表示其数量,剩余预测不准的假正类(False Positive,FP)图像数量则将用表示。

准确率Precision即为识别出i目标的前N张图像中True Positives所占的比率,其计算公式为

召回率Recall为True Positives占所有真正包含第i类目标的图像帧数量的比率。若假定包含第i类目标的图像帧实际共有Ki张,则其计算公式为

准确率Precision一般用来评估模型的查准程度,而召回率Recall则代表了检测算法查全的能力。

平均准确率(AP)与mAP。除了P-R曲线,平均准确率AP也常常被用于定量地衡量检测算法的性能。直观来说,AP就是P-R曲线下面的面积,通常来说一个越好的分类器,AP值越高。进一步地,目标检测算法中最重要的指标mAP可通过对每个类别的AP取平均求得。mAP的大小一定在[0,1]区间,且该指标越高则表明算法的全局准确性越好。

FPS(Frame Per Second)。检测速度是评价检测算法的一个重要指标。尤其是对于时效性要求较高的实时检测系统,需要密切关注算法能否在一定时间内处理足够多的视频帧/图像。FPS即为计算检测系统在单位时间(s)内执行完目标检测任务的图像数,被普遍用于衡量算法的检测速度。

3.4 训练过程

一般而言,比较成功的深度神经网络需要大量的数据进行训练,而实际情况中依靠收集获取足够的训练数据往往因为需要大量的时间和人工成本而难以实现,尤其是对于一些特殊场景、罕见目标的检测任务。本文所针对的无人机目标识别任务同样面临航拍样本稀缺及特殊样本不平衡的问题。对此,设计了一个图片预处理方法用于无人机视角图像的数据增强,来生成出更多的数据,从而支持神经网络的训练。

本文的数据增强预处理操作如图7所示,主要包括3个步骤:

图7 数据增强流程

(1)建立目标池与背景池。针对所有训练集图像,根据标签文件提供的位置信息裁剪出所有目标块,同时对目标块随机施加不同程度的翻转、旋转等多种变换操作,生成待用的目标池。同时将抠去目标块的原图存放在背景池中,作为新图像的背景使用。

(2)重设目标块。训练集中存在部分视角较低的图像,这些图像中的大尺度目标与实际任务中的高视角、小目标差别较大。因此这一步将从目标池中随机选取目标块,通过缩放操作将其调整到与实际场景吻合的尺寸大小。

(3)生成新图像与标签文件。调整后的目标块被粘贴进背景中,生成新的训练图像。同时,系统将根据原标签文件提供的标注信息自动生成新图像的标注文件。

DS-YOLO算法在增强后的训练集上展开训练,过程如图8所示。训练图片统一按照416×416的尺寸进行大小调整,在上述硬件环境下训练2 400 epochs后模型达到收敛。其中MAP指标经过2 200 epochs左右的训练后逐渐稳定在18.3%左右的水平,而损失函数则最终下降到5.5左右。

图8 DS-YOLO训练过程中的mAP以及Loss收敛情况

模型压缩方面,DS-YOLO所采取的通道剪枝策略需要针对算法进行稀疏训练。其主要目的是使得原本趋于正态分布的BN层权重尽可能地向0收敛,更多的极小值意味着网络权重更加稀疏,同时也将提供更多的可剪通道。DS-YOLO在稀疏训练中的BN层权重分布变化如图9所示,其中图9(a)代表稀疏前的分布情况,可以发现未经压缩的各层总体上在1.0附近呈正态分布。图9(b)则展示了模型在新损失函数约束下的稀疏化过程:经过大约400 epochs的迭代训练后,大部分BN层权重被压缩到靠近0的一个极小值,这证明了密集连接网络中“低效”通道的存在以及下一步通道剪枝的合理性。

图9 DS-YOLO稀疏训练前后的权重分布

3.5 在无人机视角数据集上的实验

实验选择 YOLOv3-tiny、YOLOv3-SPP以及SlimYOLO等作为基准算法。其中,YOLOv3-tiny是在原版YOLO算法的基础上更换了更加轻量的主干网络以获取更快的处理速度;YOLOv3-SPP则引入了与本文类似的SPP模块以提升算法的精度;SlimYOLO则是通过通道剪枝策略降低算法体量,同时维持精度基本不变。这3类基准算法分别对应了DS-YOLO在主干网络、模块引入、模型压缩3方面的改进,因此与这3类算法的横向对比将能够显示出DS-YOLO改进的成效。针对准确率(mAP)、处理速度(FPS)、权重大小等指标,在Visdrone2019数据集上进行的对比结果如表1所示。

表1 基准算法与DS-YOLO在Visdrone2019数据集上的指标对比

随着输入图像由416×416增加到832×832,各算法的精确率、召回率以及mAP等精度指标均有一定的提升,但FPS等速度指标相应降低。这说明不同尺度的输入图像对于算法的检测性能有一定的影响,大尺度输入图像在提供更多信息、提升算法检测能力的同时,也增加了单帧图像的运算量,导致处理速度的下降,应用时可以根据实际的速度与精度需求选择最均衡的方案。由表2还可以看出,输入尺度相同的情况下,本文提出的DS-YOLO在mAP与精确率上比过去最优的无人机目标检测算法SlimYOLO-SPP3分别提升了3%与6.4%,尤其是召回率大幅提升了20.4%,说明算法更加适合威胁检测、瑕疵检测等严格要求漏检率的任务。处理速度方面,DS-YOLO相比最优的YOLOv3-tiny每秒少处理45帧,但仍然满足实时检测的速度要求,并且大幅提高了检测精度,解决了YOLOv3-tiny 4.9%的mAP无法应用于实际任务中的现实问题。

表2 从YOLOv3-tiny到DS-YOLO改进期间的中间算法性能

表1展示了DS-YOLO成品算法与其他算法间的横向对比,表2则纵向对比了DS-YOLO改进期间的各种中间算法,下面综合表1、2数据以分析本文采用的改进策略分别带来的提升。

(1)密集连接带来的提升。引入Dense Connection的主干网络后,DS-YOLO算法在处理速度上有所降低,但检测效果mAP从4.9%显著提升到15.2%,其检测效果已经接近表1展示的 Slim YOLO-SPP3算法,但后者繁复的层间连接以及扩大的网络宽度,使得网络在处理速度上下降明显,无法直接应用于正常的实时目标检测任务。

(2)SPP模块带来的提升。如表2所示,相比原版的 YOLOv3-tiny,YOLOv3-tiny-SPP1的 SPP模块带来约3.1%的mAP提升。表1以及Zhang等[31]在2019年的研究则表明,更多SPP模块的多尺度感融合可以帮助检测器更加高效地复用不同规模的深度特征。尤其是在608×608和832×832的输入尺寸下,应用了更多SPP模块的YOLOv3-SPP3相比YOLOv3-SPP1,在mAP上可以取得约1%的提升。但SPP模块带来mAP及Precision提升的同时,也使得算法参数量和运算量BFLOPs略有增加。

(3)模型压缩带来的提升。稀疏训练阶段,需要指定比例scaling factors对DS-YOLO进行稀疏训练。稀疏过程是一个博弈过程,不仅想要较高的压缩度,也想要在学习率下降后恢复足够的精度,但找到合适的scaling factors往往需要较高的时间成本。DS-YOLO的稀疏过程始终以恒定的scaling factors=0.001给模型添加额外的梯度,因为力度比较均匀,可以得到压缩度较高的稀疏网络。

通道剪枝阶段,在稀疏网络的基础上尝试了50%、85%与95%等多种不同的剪枝率以期达到检测精度与模型体量的平衡,分别分析检测性能与模型体量,最终选择85%剪枝率作为DS-YOLO剪枝方案。相比于最轻量的YOLOv3-tiny,模型压缩后的算法在参数量上削减了85.5%,同时也将运算量FLOPs降低了 33.4%,将推理时间缩减至只有YOLOv3-SPP3的25%。另一方面,剪枝后的 DSYOLO在Visdrone任务集上收获了目前为止最高的检测精度和mAP,同时只占用最小的4.9 MB的存储空间。

结合具体的检测图像,还注意到:相同场景下,剪枝这种网络结构大幅精简的做法仅能保证算法在查全率、查准率方面无明显差别,但泛化性能的下降依然无法避免。如图10所示,相比图10(a)剪枝前的算法,图10(b)剪枝后的算法对于姿态罕见的人物(如画面中心“单手举起的行人”)以及不规则遮挡的人车等目标(如画面左上角“遮挡严重”的车辆)的检出率较低。这说明剪枝带来的损失主要集中在这类数量稀缺的小样本上,相比之下,未经裁剪的DS-YOLO呈现出更好的泛化性和鲁棒性,能够更加准确地识别出真实场景中特征不全或罕见的新目标。

图10 在查全率、查准率方面的对比

图11体现了模型压缩对于IoU这一重要指标的影响。压缩后的模型虽然能取得与原模型相当的查全率与查准率。但对于相同的检测目标,图11(b)所代表的剪枝后算法在IoU上普遍降低,从而使得相同IoU阈值约束下的mAP指标降低。这同时也表明了模型压缩的方法不太适合定位精确度要求较高或者任务场景复杂的检测任务。

图11 在IoU方面的对比

4 结束语

本文提出了一种部署在无人机终端的目标检测算法DS-YOLO,实现嵌入式环境下的实时小目标检测。算法在有限的网络深度下引入密集连接的结构,提高主干网络的特征提取能力。其次,引入空间金字塔模块以融合多尺度下的特征向量,使得网络学习到更加全面的目标特征。针对实际部署中常见的算力有限和样本短缺问题,还分别设计了有效的通道剪枝和数据增强策略。最终在Visdrone2019目标检测数据集上进行的实验表明,新算法在维持网络体量与YOLOv3-tiny相同水平的情况下,收获了截至目前最高的mAP,检测速度也完全满足实时检测的需求。

猜你喜欢

剪枝卷积特征
人到晚年宜“剪枝”
离散型随机变量的分布列与数字特征
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种并行不对称空洞卷积模块①
基于YOLOv4-Tiny模型剪枝算法
基于激活-熵的分层迭代剪枝策略的CNN模型压缩
从滤波器理解卷积
抓特征解方程组
不忠诚的四个特征
基于傅里叶域卷积表示的目标跟踪算法