郝俊峰,李玉涛,来博文
(1.河钢数字技术股份有限公司人工智能工作室,石家庄 050035;2.河钢数字技术股份有限公司技术中心本部,石家庄 050035)
由于我国能源结构中石油和天然气的消耗远远高于其他能源,这导致我国长期处于“贫油少气”的能源结构状态。为了满足能源需求,我国煤化工领域和能源领域中的电石作为工业制作乙炔的关键原材料得到了广泛应用。作为世界上最大的电石生产国,我国的电石产能和产量均占据了世界总量的90%以上,充分体现了我国在电石领域的强大实力。据统计,2021年我国电石的产量高达2825 万吨,证明了电石在我国能源经济中的重要地位。
电石的主要成分是碳化钙,它与水会产生剧烈的化学反应,从而产生乙炔气体。虽然电石在工业制造中的作用非常重要,但是我们也应该注意到它的潜在危险性。碳化钙的生产被列入了世界卫生组织国际癌症研究机构公布的致癌物清单中的三类致癌物清单,这表明我们需要在电石生产中引入安全措施来避免危险情况的发生。同时在生产过程中熔化了的碳化钙从炉底取出后冷却,这个环节被称作电石打样,需要人为参与等待冷却后破碎。冷却时间不宜过短或过长,所以需要人员长期看守。
为了确保电石生产的安全和高效,我们需要引入自动化、无人化的生产方式。这就需要电石的目标检测和实例分割技术的应用,因为它们是实现生产自动化、无人化的必要前提。实际上,电石的目标检测和实例分割都是比较困难的技术挑战,因为电石的状态具有多种多样的变化,比如空状态、电石棒、电石三种状态。其中,电石棒和电石较为相似,而且还会出现电石棒上有电石残留的情况。因此,在检测和分割中还会受到光照、炉火光、电石未冷却时的红光和紫光的干扰。传统视觉方法难以满足当前需求,因此我们需要应用先进的人工智能和计算机视觉技术来实现电石的目标检测和分割,通过目标检测和实例分割技术,可以实现对电石准确快速的识别和定位,同时提高生产效率,降低生产成本,确保生产安全;以填补检测和分割技术在电石生产领域的空白。
随着深度学习和计算机视觉的发展,深度学习在目标检测和实例分割方向上已成为最优解。在应用于图像算法基础模型CNN 的基础上发展出了很多研究分支,如区域卷积神经网络(R-CNN)系列、R-CNN[1]、Fast R-CNN[2]、Faster R-CNN[3]和Mask R-CNN[4]等的两阶段算法和以YOLO 系列为代表的单阶段算法,近几年YOLO系列的迭代更新非常快。
YOLO(you only look once)算法是一种深度学习算法,由Redmon等[5]于2016年提出,它可以对图像中的物体进行实时检测和分类。这个算法以其快速和准确的检测能力而闻名,成为计算机视觉领域的一项重要技术。在过去的几年中,YOLO 算法已经经历了很多的发展和改进,YOLOv1 是第一版YOLO 算法,它是基于卷积神经网络的物体检测方法。YOLOv1将图像分成S×S个格子,每个格子预测B个边界框以及每个框的置信度和类别概率。在训练时,YOLOv1使用均方误差作为损失函数,同时也考虑了置信度的加权。YOLOv1相比于其他算法具有较高的检测速度,但是其检测精度略低于一些其他算法。YOLOv2 在YOLOv1 的基础上进行了改进,提高了检测精度和速度。YOLOv2采用了一系列的技术来提高其性能,例如利用BN(batch normalization)层加速收敛和提高准确性,使用多尺度训练和预测来适应不同尺度的物体,引入Anchor Boxes 来更好地适应不同大小的物体,以及在训练时使用目标形状信息来帮助检测物体[6]。YOLOv3 是YOLO 算法的第三版,它在YOLOv2的基础上进行了改进,进一步提高了检测精度和速度。YOLOv3采用了一系列的技术来提高其性能,例如使用FPN(feature pyramid networks)来提取多尺度特征,引入多个输出层来检测不同大小的物体,使用更高效的Darknet-53作为主干网络,使用上采样来提高精度等[7]。YOLOv4 在YOLOv3 的基础上进行了改进,进一步提高了检测精度和速度。YOLOv4采用了一系列的技术来提高其性能,例如使用SPP(spatial pyramid pooling)结构来提取更全面的特征信息,引入CSP(cross stage partial)结构来提高网络的表达能力,使用YOLOv3-tiny 网络结构来提高小物体的检测精度,引入Swish 激活函数来提高准确率和泛化能力,使用DropBlock 正则化来提高泛化能力等[8]。与YOLOv3 相比,YOLOv4 的检测精度得到了进一步提高,同时也保持了很高的检测速度。YOLOv5是由ultralytics公司提出的YOLO的一个独立分支,基于YOLOv4进行改进,使用更轻量级的网络结构,同时也保持较高的检测精度和速度[9]。再到最新的YOLOv5-seg 和YOLOv8添加了实例分割的分支,实现了实例分割的功能,同时在性能上也有所提升。YOLO系列应用的领域也非常广泛,张慧春等[10]基于YOLOv5实现了对植物叶绿素含量的估测;王玲敏等[11]引入注意力机制用YOLOv5 实现了安全帽佩戴的检测;尹靖涵等[12]使用YOLOv5 实现了雾霾天气下交通标志的识别。
YOLOv5 的网络主要包括Backbone(主干网络)、Neck(特征融合)、Head(预测)这三大主要部分。Backbone 部分主要由Focus、CSPNet、SPP(空间金字塔池化)三种模块构成,其主要的功能是特征提取。Neck 部分为FPN+PAN 结构,通过自顶向下和自下而上的方式提取特征图。Head 部分对Neck 传进来的特征图进行结果的预测[13-15]。其结构如图1所示。
图1 YOLOv5网络结构
本次研究所使用的YOLOv5-seg 算法主要是在YOLOv5 的基础上添加了一条分割网络,并在其基础上进行了轻量化的改进,其结构如图2所示。
图2 YOLOv5-seg网络结构
通过图1 与图2 的对比可以发现,在Backbone 结构中Focus 模块被替换为一个6 × 6 的卷积。Focus 模块将特征图进行分块切片操作,然后再将结果拼接使通道扩充,可以在信息不丢失的情况下提高计算力。而将其替换为一个6 × 6的卷积可达到相同的效果,虽然两者的计算量是等价的,但对于一些GPU 设备卷积的计算更易进行。
而SPP 模块则被改进为SPPF[16],SPP 的作用是将任意大小的特征图通过不同尺寸的最大池化层转换成固定大小的特征向量,其结构如图3(a)所示。SPPF 的结构如图3(b)所示,其效果与SPP相同,但运算时间更少。
图3 模块结构
YOLOv5 中的C3模块是基于CSPNet提取分流的思想[17],同时结合 Bottlenneck 残差结构的思想而设计的,其结构如图4(a)所示。为了进一步轻量化,并且丰富梯度流信息,在C3 的基础上结合ELAN[18]的思想设计了C2f 模块,其结构如图4(b)所示。
图4 模块结构
在Head 部分,增加了一条Protonet 作为分割的输出。算法的损失函数共有四个,分别为分类损失cls_loss、边界框损失box_loss、置信度损失obj_loss 和分割损失seg_loss。分类损失cls_loss 用于判断模型是否能够识别出图像中的对象,并将其分类到正确的类别中;边界框损失box_loss用于衡量模型预测的边界框与真实边界框之间的差异,这有助于确保模型能够准确地定位对象;置信度损失obj_loss 用于衡量模型预测的框(即包含对象的矩形)与真实框之间的差异[19-21];分割损失seg_loss 用于衡量模型预测的mask 与真实的mask 的差异。其中分类损失、定位损失和分割损失都是使用二元交叉熵损失函数[22],其中x为样本,y为标签分数,a为预测输出分数,n为样本总量,函数表达式如下:
而置信度损失obj_loss则是用Generalized Intersection over Union(GIoU)[23]来进行评估:
其中:Bgt=(xgt,ygt,wgt,hgt)表示真实的回归框,B=(x,y,w,h)表示预测回归框,C则为覆盖B和Bgt,这样在不重叠的情况下,预测框也会向目标框回归。
相较于两阶段视觉算法,YOLO模型具有相对轻量型的结构和较高的效率,基于YOLOv5算法我们设计了电石检测分割的方法,并开发了相应的系统。方法实现部分的主要步骤如图5所示。
图5 电石检测分割的主要步骤
图6 电石情况
图7 对比结果
由于我们只需要电石的分割输出,而检测算法的运算速度明显要高于分割算法,在训练集标注方面检测算法的标注成本也明显低于分割算法,所以我们先使用检测模型将电石检测出来,再传入分割模型进行分割,以达到节省算力的目的。同时针对电石棒与电石易混淆的问题,为了增加系统的容错率,在检测模型和分割模型之间添加了一个图像的二分类模型,对电石和电石棒进行区分。
使用的是YOLOv5-l 模型进行目标检测,主要的检测目的是区分当前检测区域内是否有电石存在。根据实际场景的情况可以分为“空状态”“电石棒”和“电石”三种。为了减少模型的误检情况,在实际的实时检测中,系统设定连续15 次“空状态”则判定为空,连续5 次“电石”则判定为电石。系统将判定为电石的区域沿检测框裁剪出来,发送到分割模型进行下一步操作。由于在工业场景中干扰因素较多,经常会出现背景板污染、强光干扰、电石未冷却等因素,影响分割后图片的进一步使用。所以需要提前将这些情况排除,将误检或者效果不佳的样本收集起来,重新标注并训练和更新模型。
分割模型使用的是YOLOv5-seg-m 模型,直接将检测模型传过来的电石图片进行分割,并将效果不佳的样本收集起来,进行标注并训练和更新模型,此模型的更新侧重于负例的更新,以便有效地排除受到干扰的情况。
为了减少参数储存与内存占用空间,将模型进行参数量化操作。将32 位浮点(FP32)网络参数量化到16 位浮点数(FP16)或者8 位整型(INT8),从而节省带宽加速运算,降低设备能耗。
而转换数值的方法则会显著影响预测的精度。以FP32到INT8为例,量化的映射方式主要可分为对称量化和非对称量化两种[24]。
对称量化是将FP32 参数的最大值的正负区间投影在INT8 的正负区间内[-128,127],[-maxF32,maxF32]→[-maxq,maxq],xf为 FP32 下的参数,xq为转换在INT8 下的新参数,其转换关系如下:
非对称量化[25]是将FP32 参数的最大值到最小值的区间投影在INT8 的区间内[0,255],[minF32,maxF32]→[minq,maxq],xf为 FP32下的参数,xq为转换在INT8 下的新参数,其转换关系如下:
本次实验主要是针对分割算法(YOLOv5-seg)的横向和纵向的比较。训练所使用的数据集是自制的电石数据集,使用labelme 标注样本数为10000,样本中有摄像头采集的3840 × 2160 原图,也有经过YOLOv5 分割后的不定大小的样本。为了后期方便部署,YOLOv5-seg 使用的权重是.onnx格式的。
实验中常采用召回率(Recall)、精确率(Precision)、mAP等评价指标[26]。首先表1给出二分类性能指标TP、FP、FN、TN的定义。
表1 TP、FP、FN、TN的定义
T/F表示预测是否正确,P/N表示预测的标签。召回率的表达式为Recall=,精确率的表达式为Precision=。算法以均值平均精度(mean average precision,mAP)作为评价指标,PmAP的计算表达式为:
YOLOv5-seg的不同模型和不同输入尺寸进行对比,输入尺寸分别为640×640和960×960;三种模型 YOLOv5-seg_l、YOLOv5-seg_m 和 YOLOv5-seg_s,推理时使用的硬件配置GPU 为1050 T,训练轮数为40 轮,最佳参数的轮次集中在15~25轮。其中评估的参数为Recall、Precision、mAP、Predict_t、cls_loss、box_loss、obj_loss 和 seg_loss,表2为评估参数。
表2 YOLOv5-seg不同模型和尺寸的评估参数
这些参数中参考价值最大的是mAP,可以较好地衡量出分割的效果;box_loss 和obj_loss是描述检测框的效果的参数;综合参考mAP、损失函数、Recall、Precision 和推理时间,可以看出640 × 640 输入的模型的函数收敛情况不如960 × 960 的收敛情况,但差距并不明显,从mAP、Recall、Precision上来看640 × 640输入的模型的效果明显要好于960 × 960 输入的模型,所以我们选择640 × 640 输入的模型。主要考虑到分割效果和推理时间,我们最后选择m_640模型。
YOLOv5-seg 与 Mask R-CNN算法进行对比,使用相同的训练集和验证集进行训练。硬件配置GPU 为NVIDIA T4,训练轮次为60轮。首先,在训练过程中,YOLOv5-seg 在单轮的训练时间要比Mask R-CNN 更短,收敛速度也更快;但从函数的收敛情况来看,Mask R-CNN 的收敛更加稳定。从模型效果来看,二者效果基本达到一致,但在推理时间上,Mask R-CNN 所需时间接近1 s,而YOLOv5-seg只需要45 ms。
电石的检测和分割具有重要的研究与应用价值。但是,电石检测和分割存在着业务场景复杂、电石与电石棒易混淆、检测和分割精度要求高等问题。本文设计了面向实际业务场景的电石检测分割的方案与方法,在实际场景数据采集、电石状态与干扰状态的定义、数据标注等方面做出了重要贡献。提出的基于YOLOv5-l 和YOLOv5-seg-m 网络的电石检测分割方法在检测精度与速度上取得了较好的结果,对于电石的检测和分割的判识基本达到了应用的需求,且检测和分割的速度远超同类型的算法。之后将针对排除光照影响、提高分割精度和后续评判电石质量模型的方向继续深入研究。