基于改进Faster R-CNN的被遮挡电线杆检测算法
2021-07-14刘凯歌孟祥越张祥德
刘凯歌,王 琪,孟祥越,张祥德
(东北大学 理学院,辽宁 沈阳 110004)
0 引言
随着物质生活的改善,越来越多人喜欢出行旅游,如何保证乘客的乘坐安全是铁路局的重要任务之一。铁轨周边电线杆种类繁杂且数量众多[1],这为实地勘探带来了困难。现今铁路交通部门对铁轨周边安全检查的方式主要是以拍照为主,实地勘察为辅。通过存储的大量现场图像,从中挑选有异常的电线杆,针对不同场景,派出相关专业人员去解决安全隐患[2]。由于这种人工挑选图像的方式效率低,所以如何利用计算机图像处理的方法高效挑选异常图像是本文研究的核心工作。
在电线杆是否被树枝遮挡的场景下,图像受光照以及季节影响较大[3],例如夏天树枝呈现的是绿色,秋天树枝整体偏向黄色,成像场景相对来说比较复杂。在该复杂场景下,深度学习比传统方法在定位上更具鲁棒性[4],除此之外图像中树枝遮挡占电线杆的比重比较小,类间差异比较小,深度学习很难判断,所以采用的思想是先定位后分类[5]。
针对树枝遮挡电线杆的问题,分析Faster R-CNN[6-7]检测算法存在的不足,提出基于后处理改进的Faster R-CNN被遮挡电线杆检测算法。该算法相比于现有算法,通过后处理方式能够获得更高的召回率,适合检测树枝遮挡的电线杆。
1 Faster R-CNN的原理
针对电线杆的异物检测问题,考虑双阶段精度较高的原则,本研究采用检测召回率较高的Faster R-CNN[10-11]目标检测算法。Faster R-CNN网络框架如图1所示。
图1 Faster R-CNN网络图
由图1可以看出,Faster R-CNN[5,13-15]主要由特征提取网络(VGG16)、Region Proposal Network(RPN)[7]网络以及检测网络3部分组成。
1.1 特征提取网络—VGG16
本研究采用的特征提取网络是VGG16[12],其中VGG16特征提取网络的细节如表1所示。
表1 VGG16实验数据表
1.2 RPN网络
RPN网络是在VGG16提取的最后一层特征图上进行滑窗,经过2个全连接层,一个是运用softmax进行分类,另一个是目标框回归。RPN网络如图2所示。
图2 RPN检测网络图
使用RPN代替原来的Selective Search[16]方法来产生建议窗口,降低了推断时的计算量。RPN的实现方式是先遍历整张特征图,滑窗尺寸为3×3,在遍历的过程中每个窗口中心会因设置的比例ratio= [0.5,1,2]和尺度scale = [8,16,32]在原图生成K等于9个anchor,再对每个不同大小的anchor计算Intersection over Union(IoU)并通过阈值来判定每个anchor是否为正负样本,当anchor与ground-truth box满足最高的IoU和IoU>0.7两个条件anchor为正样本,anchor与ground-truth box的IoU<0.3[6]为负样本。接着,对正负anchor进行分类(二分类)与回归,相当于实现目标定位的功能。
RPN训练过程中的损失函数为:
(1)
采用的分类损失:
(2)
(3)
回归损失:
(4)
式中,smoothL1损失函数为:
(5)
框的回归公式:
tx=(x-xa)/wa,ty=(y-ya)/ha,
(6)
tw=ln(w/wa),th=ln(h/ha),
(7)
(8)
(9)
式(6)~(9)中,x,y,w,h为预测的框的坐标和宽高;xa,ya,wa,ha为第i个像素的某个anchor的坐标和宽高;x*,y*,w*,h*为ground-truth box的坐标和宽高。
1.3 检测网络
检测网络由Regions of Interest(ROI)池化层和2个并行的1×1卷积构成。在ROI中将不同尺寸的候选框划分成7×7块区域,对每块区域使用MaxPooling,输出的特征向量为7×7×512,对输出向量分别进行分类与回归。在分类层中通过softmax实现图像分类;回归层则是anchor与ground-truth box先进行粗略的回归,之后对粗略框进行二次回归。softmax的公式如下:
(10)
式中,i表示k中某个分类;gi表示该分类的值。
2 算法改进
2.1 Faster R-CNN中存在的问题
在实际运用场景中,针对电线杆遮挡非遮挡的情况,通过Faster R-CNN网络检测,发现遮挡的电线杆会存在漏检的情况,即将遮挡判断成不遮挡。通过原始图片可以发现造成漏检主要有3点原因:第1点,树枝占电线杆的比重比较小,形状不规则;第2点,数据集是人工标注的数据集,数据量有限;第3点,树木的颜色容易受光照等影响。原始图片如图3所示。
图3 原始图片
因此,针对漏检的情况选择在原始算法上直接进行3点改进,分别是:动态分组阈值优化算法、RGB-HSV和区域生长分割方法。算法流程如图4所示。
图4 算法流程
2.2 动态分组阈值优化算法
使用Faster R-CNN对遮挡电线杆的检测结果不是很理想,对其进行初步分析如下:① 图像的采集由相机连续拍摄得到,前后存在联系,当使用手工标注时,也会对面积较小的电线杆进行标注,在第n张电线杆面积较小,在n+1电线杆的面积会相对偏大,情况如图5所示。② 出现真值框较小的电线杆周围存在大量面积较小的预测框,情况如图6所示。
图6 电线杆预测图
针对大量面积较小的预测框,提出了一种动态分组阈值优化算法。
动态分组阈值优化算法流程如下:
对于样本集合{(xi,xi1,xi2,yi1,yi2,score)},其中i=1,2,...,n,xi表示图片名,(xi1,yi1),(xi2,yi2)表示图片对应的左上角右下角的坐标;score表示图片预测的得分。
Step1:目的是找到最优所在的分组数并求其所在的面积。计算不同分组k在(2,20)内IoU>0.01个数占组内个数的比值,其中(2,20)的原因是分组数不低于1且最大分组数不会高于20。
Step1.1 计算面积并降序:
area=(xi2-xi1)×(yi2-yi1)
Step1.2 计算样本区域面积极差:
maxlength = max(area)-min(area)
Step1.3计算样本区间面积:
qujianchangdu=maxlength/k
Step1.4针对面积的大小将图片对应坐标放入空列表features中:如果area>ss×qujianchangdu,就存放在相对应features的空列表中,其中ss在(1,k+1),输出的空列表features格式是features=[[w1],[w2],…,[wi]],其中wi=zi,1,…,zi,i+1,zi,i+1表示当k=i+1时分成的不同区间,此区间存放图片名,图片坐标。
Step1.5计算[wi]下zi,i+1中图片坐标所求IoU>0.01的个数/zi,i+1中图片的个数的比值,将比值存放在空数组M中,这一步可以保证预测框中存在电线杆。
Step2:寻找差值最大所在的组,并求其对应的面积,如果该面积大于裁剪框(即目标检测后的裁剪框)的面积,就进行后续相关等工作。
Step2.1遍历M,计算差值:
chazhilist=abs(M[i]-M[i-1])
Step2.2找到最大chazhilist所在的索引:
index = max(chazhilist)
Step2.3计算最大索引所对应的面积:
area1 = features[index][w]×features[h],这里可以删除一些面积较小且效果不好的预测框。
2.3 RGB转HSV
对树枝遮挡的电线杆进行检测,树的颜色随着季节的变化影响因素比较大,为解决季节变化的因素,采取的方案是将图片转换成HSV格式,即RGB-HSV。实施过程如下:首先转换成绿色、黄色和黑色3种颜色。选择颜色的依据是:绿色代表树枝遮挡,黄色代表四季颜色变化,黑色代表局部区域肉眼所见是黑色的。最后选择这3种点做凸区域检测,凸区域检测的目的是为后续区域生长提供所需的种子点。HSV是一种比较直观的颜色模型,模型的3个参数是色调、饱和度和透明度,做这一步的主要优势在于树枝是与季节的变换有强相关关系,所以希望能够进行一种将颜色明显地区分开的转换。
2.4 区域生长分割方法
区域生长是根据预先定义的生长准则将像素或子区域组合为更大区域的过程。基本方法是从一组“种子”点开始,将与种子预先定义的性质相似的那些相邻像素添加到每个种子上来形成这些生长区域。区域生长有3个关键点:种子点的选择、相似性质的判断以及截止条件。本研究所设计的算法中通过RGB-HSV[8]算法得到种子点,相似性判断是灰度图像的差值,以及截止条件是当不再有像素满足加入某个区域的准则时,区域生长就会停止。
区域生长算法的流程如下[9]:
Step1:随机或者对图像进行扫描,找到第一个还没有赋予属性的像素,设该像素(X0,Y0)。
Step2:以(X0,Y0)为中心,考虑(X0,Y0)的4邻域或者8邻域像素(X,Y)与种子像素的灰度值之差的绝对值小于某个阈值T,如果满足条件,将(X,Y)与(X0,Y0)合并在同一区域内,同时将(X,Y)压入堆栈。
Step3:从堆栈中取出一个像素并把它当做(X0,Y0)返回步骤Step2。
Step4:当堆栈为空时,返回Step1。
Step5:重复步骤Step1~4直到图像中的每个点都有归属时,生长结束。
针对图像中存在一些电线杆是镂空的和Faster R-CNN初步漏检的情况下,所设计的算法具体如下:首先将Faster R-CNN初步检测结果框裁剪出来,接着如果裁剪的面积大于动态分组阈值优化算法中输出的面积就进行RGB-HSV,然后进行凸区域检测,之后将RGB-HSV的输出作为种子点来进行区域生长,最后通过手动设置阈值,选出最优的阈值50,如果绿色像素点的个数大于阈值,就判断为遮挡,否则就为非遮挡。后处理的具体流程如图4所示。
3 实验及分析
3.1 数据集的制作
本研究所设计的算法采用的数据来自相机拍摄的JPG图片,对采集的图像删除部分重复场景得到1 895张图片,使用LabelImg[17]手动标注制作成图像库,其中图像如图7所示,接着将图像库转成VOC2007数据格式,最后将图片划分成训练集和测试集。其中训练图片1 691张,测试图片204张。
(a) 原图
3.2 实验环境
深度学习常见的框架有Caffe、Pytorch、Tensorflow等。本研究的训练和测试实验均采用Pytorch。其中服务器的操作环境为Linux操作系统,计算机软硬件配置数据如表2所示。
表2 计算机软硬件配置
3.3 训练策略
实验的训练过程中采用poly的学习策略[18]:
(11)
式中,初始学习率初始化(base_lr)为0.001,最大迭代次数(max_iter)为3万次,使用SGD优化函数,输入图像的batch_size=1,为防止过拟合weight_decay =0.000 5,总共训练了20 epoch。
3.4 实验分析及改进
为了验证算法的性能,在图像库中的数据集上进行对比实验。本研究采用的2个指标:召回率(recall)和漏警率。研究设计算法的实验结果如表3所示。使用Faster R-CNN进行检测时,召回率为32.7%,使用Faster R-CNN+RGB-HSV+区域生长,召回率为54%,使用Faster R-CNN+动态阈值分组+RGB-HSV+区域生长,召回率为85.4%,召回率提升约0.5,改进(动态阈值分组+RGB-HSV+区域生长)的漏警率最小,说明检测遮挡的效果越好。本研究所设计算法的可视图如图8~10所示。从图8和图10的对比可看到,设计的后处理过程很好地解决了Faster R-CNN漏检问题。
表3 对比实验数据表
图8 Faster R-CNN 检测结果
图9 改进(RGB-HSV+区域生长)检测结果
图10 改进(动态阈值分组+RGB-HSV+区域生长)检测结果
需要改进的是,从数据的角度来看,数据量较少时模型容易出现过拟合现象。采用生成对抗网络(GAN)可通过标注数据,生成模拟数据,也可以用在自监督学习中,让模型具备从部分标记的数据中学习的能力,GAN[19]也可应用于图像的修复。针对部分偏斜的电线杆(如图5所示),当使用检测算法时,由于偏斜的存在,会使得预测框中包含大量的冗余信息,对于此类问题还需待改进。
4 结束语
对遮挡电线杆进行检测,提出了基于改进Faster R-CNN的被遮挡电线杆检测算法。本文论述了Faster R-CNN的基本原理,分析该算法存在的3点问题,针对较多检测框设计了动态分组阈值优化算法,对电线杆漏检情况使用了RGB-HSV+区域生长分割算法。实验结果表明,改进后的算法对遮挡电线杆检测有较好的效果。在今后的研究中可以对数据生成以及检测对象存在偏斜的情况展开更多的研究。