基于轻量级Fast-Unet网络的航拍图像电力线快速精确分割
2022-03-12周顺勇曾雅兰
杨 锴,周顺勇,曾雅兰,赵 亮
(1.四川轻化工大学自动化与信息工程学院,四川 宜宾 644000;2.人工智能四川省重点实验室,四川 宜宾 644000)
引 言
直升机在低空飞行时,因误触电力线而造成的坠毁事故占到了其通航总事故的30%。为了避免此类事故的发生,目前常用方法是以机载摄像机获取图像实现基于机器视觉的电力线防撞系统[1-3],而系统的首要工作就是从航拍图像中精确而快速地分割出电力线。
目前已有一些较好的电力线检测算法,例如,将Canny 边缘检测算子与Hough 变换结合起来设计电力线检测算法[4-10],此类算法能有效检测到航拍图像中的直线形结构电力线。张从新等[4]首先使用Canny 边缘检测算子生成边缘图,再利用Hough 变换来检测边缘图中的直线。Li等[5]使用脉冲耦合滤波器,在Hough 变换时结合使用了基于先验知识的线聚类方法,但是算法速度过慢。Candamo 等[6]采用窗口式Hough 变换跟踪检测电力线。陈建等[7]使用黑塞矩阵进行边缘检测,并提出基于区域的随机Hough 变换。王坚俊等[8]通过Otsu 获取高低阈值,采用分式查表法改进Hough 变换,最后结合空间信息平滑检测结果。Aggarwal等[10]使用正则化形式合并先验信息来增强基于Hough 变换的线检测的性能。
但是,电力线在航拍图像中并不总是呈现单一的直线型特征。针对这一问题,Yetgin 等[11]通过Edlines 算法提取图像中的所有完整曲线,并使用K-means均值聚类过滤线性噪声。谭金石等[12]采用Lsd 提取图像中所有线段,并运用统计学特征滤除噪声,最后使用最小二乘法拟合电力线曲线,该算法精度很高,但速度较慢。林火煅等[13]使用Ratio算子与Ransac 算法结合检测电力线。Song 等[14]采用零均值高斯滤波器(MF)和一阶高斯导数(FDOG)生成边缘图,最后使用基于图论的图割法拟合电力线。
上述大多数算法都使用电力线自身特征进行匹配滤波检测,容易检测到线性结构噪声,需要进行大量后处理用以滤除噪声和平滑检测结果。为了避免大量的后处理运算,从而提升算法的运行速度及检测精度,卷积神经网络开始用于设计端到端的电力线检测算法[15-18]。Li等[15]设计了空间信息的注意力机制,用以减少神经网络对背景的注意力,提高对目标的注意力。Zhang 等[16]将各特征层进行权重组合,用以生成最终检测图。Jenssen 等[17]以人工合成训练数据,并提出了一种快速单发线段检测器(LS-Net)。卷积神经网络虽然避免了大量后处理运算,但自身网络体积较大,运算较多,在保证检测精度的同时,难以保证足够的检测速度,还是难以应用于实际。
基于此,本文对Unet 卷积神经网络进行改进,设计了轻量级Fast-Unet语义分割网络,采用的金字塔池化结构与多损失函数协同训练方法,提高了网络检测精度;并删减网络卷积核数量用以减小模型的体积,同时使用深度可分离残差卷积结构对网络进一步优化,达到了速度与精度的较好平衡。
1 Fast-Unet轻量级语义分割网络
Unet 语义分割网络作为典型的编解码结构卷积神经网络[19],在医学图像分割任务与卫星遥感图像分割任务中都有优异的表现[20]。电力线航拍图像与遥感图像都存在前景与背景分布极度不均衡的问题[21],又与医学图像都存在待分割目标结构信息极为简单的难点[22]。因此,本文以Unet 为基础,设计Fast-Unet轻量级语义分割网络,用于快速而精确地检测航拍图像中的电力线。
1.1 Unet
Unet 网络结构如图1 所示,图中给出了当输入图片的尺寸为512×512,通道为3 时,网络中特征的尺寸、通道变化情况。网络中最后一层卷积的卷积核尺寸为1×1,其他卷积层的卷积核参数相同,尺寸为3×3,步长为1,填充为1。上采样采用双线性插值算法,池化运算为最大池化,池化核尺寸为2×2。
图1 Unet网络结构图
Unet 网络虽然具有较高的检测精度,但模型有约3.14×107个参数,模型参数体积较大,运算速度较慢,为了满足实际应用需求,不仅需要提升Unet 网络的检测速度、减小模型参数体积,还要保证模型检测精度不能有太多损失。
1.2 Fast-Unet
Fast-Unet 网络结构如图2 所示,在Unet 的基础上,首先,将网络中所有卷积核的数量减半。过多的卷积核对于分割电力线这种简单目标,会提取过多的冗余信息,不能提高模型检测精度,且会减低模型运算速度[23]。然后,增加金字塔池化结构,增强特征上下文信息的融合程度。最后,使用深度可分离残差卷积及深度可分离残差卷积块替换掉原始卷积运算,进一步减少了网络参数量,同时增加了网络深度,有利于学习到更鲁棒的网络参数[22]。
图2 Fast-Unet网络结构图
2 具体改进方法
2.1 金字塔池化
Unet 网络中编码端最终特征的尺寸为32×32,相对于输入图像的尺寸压缩了16 倍。网络所提取的特征的最大感受野为16×16,也就是最大全局信息为16×16。为了增大网络的感受野及增强网络所提取的全局信息,添加了金字塔池化结构,如图3所示。首先,结构将输入的特征进行4 种尺度的平均池化,池化后4个特征通道数不变,尺寸大小变为1×1、2×2、3×3、6×6,分别包含了4种尺寸的高级语义信息。然后,使用1×1 的卷积压缩通道至输入通道的1/4,再经双线性插值上采样将尺寸变换到与输入特征的尺寸一致。最后,将4 个特征与输入特征拼接到一起,再用1×1 的卷积压缩通道至与输入特征的通道一致。
图3 金字塔池化结构图
经过金字塔池化结构运算后,网络额外增加了4 种尺寸的全局信息,分别为512×512、256×256、170×170、85×85。特征的上下文信息得到了充分融合,且该结构主要使用池化运算,并未增加太多参数量。
2.2 深度可分离残差卷积与卷积块
Unet 网络中使用了大量尺寸为3×3,步长为1,填充为1 的的卷积,用于特征通道数变换。这些卷积会大量增加网络的参数量,为了进一步减少网络的参数量,提高算法的运算速度,可将这些普通的卷积层替换为深度可分离卷积[24]。
图4 演示了输入通道为3,输出通道为32 的普通卷积,共使用了32个3通道的3×3卷积核,总共参数为864个。
图4 普通卷积过程示意图
图5 演示了输入通道为3,输出通道为32 的深度可分离卷积。计算过程分为两步:第一步为逐深度卷积,在逐深度卷积中使用的是3个单通道的3×3卷积核,每个卷积核对输入特征的其中一个通道进行卷积运算,整体输出特征的通道为3;第二步为逐点卷积,这步运算使用32 个3 通道的1×1 卷积核进行普通卷积,整体输出特征的通道为32。深度可分离卷积总共参数为123 个,相比于普通卷积减少了741个参数。
图5 深度可分离卷积计算过程图
深度可分离卷积减少了卷积参数,但还存在一部分冗余运算。因为经卷积运算后得到的特征各通道存在一定的相似性,部分通道可以由其他通道经过简单的线性变换组合而来[25]。逐点卷积就是将逐深度卷积的输出进行一系列组合变换。因此,可以将逐深度卷积的输出直接作为最终输出的一部分,逐点卷积只需计算其余部分即可,修改后的逐点卷积计算如图6所示。
图6 逐点残差卷积
使用逐深度卷积与逐点残差卷积共同构成深度可分离残差卷积,深度可分离残差卷积总共参数为114 个,相比于普通卷积减少了750 个参数,相比于深度可分离卷积减少了9个参数。
当输入特征的通道为c,输出特征的通道为n(n>c)时,普通卷积的参数量为n×c×(3×3)=9nc,深度可分离卷积参数量为c×(3×3)+n×c×(1×1)=(9+n)c,深度可分离残差卷积参数量为c×(3×3)+(n-c)×c×(1×1)=(9+n-c)c,深度可分离卷积相比于普通卷积减少了(8n-9)c个参数,深度可分离残差卷积相比于深度可分离卷积减少了c2个参数,可以看出当输入特征与输出特征的通道数越大,深度可分离残差卷积减少的参数也就越多。
深度可分离残差卷积只能用于输入通道数小于输出特征通道数的运算。为了将其应用于其他情况下的运算,分别设计了深度可分离残差卷积块1、深度可分离残差卷积块2,其结构如图7所示。
图7 深度可分离残差卷积块
卷积块1用于输入特征通道与输出特征通道相等的卷积运算,当输入通道为c时,普通卷积参数量为9c2,卷积块1 的参数量为0.75c2+4.5c,减少了8.25c2-4.5c。卷积块2用于输入特征通道大于输出特征通道的卷积运算,当输入通道为c,输出通道为n(c>n)时,普通卷积参数量为9nc,卷积块2 参数量为3nc+9n-n2,减少了n2-9n+6nc。
2.3 多损失函数
原始Unet 的损失函数为普通的交叉熵损失函数(Cross Entropy Loss)。当网络为二分类时,CE loss(Cross Entropy Loss)可以表示为:
其中:y^ 为模型预测为前景的概率,y是样本标签,前景取1,背景取0。
式(1)给出了单个像素的损失计算方法。在进行语义分割时,图像中每个像素点都会产生一个损失值,神经网络会将图像中所有点的损失值加起来进行反向传播。而电力线图像中,前景只占少数部分,所贡献的损失占比很少,神经网络将难以通过损失反向传播对前景进行拟合训练。这种类别分布极为不均衡的问题将会影响网络对前景的判别能力[26]。因此,可以给前景与背景所产生的损失添加一个权重,让前景贡献更多的损失用于训练网络。修改后的交叉熵损失函数BCE loss(Balance Cross Entropy loss)表达式为:
式中:α为前景的损失权重,通过调节α可以调节前景在训练时的损失值贡献程度。
虽然增加一个权重系数,可以在一定程度上改善前景难以拟合的问题,但这种所有同类像素都使用同一个系数的方法过于直接。图像中前景中的边界位置及背景中线性噪声才是最难以训练的,还应该关注此类像素的损失值占比。Focal loss 能自适应地调节每个像素的损失值占比,其表达式为:
式中:β为调节因子,α与β分别取经验值0.25、2。
假若当前像素标签为前景,且y^ 较大,那么该像素为容易辨别的一类,权重项(1-y^)β会自适应地降低其损失贡献,减轻网络对该像素点的关注度。反之,则增加其损失贡献,增强网络对该点的关注度。同理,权重项y^β会自适应地调整标签为背景的各个像素的损失贡献。
除了Focal loss 能改善类别分布不均的问题,Huang等[27]所采用的Dice loss损失函数,也能达到类似的效果,且能改善分割的边界精确度,Dice loss表达式为:
Dice 系数为度量两个集合相似性程度的数值,其表达式为:
式中:X为分割后的预测图的点集,Y为当前标签图的点集,Dice的取值范围为[0,1],其值越大表示预测得越准。
两种损失函数都有助于提高网络性能,因此,用于训练Fast-Unet 的多损失函数(Multiple loss)由这两个损失函数组成,M loss(Multiple loss)的表达式为:
3 实验及分析
3.1 实验环境及训练
本次实验,计算机硬件配置为I3-9100F(CPU)、GTX1060 6GB(GPU)、微星B365(主板);操作系统为Windows10 专业版;软件配置为Anaconda、Pycharm;编程语言为Python3.6,深度学习框架为Pytorch1.2.0。
实验数据为Yetgin等[9]提供的4000张无人机航拍图像,通过人工逐像素标注后,将数据按(8∶1∶1)的比例分为训练集、验证集、测试集。训练时,输入图片的尺寸为512×512,12 张图片为一个batch,优化器为Adam,初始学习率采用0.001,采用学习率下降策略,每迭代训练一次,学习率降低为上一次的0.9倍,训练至验证集损失不再下降为止。
3.2 结果与分析
为了验证本文改进之处的有效性,首先进行消融实验。使用CE loss、M loss 分别训练Fast-Unet,训练数据、方式相同。训练后使用测试集测试网络的检测精度,检测精度采用平均交并比(Miou)计算,其计算方式为:
其中:N为测试集图片数量,i为测试集第i张图片,TPi、FNi、FPi分别为第i张图片中,电力线被成功预测的像素(真正例);把背景误测为电力线的像素(假正例);背景被成功预测的像素(真反例)。
采用CE loss、M loss 训练Fast-Unet 后,得到两个模型,分别为Fast-Unet-CE loss 与Fast-Unet-M loss。两个模型经测试,Miou分别为79.15 与80.26,部分测试结果如图8所示。
图8 部分测试结果对比图
由图8(b)中可以看出,Fast-Unet-CE loss 模型能检测出大部分电力线,但存在一些误检测,但电力线均已完整检测。由图8(c)可见,Fast-Unet-M loss 完整检测出了所有电力线,且没有误检测,实验结果表明M loss能有效提高网络的检测精度。
为了进一步测试本文算法的性能,选取另外4种算法与基于M loss 训练的Fast-Unet 进行对比实验,4 种算法分别为PsPnet、Deeplab、SegNet、Unet。采用相同的数据训练4 种算法,并用同一个测试集测试了各算法的检测精度、运算速度。其中检测精度使用Miou计算。图9 给出部分检测结果对比,图10 对比了各算法精度与速度,表1 对比了各算法参数量。
图9 中可见,Unet 表现最为良好,其逐级编解码结构,较好地使用了特征金字塔中的上下文信息,且Unet 网络较为复杂,能提取到较为深层次的信息,所以并未出现误检测。Fast-Unet 在处理较为密集的的电力线时容易分割不清,这是由于大量减少了网络参数,损失了一点检测精度。SegNet 在处理电力线较为密集的图像时,性能较差,在其余情况下,能较为完整的分割出电力线,但边界参差不齐,这是由于SegNet 在解码过程仅使用了池化索引,并没有充分运用特征金字塔中的低级细节信息所造成的。PsPnet 存在电力线边界定位不准,与密集电力线漏检的问题,这是由于PsPnet 只使用了最后一层特征进行解码预测,并直接一次性上采样回原图大小,运算过于直接,导致边界定位不准与漏检。Deeplab不能较为完整地分割出电力线,这是由于没有充分运用图像的上下文信息,加重了图像类别分布不均对网络的影响。
图9 各算法部分测试结果对比图
Fast-Unet 相对于另外4 种算法,减少了大量参数,因此更容易受到图像中类别不均衡问题的影响。金字塔池化能在不过多增加参数的同时,增强特征上下文信息的融合,使算法能完整地检测出电力线。M loss 能有效减小图像类别分布不均所带来的影响,减少误检测。因此Fast-Unet在检测精度上仅次于Unet,且精度可以接受。
图10 中可见,Fast-Unet 具有最快的检测速度,处理单张512×512 大小的彩色图像耗时0.048 s,处理速度超过每秒20 帧,Miou为80.26。相比于Deeplab、PsPnet、SegNet、Unet,速度提升了约204%、243%、119%、140%,检测精度提升了约14.3%、8.1%、4.8%、-1.4%。Fast-Unet 损失了一定精度,但速度提升较大,较好地平衡了精度与速度。
图10 各算法精度、速度散点图
表1 给出了各算法的参数量,Fast-Unet 的模型大小只有10.31 MB,运行显存为936 MB,相比于Deeplab、PsPnet、SegNet、Unet,模型体积减少了约93.4%、94.1%、90.9%、91.3%;运行显存减少了约53.9%、49.6%、26.9%、28.9%。结合表1 与图10 可见,Fast-Unet 在大量减少参数后,并没有过多降低检测精度。
表1 模型性能测试表
4 结 论
经过实验论证,得出以下结论:
(1)Unet 语义分割网络相比于其他主流算法,更适合用于检测航拍图像中的电力线,但整体网络参数较多,运算较慢。
(2)深度可分离残差卷积与深度可分离残差卷积块能有效减少模型参数,缩小模型体积,加快模型运算。金字塔池化结构与多损失函数能有效提高网络检测精度。
(3)Fast-Unet 推理512×512 大小图片耗时为0.048 秒,精度为80.26,较好地平衡了速度与精度,满足了实际应用需求,且模型体积仅为10.31MB。
(4)由于数据集较少,存在一定的过拟合风险,后期工作需要增加电力线数据进行训练,但使用无人机采集数据费时费力,拟研究基于生成对抗神经网络合成电力线图像的相关技术。