高金峰, 吕易航
(郑州大学 电气工程学院 河南 郑州 450001)
对输电线路进行定期检查,随时掌握输电线路的运行情况,是电网运检人员的日常工作之一.使用无人机进行线路巡检具有方式灵活、成本低等优势[1].无人机搭载的摄像头可提供大量的高清图片,图片中的绝缘子串是线路巡检中关注的重要对象.如何在多种拍摄角度、光照条件以及背景噪声等影响下进行绝缘子串的识别和分割具有重要意义.
国内外学者关于绝缘子串的识别与分割方法已有一些研究,有些在实际生产中得到了应用.文献[2]使用HOG特征加SVM分类器. 文献[3]通过搭建CNN并选用SVM分类器,文献[4]使用Alex Net、VGG16等框架分别训练分类器和检测器并将其级联,分别实现了绝缘子串的识别和定位.文献[5]提出了一种基于深度学习U-net网络的航拍绝缘子串分割方法,进行像素提取和定位,提高了定位精度.文献[2-4]均采用特征提取器加分类器的方法,识别速度较慢,精度较低.文献[5]中的深度学习算法U-net目前主要应用于样本较小的医学影像的处理,在其他领域的应用较少.
国内外学者也开展了通用图像的分割方法的研究.文献[6]提出了一种基于三维OTSU的图像分割方法,该方法计算复杂度较高,分割效率低.文献[7]提出了一种基于Prewitt算子的边缘检测算法,可以有效抑制噪声且较好地解决了边缘粗糙等问题.文献[8]提出了小波模极大值的图像分割算法,最大程度地减少了噪音,该方法在抑制噪音的同时也削弱了目标的信息强度,不利于图像的分割.
本文以深度学习算法为依托,采用速度快、效率高的Faster R-CNN[9]和FCN[10]模型,构造了一种识别与分割方法,搭建了图像处理平台.实际应用表明,该方法能够在不同光照条件、不同拍摄角度以及复杂背景噪声干扰下的航拍图像中实现绝缘子串的识别与分割,且处理时间短、精度高、鲁棒性强.
深度学习算法是目前机器学习算法研究中最受关注且取得较大成功的算法之一,其核心就是使用多层或深度的网络,建立类似于人脑学习机制的复杂神经网络.搭建的神经网络具有拟合任意复杂函数的能力,构建复杂的非线性映射,可以将观察数据进行分层特征表示,将低级特征抽象化后形成高级特征表示.深度学习在图像处理和计算机视觉应用中都取得了令人满意的进展.
在图像分类领域,AlexNet[11]、VGG(http:∥arxiv.org/abs/1409.1556)、GooLeNet[12]以及ResNet[13]网络在ImageNet数据集上实现了1 000多类图像的分类,Resnet网络将Top-5错误率降到了3.57%.
在图像检测领域,R-CNN[14]、Fast R-CNN[15]、Faster R-CNN网络在VOC-2007数据集上实现了20类物体的识别,mAP达到了66.9%;另外在FDDB人脸数据集中,可以识别出5 171张人脸.
在图像分割领域,FCN网络在VOC-2012数据集上实现了生活中20类物体像素级别的语义分割,FCN-8s分割的像素精度达到了90.3%.
本文为方便得到绝缘子串识别与分割结果,将构建的深度学习算法与数据预处理等步骤集成在一起,形成绝缘子串检测平台.该平台只需将所要检测的航拍图片导入,就能自动处理,得出绝缘子串识别与分割结果.该平台依托后台图形计算服务器,其配置是Window10系统、两个Intel酷睿8代CPU、主频3.2 GHz、6核心、12线程、64 G内存、Nvidia Geforce GTX Titan Xp图形处理器,12 G显存.深度学习框架为Tensorflow和Caffe的python接口.
本文所使用的数据集包括两部分:一部分来自Github的Insulator Data Set-Chinese Power Line Insulator Dataset(CPLID)(https:∥github.com/InsulatorData/InsulatorDataSet.);另一部分来自无人机航拍视频的逐帧图片.数据集共2 000张图片,这些图片全部由无人机在不同背景下,从不同角度拍摄的.绝缘子串航拍图像中包含复杂的背景噪声,如天空、森林、田地、房屋、山脉等.另外,由于拍摄角度不同,在图像中绝缘子串还会出现遮挡甚至重叠的现象.不同背景下航拍图像中的绝缘子串如图1所示.
图1 不同背景下航拍图像中的绝缘子串Fig.1 The insulator strings image with different aerial backgrounds
Faster R-CNN是在R-CNN、SPP-NET、Fast R-CNN网络的基础上改进得来的.该算法主要解决两个问题:一是提出区域建议网络RPN,快速生成候选区域;二是通过交替训练,使RPN和Fast R-CNN网络共享参数.Faster R-CNN关于一个图像的损失函数定义为
RPN是使用卷积神经网络直接产生区域建议,本质上就是用滑动窗口在最后的卷积层上滑动一遍.RPN可以针对生成检测建议框的任务端到端地训练,能够同时检测出目标的边界和分数.
有些RPN推荐框和其他推荐框大量重叠,为了减少冗余,可基于推荐区域的cls得分,采取非极大值抑制,设定恰当的阈值,留下2 000个anchor,取前N个给Faster R-CNN,对分类数进行筛选,并取分数大于某个分数的目标结果.Faster R-CNN的训练流程如图2所示.
图2 Faster R-CNN训练流程图Fig.2 Training process of Faster R-CNN
2.2.1数据的预处理 将2 000张航拍图统一成640×480大小的样本,并打乱顺序,随机分布.然后利用Keras框架进行数据增强,如翻转、随机修剪、色彩抖动、平移变换、尺度变换、对比度变换、噪声扰动等,新增1 000张样本图片,合计3 000张图片.
将3 000张样本图片用开源的labelImg(https:∥github.com/tzutalin/labelImg)进行标注,生成groundtruth.将总样本的80%作为训练集,20%作为测试集.
2.2.2Faster R-CNN的训练与调参 具体操作如下.
1) 训练RPN网络.新增的2层参数用均值为0、标准差为0.01的高斯分布来进行初始化,其余层用ImageNet预训练的模型初始化,并端到端微调,用于区域建议任务.
2) 利用1)中的RPN生成的建议框,由Fast R-CNN训练一个单独的检测网络,同样由ImageNet预训练模型初始化,此时,两个网络并没有共享卷积层.
3) 用检测网络初始化RPN,固定共享卷积层,微调RPN独有的层.
4) 固定共享的卷积层,微调Fast R-CNN的Fc层,两个网络共享相同的卷积层.
训练参数设置如下:最大迭代次数为200万次;初始学习率为0.001;学习率衰减策略为‘step’; 每迭代1万次学习率进行一次衰减;一个mini_batch包含2张图片;Minibatch=128;代用dropout避免过拟合,dropout=0.2,采用随机梯度下降法进行权重更新,交替训练的各个阶段迭代1万次;RPN正样本的阈值为0.7,负样本的阈值为0.3;NMS阈值为0.7;每训练1 000次进行一次测试,test_size=2.
如图3所示,迭代200万(2 000×1 000)轮之后,选取在同一杆塔上,两种不同角度拍摄的绝缘子串图片,识别效果良好.
图3 绝缘子串识别效果图Fig.3 Pictures of insulator strings detection
语义分割是从像素水平上理解、识别图片的内容.输入的是一张图片,输出的是同尺寸的分割标记(像素水平上),而且每个像素都会被识别为一个类别.
利用全卷积网络对图像进行像素级别的分类,从而解决了语义级别的图像分割问题.与经典的CNN不同,FCN可以接受任意尺寸的图像,采用反卷积层对最后一个卷积层的feature map进行上采样,使它恢复到与输入图像相同的尺寸,从而可以对每个像素都产生一个预测,同时保留了原始图像中的空间信息,最后在上采样的特征图上进行逐个像素分类.主要有3层结构:
一是卷积层,将所有CNN的全连接层转换成卷积层,它能适应任意尺寸输入,并输出低分辨率分割图片.CNN网络主要有Alexnet、VGG16和GoogleNet,输出的图片经过5个卷积层,经过每个卷积层后的分辨率降低为原来的1/2,经过5个卷积层后分辨率就降低至原来的1/32.
二是反卷积,也叫转置卷积.将低分辨率图片进行上采样,输出同分辨率分割图片.反卷积就是卷积的逆操作,也是一对多的操作,其中卷积核的尺寸不变,对应于卷积操作的后向和前向传播,在优化上做了颠倒,而反卷积核是卷积核的转置,学习率为0.
三是跳层结构,可将同分辨率的图片边缘精化,直接用32倍反卷积得到的分割结果比较粗糙,所以可以使用前两个卷积层的输出做融合,pool3和pool4后会增加一个1×1卷积层做预测,较浅网络的结果精细,较深网络的结果鲁棒.
3.2.1数据预处理 为减轻标签制作时的困难,在数据增强后的3 000张图片中选取1 000张没有遮挡或重叠的单排或双排绝缘子串作为候选.制作Groundtruth时,利用开源的LabelMe[16]进行标注,将生成的json文件转化成png文件索引图(训练时作为输入).
1 000张图片的80%作为训练集,20%作为测试集.
图4 训练损失和测试准确率的变化曲线Fig.4 Discharging of train loss and test accuracy
3.2.2参数设置 最大迭代次数为25万次;初始学习率为0.000 1;学习率衰减策略为‘step’;每迭代1万次学习率进行一次衰减;一个mini_batch包含2张图片;用dropout避免过拟合,dropout=0.1;每训练1.25万次进行一次测试,test_size=2;每经过1万次迭代产生一次snapshot,共产生10个snapshot.
3.2.3loss和accuracy曲线可视化 经过25万轮迭代之后,由caffe可视化训练损失、测试准确率与迭代次数的变化曲线如图4所示.
由图4可知,经过25万次迭代之后训练损失最终收敛到0.4附近;在每迭代1.25万次时自动测试一次,在25万轮过后,测试准确率达到了约97%.
随机选取2张玻璃和瓷质绝缘子串的航拍图片,分割结果可视化如图5所示.
图5 绝缘子串分割效果图Fig.5 Pictures of insulator strings segmentation
在绝缘子串检测平台上,为了验证本文所用算法的识别效果,选取多目标的航拍图来进行验证,将本文所用的Faster R-CNN算法与文献[2]和文献[3]算法作对比,其识别结果如表1所示.图像(a)是无人机顺光时对杆塔的拍摄,对应了浅色的绝缘子串和深色的背景;图像(b)是无人机在逆光时对杆塔的拍摄,对应了深色的绝缘子串和浅色的背景.
由表1可知,在深色背景下,两种算法生成的矩形框杂乱不堪,既有误识别现象,又有重复识别现象;在浅色背景下,重复识别现象略有减少,但是误识别现象还时有发生.而基于深度学习的Faster R-CNN算法既没有误识别现象,也没有重复识别现象.
为验证本文所用的语义分割算法的有效性,随机选取3张绝缘子串航拍图(包含浅色背景和深色背景),分别用文献[6]提出的OTSU算法、文献[7]提出的prewitt算子边缘检测算法、文献[8]提出的小波模极大值算法和本文使用的FCN算法对3张航拍图分割提取,分割结果如表2所示.
表1 绝缘子串识别结果对比Tab.1 Comparison of the results of insulator strings detection
表2 绝缘子串分割结果对比Tab.2 Comparison of the results of insulator strings segmentation
首先,就分割后划分背景和目标(绝缘子串)的色调分析,由表2可知,OTSU算法会自动选取前景(目标)和背景的分割阈值,OTSU算法将图像(c)二值化之后,背景和绝缘子串分别为白色和黑色,将图像(d)和(e)二值化之后,背景和绝缘子串分别为黑色和白色;小波模极大值算法会分尺度将图像分解为各个频率下的分量,不同尺度可以检测不同频率的图像局部特征,所以当背景和目标色调强度差别不大时,分割出来的效果成浅色调,掩盖了图像的主体信息;prewitt算子边缘检测算法能较好地区分背景和目标(绝缘子)的色调.其次,就抗噪能力分析,OTSU算法、小波模极大值算法和prewitt算子边缘检测算法的分割结果都不能良好地除去背景噪声.
本文采用的FCN语义分割算法,不但能够清晰地区分出背景和目标的色调,而且能精确地分割出复杂背景中的绝缘子串,抗噪能力强,有着更广泛的使用性和鲁棒性.
在上述实验平台下,绝缘子串识别处理时间对比见表3,绝缘子串分割处理时间对比见表4,绝缘子串识别和分割结果见表5.
表3 绝缘子串识别处理时间对比Tab.3 Comparison of the running time of the insulator strings detection 单位:s
表4 绝缘子串分割处理时间对比Tab.4 Comparison of the running time of the insulator strings segmentation 单位:s
表5 绝缘子串的识别和分割结果Tab.5 The results of the insulator strings detection and segmentation
由表3可知,本文Faster R-CNN算法对图像(a)和图像(b)的处理时间小于文献[2]的Hog特征+SVM算法和文献[15]的CNN+SVM算法处理时间.
由表4可知,本文FCN算法对于图像(c)、图像(d)和图像(e)的处理时间要小于文献[6]的OTSU算法、文献[7]的prewitt算子边缘提取算法和文献[8]的小波模极大值算法.对于图像(e)(像素为1 500×1 000)这种高分辨率的航拍图来说,FCN算法的处理时间能维持在1 s左右,可见其性能的优势.
由表5可知,本文Faster R-CNN算法能够识别600张绝缘子串航拍图中的581张,其识别率达到了96.83%;FCN算法能够分割出200张绝缘子串航拍图中的181张,准确率达到了90.50%.
综上所述,本文基于深度学习的两种算法对于绝缘子航拍图的处理性能优于其他传统算法.
本文以航拍图像中绝缘子串的识别与分割为目标,分别利用Faster R-CNN与FCN构建了绝缘子串识别与分割算法,使用Tensorflow和Caffe的python接口搭建了基于深度学习的绝缘子串检测平台,对来自github和无人机航拍视频中截取的图片进行了训练和测试,以本文算法为基础搭建的绝缘子串检测平台的识别率达到了96.83%,分割率达到了90.50%,提高了不同光照条件、拍摄角度和复杂背景噪声的抗干扰水平,且处理速度快.