1. 引言
随深度网络技术的成熟,建立在深度网络基础之上的AI (artificial intelligence)系统日渐普及,并在自然语言理解、人脸识别、目标分类、目标识别、语音识别、语义分割及风格迁移等领域得到成功应用。Google、Facebook、Amazon、百度等公司分别推出或采用Tensorflow、Pytorch、MXnet和Paddlepaddle等开源深度网络系统,及在Github和Gitee等仓库中开源各类应用源代码,推动了AI技术的研究和发展。为实现日渐复杂应用,设计和训练更深和更多参数的深度网络就成为可行的工程方案。重要的是,多达上千万或上亿参数的深度网络训练需更大算力的支持,限制了这些更“大”AI系统的普及。
针对电力线巡检、高大建筑物裂缝检测等需树莓派或Jetson NANO等算力有限的边缘设备做控制器的特殊应用场合,轻量化深度网络是在不增加硬件成本条件下可能的选择,而树莓派和Jetson等边缘设备的普及也使得部署轻量化深度网络更加容易。目前,寻求可在边缘设备上高速运行且有较高精度的轻量化深度网络也成为人工智能发展和深度学习的另一个重要发展方向。本文在轻量化网络研究基础上,研究改进Pelee网络结构及在Darknet深度框架上的实现过程,并在树莓派4B上的移植和实验方法。
2. 常用轻量化深度网络
在目标识别领域,常用的有以SSD和YOLO为代表的单阶(one-stage)算法,Fast-rcnn和Faster-RCNN系列的双阶(two-stage)算法以及R-CNN和SPPNet为代表的多阶(multi-stage)等三类算法。这些算法一般网络较深,参数较多,在边缘设备上直接运行有较大难度,部分学者开始了轻量化网络的研究。而轻量化网络有Densenet、Efficientnet、Ghostnet、MobileNet系列、Pelee、Shufflenet、Squeezenet、Thundernet、VoVnet、VarGnet及Xception等几种。其中,尤以Efficientnet、MobileNet系列和Squeezenet应用较为广泛。加拿大西安大略大学提出的Pelee网络 [1] 以可在几乎不增加计算量情况下提升特征表达能力著称,部分学者在Github仓库提供有SSD算法 [2] [3]、Pytorch框架实现 [4] 及手写字体识别cifar识别 [5] 的源代码,方便用户学习和使用。国内相关研究重点集中于交通场景目标检测 [6]、实时车辆检测 [7]、不规则场景文本识别 [8]、PCB元器件检测 [9]、图像分割 [10]、大视场多类遥感目标检测 [11] 及提高性能 [12] 等方面,在裂缝检测方面应用较少。
针对国内1600余座高大建筑物裂缝检测的巨大市场需求,并综合速度检测精度需求,确定采用Pelee轻量化深度网络并在树莓派4B上部署作为技术实现方案。
3. Pelee轻量化深度网络结构
Pelee轻量化网络可看作Densenet网络的变体及部分性能增强版本,包括如下几个组成部分。
3.1. 主干层(Stem Block)
主干层由两通道网络组成,是Pelee轻量化网络的第一部分,其目的是通过降采样和增加通道数量尽可能表达目标特征,而无须增大较多计算量。其结构如图1所示。

Figure 1. Stem block of Pelee network
图1. Pelee主干层结构
3.2. 双通道全连接(Dense)层
与Inception结构类似,采用双通道全连接层分别捕捉不同尺度的感受野信息。第一通道经一层1 × 1卷积,再经一层3 × 3卷积;第二通道则再经两层3 × 3卷积后经融合层(route)输出。其中,两通道1 × 1卷积层生成瓶颈(bottleneck),成为Pelee轻量化网络目标特征提取的核心。为进一步提高特征提取性能,在原始全连接层之前增加了一个具有滤波功能的卷积层。同时,为避免深度网络可能的过早过拟合,删除以虚线表示的前向直接传递通道,改进的双通道全连接层结构如图2所示。

Figure 2. Dual-channel of dense layer of Pelee network
图2. 双通道全连接层结构
因用于目标识别,用于物体分类的瓶颈(bottle neck)层、过渡层和采用激活后(post-activation)结构的复合函数(Composite Function)层不再介绍,感兴趣的读者请查阅Pelee官方文档 [1]。
3.3. 残差预测(Residual Prediction Block, RPB)层结构
在检测分支,使用残差网络进行预测,其结构如图3所示。

Figure 3. Residual prediction block of Pelee network
图3. 残差预测层结构
通过修改和完善目标检测网络结构,残差预测层还可以与双通道全连接层组合以提高特征提取性能。这也是残差预测层的一大特点。
4. 基于Pelee轻量化网络的目标检测算法及结构
标准Pelee轻量化网络多用于无需较高特征提取能力的物体分类,其结构简单,层数较少。在用于小裂缝目标检测时,还需要提高Pelee轻量化网络的特征提取性能并修改其输出以用于目标检测。为此,在主干层和全连接层之间增加了一个残差预测层用于特征提取。借鉴Yolov4-tiny算法兼顾效率和性能的特点,在Darknet深度框架上设计了以Pelee轻量化网络为主干的新型目标检测算法。如图4所示。

