基于Attention-YOLOv3的锈蚀区域检测与识别
2020-12-04吴之昊熊卫华任嘉锋
吴之昊,熊卫华*,任嘉锋,姜 明
(1.浙江理工大学 机械与自动控制学院,浙江 杭州 310018; 2.杭州电子科技大学 计算机学院,浙江 杭州 310018)
0 引 言
电力设备锈蚀会导致电力变压器、输电线路发生故障,甚至会影响到电力系统的安全运行。目前的锈蚀检测方法往往采用人工巡检的方式,需要耗费大量的人力物力,检测效果也不理想。为了增加电力设备锈蚀检测的效率,利用广泛架设的摄像头和机器视觉技术的检测方法已经成为了目前的主要发展方向,宋伟[1]、Liao[2]、张洪才[3]等根据锈蚀区域的颜色特征在RGB、HSI等不同的颜色空间中进行锈蚀检测,卢树杰等[4]根据单目视差原理改进了检测算法,降低了误检测概率。此外,Chang[5]采用了傅里叶变换、戴玉静等[6]添加了纹理特征对锈蚀区域进行识别检测,取得了较好的检测效果。
由于电力设备一般架设在室外,受环境影响较大,因此基于传统图像处理的检测算法具有一定的局限性。而逐渐发展基于深度学习的目标检测方法可以有效地避免这个问题。Luca Petricca等[7]利用卷积神经网络对锈蚀图像进行分类,李辉等[8]结合传统图像处理与深度学习,提高了检测的准确率。王达磊[9]、周自强[10]等则采用了深度学习的方法对锈蚀区域进行了分割和识别,有效地提取出了锈蚀区域。
目前电力设备的锈蚀区域检测存在目标样本少,实时性和可靠性要求高等特点,一般的通用目标检测算法不能很好地满足需求。因此该文基于目前表现最佳的YOLOv3算法,采用深度可分离卷积对模型进行压缩,并结合空间-维度双注意力机制提出一种Attention-YOLOv3检测方法,同时在构建的锈蚀检测数据集上进行训练,所获得的模型能有效地对锈蚀区域进行检测和识别。
1 理论基础
1.1 YOLOv3目标检测算法
目标检测算法分为二阶段算法(two-stage)和一阶段算法(one-stage),其中YOLO(you only look once)系列是一阶段算法中非常有代表性的算法,采用了在同一个网络中同时进行分类与回归的方式,相比较以R-CNN[11]系列为代表的二阶段算法虽然损失了部分精度,但大幅度缩减了检测时间。YOLOv3算法[12]在v1和v2的基础上增加了类似FPN[13]的多尺度检测,增加了其在小目标检测上的能力。同时YOLOv3针对不同的数据集,利用K-means对训练集中的所有目标框进行聚类来得到候选框。所以YOLOv3算法可以很好地适应锈蚀目标大小、形状多样的特点,也可以满足电力设备检查的实时性需求。图1所示为标准YOLOv3的算法结构。
图1 标准YOLOv3的算法结构
1.2 注意力模型(attention model)
注意力模型来源于人眼的选择性注意机制,可以从大量信息中筛选出具有较高价值的主要信息,自从注意力模型最初被应用于循环神经网络(RNN)之后,该技术就被广泛地应用于图像处理、语音识别等多个深度学习领域。注意力模型是通过训练一个掩码层,通过掩码对该注意力域内的信息进行加权,利用分配不同的权重来使特征提取器忽略无效信息而关注有效信息。Hu等[14]在SENet(squeeze-and-excitation networks)中提出的SE-Block注意力模块和Fu等[15]提出的应用于语义分割的DANet都采用了基于注意力机制的检测方法,并取得了较好的检测效果。图像领域的注意力一般集中于用于提取不同特征的通道域和建立像素之间关系的空间域内。
其中,通道域的注意力利用不同维度之间的依赖关系进行建模,然后对原始特征进行加权重标定。通道注意力的算法模型结构如图2(a)所示。
而空间域的注意力则通过提取空间内各像素之间的关联性,形成一个空间上下文依赖度的关系掩码,并将其以权重的形式分配给特征图的每个像素位置,用于突出空间内的有效特征、抑制无效特征,从而达到对特征进行选择和融合的作用。通道注意力的算法模型结构如图2(b)所示。
2 文中方法
文中提出一种改进的Attention-YOLOv3算法锈蚀区域检测算法。首先采用K-means算法聚类得到适用于文中数据集的候选框,其次采用以深度可分离卷积为基本模块的MobileNet-v3网络替代YOLOv3的Darknet主干网络,在大量减少计算量的同时保证一定的检测精度,最后结合空间注意力和维度注意力的级联双注意力模型对特征选择进一步优化得到最佳的特征表达。图3为基于Attention-YOLOv3的锈蚀区域检测算法模型的具体架构。
(a)通道域
(b)空间域
图3 基于Attention-YOLOv3的锈蚀区域检测算法
2.1 轻量级YOLOv3主干网络
DarkNet是由YOLO系列作者Joseph Redmon提出的一个开源神经网络框架。Darknet在YOLOv3上的表现已经很优越,但是由于其庞大的网络结构,在实际运行中仍需要很大的计算量和推断时间。虽然DarkNet提出了轻量级网络Tiny-DarkNet,但是只对网络结构做了简单的精简操作,没有考虑到特征提取能力下架会导致检测精度的大幅度下降的后果。
文中采用深度可分离卷积代替DarkNet中的标准卷积操作,并以此作为YOLOv3的特征提取主干网络。深度可分离卷积和标准卷积的密集连接的方式的不同之处是,首先深度可分离卷积采用了一个1×1的卷积增加通道数,增加特征的表达能力,其次使用3×3的单通道分组卷积作用于单特征图内的信息交流,最后再用1×1的卷积操作用于通道间的信息交流,因此可以在缩减参数的同时保证检测精度不会大幅下降。
2.2 双注意力模型
卷积操作实现了空间内的局部特征提取和通道间的信息交流,但是往往会丧失空间语义上的关联度,同时不会对通道的重要性进行区分。因此可以使用空间注意力模型对空间内的特征进行依赖性分析,同时通过通道注意力模型对不同通道的特征图进行加权得到更加有利于分类的特征图,所以该文提出一种级联的双注意力模型用于对特征进行选择。
空间注意力模型首先通过矩阵乘法构建每个像素点与其他像素点之间的关系,然后通过一个softmax函数对其进行关联性分析并组成权重掩码矩阵,再通过矩阵乘法对原始特征进行重标定得到空间注意力特征。随后将空间注意力特征作为通道注意力模型的输入,利用全局池化来表示全局特征,然后通过一个全连接层和sigmoid函数对其进行权重标定,最后再通过点乘来得到完整的注意力特征。级联双注意力模型完整结构如图4所示。
图4 级联双注意力模型
图5为原图像经过上采样后得到的特征图与经过空间注意力与通道注意力之后的对比,其中图5(a)为原图像,图5(b)为卷积后的特征图,图5(c)为空间注意力后的特征图,图5(d)为通道注意力后的特征图。
图5 注意力模型前后的特征对比
由图5可知,经过上采样后的特征图存在大量的无效特征,而在经过空间注意力模块后,无效的特征被抑制了,电塔上的锈蚀特征则被提取出来,在此基础上再通过通道注意力模块对其进行加强,最后得到的特征图更加有利于目标的分类定位。
3 实 验
3.1 数据集与前期工作
文中采用的RustDetection锈蚀目标检测数据以电缆、变压器、电表、电箱等多种电力设备锈蚀故障图片为基础,同时通过网络采集、实地拍摄等方式收集包含金属管道锈蚀、车辆锈蚀、桥梁锈蚀等共计800张锈蚀图像,并以3∶1的比例划分为训练集和测试集。并利用LabelImg标注软件对数据集进行标定,按照COCO格式建立标准的数据集。
随后结合Faster R-CNN的基于长宽比的anchor思想,提出一种改进的K-means聚类算法对训练集进行聚类,不仅采用了IOU score,还增加了ratio作为参考依据用于更好地对细长型和扁平型目标框进行回归。改进的距离公式如式(1)所示,其中λ1和λ2分别取0.8和0.2。
d(box,centroid)=1-(λ1IOU+λ2ratio)
(1)
共取得Avg IOU可以达到68.98%的[[13,19],[23,32],[28,49],[43,63],[77,45],[69,92],[99,117],[45,138],[192,191]]九种不同大小的预选框,并分别给三个尺度的特征图分配三种不同大小的预选框。
3.2 实验过程
算法模型的训练和测试过程均在NVIDIA GTX 1080Ti GPU上进行。首先对输入样本进行归一化,缩放为416×416,然后输入算法模型进行训练。
训练过程采用迁移学习的方式,即整个网络首先在具有17 125张图片和20类的VOC2012公共数据集上进行预训练,等网络获得较好的检测效果后,将20类分类子网络改为文中实验所需的二分类子网络。随后将除该子网络之外的特征提取网络的参数冻结,利用提出的RustDetection数据集针对分类子网络进行专项训练,同时也防止因为数据集变化导致的整体网络性能下降,20轮之后开放特征提取网络,对整个网络的特征提取能力进行训练。图6为采用了预训练模型和随机参数初始化的训练loss曲线,可以看到采用了预训练的模型的损失下降得更快,也可以更快地达到最小值。
图6 迁移学习的Loss曲线
3.3 实验结果分析
评价指标为AP(average precision),采用11-Point方法进行计算得到,即采用recall值在0到1之间每隔0.1时取最大的precision值绘制P-R曲线,求得precision的平均值即为AP值。其中,准确率(precision)、召回率(recall)、AP值的计算如下:
(2)
(3)
(4)
其中,TP表示正例被判真的个数,FP表示正例被判假的个数,FN表示负例判假的个数,x为11个recall值下的最大precision值。在实际的检测中对于正样本需要被检测出来的要求更为严苛,因此召回率(recall)在锈蚀目标检测中更为重要,也是最重要的指标之一。同时,由于AP值综合了准确率和召回率进行考量,所以AP值为判定模型是否能正确识别锈蚀区域的主要判定标准。表1为各种模型与文中算法在RustDetection测试集上的对比。可以看出,Tiny-YOLOv3只是对网络结构进行简单的删减,并没有考虑其在精度上的变化,因此若直接采用Tiny-YOLOv3就会导致检测效果大幅度下降,不能满足现实中检测的需求。而采用深度可分离卷积来代替DarkNet的YOLOv3算法在检测效果上由于参数的下降带了一定程度的精度下降,仍在可接受的范围内,基本达到了与标准YOLOv3算法相同的水平。
表1 各模型的测试效果比较
文中在此基础上添加了级联的双注意力模型,使得检测精度大幅度上升,这是由于注意力机制在上采样之后进行了特征的选择,剔除了无效的冗余特征,留下了对分类和定位更有利的特征信息,不会被无效特征所误导,因此可以更加精准地定位出锈蚀的区域。
表2为不同模型的权重文件大小和检测时间对比。由于实际应用场景中没有GPU进行检测的加速,往往只有PC机作为检测的主要设备,因此文中的检测过程均在Intel Core i5-7200U CPU上进行。
表2 各模型大小和检测时间比较
由表2可知,虽然Tiny-YOLOv3有最快的推断时间,但是其权重文件比应用了DW_Conv的YOLOv3和文中算法都要大。这是因为深度可分离卷积相比较标准卷积有更多的矩阵运算,因此需要更多的时间用于推断计算,但其仍就比标准YOLOv3提升了1.85到2.63倍。而文中算法相较于应用了DW_Conv的YOLOv3,由于加了级联双注意力模型,所以推断时间有0.3 s的延迟,相比较标准的YOLOv3算法可以缩短46.7%的检测速度。
在模型大小上,标准YOLOv3具有庞大的体量,需要很大的存储内存,不适合部署在工业设备上,应用了深度可分离卷积后减少了12倍,已经可以满足了工业设备的存储需求。而文中方法增加了双注意模型的微量参数,增加了2 MB的内存需求,但是综合检测速度和检测精度,文中算法依旧是最佳的检测算法。
最终的检测效果如图7所示,可以较好地检测出检修电源箱、输电线、电力箱等上的锈蚀区域。
图7 模型测试结果
4 结束语
提出的基于Attention-YOLOv3的锈蚀区域检测算法得到了实验验证,实验结果表明该算法可以在轻量级的检测模型上得到更好的检测效果,若可以在专用的图形处理器上,该算法可以做到10 fps以上的检测效率,完全满足了实时监测的要求。在下一阶段,将进行模型的压缩和优化,并将其部署在移动端设备上,并和报警设备进行结合,做到现场检测、现场报警、现场处理。