章佳琪,肖 建
(1.南京邮电大学 电子与光学工程学院、柔性电子(未来技术)学院,江苏 南京 210046;2.南京邮电大学 集成电路科学与工程学院,江苏 南京 210046)
随着当今社会经济和AI技术的快速发展,中国移动机器人行业迎来了爆发式增长,移动机器人也被广泛应用于工业、服务、农业、医疗等社会各领域。移动机器人通过相机等视觉传感器感知环境,使用目标检测算法识别并定位物体。目标检测算法作为移动机器人感知环境能力中的重要一环,在应用时也对其运行速度和精度提出了愈来愈高的要求。目标检测算法模型庞大,占用较多的存储资源,且计算复杂,通常运行于算力强大,计算资源丰富的设备上,而嵌入式设备存储空间有限,计算资源不足[1]。目标检测算法在嵌入式设备中部署往往存在因模型庞大导致存储空间不足、检测算法准确度不高和运行效率低下等问题。因此,适用于移动机器人的目标检测算法已成为当今机器人研究领域的一大热点。
目前,目标检测算法可以大致分为两类。一类是二阶段算法模型,如基于区域的卷积神经网络R-CNN[2]、Fast R-CNN[3]、Faster R-CNN[4]。这类二阶段算法模型首先需要获取目标候选帧,然后对候选帧进行一系列的分类和回归操作,其优点是识别精度较高。另一类是单阶段算法模型,其中YOLO系列算法是最典型的代表,其优点是识别速度快、识别精度高。虽然二阶段算法模型精度较高,但一阶段算法模型所需计算资源更少,运行速度更快,更适合部署在嵌入式设备中,因此基于YOLO改进的算法模型在嵌入式部署领域应用更为广泛。2020年,国外Adarsh等人提出了YOLOv3-tiny,该算法在YOLOv3的基础上去掉了一些特征层,只保留两个独立预测分支,在运行速度上有了较大的提升[5]。Fang Wei等人提出了Tinier-YOLO,该算法在YOLOv3-tiny基础上进一步缩小模型尺寸,并提高检测精度和实时性[6]。2021年,国内南京邮电大学的张伟等人在YOLOv3-tiny的基础上提出了DS-YOLO,该网络结构简单、计算量小,适合部署于无人机终端上[7]。2020年6月,在YOLOv4[8]算法提出的两个月后,Alexey A B等人又提出了其轻量化网络YOLOv4-tiny[9]。同年,Jiang Zicong等人在YOLOv4-tiny的基础上利用ResBlock-D模块替换CSPBlock模块,降低了计算复杂度,并利用辅助残差网络块,提升检测精度,最终提出了一种高性能的实时目标检测算法[9]。2021年,Wang Guanbo等人提出了TRC-YOLO,该算法对YOLO v4-tiny的卷积核进行修剪,通过构建CSPResNet结构增强网络特征提取能力,最终在Jetson Xavier NX上实现了每秒36.9帧的实时性能[10]。2020年,Jocher提出YOLOv5模型中的YOLOv5s,不仅识别精度高,而且有较高的实时性,但在实际移动机器人应用场景中,嵌入式设备的计算资源仍不足。
为了更好地实现移动机器人平台下的实时目标检测,根据YOLOv5在嵌入式设备部署的不足[11],该文提出针对性的改进方法:一方面针对YOLOv5s的backbone网络比较复杂的问题,重构其backbone网络,并引入深度可分离卷积,这种卷积相较于普通卷积计算量更小,能降低模型复杂度,提高网络实时性,在引入深度可分离卷积后不可避免地会产生大量信息损失,通过在backbone网络中引入残差结构还原损失的信息,提升该轻量化后网络的精度;另一方面以YOLOv5l作为教师网络,YOLOv5s作为助教网络指导轻量化后的DID-YOLO网络训练,因backbone网络被重构,因此特征信息大量流失,通过对该网络进行特征层和输出层蒸馏,提升DID-YOLO网络精度。
YOLO算法将图像划分为单元格,并在每个单元格中判断候选锚。如果目标的中心落在一个单元格里,这个单元格负责预测目标。YOLOv5是当前主流的目标检测算法,其分为YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四个模型。这四种模型的网络结构一致,但模块数量和卷积核数量依次递增,其中YOLOv5s为轻量型网络,广泛应用于嵌入式设备中,具有较高的精度和实时性能。
如图1所示,YOLOv5s网络分为三个部分:第一部分是backbone网络,负责目标的特征信息提取。它由Focus模块、BottlenCSP1模块和SPP模块组成。Focus模块将图像数据分成四部分,每部分可等效为对输入图像进行两次下采样。通过在信道维度上进行拼接和卷积的操作来最大限度地减少因对图像下采样而造成的信息损失。BottlenCSP1结构将CSPNet[12]结构添加到残差结构中,并将梯度变化映射到特征图中,该结构可以减少卷积神经网络的整体计算量,降低网络复杂程度,而且可以有效地增强卷积神经网络的学习能力。SPP模块首先通过固定池化操作解决了输入图片尺寸不一致问题,并最终获得相同尺寸的输出;其次通过空间金字塔池化操作增加了网络的整体接受域,实现多重感受野融合。第二部分是Neck 网络-PANet[13],主要是对骨干网络提取的特征信息进行增强。第三部分是head网络,采用与YOLOv3相同的检测结构,三个检测头分别对原始图像进行了8次、16次和32次采样。
图1 YOLOv5s网络结构示意图
该文搭建的移动机器人主控为Jetson AGX Xavier,其结合相机组成目标检测算法验证的嵌入式平台。Jetson AGX Xavier作为全球首款专为自主机器打造的计算机,其板载的Xavier Soc具有一个Carmel架构8核64位的CPU和Volta架构512 CUDA处理器GPU,能以低至10W的功耗提供32 TOPs的强大算力,作为Al边缘计算平台,利用英伟达丰富的Al工具链和完备的生态链资源,使得开发者能够在较短的时间内完成神经网络模型的训练和部署。
2.1.1 深度可分离卷积
卷积是人工神经网络中一个非常重要的数学运算。卷积神经网络(CNN)可以在图像帧的帮助下学习特征和分类数据。深度可分离卷积是CNN常用卷积中的一种,与标准卷积相比,它们需要调整的参数更少,且深度可分离卷积计算量较少,这使得它更适合应用于移动视觉类型的CNN中,其中谷歌提出的MobileNet[14]、Xception[15]等网络为深度可分离卷积在移动视觉领域的典型应用。
深度可分离卷积可分为两个过程:逐通道卷积和逐点卷积。逐通道卷积:一张彩色图片可分为r、g、b三个通道,每个通道都与一个卷积核进行卷积可得到与输入图片通道数一致 的特征图,如图2所示。逐点卷积:采用的是1×1卷积的方式,将未卷积前的图在深度上进行加权组合,生成特征图,如图3所示。
图2 逐通道卷积示意图
图3 逐点卷积示意图
由图2和图3可知,当卷积核大小为3时,则生成m个特征图所需的参数量pn1如公式(1)所示。普通卷积生成m个特征图所需的参数量pn2如公式(2)所示。由公式(1)和公式(2)可知,当m>1时,生成同数量的特征图深度可分离卷积所需参数量小于普通卷积所需参数量,因此该文以深度可分离卷积重构YOLOv5s的backbone网络,降低网络复杂度。
pn1=3*3*3+1*1*3*m=27+3m
(1)
pn2=3*3*3*m=27m
(2)
2.1.2 倒置残差结构
在引入深度可分离卷积后,网络复杂程度下降,但随着backbone网络模型缩小不可避免会产生大量特征信息损失。该文通过在backbone网络中引入倒置残差结构还原损失的信息,提升该轻量化后网络的精度。ResNet[16]中提出的残差结构由1*1卷积、3*3卷积和1*1卷积顺序组成,实现网络先降维后升维的操作。倒置残差结构则采用了3*3的深度可分离卷积并将网络先升维后降维,将高维特征映射到低维中,通过提升通道数,获得更多的特征信息。当步长为1时,如图4(a)所示。首先通过1*1的卷积升维,扩张通道数为原来的6倍,然后使用3*3的深度可分离卷积进行特征信息提取,再通过1*1的卷积降维至原通道数量。当步长为2时,如图4(b)所示。由于卷积的步长不一致倒置输入输出的尺寸存在差异,因此不将输入输出进行拼接融合。
图4 倒置残差结构示意图
2.1.3 DID-YOLO算法的建立
针对目标检测算法在嵌入式设备中运行效率低、占用存储资源过多的问题,该文使用深度可分离卷积和倒置残差模块对YOLOv5s的backbone网络进行重构,降低模型复杂度和计算量,减少模型占用空间,提高其部署在嵌入式设备时的检测速度。提出的基于YOLOv5s改进后适用于嵌入式设备的轻量型目标检测算法DID-YOLO网络结构如图5所示。图5中虚线框中是轻量化重构后的backbone网络,负责提取图像中的特征信息。其中DBL为卷积+BatchNormalization+relu6,PDP为stride=2的倒置残差结构块,IRLB为stride=1的倒置残差结构块,resn即为n个res结构相连接。DBL、PDP和IRLB作为基础模块构成了DID-YOLO的backbone网络,使用深度可分离卷积和倒置残差模块对YOLOv5s的backbone网络进行重构后,以VOC为数据集进行训练,计算量为4.65 G,最终生成的模型参数量为3.63 M。
图5 DID-YOLO网络框架结构示意图
DID-YOLO算法的整体流程如图6所示。该网络模型的总体结构由输入端处理模块、backbone网络、neck网络以及输出端处理模块组成。在输入端处理模块中,YOLOv5引入了Mosaic数据增强的方法,选用四张图片以随机缩放、随机裁剪、随机排布的方式将图片拼接成训练图片。Mosaic数据增强可以丰富数据集,在拼接过程中图片会随机缩放,拼接完成后数据集中将增加大量小目标数据,提升小目标的检测效果和网络的鲁棒性。在训练时,针对不同数据集初始锚框值处理的问题,输入端处理模块中引入自适应锚框计算,每次训练时可以自适应计算出训练集的最佳初始锚框值。在推理中,针对不同尺寸的输入图片,DID-YOLO在输入端处理模块中引入了自适应图片缩放,直接在原始图像中自适应地添加最少的黑边,大大减少了推理计算量,提高了目标检测速度。
图6 DID-YOLO算法流程
DID-YOLO的backbone网络用于提取输入端处理模块处理后图像的特征信息,经过轻量化后的backbone网络解决了原网络结构复杂,参数量和计算量庞大的问题,提高了算法的运行速度。DID-YOLO的Neck网络采用PANet结构,用于处理特征图生成特征金字塔,增强模型对不同尺寸目标对象的检测精度,达到网络高精度识别不同大小和尺寸物体的目的。PANet结构为在FPN的基础上增加一个自底向上方向的增强,使得顶层特征图融合底层特征图的位置信息,从而提升对大尺寸目标物体的检测效果。
为解决预测框和真实框完全不重合时,损失函数不可求导的问题,DID-YOLO的输出端处理模块选用CIOU_Loss函数作为Bounding box的损失函数,其计算公式为:
(3)
CIOU_Loss=1-CIOU=1-(IOU-
(4)
CIOU_Loss不但考虑到了预测框和真实框重叠的面积,还引入了预测框和真实框的长宽比和两者中心点的距离。针对多目标框的筛选,YOLOv5的输出端处理模块选用nms非最大值抑制,保留检测效果最好的预测框,去除冗余的预测框。
知识蒸馏是一种常用的模型压缩方法。现有的主流知识蒸馏方法大致可分为两类。第一类知识蒸馏,使用由教师网络生成的分类软标签和真实标签来指导学生网络训练。Jimmy Ba 等人[17]首先提出了这类方法。但是,随着网络复杂程度不断加深,单纯依靠教师网络的软标签来蒸馏训练学生网络会产生信息沟壑,导致蒸馏训练对学生网络精度提升效果减弱。因此,第二类利用教师网络的特征层对学生网络进行指导的知识蒸馏方法被提出。Junho Yim等人[18]在学生网络训练中提出了一种模拟多层教师网络特征的方法。Hui Wang等人[19]提出了一种逐步蒸馏的方法,允许学生网络逐步学习教师网络中间层的特征信息。
该文在YOLOv5s基础上对其backbone网络进行轻量化后提出DID-YOLO,造成DID-YOLO大量特征层信息损失,因此提出了针对特征图和输出层的知识蒸馏,其蒸馏框架如图7所示。因backbone网络进行重构后,其输出特征图维度与原网络输出的特征图维度不一致,采用在DID-YOLO的backbone网络输出上添加Converter模块的方法,使其升维至与教师网络匹配。其中Converter模块由conv、bn和relu6组成。因此教师网络在其backbone网络输出上套接relu6函数,保证学生和教师网络的特征层的激活函数一致。该文提出的知识蒸馏结构在输出层蒸馏的基础上,对特征提取也进行了蒸馏,提升学生网络的backbone在特征提取上的表征能力,在一定程度上提高了提出的基于YOLOv5s轻量化网络的识别精度。
图7 知识蒸馏框架示意图
为了验证提出的移动机器人目标检测算法DID-YOLO的有效性,该文所有算法模型均在公共数据集Pascal VOC上完成训练,并在其验证集上验证模型的正确性。其中随机筛选16 552张图片作为训练集用以网络模型训练,4 953张图片作为验证集用以验证网络模型的正确性。提出的移动机器人目标检测算法训练和验证的环境为ubuntu18.04操作系统,硬件配置为Intel®Xeon®Silver4210 CPU@2.20 GHz和TeslaP100-PCI-E GPU,内存为12 GB,总显存为16 GB,该算法在cuda10.1,Pytorch1.7.0下完成模型的搭建和网络训练。
在比较模型性能时,以平均准确率(mAP@0.5)、模型尺寸(Model Size)、检测速度(fps)衡量算法的精度、复杂程度和实时性能。其中mAP@0.5是指均交比阈值为0.5时,所有类别的平均AP,其计算公式为:
(5)
mAP@0.5衡量模型精确率随召回率变化的趋势,是目标检测算法使用VOC数据集测试精度最常用的评价指标。其中检测速度是由目标检测算法处理每张相机实时捕捉的图片所用的平均时间,是评价算法运行速度的常用评价指标。
提出的移动机器人目标检测算法DID-YOLO在以不同网络为教师网络指导训练后的结果如表1所示。轻量化网络DID-YOLO的mAP@0.5为68.05%,以YOLOv5l为教师网络进行知识蒸馏后,DID-YOLO算法的mAP@0.5提升至72.24%,提升了6.16%;以YOLOv5s为教师网络进行知识蒸馏后,DID-YOLO算法mAP@0.5提升至72.49%,提升了6.52%;以YOLOv5l为教师网络、YOLOv5s为助教网络进行知识蒸馏后,DID-YOLO算法mAP@0.5提升至73.83%,提升了8.49%。
表1 知识蒸馏结果对比
由表1可知,DID-YOLO算法的mAP@0.5值最高达到73.83%。相较于以YOLOv5l为教师网络的知识蒸馏训练,引入YOLOv5s作为助教网络辅助蒸馏可以得到最高的mAP@0.5值。YOLOv5l具有最高的精度,但其网络模型在结构和复杂度上与学生网络存在较大的差异,因此引入YOLOv5s作为助教网络可以提高知识蒸馏能力,辅助指导学生网络训练。
为验证提出的移动机器人目标检测算法DID-YOLO部署在嵌入式设备中的效果,在VOC数据集中测试了当前嵌入式平台使用的主流轻量化目标检测算法,包括YOLOv3-Tiny、YOLOv4-Tiny和YOLOv5s,实验结果以平均精度均值mAP@0.5、网络模型大小和在Xavier上运行的实时帧数为评价指标,对比结果如表2所示。
表2 多种检测模型结果对比
以Pascal VOC为数据集进行训练,YOLOv5s的计算量为8.39 G,生成的模型参数量为7.07 MB。经过深度可分离卷积和倒置残差模块对YOLOv5s的backbone网络进行重构后,计算量为4.65 G,最终生成的模型参数量为3.63 MB。相较于YOLOv5s,DID-YOLO网络模型参数量下降了48.65%,计算量降低了44.58%。对比实时性能,在以AGX Xavier为主控的移动机器人嵌入式平台,DID-YOLO实时运行可达到每秒31.2帧的速度,相较于29.2帧/s的YOLOv5s提升了5.41%。在检测精度上,DID-YOLO最高mAP@0.5可达73.83%,相较于YOLOv5s,下降了0.54%。经过轻量化后的DID-YOLO损失了一定程度的检测精度,但实时性能有较大的提升。
与当前移动机器人领域中主流的目标检测算法YOLOv3-Tiny和YOLOv4-Tiny相比,DID-YOLO在模型尺寸、检测准确率和速度上都有着较大的优势。由表2可知,提出的DID-YOLO的模型尺寸仅为YOLOv3-Tiny的10.4%、YOLOv4-Tiny的15.38%,其模型尺寸被压缩至3.63 MB,在嵌入式设备部署时仅需占用极小的空间资源。虽然DID-YOLO模型尺寸较小,但在公共数据集Pascal VOC上其检测准确率超过了YOLOv3-Tiny和YOLOv4-Tiny,DID-YOLO的mAP@0.5分别提高了21.05%和11.26%。在AGX Xavier上,DID-YOLO处理实时图像性能也高于两者,其检测速度达到31.2 fps,相较于YOLOv3-Tiny和YOLOv4-Tiny,其检测帧率分别提高了6.6帧和6.1帧。以上分析可得,提出的DID-YOLO与原网络YOLOv5相比牺牲了一部分的检测精度,但模型尺寸进一步压缩且实时性能得到一定程度提升,且综合模型轻量化指标、检测精度参数和实时检测性能指标与YOLOv3-Tiny和YOLOv4-Tiny相比,提出的DID-YOLO更具优越性。
提出的DID-YOLO算法,在YOLOv5s的基础上引入深度可分离卷积和倒置残差模块重构其backbone网络,减少算法复杂度,并进一步压缩模型,并通过结合特征层和输出层的知识蒸馏提高DID-YOLO目标检测的准确率。最终在Pascal VOC公共数据集上进行实验表明,DID-YOLO算法的模型尺寸压缩至3.63 MB,mAP@0.5达到73.83%,实时检测速度达到31.2 fps,该算法完全满足一个移动机器人嵌入式平台对目标检测算法的模型尺寸、检测速度和精度的要求。