Figure 4. Sketchmap of this new algorithm
图4. 新算法结构框图
新算法有如下几个特点:1) 全连接层增加了滤波功能,去除前向直接传递通道,可在一定程度上避免可能存在的过早过拟合;2) 在标准Pelee结构基础上,增加一个残差预测层并与主干层配合以提高特征提取性能;3) 采用单Yolo输出头结构形式,输出为13 × 13,用于较小尺寸裂缝检测和输出。略做修改,即可成为双Yolo输出头结构输出形式以同时用于较小尺寸和较大尺寸裂缝检测。
Pelee轻量化网络多在Caffe和Pytorch等深度学习框架上实现。作者在Darknet深度学习框架上实现的Pelee轻量化网络结构如图5所示。
其中,主干层、全连接层和两层残差预测层均采用官方推荐的参数。但为Yolo输出头前的两层卷积层均采用256个滤波(filter)参数形式以提高小裂缝检测性能,而未能全部采用轻量化设计要求。
5. 训练及部署
作者从https://github.com/下载AlexeyAB版本的Darknet深度网络源代码,修改image.c源文件代码以输出预测框中心坐标、置信度、类别统计、各类别物体数量及检测物体总计数等,编译生成GPU版本的Darknet可执行文件,以用于网络训练和测试。训练环境:64位Ubuntu16.04 LTS,MX150显卡,8G RAM,i5-8250 CPU,CUDA 10.1,cuDDN 7.3。
裂缝数据集来源于网络图片和在校内建筑物上拍摄的各类裂缝图片。将裂缝图片划分为大裂缝、小裂缝、斑驳裂缝和表面脱落等四种类型,使用Imagemagick软件截取为416 × 416尺寸的RGB图片,最终形成600张的裂缝数据集。使用官配python文件按7:2:1比例生成训练集、测试集和验证集,严格按照Pascal VOC格式和目录组织。
训练较为简单。在作者工作电脑上,采用Cli行和无预权重文件的训练命令为:
./darknet detector train Cracks/cfg/voc.data Cracks/cfg/pelee.cfg
最终生成若干个形如pelee_1000.weights、pelee_2000.weights及pelee_last.weights等权重文件,大小为6.61 M。训练过程中损失(Loss)图(部分)如图6所示。调整和优化网络参数后,Loss最终收敛在0.5附近,使用./darknet map命令得到的Pelee网络mAP为52.52%。

Figure 6. Loss map output during training (partial)
图6. 训练过程中的损失图(部分)
把这些.cfg网络配置文件和训练得到的.weights权重文件拷贝到树莓派4B SD卡适当位置,即完成Pelee网络在树莓派4B上的部署。经测试,Pelee网络总计算量为3.842 BFLOPS。
6. 测试与实验
使用如图5所示的Pelee轻量化网络和Yolov4-tiny网络在经NNpack软件包加速的树莓派4 B上进行了裂缝检测实验。其中,Yolov4-tiny网络mAP为60.18%,权重文件大小为23.5 M,总计算量为6.787 BFLOPS。从权重文件和总计算量可见Pelee网络轻量化效果,若去除增加的残差预测层将进一步降低总计算量和减小权重文件。以推理速度(/ms)、检出数量、误检数量(含漏检数量、重复检测数量和误检数量)及最高置信度(%)为例,其对比如表1所示。

Table 1. Comparison of detection results of Pelee network and Yolov4-tiny network
表1. Pelee网络与Yolov4-tiny网络检测结果对比表
在测试集中随机选择对应四种分类的裂缝图片文件,实际检测结果如图7所示。
由此可见,除以总时间计的推理速度略慢(<3%)和置信度略低外,Pelee网络与Yolov4-tiny网络并无明显差别。但因权重文件仅为Yolov4-tiny网络的28.13%,增加一个残差预测层后总计算量为Yolov4-tiny网络的56.61%,Pelee轻量化网络的实际检测效果完全可以接受。并且,二者的锚框位置也有所不同。更多测试表明,相对较而言Pelee对于小裂缝检测和定位更为准确,Yolov4-tiny对于斑驳裂缝和表面脱落检测和定位更为准确。
Pelee轻量化网络运行速度理论上应快于Yolov4-tiny网络。因其内部存在大量size = 1和stride = 1的卷积计算用于特征提取和特征表达,这是降低其运算速度的一大原因。同时,因其深度仅为35层(Yolov4-tiny网络有38层),特征提取仍稍欠充分,故其置信度相对低,损失(Loss)函数仍较大。其特征表达环节也较浅,数据集较少及训练参数未完全优化等原因,其效果还有较大改进空间。
7. 结语
在改进双通道全连接层结构上,设计了以Pelee为主干网络,以主干层、残差预测层、全连接层、残差预测层及单Yolo输出头的新型轻量化目标检测网络,并在Darknet深度学习框架上设计实现。移植到树莓派4B上进行了实际测试实验,Pelee轻量化网络以类似深度、28.13%的权重文件、56.61%的总计算量获得与Yolov4-tiny网络相当的检测结果,其置信度和mAP虽较低,但尚存较大改进空间。进一步提高推理速度和检测精度,及如何与机器人运动控制系统融合是下一步研究目标。
基金项目
国家自然科学基金项目(51875335)。