基于RetinaNet模型的鸟巢智能检测
2020-05-26周振峰杨刘贵
时 磊,杨 恒,周振峰,杨刘贵,张 辉,杜 浩
(1.贵州电网有限责任公司输电运行检修分公司,贵州 贵阳 550002;2.中国电建集团贵州电力设计研究院有限公司,贵州 贵阳 550002)
随着人与自然和谐共生意识的不断增强,鸟类的数量急剧上升。在鸟类改善生态环境及帮助人类的同时,也给电力系统带来了困扰和危害。具体的危害可以概括为三类:一、鸟类为了保护卵和小鸟,使其不受恶劣气候的冲击以及捕食性动物的伤害,会在输电线路杆塔以及设备上进行筑巢,鸟巢材料的掉落以及食物或粪便等严重污染瓷瓶,导致绝缘子绝缘程度下降,造成绝缘子闪络现象;二、生态系统中各种生物为维持其本身的生命活动,必须以其他生物为食物,鸟类会招引其他动物攀爬输电线路杆塔,造成输电线路短路跳闸等;三、鸟类穿梭于输电线路之间,偶尔会与输电线路带电体接触,形成短路[1]。为了尽可能保证输电线路能够安全稳定运行,最大限度降低鸟类对输电线路造成的危害,需要对鸟巢进行监测,目前,输电线路监测采用在线监测,这种方式需要对海量的视频数据进行判读,通过人工检测的方式存在效率低、漏检、受人为主观因素干扰多。因此采用智能分析巡检图片的方式已大势所趋,此方式不仅可以减少巡检人员工作强度,而且可以提高检测结果的效率及准确率。在计算视觉领域,传统的目标检测模型有基于级联分类器Cascade的检测模型、HOG(histogram of gradients,HOG)方法、多尺度形变部件模型DPM(deformable part model,DPM)等,HOG方法能够很好的对一幅图像的局部区域进行描述[2],DPM在行人检测及车辆检测取得了巨大的成功[3]。其中DPM最具代表性。DPM是基于组件的检测算法,采用了改进后的HOG特征、支持向量机(support vector machine,SVM)和滑动窗口检测思想,针对目标的多视角及自身的形变问题,采用了多组件及基于图结构的部件模型策略。但是此模型针对不同的目标都需要通过人工来设计激励模板,可移植性差,特征金字塔的提取和对象定位工作量很大[4]。
随着深度学习的热度上升及逐步发展,目前,目标检测所采用的算法主要可以分为两大类: 第一类是二阶目标检测模型,这种算法先进行候选框提取,然后通过卷积神经网络(convolutional neural network,CNN)提取图像特征,最后进行目标分类和回归。第二类是一阶目标检测模型,此种算法直接将目标的分类和定位转化为回归问题,而不需要提取候选区域,二阶目标检测模型可以充分提取图像特征,实现精确分类和定位,检测的准确率较一阶目标检测模型更高。而一阶目标检测模型相比于二阶目标检测模型网络结构简单,算法运行速度很快,实时性更高。而在线巡检鸟巢时对实时检测要求较高,因此,采用一阶目标检测模型更为合理。但是一阶目标检测模型的密集检测器在训练过程中会遇到正负样本类别极度不平衡问题,从而影响鸟巢目标检测的准确率。He Kaiming提出的Retinanet的算法成功的解决了这一问题[5],使一阶目标检测模型精度首次优于当时精度最高的二阶目标检测模型。通过实验表明,此算法检测鸟巢相比于与其他目标检测算法精度有明显的提升。
1 RetinaNet模型
1.1 RetinaNet概述
Retinanet的模型网络结构如图1所示。其模型由主要由特征提取网络ResNet、骨干网络和2个特定任务的子网络构成。图1的(a)特征提取网络ResNet负责提取图像的初步特征;图1的(b)特征金字塔网络FPN的作用是将提出的初步图像特征与高层语义特征信息进行重新组合,完成对图像特征的精细化提取,以丰富每一特征层的感受野;图1中(c)表示子网络,2个子网络分别在主干网络的输出上执行卷积对象分类任务和边框回归任务。
(a) 特征提取网络 (b) 特征金字塔网络 (c) 子网络
图1 RetinaNet网络结构示意图
Fig.1 Schematic diagram of Retinanet network structure
1.2 特征提取网络
传统的深度学习网络应用,图像特征采用直线型的CNN自主提取。网络越深,所能学到的东西越多。然而深度到了一定程度之后网络层数越深反而降低了准确率,而且很容易出现梯度消失和梯度爆炸。原因在于网络越深,模型就会变得不敏感,不同的图片类别产生了近似的对网络的刺激效果。深度残差网络ResNet引入了残差块的设计,克服了这种由于网络深度的加深而产生的学习率变低、准确率无法有效提升的问题。
残差块的原理为将前面若干层的数据输出直接跳过多层而引入到后面数据层的输入部分。即前面较为“清晰”的数据和后面被“有损压缩”的数据共同作为后面网络数据的输入。假设有一个比较浅的网络达到了饱和的准确率,那么后面再加上几个Y=X的全等映射层,误差不会增加,即网络越深训练集误差不会上升。假定某段神经网络的输入是X,用F(X)表示没有跳跃连接的两层网络,期望输出是H(X),如果直接把输入X传到输出作为初始结果,则残差块可以表示为F(X)=H(X)-X。如图2所示,表示一个ResNet的残差块。
从上图可以看出,X是残差块的输入值,经过第一层卷积层并被激活函数激活后输出F(X),F(X)在经过第二层卷积层之后没被激活函数激活之前F(X)加入了残差块输入值X,被激活函数激活后输出,因此残差块也称作跳跃或者快捷连接。
如果某一卷积层是冗余的,在没有引入ResNet时,每层学习需要满足H(X)=X,实现起来比较困难,ResNet结构是F(X)=H(X)-X,只需要F(X)=0,使得问题简化,即该冗余层学习F(X)=0的更新参数能够更快收敛。直线型的卷积神经网络和ResNet相比,ResNet可以通过多个跳跃连接让学习目标转化为残差,简化学习目标和难度。ResNet结构有ResNet-34、ResNet-50、ResNet-100等[6]。
1.3 特征金字塔网络
根据低层特征语义信息弱,目标位置清晰;高层特征语义信息强,目标位置模糊的特点,FPN结构通过自底向上连接、自顶向下连接以及横向连接,对不同层的特征信息进行融合[7]。
FPN具体实现过程是:在C5上添加一个1×1卷积层来生成最粗糙分辨率映射,上采样为2倍,由于P5之上没有其他层,P5直接从C5映射过来;P4先通过P5上采样,在与C5映射过来的特征进行融合;之后每层都如此,最后对所有融合之后得到的层采用3×3的卷积核,步长为1的卷积对每个融合结果进行卷积,消除上采样的混叠效应。于是C2,C3,C4,C5得到与其具有相同空间尺寸的P2,P3,P4,P5。
RetinaNet的主网络部分结构并不与FPN中提到的结构完全一致,RetinaNet模型仅利用C3、C4、C5特征图,避免在高分辨率C2特征图中生成 Anchor,减少模型检测时间;特征金字塔层P6是在C5的基础上通过3×3的卷积核、步长为2的卷积得到的,P7在P6的基础上加了个RELU再通过3×3的卷积核、步长为2的卷积得到的。
1.4 子网络与损失函数
分类子网对A个anchor,每个anchor中的K个类别,都预测一个存在概率。对于FPN的每一层输出,对分类子网来说,加上四层3×3×256卷积的FCN网络,最后一层的卷积稍有不同,用3×3×KA,最后一层维度变为KA表示,对于每个anchor,都是一个K维向量,表示每一类的概率,然后因为one-hot属性,选取概率得分最高的设为1,其余k-1为归0。传统的RPN在分类子网用的是1×1×18,只有一层,而在RetinaNet中,用的是更深的卷积,总共有5层。与分类子网并行,对每一层FPN输出接上一个位置回归子网,该子网本质也是FCN网络,预测的是anchor和它对应的一个GT位置的偏移量。首先也是4层256维卷积,最后一层是4A维度,即对每一个anchor,回归一个(x,y,w,h)四维向量。位置回归是与类别无关的。分类和回归子网虽然是相似的结构,但是参数是不共享的。
在目标检测中,一阶目标检测模型效果较差于二阶目标检测模型的主要原因是一阶目标检测模型在训练时样本比例不均衡,比如yolov3,其算法通过特征提取网络对输入图像采用回归思想直接提取特征,得到一定尺寸的特征图,然后将输入图像分成相应大小的网格,通过网格预测出的包围盒与真实边框中目标物体的中心坐标直接进行匹配定位,在此基础上对目标物体进行分类识别[8]。在训练时要生成3×13×13 + 3×26×26 +3×52×52 = 10 647个box,但具有物体数量极少,大多数都是背景,出现正负样本类别极度失衡。
考虑到目标物仅占输入图像中的一部分,为解决一阶目标检测模型中密集采样候选机制导致的正负样本失衡的问题,目前常见的解决方法是:在训练的时候用不同的采样频率;给予不同的权重。本文采用的Focal Loss不需要这些步骤。Focal Loss函数是一种改进的交叉熵(cross-entropy,CE)损失函数,通过在原有的交叉熵损失函数中乘上使易检测目标对模型训练贡献削弱的指数式,成功减少目标检测损失值容易被大批量负样本左右的现象。其计算式如下:
fFL(pt)=-αt(1-pt)γlogpt
(1)
式中:αt为平衡因子,取值在[0,1];pt为是模型预测的属于前景的概率,取值在[0,1];γ为调节因子,取值在[0,5]之间;pt定义如下:
(2)
这个损失函数在标准的交叉熵标准上添加了两个因子αt、(1-pt)γ。通过αt可以抑制正负样本的数量失衡,通过γ可以控制简单/难区分样本数量失衡。通过(1)式可得,无论是前景类还是背景类,pt值越大,权重(1-pt)γ就越小。也就是说简单样本可以通过权重进行抑制;αt用于调节正负样本的比例,前景类别使用αt时,对应的背景类别使用1-αt;γ和αt的最优值是相互影响的,所以在评估准确度时需要把两者组合起来调节才能得到最优的Focal Loss函数。
2 实验
2.1 数据集处理
将输电线路鸟巢数据,包括无人机巡检图像、在线监控设备录像与巡检人员现场拍摄图像进行收集,建立样本库。实验中人为筛选出2 500张图像,根据实验需求将其其中80%作为训练集,20%作为验证集。为了防止过拟合,增加整个网络的鲁棒性,随机翻转每张图片,将训练样本数量扩充至5 000张。选取训练样本中出现的完整且无遮挡、变形小、光线好的鸟巢图片。其中数据集生成主要包括,对样本库中所有图像通过LableImg软件手动打标签,生成符合PASCAL VOC2007格式的XML标签文件。其中标签文件包含图片以下信息:图片名称,图片路径,图片像素高度、宽度与深度,图片中鸟巢所在区域的矩形边框的坐标(xmin,ymin,xmax,ymax),即矩形边框的左上坐标和右下坐标。最后编写脚本将PASCAL VOC2007格式的数据转换为csv数据格式减少数据存储容量。
2.2 实验环境
考虑到深度学习框架keras简单易用、扩展性强的特点,文中实验部分均基于此框架实现,借助CUDA(compute unified device architecture)加速运算。另外本文的实验机器是一台配置型号为Intel(R)Core(TM)i7-8750H的CPU和NVIDIAGe Force GTX 2080的GPU的个人计算机,内存以及显存大小分别为32 GB、16 GB。该机在Windows10上运行。
2.3 训练过程及评价方法
实验为避免神经网络权重初始化给实验结果带来的不确定性,将在ImageNet数据集上经过预训练的残差神经网络ResNet-50作为FPN的主干网络,部分参数设置如下:学习率为0.000 01,最大训练轮数为50轮,FL中αt=0.25,γ=2。
训练开始前需要设置模型训练参数,包括图片宽度,图片高度,每步训练使用图片数量(batch-size),训练总共进行轮次(epochs),每个epoch训练步数(steps),设置完成后,可以开始进行训练,在训练完成后将得到多个模型权重文件。试验在RetinaNet模型上完成,batch-size设置为4,epochs设置为30,steps设置为500。
具体训练步骤及每步训练结果如下:
(1)将2.1处理好的数据集输入到ResNet50网络结构中得到原始图片的特征图。
(2)利用上一步得到的特征图,按照1.3节所述方法构建FPN网络,大小依次递减,在FPN上选取任一通道数的特征图,经过RPN网络针对每个滑动窗口生成九种Anchor,然后利用非极大值抑制进行筛选,得到该层特征图上的候选区域。
(3)将Anchor输入分类子网络和边框预测子网络进行训练,直至最终的网络收敛,完成鸟巢检测模型的构建,网络结构中不同的卷积核的权重及偏置值代表着学习得到的特征结果。模型训练的收敛曲线随迭代次数的增加呈下降趋势。
对于数据集,采用准确率、检测速度常规指标作为最终的评价指标。本实验,在假设只有正例和负例这两个分类目标的基础上,被正确分类的正样本个数使用TP表示,被错误的标记为正样本的负样本个数使用FP表示,FN表示被错误的标记为负样本的正样本个数,根据公式(3)和公式(4)计算出查全率Precall和查准率Pprecision。
(3)
(4)
检测速度是衡量目标检测好坏的另一个重要指标,只有速度快,才能解决实时检测的问题。评估速度的检测每张图片使用的时间。因为不同的硬件会影响图片的检测速度,所以需要在同一硬件上对比分析。
本文RetinaNet模型以查全率为横坐标,查准率为纵坐标绘制,曲线与坐标轴之间面积是平均准确率,本文即使用平均准确率和检测速度作为模型性能的评价指标。
经过前几轮的训练,鸟巢的平均准确率有较大幅度的提高,但随着训练轮数的进一步增加,检测模型趋于稳定。其值在0.9左右波动。当鸟巢类别样本数量偏少时,需要经过更多几轮的训练其平均准确率才能够趋于稳定,因此,可以通过适当增加训练轮数来缓解数据样本不足造成的不利影响。
2.4 实验结果及分析
选取不同角度及部分遮挡的鸟巢图片进行检测,图3为最终的检测效果图。使用该模型识别鸟巢的具体精度如下图所示(被识别的鸟巢被标记在方框内,方框上方标签显示是鸟巢的概率)。
(a)杆塔顶端鸟巢检测 (b) 杆塔中间鸟巢检测 (c) 俯视情况下鸟巢检测
图3实验结果
Fig.3 Experimental result
可以看出,本文算法对复杂实例均能有效检测,可以有效学习数据集特征,自适应处理多角度,遮挡等困难样本。主要原因有以下几点:方向梯度直方图等传统方法主要依赖人为设计的颜色、梯度等特征,而神经网络可对其它特征进行更加全面的学习,对鸟巢目标具有更强的表征能力;其次,相比二阶目标检测模型算法,使用改进的损失函数,可自动提升困难样本所占权重,降低易分类样本在训练过程中所起的作用,实现了高效率的难训练的模型。为了对比RetinaNet检测效果,本文采用经典的一阶目标检测模型和二阶目标检测模型与之对比。一阶目标检测模型有YOLO(you only look once),SSD(single shot multibox detector)等方法。其中YOLO模型存在检测精度低缺陷[9],SSD方法在小目标检测上存在不足[10]。二阶目标检测模型有R-CNN(region convolutional neural network),Fast R-CNN(fast region convolutional neural network),Faster R-CNN(faster region convolutional neural network),其中R-CNN基于卷积神经网络(CNN),线性回归,和支持向量机(SVM)等算法,CNN以全局高维向量表示图像,在图像搜索中具有很强的分辨能力。R-CNN遵循传统目标检测的思路,只在提取特征这一步,将传统的特征换成了深度卷积网络提取的特征[11]。Fast R-CNN,在CNN特征框架下,利用快速区域,显著提高了目标检测的平均精度[12]。Faster R-CNN与Fast R-CNN最大的区别就是提出了一个叫RPN(region proposal networks)的网络,专门用来推荐候选区域的,使得目标检测速度大幅度提高[13]。其中Faster R-CNN相比于R-CNN和Fast R-CNN方法在检测准确度和执行效率上有明显的优势[14]。实验中所有方法的运行平台与上文相同。实验结果如表1所示。由图3可知,RetinaNet模型检测鸟巢的准确率超越了90%,甚至有的高于95%。由表1可以看出本RetinaNet模型在检测准确度和速度上均高于二阶目标检测模型Faster R-CNN。RetinaNet模型在检测速度方面还低于一阶检测模型YOLO和SSD,但是检测速度已经小于100 ms,在综合考虑检测速度及准确度时,RetinaNet模型是一个有效的鸟巢目标检测方法。
表1 不同模型在本文数据集上效果对比Table.1 Effect Comparison of different models on the data set of this paper
3 结语
本文将使用基于ResNet残差网络和损失函数Focal Loss的RetinaNet模型对杆塔及设备上的鸟巢进行检测。通过一系列控制试验确定合适的网络结构和参数,建立了适合鸟巢检测的RetinaNet模型。在保证检测速度的前提下,提高了目标检测精度,目标检测准确度达到了90%以上。同时通过对数据集的增强处理,提高了模型预测的准确度。经过与已有的Faster R-CNN、YOLO及SSD方法进行对比,验证了该模型具有很好的检测效果,能够快速准确地对杆塔及设备上鸟巢进行识别,有利于提升巡检工作效率,保障输电线路安全稳定运行。本文只采用了50层ResNet残差网络进行了测试学习,没有进行更多种类的尝试。受限于网络层度不够深,其精确度还可以进一步提高,需要通过训练模型优化其泛化能力。同时,输电线路穿越各类复杂地理环境,且线路网络结构复杂[15-17],今后将对现有数据集进行扩充,进行更加深入的实验。