佟喜峰,杜 鑫,王志宝
(东北石油大学 计算机与信息技术学院,黑龙江 大庆 163318)
气候变化是全人类需要齐心协力面对的全球性问题,目前我国正在推行“碳中和,碳达峰”政策,实现碳中和是当下中国需要贯彻落实的新发展理念,而太阳能及光伏发电行业将在我国碳中和目标达成过程中起到决定性的主导作用[1]。虽然我国与其他国家相比具有地域辽阔的特点,在光伏发电方面存在巨大的优越性,但相对于我国的地域条件和市场需求,光伏发电尚有很大的发展空间。光伏空间分布是绿色能源发展的主要呈现形式,而遥感监测则是获取大尺度光伏时空分布信息数据的唯一技术手段。光伏信息在众多的领域中发挥着基础性的作用,并且光伏信息还可以应用于应急响应、智能城市等方面,在城市可持续发展、规划等多个领域都具有重要作用。因此,对光伏电厂的检测定位与识别并获取光伏信息具有重要的现实意义。
随着科技的进步,遥感卫星的使用越来越广泛,当前可获取到丰富的高分辨率卫星影像,而目标检测算法也越来越多地被应用于遥感图像处理领域[2]。目前应用的算法主要有R-CNN(Region based Convolutional Neural Network)系列算法,其利用生成候选区域以克服窗口滑动带来的效率不高的问题[3]; Fast R-CNN算法使用了多个RoI(Region of Interest pooling)池化层转化特征图,相对R-CNN算法减少了时间和内存的消耗以及运行时间; Faster R-CNN算法使用区域建议网络(RPN:Region Proposal Network)进一步提高了速度[4]; Yolo(You Only Look Once)算法[5-6]可在同一时间确定图像中多个对象的属类和位置,从而实现端到端的图像识别,运行性能大大提高; SSD(Single Shot MultiBox Detector)算法是一种可直接判断目标属类的多目标检测算法,增加的多尺度功能有效地克服了Yolo算法对小目标识别不准确的缺点[7]。随着Yolo系列算法逐步发展,Yolov5是目前应用最广的目标检测算法。
国内目前在遥感图像处理领域中高分影像目标检测属于重要的研究内容[8]。然而,传统的目标检测方法难以满足处理大量数据的需求,不仅耗时多,而且还强烈依赖于目标数据本身的特征,很难从大量的数据中学习出有效的分类器以充分获取数据之间的关系[9]。深度学习拥有强大的学习能力和特征提取能力,可对图像进行比较有效地目标提取。虽然Yolov5模型相较于以前的模型性能有了很大提升,但依然存在大中小物体的训练样本数量不平衡、小目标识别不准确、长宽比差距大的标识不准确等问题。刘洪江等[10]提出了小目标检测方法; 王伟峰等[11]提出采用K-means算法改进的Yolov5方法,提高了速度和精度; 彭成等[12]提出一种基于改进Yolov5的轻量化算法。目前还未见较成熟的关于遥感影像光伏电厂目标检测的研究报道,也没有开源的国内数据集,检测率也没达到实用要求。
随着遥感技术的快速发展,研究快速准确的检测工具,对光伏电厂管理具有重要的现实意义。由于遥感光伏图像存在光伏特征尺寸不规则、小目标分布密集、不同地区环境噪声差别大等特点,因此Yolov5模型对光伏电厂目标的检测识别不是很准确。为解决光伏标识检测速度慢以及不准确的问题,考虑遥感影像分辨率高的特点,笔者以Yolov5的6.0版本为基础提出改进的检测算法。改进的Yolov5模型在Yolov5s的基础上,针对光伏图像环境噪声大的特点,嵌入CA(Coordinate Attention) block注意力机制模块,提高对光伏目标特征的提取; 针对光伏特征尺寸不规则、小目标分布密集的特点,在模型的主干网络Backbone中用Ghostconv替换Conv,并在C3网络结构中设计新的GhostC3网络代替原来的C3网络模块,提高了模型的检测效率和特征提取能力; 针对光伏数据集分辨率高的特点,将损失函数由GIoU_Loss改成考虑因素更加综合全面的SIoU_Loss提高模型检测的准确度。改进后的模型对遥感光伏目标有比较好的检测识别效果,在现有方法下可以进一步提高检测的精度,提高网络的泛化能力。
Yolov5模型主要由输入端、Backbone模块、Neck模块以及Head模块4部分组成,如图1所示。
图1 Yolov5网络结构图
1) 输入端。主要技术有Mosaic数据增强[13]和自适应锚框计算。Mosaic数据增强使用对图片进行随意缩放、裁剪和排布的方式拼合,可以有效地丰富数据集。自适应锚框计算:设置锚框的初始长宽。在训练过程中,先根据设定的初始锚框输出预测框,再与真实框进行对比,计算出二个框的差距再反向更新,从而计算出最优锚框值。
2) Backbone模块。在不同图像细粒度上聚合并形成图像特征的卷积神经网络,最后一层网络为SPP(Spatial Pyramid Pooling)。SPP表示空间金字塔池化,将输入通道先用一个标准卷积模块减半,然后分别使用内核大小为5、9、13的最大池化。3次最大池化的结果分别与未进行池化操作的数据进行拼接(concat),最终合并后通道数是原来的两倍。
3) Neck模块。组合图像特征并把图像特征传输到Head模块进行预测。
4) Head模块。对数据特征进行预测,形成边界框并判断类别。Yolov5算法的卷积结构包含卷积层、批标准化层和激活函数层(SiLU)[14]。此外,Yolov5使用多尺度检测结构,在主干网络提取特征后,再通过两次上采样和3次卷积分别在3个尺度上实现大中小目标类别和位置预测。
遥感光伏图像有光伏特征尺寸不规则、环境噪声大等特点。虽然在经过实际实验测试后发现Yolov5相比其他模型的效果好,但仍存在遇到遥感光伏信息边界特征不明显、目标不规则以及背景复杂等问题时检测效果不够理想。笔者根据光伏图像的特点,在Yolov5的6.0版本基础上进行改进优化,设计出Yolov5_gc适用于遥感光伏目标检测,提高检测的效率和准确率。
Yolov5主要包括Yolov5s、Yolov5m、Yolov5l和Yolov5x 4个网络架构。Yolov5s网络是Yolov5系列算法中网络模型宽度和深度最小的网络,后面3种模型都是在此基础上进一步加深、加宽。改进后的模型部分结构如图2所示。
图2 Yolov5_gc模型结构
改进的Yolov5模型在Yolov5s的基础上,将损失函数由GIoU_Loss改成SIoU_Loss,以提高模型检测的准确度; 在模型的主干网络Backbone中用Ghostconv替换Conv,以提高模型的检测效率,在C3网络结构中设计新的GhostC3网络代替原来的C3网络模块; 嵌入CA block注意力机制模块,提高对光伏目标特征的提取。改进后的模型可以对遥感光伏目标有比较好的检测识别效果,在现有方法下可以进一步提高检测的精度,提高网络的泛化能力。
常规的特征提取方式是利用多个卷积核对输入特征图中所有的通道进行卷积映射操作。在传统的深度学习网络中,堆叠大量的卷积层需要耗费巨大的参数量和计算量,同时也会产生许多丰富甚至冗余的特征图。但特征图对模型的精度至关重要,这些特征图由卷积操作得到,又输入到下一个卷积层进行运算,其过程包含大量的网络参数,消耗了大量的计算资源。因此,人们通过实验提出了部分使模型轻量的方法,比如剪枝、量化和知识蒸馏等。虽然这些方法能有效降低参数量,但仍存在模型设计复杂和训练困难等问题。这些特征图中的冗余信息可能是一个模型成功的关键,可能正是因为这些冗余信息才使输入的数据被全面理解,所以在设计轻量化模型时并不是要完全去掉这些冗余特征图,而是试图通过使用更低的计算量获取这些冗余。Ghostconv就是应用这种思想设计而成的[15]。
相比传统的卷积网络,Ghostconv包含两个步骤。首先Ghostconv通过常规的卷积方法计算,先获得通道比较少的、有大部分特征信息的特征图,然后使用低成本的操作获得更多的特征图,最后将每个特征图组合成新的输出。Ghostconv卷积部分是将传统卷积方法分成两部分:第1部分,利用少量卷积核进行卷积运算(比如原本使用64个卷积核,Ghostconv减少了一半计算量,用32个卷积核); 第2部分,使用3×3或5×5的卷积核进行逐通道卷积操作,最终将第1部分作为一份恒等映射,并与其结果进行concat操作。Ghostconv方法设计简单、易于实现,不仅可以有效地降低模型的计算资源,同时可做到即插即用,减少了非关键特征的学习成本,从而有效降低计算资源需求[16]。
Ghostconv模型首先利用少量的卷积核对输入特征图进行特征提取,然后进一步地对这部分特征图进行更价廉的线性变换运算,最后通过拼接操作生成最终的特征图。该方法减少了非关键特征的学习成本:即通过组合少量卷积核与更廉价的线性变化操作代替常规卷积方式,从而有效降低计算资源需求。因此在Backbone结构中加入了Ghostconv模型,首先用Ghostconv替换了Conv模块。然后将Ghostconv嵌入C3网络结构中替换原有的Bottleneck模块,设计GhostC3替换C3网络模型,GhostC3网络模型结构如图3所示。该方法以更轻量更快速的网络代替原有的网络模块,以帮助模型能更快速准确地对感兴趣的目标进行特征提取,大大提高了模型训练的效率。
图3 GhostC3网络模型结构
常用的注意力模块有SE(Squeeze-and-Excitation)[17]、BAM(Bottleneck Attention Module)、CBAM(Convolutional Block Attention Module)和CA[18],SE也叫挤压-激励注意力模块,其只考虑了不同通道间的信息,但忽略了位置信息; BAM和CBAM也叫通道注意力模块,其在SE模块的基础上尝试通过卷积获得位置信息,但卷积又缺乏对远距离信息的提取能力,而CA位置坐标注意力克服了这些问题。CA注意力模块对精确位置信息进行编码,用于获取图像两个方向(宽度和高度)上的注意力,将通道注意力分解为沿高度和宽度两个方向的单维特征进行编码。先将输入特征图分别沿两个空间方向进行分解,在高度和宽度上分别用全局平均池化聚合特征,最终得到两个方向上的特征图。这样,不仅可以通过其中一个方向找到远程依赖,同时也可沿另一个方向保留准确的位置信息。将收集的全局信息,即宽度和高度两个方向上的特征图拼接在一起,将所拼接的特征图分别编码,生成对方向感知充分和位置信息明确的注意力图。如此操作后,将两个注意力图应用于输入特征图中,以增强特征图的表示能力,提高对目标对象的表示。由于这种方法可区分坐标空间方向,并且可生成方向感知的特征图,因此将该方法称为坐标注意力。
CA注意力机制的编码过程包括两个步骤:坐标位置信息嵌入和坐标注意力生成。CA注意力机制主要注重增强移动网络学习特征的表达能力,它可以对网络中的任意中间特征张量进行转化后输出同样尺寸的张量[19]。CA模块足够灵活和轻量,能方便地运用于网络的核心结构中,可以用于检测和分割等多种任务,均有不错的性能提升。CA注意力机制不仅可以获取不同通道间的信息,还可以进行方向感知获得位置敏感信息,这有助于模型更准确地定位和识别感兴趣的对象。由于光伏遥感图像的地面环境噪声比较复杂,笔者将该注意力机制嵌入到Backbone中,加在SPP池化层之前,提高对光伏目标特征的提取能力,减少其他噪声的影响以帮助模型更好地对感兴趣的目标进行识别。例如CA注意力模块可使模型对潮汐环境下靠近岸边的光伏目标更加关注,大大提高了模型训练的效率。
Yolov5的损失函数由边框回归、置信度以及分类概率损失3部分组成,总的损失函数等于3部分损失函数计算的和。Yolov5使用二进制交叉熵算法计算目标置信度得分的损失,主要利用假设法:第1步先假设大部分分类器的输出是互斥的目标类别再进行计算,如果计算得到的结果输出标签是互斥的,则原来便是互斥的。Yolov5使用BECLogits 函数计算置信度损失,采用GIoU_Loss[20]实现预测边框回归损失,边框回归损失用于预测框与真实框之间的误差。
比较常见的损失函数有CIoU_Loss、DIoU_Loss[21]、GIoU_Loss、EIoU_Loss[22]。CIoU_Loss在DIoU_Loss损失函数的基础上增加了衡量预测框和GT(Ground Truth)框纵横比的功能,在一定程度上加快了预测框的回归速度,但仍然存在很大的问题:如果在预测框回归过程中,出现预测框和GT框的宽高纵横比呈现线性比例的情况,对CIoU_Loss增加动能便不能起到作用。为解决该问题,提出了GIoU_Loss,其使用最小外接矩形的面积减去并集的面积作为惩罚项,这说明GIoU_Loss需要先扩大并集面积再优化IoU。目标检测方法的损失函数依赖于预测框和真实框的距离、重叠区域和纵横比等边界框回归指标。然而,目前提出和使用的方法都没有考虑到所需真实框与预测框之间不匹配的问题。这种不足导致收敛速度较慢且效率较低,因为预测框可能在训练过程中因为找不到位置而“四处游荡”并最终产生更差的模型,SIoU_Loss可以很好地避免这些问题。
SIoU_Loss损失函数由4个Cost函数组成:Angle cost、Distance cost、Shape cost和IoU cost。Angle cost添加了LF(Low Frequency)角度感知组件,可以最大限度地减少与距离相关的变量数量。模型将尝试首先将预测框带到X或Y轴(以最接近的一方为准),然后沿着相对应的轴继续接近。为此引入和定义LF组件如下:
(1)
(2)
Distance cost重新定义为
(3)
Shape cost的定义为
(4)
其中θ值定义为每个数据集的Shape cost并且其值是唯一的,其是该等式中非常重要的一项,控制着对Shape cost的关注程度。若θ值设置为1,其将立即优化一个Shape,从而阻止Shape的自由移动。为计算θ值,笔者将遗传算法用于每个数据集,实验上θ值接近4,因此该参数定义的范围是2~6。
IoU cost的定义为
(5)
其中B是真实框,BT是预测框。
最后,回归损失函数SIoU为
(6)
总损失函数为
L=WboxLbox+WclsLcls,
(7)
其中Lcls是focal loss,Wbox和Wcls分别是框和分类损失权重。在边框回归损失中,回归损失函数SIoU_Loss需要解决真实框与预测框之间不匹配的问题,考虑到两个框的重叠部分、中心点的距离和长宽比,SIoU_Loss相比其他的函数最大限度地减少了与距离相关变量的数量。SIoU_Loss中的宽高损失使模型训练可以更快收敛,精度更高,优于原网络中的GIoU_Loss。因此,笔者采用性能更佳的SIoU_Loss损失函数替换原损失函数计算边框回归损失。
实验基于Pytorch1.9.0框架,运行环境CPU为I5 10400,GPU为NVIDIA RTX2070,CUDA(Compute Unified Device Architecture)版本为10.2,显存8 GByte,内存24 GByte。Yolov5根据网络深度与宽度的不同可以分为许多不同的网络模型,本实验采用其中最轻量的Yolov5s模型,在此基础上进行改进优化并与原始网络作对比。
由于实验所用数据没有开源的国内光伏遥感图像,因此采用landset卫星采集的0.25 m高分遥感数据集制作数据集。首先,将高分遥感图像用地图软件ArcMap标记出光伏特征面,生成Shapefile要素文件。然后,利用影像分割工具将高分遥感图像处理成640×640像素的图像和标签文件。由于分割生成的特征标签文件为xml格式,Yolov5模型需要采用的标签文件格式为txt格式,因此,用程序将xml文件转换成对应的txt格式文件,然后输入到模型中。选用2 147张图像作为训练集,346张图像作为验证集,模型训练时设置动量系数为0.9,权重衰减系数为0.005,学习率为0.01,批尺寸为32,稀疏训练迭代次数为300次。
笔者使用目标检测中常用的评价指标:召回率(Recall)、精度(Precision)和平均精度均值(mAP:mean Average Precision)。其数学定义分别为
其中NTP是检测正确的光伏电厂数目(true positives),NFN是漏检的光伏电厂数目(false negatives),NFP是虚警的光伏电厂数目(false positives)。
在光伏遥感图像的识别中容易出现误检的目标有屋顶、梯田、蔬菜大棚等,为解决这些问题设计了Yolov5_gc模型。为验证笔者设计网络的改进意义,在相同的数据集上进行了消融实验,评估实验效果,结果如表1所示。其中VmAP是阈值为0.5时的平均精度均值。表1中Yolov5s表示原始模型,Yolov5s_ghost表示添加了Ghostconv的模型,Yolov5s_ca表示添加了CA注意力机制模块的模型,Yolov5s_siou表示损失函数修改成SIoU_Loss的模型,Yolov5s_casiou表示添加了CA注意力机制模块并修改了SIoU_Loss的模型,Yolov5s_sioughost表示添加了Ghostconv并修改了SIoU_Loss的模型,Yolov5s_caghost表示添加了Ghostconv和CA注意力机制模块的模型,Yolov5s_gc表示添加了CA注意力机制模块、Ghostconv并修改成SIoU_Loss的最终改进模型。第1行为原模型,第2~第4行为一层修改的模型,第5~第7行为二层修改的模型,最后一行为笔者模型。从实验数据可看出,每步改进都在原有的模型指标基础上有所提高,证明了改进的模型每一步都是有意义的。
为验证笔者设计网络的有效性,使用不同网络模型对相同的光伏遥感数据集进行试验,评估实验效果,结果如表2所示。对比实验选用了目前目标检测实用最广的模型,首先与SSD目标检测算法进行比较,可以看出SSD算法精度最高值很高,但mAP又不是很高,说明曲线的坡度比较大,而且召回率值比较低。与Yolo系列算法比较,Yolov3和Yolov4是先于Yolov5提出的算法,Yolov4在Yolov3的基础上做了一些改进,Yolov5在Yolov4的基础上做了一些改进。实验中应用Yolov5系列最小的网络模型进行比较,可看出Yolov5是mAP最高的算法,故而选择Yolov5s进行改进。
表2 各模型评估对比表
Yolov5s模型的图像预处理时间为0.4 ms、推理速度为9.4 ms、后处理时间为1.3 ms、计算得到FPS(Frame Per Second)为90.09; Yolov5s_gc模型的图像预处理时间为0.4 ms、推理速度为7.7 ms、后处理时间为1.3 ms、计算得到FPS为106.38。表2中Yolov5s表示原始模型,Yolov5s_gc表示添加了CA注意力机制模块、Ghostconv并修改成SIoU_Loss的改进模型。改进后的算法的平均精度均值、精准率和召回率分别达到了97.5%、98.9%和94.9%,分别与原Yolov5s模型相比提升了1.8%、1.7%和5.8%。根据以上结果可见,Ghostconv降低了非关键特征的学习成本,可帮助模型更准确、快速地对目标进行特征提取,从而大大提升了模型训练的效率; CA注意力机制模块对光伏目标检测也有较为显著的效果,主要是由于原算法对特征提取的效果不是很稳定,会受到陆地环境等噪声的影响,从而造成漏检错检,添加了CA注意力机制后的模型对光伏目标的特征提取更加明确。SIoU_Loss 损失函数考虑的因素更综合全面,对训练过程更有利,使检测结果更准确。综合表明,最终的检测精度更高。
实验得到的mAP曲线图如图4所示,VmAP@0.5表示IoU的阈值为0.5时对应的VmAP。从mAP指标曲线图可看出修改后的Yolov5_gc在训练时的波动小,并且在训练收敛时,有更好精确度,VmAP@0.5也更高,模型的效果更好。
图4 mAP曲线
基于以上几种方法的对比可知,对遥感图像光伏目标检测,改进后的模型有比较好的结果。因为遥感光伏图像的目标分布比较密集,环境比较复杂,需要网络具有更强的特征学习能力。改进后的模型对光伏目标检测结果如图5所示,可看出改进的Yolov5s_gc模型几乎能准确检测出遥感图像中相应的光伏目标。但也有目标识别不太准确,比如小的边缘目标识别容易漏检,图6都是边缘小目标,存在漏检的情况。
图5 目标预测结果
图6 目标预测对比
针对当前目标检测模型复杂、检测效率较慢且效果不够理想的问题,笔者根据高分遥感图像中光伏目标的特点,提出了改进的Yolov5_gc网络模型的目标检测方法。将损失函数由GIoU_Loss改成SIoU_Loss,提高模型检测的准确度; 在模型的主干网络Backbone中用Ghostconv替换Conv、将Ghostconv代替C3网络中的Bottleneck模块设计为GhostC3网络,提高模型的检测效率; 嵌入CA block坐标注意力机制模块,加强对光伏目标特征的提取。实验表明,该方法泛化性强,对密集且环境复杂的光伏目标的检测效果较好,在实时性光伏碳中和应用领域具有一定的现实意义。但是该方法依然存在一定的局限性,对于一些比较边缘的小目标没有足够准确地识别。在未来的工作中,将进一步优化网络结构,提高光伏目标检测效率,提高检测精度。