胡 潇,潘申富
(中国电子科技集团公司 第54研究所,石家庄 050081)
近年来,多旋翼无人机因其行动灵活、操作门槛低、设备配置可塑性高,主动控制能力强[1]等优点在多个领域中得到了广泛的应用。在边境、城市巡逻中[2],无人机可以提供不同视角的现场图像,便于工作人员掌握现场情况。随着人工智能的发展,无人机更加智能自主[3],将目标检测技术应用于无人机,巡逻人员可以更快速地感知并捕获现场关键信息,提高巡逻的效率。传统方案将检测算法部署在远程服务器中需要高清稳定的图像传输,对无线传输信道的要求高。在无线传输信道受限情况下,将检测算法部署在机载侧可以实现对连续采集图像进行目标检测,并根据信道情况向地面工作人员传输图像或文字等类型检测结果,减轻检测任务对通信条件的依赖,提高巡逻效率。由于小型机载终端计算资源有限,需要对现有检测算法进行针对性的优化训练,设计轻量化的无人机航拍目标检测算法。
目前基于深度学习的目标检测算法多基于卷积神经网络,在主流数据集上有很好表现。Sevo和Avramovic[4]证明卷积神经网络可以有效地结合到航空图像的目标检测算法中。一般来说,基于CNN的目标检测算法分为单阶段和双阶段算法。R-CNN[5]和Fast R-CNN[6]是基于区域特征的双阶段算法,双阶段算法在选择候选区域时耗时长、候选帧之间存在大量重叠、提取的特征冗余。单阶段目标检测算法包括SSD[7]、YOLO[8]和RetinaNet[9]等,单阶段算法速度快,更能得到航拍任务的青睐。Zhu[10]等人在YOLOv5算法基础上增加了一个用于小微物体检测的预测头,提出TPH-YOLOXv5算法,提高了检测精度。许多学者通过增加多种模块提升网络的检测性能,但复杂的模型算法需要很大的内存和计算开销,无法应用于机载终端。
随着嵌入式目标检测成为研究热点,部分学者通过模型剪枝量化、替换轻量化模块等方法进行轻量化网络的设计,解决模型复杂度高无法运行在边缘端的问题。崔令飞[11]等人将SSD算法中的特征提取网络替换为轻量化的MobileNet网络进行模型优化,构建了轻量化目标检测算法。黄海生[12]等人简化了YOLOv5网络,提出了一种轻量化检测网络YOLOv5-tiny,提升了检测速度。但小型机载终端计算资源更加有限,需要针对巡逻应用进一步设计轻量化算法。
针对巡逻应用,论文首先选用单阶段检测算法中速度更快的YOLOX算法,在该算法基础上使用轻量化Mobilenetv2[13]网络替换原有CSPDarknet骨干网络,降低参数量;其次训练过程中为了更好的平衡正负、难易样本,使用Focal Loss损失函数替代二元交叉熵置信度损失函数;然后将定位损失改为CIOU损失函数,改善网络轻量化后检测精度的下降问题,得到改进后的轻量化目标检测算法。最后将算法移植到Jetson Xavier NX机载终端,实现目标检测应用。
YOLOX[14]是2020年旷视基于YOLOv3提出的高性能单阶段检测器,目前已经成为工业界实用算法之一。依照模型缩放的规则YOLOX有YOLOX-s、YOLOX-m、YOLOX-l和YOLOX-x四种不同参数量的模型。其中YOLOX-s模型参数量较少,且不像YOLOX-Nano等模型因过小的尺寸损失了检测精度,达到了检测速度和检测精度的平衡,因此采用YOLOX-s作为改进对象。其网络主要包括输入端、特征提取网络Backbone、Neck特征融合层和Head预测头,网络结构如图1所示。
图1 YOLOX网络结构
1)图像输入端。训练前对输入的训练数据集进行数据增强,丰富检测数据集。实际检测时输入端向网络输入一张采集的航拍图像。
2)骨干网络Backbone。YOLOX-s沿用YOLOv5采用的CSPDarknet网络进行特征提取,首先使用Fcous结构对输入图像切片堆叠,展开特征信息。然后通过conv(卷积)+BN(归一化)+SiLu激活函数的CBL模块和融合残差结构的CSP模块进行特征提取,在最后一层经过SPP (Spatial Pyramid Pooling)结构改善感受野捕捉特征,最终输出三个不同尺寸的有效特征图。
3)特征融合网络Neck。对骨干网络输出不同尺度的三个特征图实现特征融合。采用FPN(feature pyramid networks)与PAN(pyramid attention network)级联结构,FPN对特征图进行上采样向浅层传递深层特征信息,PAN下采样实现深层信息和浅层信息的特征融合。
4)预测层。针对Neck层获得的三个加强特征图预测目标位置、类别和置信度。传统的耦合检测头使用相同的特征图通过1×1的卷积对被检测对象进行分类定位,无法获得良好的检测效果[15]。YOLOX的预测层Head采用解耦结构,先使用一个1×1的卷积对特征融合层的输出进行降维,然后在分类和回归两个分支中各使用两个3×3的卷积实现位置类别和置信度的分别预测,结果更有说服力。
同时,YOLOX采用了无锚框的方法并引入SimOTA方法动态分配正负样本,减少了聚类超参数对于预测结果的影响,在减少计算量基础上提高模型准确率,与部署在巡逻无人机机载端中需要考虑网络推理速度快的要求相符合,因此以YOLOX-s为基础算法进行轻量化改进。
然而,YOLOX算法虽能在实验室的高性能GPU中可以得到优秀的检测效果,但在计算资源有限的无人机机载侧的边缘终端部署的目标检测算法,需要进一步轻量化,降低参数规模。
针对巡逻航拍场景,为降低模型参数保持检测精度,在YOLOX算法基础上,分别对骨干网络和损失函数进行了改进,对训练过程进行微调,设计了轻量化改进算法,网络结构如图2所示。
图2 改进后的网络结构
在改进的网络结构中,为获取更多特征,将网络输入的图像大小均缩放为960×960大小。改进后将YOLOX的特征提取网络替换为Mobilenetv2轻量化网络,由于Mobilenetv2中最后的池化层和卷积层与YOLOX的特征融合层PAFPN功能冗余,为更符合轻量化设计目标将其去除。利用新的骨干网络对航拍图像特征进行提取,输出120×120×32,60×60×96,30×30×320三种特征图送入PAFPN模块,经过Neck层特征传递融合输出三个通道数均为96的特征图,分别送入各自不共享权重的三个预测头Head中。另外,为提升轻量化后的检测精度,在模型训练过程中将置信度损失替换为Focal Loss,定位损失设计为CIOU Loss,得到预测框的目标类别、目标边框位置和置信度信息。最后将三种大小特征图的预测框信息进行合并,经过NMS非极大值抑制得到改进后网络的最终预测结果。下文详细介绍了具体的改进设计。
与VGG-16和Mobilenetv1骨干网络相比,Mobilenetv2网络具有更小的体积和计算量,但具有相当的准确率和更快的速度。因此,在对YOLOX的轻量化改进中将骨干网络替换为Mobilenetv2进行图像特征提取。
将输入图像放缩到960×960大小。表1为具体的网络结构,t为Bottleneck结构中的通道扩展因子,s代表步长,c是输出通道数,n是操作重复次数。
表1 Mobilenetv2网络结构
Mobilenetv2网络中最主要的结构是轻量级的Bottleneck,与YOLOX-s网络的CSP模块中的Bottleneck结构不同,由于Mobilenetv2网络中使用了降低参数量和计算量的深度可分离卷积,为了不丢失特征,在Bottleneck中设计了倒残差线性瓶颈结构,该结构是网络的核心。
2.2.1 深度可分离卷积
Mobilenetv2的Bottleneck主要应用了深度可分离卷积,卷积是卷积神经网络中算法的核心,深度可分离卷积是CNN的一种,与标准卷积相比需要调整的参数更少,计算量更小,因此采用该操作可以实现网络的轻量化。深度可分离卷积2016年首次在谷歌的Xception[16]网络结构中提出,Mobilenetv2的Bottleneck模块继承并使用了该结构。它将传统标准卷积拆分为一层深度卷积和一层逐点卷积,利用深度卷积分别对特征图各个通道做卷积操作,一个卷积核对应负责一个通道,深度卷积输出的特征图各通道再利用逐点卷积进行关联。最终得到的输出特征图效果与标准卷积相同,但该操作极大的降低了计算量。
下文给出了两种卷积操作的计算量对比,具体方法和卷积操作对比如图3和图4所示。
图3 深度可分离卷积
图4 标准卷积与深度可分离卷积对比
设Sk×Sk×M为卷积核的大小,N为输出特征图的个数,SF为输出特征图的通道数,分别计算两种卷积的参数量和计算量得到:
标准卷积的参数量:
Sk×Sk×M×N
(1)
标准卷积的计算量:
Sk×Sk×M×N×SF×SF
(2)
深度可分离卷积的参数量:
Sk×Sk×M+1×1×M×N
(3)
深度可分离卷积的计算量:
Sk×Sk×M×SF×SF+M×N×SF×SF
(4)
通过计算得到,深度可分离卷积的计算量和参数量是标准卷积的:
(5)
通过详细计算可以证明该设计极大的降低了卷积的参数量和计算量,由该结构组成的网络更加轻量化,对硬件计算资源的要求更低。
2.2.2 线性瓶颈残差块
Mobilenetv2中Bottleneck是线性瓶颈残差结构,基于深度可分离卷积设计,分为线性瓶颈结构和残差结构。残差结构早已在ResNet[17]中证明了对网络检测精度有提高作用,在YOLOX-s网络中的CSP模块中也有应用。
而Mobilenetv2中对原始残差结构在卷积操作和维度操作上进行了改进,设计了倒残差结构,提升轻量化后网络的检测精度。传统残差结构先通过1*1卷积降维、3*3卷积提取特征后再通过1*1卷积升维。Mobilenetv2将残差结构中的卷积操作替换为深度可分离卷积,降低残差网络的计算量。其次由于深度可分离卷积提取的特征被限制在输入特征的维度中,若在此基础上使用ResNet的残差块则会在输入特征图的基础上先降维,先压缩再进行特征提取会丢失到大量的特征。因此,网络设计为先通过1*1逐点卷积扩张特征图通道数,在更高维的特征图中通过3*3卷积提取特征,然后通过1*1卷积降维,同时将输入特征与经过逆向残差结构输出的特征图相加,形成最终的输出特征。
Bottleneck在倒残差结构中加入线性操作。由于传统残差结构中采用统一的Relu激活函数,在高维空间中Relu有效增加非线性能力,但在深度可分离卷积的低维空间中若输入特征为负数则该特征被清零破坏造成信息丢失,因此在逐点卷积后将Relu改为Linear激活函数减少信息丢失对网络进行优化。
实际网络设计中表1的所有Bottleneck中,若步长为1,输入输出特征图相同则使用残差结构。若步长设计为2时输入输出特征图不同则不使用该残差结构。该设计很大程度上丰富了特征数量,同时保留输入特征的信息,避免出现梯度消息和梯度爆炸的问题。具体Bottleneck模块的结构如图5所示。
图5 MobilenetV2中Bottleneck模块
在骨干网络替换时,将Mobilenetv2中最后的池化层和卷积层去除用以保证不与YOLOX的Neck层功能重复,将其作为Backbone加入检测算法中,使模型更加轻量化。
训练过程中,模型损失的计算是将网络预测结果与真实结果进行对比,计算梯度回传从而不断调整模型的网络参数进行优化,模型训练的效果与损失函数的设计强相关。在训练过程中,所有特征点生成的预测框被SimOTA策略动态分配为正样本和负样本,网络通过正样本学习目标特征,通过负样本学习背景特征。
在YOLOX的解耦头中,总共有三个小的预测分支,分别为得到预测框类别的分支,判断预测框是目标或背景的分支以及对预测框的坐标信息(x,y,w,h)进行回归的分支。因此网络的损失计算分为三部分,分别是分类损失、置信度损失和定位损失。定位损失和分类损失仅针对正样本进行计算,置信度损失包含正负所有样本。计算公式如下:
L=Lcls+λLreg+Lobj
(6)
定位部分Lreg采用IoU[18]交并比作为边界框预测的损失函数,分类Lcls和置信度Lobj均采用二元交叉熵损失函数。
2.3.1 CIOU Loss
在训练过程中,已知所有目标的真实框和其对应的特征点,网络可以针对该特征点得到一个预测框,计算定位损失回传使预测框向真实框方向移动。YOLOX预测头的定位损失采用交并比IOU,计算预测框与真实框之间的重叠面积。IOU损失函数计算公式如下:
(7)
LIOU=1-IOU
(8)
但是当两个框不相交或者互相包含时,IOU并不能正确反映预测框与真实框之间的距离和位置关系,IOU值相同时两个框的重合效果也不同,无法快速准确的确认定位框的优化方向。而CIOU损失函数在惩罚项中加入了预测与真值框两个框之间的重叠率、框中心点间距离和目标框的长宽比,在不断训练中使预测框更接近真实框,并且加快网络的收敛速度和回归精度,因此将定位损失替换为CIOU。CIOU计算定义如下:
(9)
(10)
(11)
其中:α为权重函数,v为真实框和预测框长宽比一致性函数。b和bgt为预测框与真实框的中心点,wgt、w、hgt、h分别为真实框与预测框的宽和高。ρ为两中心点之间的欧氏距离。
2.3.2 Focal Loss
YOLOX解耦头中判断预测框中是否存在目标的置信度损失为二元交叉熵损失,其计算定义如下:
(12)
式中,yi为预测框的标签值,p(yi)为边界框属于y标签的概率。
在YOLOX中每个真实目标对应可变K值个正样本预测框,其余特征点生成的预测框均为负样本,而图像中的目标数量相对所有待预测特征点是少数,因此负样本远多于正样本,导致置信度损失计算时出现正负不平衡问题。同时在训练中还存在对一些样本预测置信度值较低的难分样本,这些样本对模型训练精度的贡献更大,YOLOX中仅使用二元交叉熵损失无法对难易样本进行平衡。因此加入Focal Loss损失函数,同时平衡正负和难易样本,计算公式如下:
(13)
在该损失函数中,加入了参数αi,通过设置αi的值控制正负样本对总损失的权重。引入了调制参数γ解决难易分类样本不平衡的问题,通过减少损失中易分类样本权重,促使模型对难分类的样本在训练中更关注。当模型预测样本概率较大时,(1-pi)γ趋近于0,降低其损失值,当预测概率较小样本难度较大时,(1-pi)γ趋近于1,提高该样本对回传梯度的贡献。
通过对损失函数的改进增加了模型检测的性能,虽然一定程度会上导致计算速度下降,增加模型的训练时间,但损失函数计算量的小幅度增加并不会对检测的推理应用速度产生影响,符合轻量化设计目标。
巡逻航拍目标检测任务的完成包括训练阶段和移植部署应用阶段。训练阶段在PC端将大量标注好的数据投入到改进的目标检测模型中进行训练,通过计算网络预测输出和真值之间的损失值进行梯度回传更新网络参数完成训练,得到迭代训练后的检测网络模型。部署阶段是将上述改进后的模型训练后加速优化移植到机载端,最终在机载端调用机载摄像头完成目标检测。
由于机载端推理并不需要网络的反向传播,为解决机载端的算力受限问题,部署阶段利用TensorRT对已训练好的改进后YOLOX模型优化加速,部署在Jetson Xavier NX上。TensorRT[19]是一个基于深度学习前向传播架构的高性能推理优化器,通过去除无用层、将卷积层、BN层和激活层合并为CBR层等操作对网络结构进行重构,加快模型在边缘端的推理速度。
详细的部署过程如图6。首先在机载端配置好航拍检测所依赖的环境,将PC端利用Pytorch框架训练生成的pth格式模型转换为onnx中间格式模型,然后利用TensorRT加载解析onnx模型优化为Engine格式模型,最后通过加载Engine模型完成对机载摄像头获取图像的检测推理。
图6 模型部署步骤
VisDrone2019-DET[20]是一个在中国不同城市不同场景拍摄的无人机航拍图像数据集,共有不同地点、不同高度图像10 209张,其中训练集、验证集和测试集分别为6 471张、548张和3 190张。图像大小囊括现有无人机航拍器的拍摄分辨率,场景涉及了雨天、雾天、夜晚等不同的天气状况和光照条件,还包含目标遮挡和视角变化等多种挑战性的情况,可使训练出的模型泛化性能更强。数据集共标注了人、汽车、行人、面包车、公共汽车、卡车、摩托车、自行车、遮阳篷三轮车和三轮车十类目标,满足巡逻任务对车辆和行人分布情况的感知应用。
实验选取该数据集作为算法训练和测试的数据集。在该数据集基础上为了提高训练出模型的鲁棒性,训练过程中采用Mosaic[21]和MixUp[22]数据增强策略进行随机抽取缩放旋转拼接,丰富现有数据集增加训练样本。
实验算法的训练和测试均采用显存为12 GB的GPU型号NVIDIA GeForce RTX 3060的环境完成。实验系统版本为Ubuntu20.04,内核为Linux,运行环境基于开源深度学习框架PyTorch1.13,采用CUDA11.6加速计算,实验代码由python3.8编写,YOLOX模型的训练基于官方提出的YOLOX-s算法,改进后的算法基于MMdetection框架完成。
由于VisDrone2019-DET数据集以小目标为主,因此在训练硬件性能允许的情况下,设置图像的输入分辨率大小为960×960。设置网络最多训练轮次为300次。在训练过程中,设置初始学习率为0.001 25,使用随机梯度下降(SGD)方法,采用带预热策略的余弦学习率调度,权重衰减为0.000 5,SGD动量设为0.9。在训练的最后15轮关闭数据增强操作,避免训练出的模型脱离实际的巡逻目标检测应用。将训练好的网络模型作为各算法最终模型进行检测测试。
实验采用的机载计算边缘端型号为Nvidia Jetson Xavier NX,训练好的算法模型最终部署到该平台上用于实际应用推理。算法运行环境基于边缘端的Jetpack5.1,由cuda 11.4、python3.8、pytorch2.0和tensorRT8.5搭建的深度学习框架实现算法目标推理检测。
4.3.1 模型评价指标
在目标检测任务中,模型的评估指标包括平均精度AP(average precision)、参数量、计算量即浮点运算次数GFlops(giga floating-point operations)和单张图像的推理速度等,AP值与精确率Precision和召回率Recall有关。mAP是模型检测所有类别的平均精度。
(16)
(17)
(18)
其中:TP表示模型正确预测的正样本个数。FP表示算法模型将负样本错误预测为正样本个数。FN表示模型将正样本预测为负样本的个数。为了证明改进算法的有效性,进行了消融实验。
4.3.2 消融实验
为了评估改进后算法的检测效果,分别设计了加入不同模块后改进算法的消融实验,在PC端VisDrone2019-DET测试集上对训练好的模型进行测试推理评估,测试环境为模型训练时使用的运行环境。选取IOU阈值为0.5分别计算各类别和模型的mAP值,模型对各类别检测情况如表2所示。
表2 改进前后模型在十类目标上的mAP
在测试集上对各类别的检测结果表明,将特征提取网络替换为Mobilenetv2轻量化网络,替换后模型的mAP降低了0.2%。在加入Focal Loss损失函数和CIOU Loss损失函数进行训练后,模型mAP增长了0.3%和0.4%,与YOLOX算法的检测精度相当,改进后的算法提高了人、自行车等小型目标的检测精度。下面分别计算每个训练好模型的参数量、计算量和PC端单张图像推理时间,各算法的模型性能如表3所示。
表3 各算法模型性能
由实验结果可知,将YOLOX算法的骨干网络换为Mobilenetv2后,网络模型参数量由8.94 M降低为3.914 M,降低了56.2%。计算量由26.78 G FLOPS降低为12.733 G FLOPS,单张图片的推理时间降低了41.4%,后续损失函数的改进对参数量和计算量并无明显影响。与基准算法YOLOX相比改进后的算法在保持检测精度的情况下大大提升了检测速度。最后将改进的Mobilenetv2-YOLOX-Focal Loss-CIOU算法移植到Nvidia Jetson Xavier NX巡逻无人机机载边缘端中运行测试,推理速度达到22 FPS,符合应用要求。
4.3.3 实验结果
将航拍图像输入改进后的网络上进行检测推理,得到算法检测到的目标可视化结果。可以看出算法在(a)、(b)、(c)、(d)四幅图像所示的密集、稀疏等不同场景、傍晚、黑夜等不同光照条件和模糊、旋转等多种图像中都表现出不错的效果,检测结果如图7所示。
图7 改进后算法的检测效果
为更好的验证部署后的算法在实际巡逻中的应用效果,采用DJI M300 RTK无人机拍摄了国内某城市的巡逻图像,将其送入部署在Jetson Xavier NX机载端的模型中进行检测推理,各关注目标均被明显标出,得到实际目标检测效果如图8所示。
图8 部署算法巡逻应用情况
通过对无线传输信道受限情况下城市巡逻中无人机航拍目标检测的轻量化技术进行研究,提出了改进的YOLOX轻量化目标检测算法,并在机载边缘端进行了实验验证。提出的算法在YOLOX基础上采用Mobilenetv2特征提取网络,降低了网络的参数量和计算量;其次将置信度损失函数换为Focal Loss损失函数,更好的平衡正负样本和难易样本;然后对定位损失进行改进,在IOU交并比基础上加入目标框长宽比惩罚项,将其替换为CIOU损失函数,提升网络的回归精度。通过改进前后模型参数、运行速度和精度对比实验,证明设计的轻量化的航拍目标检测网络在同等检测精度下模型更小、检测速度更快,更适合部署在机载边缘终端。为验证算法的实际应用性能,将轻量化模型移植到部署在小型无人机上的Jetson Xavier NX中进行测试,检测速度达到22FPS,满足巡逻任务的应用需求,对机载目标检测算法的轻量化和工程实现有参考意义。