杨 武,余华云,赵昕宇,何 勇,徐红牛
(长江大学 计算机科学学院,湖北 荆州 434023)
近些年来,全球变暖导致极端天气频繁出现,各地区夏季高温不断打破历史记录,极端高温天气致使森林火灾发生概率大大增加。森林火灾不同于城市中发生的火灾,不仅在形态上与之存在较大差异,而且其破坏力之大、影响力之广都远远超过城市火灾,同时它蔓延极快的特点导致往往人眼发现时就已经难以控制,因此建立起日常监控和预警对森林火灾防治具有重要意义。
传统的火灾检测一般使用红外传感器,利用温差进行识别,但是这类检测系统极易受到电磁和光两方面的干扰。随着机器学习和深度学习在图像方面的应用和成功,越来越多的研究用计算机视觉来改进算法,提高检测性能。Ming等[1]提出了一种基于支持向量机算法的火灾探测方法,这种神经网络模型在与自身相似的背景下实现了精确的火灾探测,有效地降低了探测错误率。黄翰鹏等[2]针对传统火灾探测中灵敏度不高、响应慢的问题,结合模糊神经网络(FNN)模型和温度时序模型(TSM)的火灾预警算法,取得了一定的效果。卢鹏等[3]使用MobileNet改进深度卷积神经网络SSD的基础卷积网络并使用迁移学习在实时火焰检测领域达到了较好的效果。张彬彬等[4]针对火灾中小目标、多目标和边缘模糊等导致的检测精度下降问题,提出了 一种基于YOLOv3改进的火焰目标检测算法,达到了火灾检测的实时性和高效性。王冠博等[5]为了解决火焰图像检测易被周围环境影响等问题,通过K-Means聚类和注意力机制提出改进型YOLOv4火焰图像实时检测模型,使检测性能有了较大的提升。目前大多数检测算法针对室内或者城市火灾,一些甚至只对火焰和烟雾中的一种提出检测[6],而森林火灾在发生初期对烟雾的检测尤为重要,火焰和烟雾在形态与结构上与城市火灾差异较大,检测对象尺寸变化大,火焰和烟雾对森林火灾检测一样重要。森林火灾检测设备(无人机、高山监控)性能一般较差,设计的森林火灾检测算法既要轻量易于部署,又要保证检测效率。
YOLOv5[7]目前以其轻量、部署相对简单、速度较快和准确率较高的特点在工业检测方面占据重要地位,因此选择在YOLOv5的基础上针对森林火灾存在的问题和特点进行改进。首先根据结构重参数化思想,对主干网络的普通卷积块和瓶颈结构进行改进,结合RepVGG(Re-param VGG)[8]、DBB(Diverse Branch Block)[9]和轻量化网络思想[10-11]设计出RSBlock(Re-param Shuffle Block)代替原主干网络,增强其特征提取能力,推理时利用参数转换融合分支,保证性能提高的同时,无损压缩模型。之后融合轻量级CoordAtt注意力机制[12]进一步提高检测精度。同时考虑到低算力设备的实际需求,在Neck方面,根据空洞卷积和深度可分离卷积(Depthwise Separable Convolution,DSC)[13-15]的思想设计出轻量化的特征融合块(Feature Enhancement Module,FEM)替换上采样前的普通卷积,使用结构重参数化等轻量化思想设计出新的深度可分离卷积(Re-param Depthwise Separable Convolution,RDSC)和RSDWBlock(Re-param Shuffle Depthwise Block)对原网络进行改进,进一步降低参数量,保证检测速度并提高检测精度。
YOLOv5官方代码中有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x这4个版本,YOLOv5s(如图1所示)是其中深度最小、特征图的宽度最小的网络,同时速度也最快,在工业检测方面应用广泛。YOLOv5模型自发表以来不断更新,改进的模型基于6.2版本。
图1 YOLOv5s结构Fig.1 Structure of YOLOv5s
模型由输入(Input)、骨干网络(Backbone)、颈部(Neck)、头部(Head)和输出(Out)组成。输入端主要包括Mosaic数据增强、自适应锚框计算等预处理操作。骨干网络主要由CBS卷积块、C3结构和特征金字塔池化(SPPF)等组成,主要功能是不断进行特征提取后再进行特征融合。颈部则使用类似路径聚合网络(Path Aggregation Network,PANet)[16]的网络结构得到80 pixel×80 pixel×512 pixel、40 pixel× 40 pixel×512 pixel、20 pixel×20 pixel×512 pixel三种大小的特征图,头部则采用不同尺度的特征图用于检测。
由于现有的大多数火焰烟雾数据集收集的场景与野外环境差异很大,还没有只包含森林火灾的数据集,为了使模型对森林火灾具有更强的针对性,从github、aistudio以及互联网收集了由无人机、高山防火监控等设备拍摄的全球真实森林火灾图片,如 图2所示。
图2 数据集示例Fig.2 Dataset example
分析数据发现,数据集中存在大量根据火灾视频逐帧截取的图片,相似度极高,因此使用结构相似度(Structural Similarity,SSIM)度量算法筛选相似度过高的图片。该算法根据2张图片的亮度对比(式(1))、对比度对比(式(2))、结构对比(式(3))得到式(4),进而得到一个0~1的值,越大则表示相似度越高,式中N表示图片像素点总数,xi表示图像像素值 ,C1、C2、C3为常数。
(1)
(2)
(3)
S(x,y)=f(l(x,y),c(x,y),s(x,y))=
初期收集到的4 712张图片在处理过程中若 2张图片SSIM相似度值大于0.85,则只保留其中 一张,经过处理后得到3 166张森林火灾图片。
同时为充分模拟野外监测场景,增强模型泛化能力,加入约10%的负样本[17]。具体来说向数据集加入了300张不包含森林火灾的图片,其中包括易于和火焰混淆的秋季叠翠流金的森林、落日夕阳、银寒月光和深山村落等图片,如图3所示。
图3 数据集示例Fig.3 Dataset example
得到由3 466张不重复的图片构成的森林火灾数据集,其中大多数没有标注或者标注粗糙,因此采用LabelImg对图片重新进行矩形框标注并分为烟雾(smoke)和火焰(fire)两个类别,如图4所示。
图4 标注示例Fig.4 Annotation example
多分支网络结构(ResNet等)[18]早已被证明比单分支具有更好的性能,但是其推理速度较慢。RepVGG使用结构重参数化技术,将训练阶段的多分支结构在推理时水平融合成单分支,解耦训练与推理的网络结构,使得在推理时既有性能的提升,同时也保持了原来单分支的推理速度,其结构如图5所示。
图5 RepVGG结构Fig.5 Structure of RepVGG
卷积层公式为:
Conv(x)=W(x)+b。
(5)
BN层公式为:
(6)
卷积层和BN层融合:
(7)
将Conv_3×3(3×3的卷积)和Conv_1×1(1×1的卷积)在水平方向合并,其转换思想是Conv_3×3中心值等同于Conv_1×1中心点的值,而中心点以外的其他权值为0,如图6所示。
图6 Conv_1×1 转换为Conv_3×3Fig.6 Conv_1×1 to Conv_3×3
Indetity分支层先将其转换为权重为1的Conv_1×1,再将Conv_1×1转换成Conv_3×3即可。
以上操作将分支结构全都转换成Conv_3×3,多个并行的Conv_3×3通过对应的权重(W)和偏置(b)相加,融合成一个Conv_3×3:
y=(W1+W2+W3)X+(b1+b2+b3)。
(8)
Inception网络模块(Inception Network Module)[19]表明多分支拓扑以及不同规模和复杂度的各种路径的组合可以丰富提取的特征空间以提高性能,但是这种复杂的结构会严重降低推理速度。自重参数化结构被提出以来,根据Inception的思想,研究人员又提出多样性分支模块(Diverse Branch Block,DBB),它保持训练时Inception的多分支微观结构,推理时将DBB转换为单个卷积,其结构如图7所示。
DBB与RepVGG在重参数化方面的不同点在于多了不同尺寸卷积核在垂直方向的融合,即垂直方向Conv_1×1和Conv3_3的融合,将Conv_1×1记为F1,Conv3_3记为F2,则对于2个连续卷积,输入I有:
O=(I×F1)×F2=I×F1×F2。
(9)
3.1.1 Backbone改进
将训练阶段中步长为2的下采样Conv_3×3重参数化,替换成RepConv_3×3(如图8所示),在推理时与原Conv_3×3在结构上一致,并且可以更好地解决模型退化问题,提高特征提取能力。
图8 RepConv_3×3结构Fig.8 Structure of RepConv_3×3
分析图1发现Backbone中大量的C3结构使用了较多残差块(图1中Res),该结构会降低推理速度。利用重参数化思想对该结构进行改进,考虑到在Backbone中C3结构没有下采样功能和通道数的变化,设计带残差边结构的RepConv_1×1和带残差边结构的ResDBB,如图9和图10所示。
图9 RepConv_1×1结构Fig.9 Structure of RepConv_1×1
图10 ResDBB结构Fig.10 Structure of ResDBB
同时根据ShuffleNet提出的轻量化思想,引入通道分离(Channel Split)和通道重排(Channel Shuffle)操作,设计一种在Backbone中可重复迭代的轻量化高效特征提取块RSBlock,如图11所示。
图11 RSBlock结构Fig.11 Structure of RSBlock
Channel Split将输入的特征图按通道分为 2组,其中一组不做任何处理保持恒等映射,另外一组经过2个具有相同输入输出通道数的卷积块,这样做的好处是只有一半的特征进行密集卷积操作,极大地减少了计算量和内存使用。之后使用Concat进行2组通道上的融合,使得输出通道数不变,提高了特征的重复利用。最后再进行Channel Shuffle操作,对融合后的特征图在通道上进行规则打乱,提高2组通道的信息交流。
在Backbone使用RSBlock代替原网络中的C3结构,并重复迭代适当的数量以此构建新的特征提取网络。
3.1.2 Neck改进
考虑到一般算法在实际部署时往往受到边缘设备性能的影响,对模型的大小和检测速度都有较高的要求,因此对Neck结构进行改进,使模型更加轻量化。如今大多数轻量化网络不同程度上使用了DSC,它由一个逐通道卷积(Depthwise Convolution)和一个逐点卷积(Pointwise Convolution)组成,如 图12所示。
图12 DSC结构Fig.12 Structure of DSC
逐通道卷积即分组数为输入通道数的组卷积,在普通卷积中一个卷积核跟所有通道进行卷积计算,而在逐通道卷积中,一个卷积核只负责一个通道,之后将所有卷积核的输出再进行拼接得到最终输出。
逐点卷积即分组数为1,卷积核大小为1的普通卷积,在DSC中负责改变输出通道的数量和对逐通道卷积输出的特征图进行通道上的融合。
DSC的参数量远远低于普通卷积,但是低参数量是以牺牲一部分精度为代价,如何保持低参数量的同时提高卷积效率是大多数轻量化网络优化的方向。
分析YOLOv5s的网络结构发现,当特征图经过Backbone不断提取后通道数达到最大,但是Neck结构的上采样阶段分别需要其1/2和1/4的通道数,原来的网络结构仅仅使用2个Conv1×1来保证通道数的持续减半(图1中Neck结构的前面2个CBS),导致特征图丢失了大量语义信息。多尺度空洞卷积通过不同扩张因子(dilation)的卷积联合提取特征在语义分割领域取得了较大的成功[20],考虑到该结构的有效性,将空洞卷积和DSC结合起来设计如图13所示的特征增强模块。
图13 特征增强模块Fig.13 Feature enhancement module
为减少参数量,FEM结构使用了1个标准卷积和3个不同扩张率的逐通道卷积提取不同尺度的特征,之后再进行通道上的堆叠,最后使用一个标准卷积达到不同尺度特征的融合。使用FEM替换原Neck中最初的2个CBS。
为进一步减轻网络,使用结构重参数化对DSC进行改进,将DSC中逐通道卷积替换为分组数为输入通道数的ResDBB(如图10所示),逐点卷积则替换为RepConv_1×1(如图9所示)。为缓解分组卷积组与组之间缺乏信息交流,在逐点卷积的后面引入Channel Shuffle操作,同时在非线性激活函数方面选择对硬件更为友好的H-Swish(Hard Swish),并以此构建RDSC,如图14所示,并使用RDSC替换原网络中Neck结构的Conv_3×3。
图14 RDSC结构Fig.14 Structure of RDSC
为进一步降低参数量,提高检测速度,将DSC思想引入Neck中的C3结构,因此提出RSDWBlock结构替换Neck中的C3结构,如图15所示。
图15 RSDWBlock结构Fig.15 Structure of RSDWBlock
考虑到Neck结构主要功能是特征融合,因此相对于Backbone中的RSBlock,在左侧分支增加1个RepConv_1×1。右侧分支中DW_ResDBB是分组数等于输入通道数的ResDBB模块,同时在最后新增 1个RepConv_1×1,作用是调整输出的通道数,使之满足下一层网络输入要求。
以往的视觉注意力机制SENet(Squeeze-and-Excitation Networks)[21]、CBAM(Convolutional Block Attention Module)[22]对每个通道使用全局平均池化,该操作虽然能提取每个通道的全局信息,但是丢失了目标非常重要的位置信息。CA为解决信息丢失问题,分别对水平方向、垂直方向进行全局平均池化,在2个方向上同时关注感兴趣的地方,准确地定位出目标对象的位置,其结构如图16所示。
图16 CA结构Fig.16 Structure of CA
具体来说,先使用(H,1)和(1,W)的池化核沿着水平坐标和垂直坐标方向对每个通道进行编码,则高度为h的第c个通道:
(10)
同理,宽度为w的第c个通道:
(11)
以此得到2个不同方向的特征图。之后再级联2个特征图,使用一个Conv_1×1进行C/r比例的下采样,经过批处理和非线性激活函数进行F1变换:
f=δ(F1([zh,zw]))。
(12)
使用split函数将不同方向的特征图切分开,再使用2个Conv_1×1将特征图恢复到输入时的通道数:
(13)
经过sigmoid函数后得到2个方向的注意力权重,最终依次乘以原始输入得到最终的结果:
(14)
经过多次实验,将CA注意力机制加在Backbone中SPPF结构的前一层效果较好,达到了速度和精度的最优平衡,如图17所示。
图17 改进后的YOLOv5s 结构Fig.17 Improved YOLOv5s network structure
实验所用的服务器环境为:CPU为Intel(R) Xeon(R) Platinum 8255C,GPU为NVIDIA RTX 2080Ti,显存为11 GB,操作系统为Ubuntu 20.04,编译环境为Python3.8+PyTorch1.10.0+Cuda11.3。
训练参数中,优化器选择为随机梯度下降(SGD),初始学习率设置为0.01,循环学习率为 0.01,动量为0.937,权重衰减系数为0.000 5。考虑到改进后的网络结构发生了较大变化,官方提供的预训练模型已无法使用,因此将迭代次数设置为300,不使用预训练权重重新开始训练,同时批尺寸设置为32,输入图片为640 pixel×640 pixel,同时启动Mosaic数据增强[23],随机对4张图片进行缩放、平移、左右翻转和色彩变换等处理后再进行拼接,并将其增强概率设置为0.6。Mosaic数据增强虽然会极大丰富训练样本数量、增强模型泛化能力,但是其拼接操作会使小目标变得更小,导致模型泛化能力衰退,因此以一定的概率进行Mosaic数据增强既可以丰富样本,又不至于丢失小目标的检测能力。
将自建的3 466张森林火灾数据集按照8∶1∶1的比例随机划分为训练集、验证集和测试集,最后得到2 772张训练集,验证集、测试集分别为347张。
实验结果采用精确度(P)、召回率(R)、平均准确度(mAP@0.5)等作为评价标准,具体计算如下:
YOLOv5s及其改进点的消融实验如表1所示,Backbone改进相对于原始的准确度即mAP@0.5提高了2.0%,虽然训练权重大幅增加了,但是推理权重相对于原始减小了1.6 MB,这是重参数化模型训练和推理解耦的特点。同时推理时间也有减少,分析原因是Backbone改进中仅仅对一半的通道数进行密集卷积操作(ResBlock),同时转换成推理结构后卷积块迭代的数量也相比原网络少,提高了检测速度。添加CA注意力机制后,准确度也有相对的提高,但略微降低了检测速度,同时推理权重也有少量增加。经过Neck部分的改进,由于使用了DSC结构,推理权重下降至原来的76%,最后至10.5 MB,但是推理时间有少量增加,基本恢复到原始网络,分析原因是由于FEM增加了网络复杂度,同时DSC对于内存访问量较高,频繁的内存访问影响了检测效率,但是基本保持了原YOLOv5s推理速度快的优点。推理权重的减少对于边缘设备的部署更加友好,并且准确度提高了0.8%。改进后的重参数化YOLOv5s和原YOLOv5s训练阶段的检测框损失值和精确度对比如图18所示。
表1 消融实验结果
(a)检测框损失 (b)mAP@0.5
为更好体现改进后的算法优势,将改进后的重参数化YOLOv5s和主流的轻量级目标检测网络在同一训练集上进行实验对比,结果如表2所示。由表中数据可知,改进后的YOLOv5s的精度均高于其他网络,同时推理权重也较小,检测速度虽然不及YOLOX-Tiny和YOLOv7-Tiny,但亦满足实时检测的要求,保持了轻量化网络的特点。
表2 网络对比结果
改进后的YOLOv5s和原YOLOv5s选取训练和验证集以外的图片进行测试,同时检测参数保持一致,具体结果如图19所示,左边为改进后YOLOv5s的检测结果。图19(a)中只有火焰,但是右图将白光误检成烟雾,左图没有发生误检情况,同时对火焰的检测效果好于右图。图19(b)属于白天火焰不可见,仅有烟雾的情况,两边都能将烟雾准确地检测出来,但左图对烟雾检测的置信度较高。图19(c)属于夜间发生森林火灾的情况,两边都取得了不错的检测效果,但是左边对于烟雾和火焰检测的置信度均高于右边。图19(d)属于受树木遮挡的情况,这在森林火灾中非常常见,对于这种情况,左边能很好地检测出火焰的轮廓,右边检测情况则稍差一些。
针对目前森林日常巡检困难,巡检设备性能受限、检测算法无法达到速度和精度的平衡,提出一种改进的重参数化YOLOv5s的森林火灾检测算法。主要结论如下:基于公开的数据集和互联网图片制作了一个针对性强的森林火灾数据集,同时为增加模型鲁棒性,还加入了10%的背景图片,提高模型的泛化能力。根据重参数化和轻量化网络的思想对YOLOv5s进行改进,提出RSBlock和RSDWBlock 两种瓶颈结构代替原网络中的C3模块,使用RepConv和RDSC进行下采样并用FEM特征增强来代替Neck中的Conv_1×1,增强多尺度特征融合,同时在主干网络中加入了轻量化的CA注意力机制。通过上述改进,模型参数量下降至原来的76%,精确度提高了4.0%,检测速度也符合实时检测的要求。经过消融实验和对比实验,改进后的重参数化YOLOv5s具有相对较高的检测精度,在轻量化方面也具有优势,对日常森林监控和巡检具有一定的意义。森林火灾检测环境复杂、对象尺度变化大,复杂环境下火焰烟雾目标容易发生漏检,下一步工作将针对多尺度复杂环境中的火焰烟雾进行视频多帧分析检测。