基于改进YOLACT++的碧根果图像实例分割模型
2022-09-02王祥舒军雷建军杨莉
王祥,舒军,雷建军,杨莉
(1 湖北工业大学 电气与电子工程学院,武汉430068;2 湖北第二师范学院 计算机学院,武汉430205)
碧根果加工过程中,为了使碧根果方便入味会进行破壳处理.由于果壳硬度存在差异,使得部分碧根果未能取得理想的破壳效果,存在核仁大面积破损和未破壳的情况.为了保证碧根果的出售品质,需要对破壳状态合格的碧根果进行分级,目前主要通过传统图像处理方法[1-2]将图片中的碧根果与背景分割开,测量果长与果径进行分级处理.由于传送带机械振动造成果壳掉落、碧根果堆叠和打光角度变化造成阴影生成,使得传统图像处理方法不能很好地完成碧根果的分割任务,无法区分破壳类别和碧根果堆叠时的单个实例,给后续的碧根果自动分级造成很大的困难.因此,实现高可靠性的碧根果实例分割是目前亟需解决的问题.
近年来,实例分割发展主要有3个方向,第一个方向是自上而下基于锚框(anchor)[3]的方法.Mask R-CNN[4]算法先通过锚框产生ROI 区域,再对该区域进行分类、边界框回归和掩膜预测.该算法的实例分割精度与检测精度较高,但速度难以满足工业需求.YOLACT 算法作为第1 个实时实例分割模型,利用网络自身的平移可变性这一特性,生成对不同实例产生不同响应的特征图,将特征图进行线性组合,进而区分不同实例.提出的Fast NMS 相较于传统NMS[5]极大地提升了候选框筛选速度.YOLACT++[6]算法通过引入可变形卷积,增加更多比例的锚框和掩膜评分机制,进一步提高检测精度.BlendMask[7]借鉴YOLACT 算法中掩膜加权求和的思想,提出了一个融合了高层特征全局信息与低层特征位置信息的blender模块,获得高质量的实例掩膜;第2 个方向是自下而上的基于语义分割的方法.SSAP[8]算法通过学习像素对的亲和力金字塔,判断两个像素是否属于同一实例,该算法精度不高且速度较慢.Deep Snake[9]算法通过提取图像顶点特征,利用循环卷积预测顶点的偏移量逐步调整轮廓来逼近物体边界,该算法经过多次迭代才能获得较为精准的轮廓边界;第3 个方向无需用到锚框与聚类算法,端到端地预测实例掩膜和语义类别.WANG等提出的SOLO[10]算法核心思想是按位置和目标大小分割出不同实例.将图片划分为多个网格,将含有目标中心点的网格单元同时进行类别预测和实例掩膜预测.SOLOv2[11]通过采用动态mask head 分支与Matrix NMS,提高算法的实例分割速度.
将上述部分实例分割模型用于碧根果数据集,发现YOLACT++边缘分割效果与分割速度较高,但存在部分区域误分割、预测框不精确和误检情况发生.为满足碧根果自动化加工需求,确保检测与分割精度,本文提出基于改进的YOLACT++算法用于碧根果的实例分割任务.针对误分割问题,在主干网络中引入改进的Res2Net[12]模块增强主干网络信息提取能力.采用CIoU[13]边界框回归损失函数,提高预测框的精度.将DIoU[14]与Fast NMS 结合,改善预测框的误检情况.
1 碧根果检测流程
碧根果检测流程如图1 所示.使用工业相机对破壳后的碧根果进行图像采集.服务器采用训练好的实例分割模型对碧根果图像进行实例分割,获得不同破壳形态的掩膜和预测框.判断预测框是否相交,若相交认为碧根果堆叠,进行回流处理.对破壳合格的碧根果通过掩膜测量果长与果径进行分级.同一颗碧根果检测3 个角度的图像,取其中两次相同预测等级作为最终等级,否则回流处理.控制气泵将不同级别的碧根果吹入对应的收集桶中,对破损和未破壳状态的碧根果进行单独收集.
图1 碧根果检测流程图Fig.1 Pecan detection flow chart
2 YOLACT++算法原理
YOLACT++算法网络结构如图2 所示.基于ResNet101 构造的主干网络对输入的图像进行特征提取,生成C1~C5 五个特征图.将C3、C4、C5 三个特征图作为特征金字塔的中间输入层,经过多个尺度的特征融合生成P3~P7 五个特征图,再进行两个并行的分支任务.第1 个分支将P3 特征图通过原型分支(ProtoNet)产生k个不同区域响应的原型掩膜;第2 个分支在预测头中以特征图的像素点为锚点,生成长宽比为[1,1/2,2,1/3,3]的锚框,用于检测是否存在实例,再分别进行锚框分类(Class)、原型掩膜的系数预测(Mask Coefficients)、边界框回归(Bounding Box Regression).Fast NMS 对经过边界框回归后的候选框进行筛选,获取最终的实例预测框.将原型掩膜与掩膜系数进行线性组合,生成的图像经过预测框区域裁剪和阈值分割,进而获得最终的实例掩膜.
图2 YOLACT++模型结构Fig.2 YOLACT++model structure
3 YOLACT++算法改进
3.1 主干网络的改进
YOLACT++采用基于ResNet-101 的主干网络,其中Bottleneck 残差结构作为ResNet-101 的基本模块,其结构如图3(a)所示,该结构在解决梯度消失的同时增强网络的特征提取能力.为加强对图像深层特征的提取,充分利用单层内的特征,本文采用改进的Res2Net 模块替换主干网络中的Bottleneck模块,以获得更强的分层多尺度表示能力.Res2Net结构如图3(b)所示.Res2Net 将经过1 × 1 卷积的特征图按通道均匀地分为4 个特征子图,每个特征子图含有相同的空间大小和通道数.从第三个特征子图开始,将特征子图与前一个经过3 × 3 卷积的特征子图输出相加作为该特征子图对应卷积的输入,最后将4 个特征子图的输出结果进行合并,并经过1 × 1卷积输出.通过对特征子图的分割和拼接实现特征重用,扩大了感受野,有利于全局和局部信息的提取,最后通过卷积输出.改进的Res2Net 增加了CBAM[15]注意力模块,结构如图3(c)所示,对通道特征与空间特征进行加权,抑制无效特征,使得网络更关注于目标区域特征.
图3 网络结构对比Fig.3 Network structure comparison
CBAM 结构如图4 所示,由通道注意力模块和空间注意力模块构成.分别为特征图生成一维的通道注意力权重和二维的空间注意力权重,用于加强网络的特征提取能力.
图4 CBAM结构Fig.4 CBAM structure
在通道注意力模块中将输入的特征图U(大小H×W×C)经过全局最大池化和平均池化,获得两个1 × 1 ×C的特征图,其结果分别输入权值共享的两层感知器(MLP),将输出的特征相加并经过激活函数,生成通道注意力权重MC.最后将输入特征图与通道注意力权重相乘,生成通道注意力特征图F",计算过程如下:
其中AvgPool表示全局平均池化,求取每个通道的像素平均值;MaxPool表示全局最大池化,保留每个通道的特征图的像素最大值;f1表示输入通道C,输出通道C/16的全连接层;f2表示输入通道C/16,输出通 道C的 全 连 接 层;δ表 示ReLU 函 数;σ表 示Sigmoid函数.
在空间注意力模块中将通道注意力特征图F′ 作为输入先进行通道维度的平均池化和最大池化,获得两个H×W× 1 的特征图,再将两个特征图拼接后通过7 × 7的卷积层,结果经过Sigmoid函数,得到二维单通道的空间注意力权重Ms.将空间注意力权重与通道注意力特征图相乘,生成同时具有空间与通道注意力的特征图F″,计算过程如下:
其中AVGPool表示通道维度平均池化,对每个通道的特征图对应像素相加取平均值;MAXPool表示通道维度最大池化,保留各个通道特征图对应位置的最大像素值;f3表示大小为7 × 7 的卷积,输出通道为1.
3.2 边界框回归损失函数改进
边界框回归损失的目的是为了衡量预测框与真实框的位置差距,即预测框的回归性能.YOLACT++采用SmoothL1 作为边界框回归损失函数,对预测框的长、宽及中心点的横、纵坐标偏置量进行损失计算,计算过程如下:
其中xa,ya,wa,ha表示anchor的中心点坐标、长和宽;x*,y*,w*,h*表示真实框的中心点坐标、长和宽;u表示网络预测的anchor偏置矩阵.
原损失函数因为缺乏对交并比(IoU)和最小外接矩形的计算,无法准确衡量预测框的位置.引入的CIoU 损失函数将预测框与真实框的交并比、最小外接矩形、几何中心距离及长宽比例均纳入边界框回归损失计算范围,相较原损失函数能更加精确地衡量边界框回归性能.边界框损失函数LCIoU定义如下:
其中ρ表示预测框b与目标框bgt几何中心的距离;c表示预测框与目标框最小外接矩形的对角线长度.
3.3 快速非极大值抑制改进
YOLACT++采用快速非极大值抑制(Fast NMS)算法消除多余的候选框,获得最终预测框,Fast NMS算法的具体步骤如下:
(1)根据类别得分取每个类别的前n(n=200)个候选框,并按照得分大小排序,按顺序分别计算每个候选框与其他n- 1 个候选框的IoU 值,获得一个维度为n×n的IoU对角矩阵Xij:
(2)保留矩阵Xij的上三角区域,主对角线和其余区域元素设置为0,公式为:
(3)在上三角矩阵Xij中保留各列方向的元素最大值,获得维度为1 ×n矩阵Kij,即某一候选框与得分高的候选框做比较,取最大IoU值,公式为:
(4)利用阈值比较Kij<t(t=0.5)来筛选需要保留的候选框.两个候选框IoU 值大于阈值被认为重合度高,Fast NMS将大于阈值的候选框删除,即:
Fast NMS 算法虽然会极大地降低候选框的冗余,但容易造成重叠率较高的不同实例目标候选框被误删除,使得部分相邻的同类对象容易被视为一个实例.针对这一问题,本文在Fast NMS 计算中引入DIoU,DIoU的定义如下:
其中ρ表示候选框Bi与Bj中心点之间的欧式距离;C表示候选框Bi与Bj最小外接矩形的对角线长度.
通过比较图5 中不同候选框的几个位置,可以发现即使两个候选框IoU 值相同,但对应的DIoU 值均不同.中心点距离越近、外接矩形越小的候选框越容易判断为同一实例的候选框,对应的DIoU值也越大,可通过这一数据用于预测框的筛选.
图5 不同候选框对应IoU与DIoU值Fig.5 Different candidate boxes correspond to IoU and DIoU values
4 实验
4.1 碧根果图片采集与数据集建立
本研究以碧根果作为研究对象,对每颗碧根果采集3 个位置对应不同角度的图片,共采集1500张,并对图片采用随机翻转、随机裁剪、随机亮度、色彩空间转换这4 种数据增强技术,将数据集扩充到6000 张.用Labelme 标注工具完成图像的标注工作,将图像的语义分为4 类:背景、合格品、次品、回流品,对应的标签分别为background、qualified、scrap、backflow.其中合格品表示果壳存在裂口且核仁未破损,次品表示果壳和核仁大部分破损,回流品表示未破壳的碧根果.部分标注图和数据增强图片如图6所示.
图6 数据集处理Fig.6 Dataset processing
4.2 实验环境
本文实例分割实验硬件配置及软件平台如表1所示.
表1 实验硬件平台与软件平台Tab.1 Experimental hardware platform and software platform
4.3 实验指标
选用AP(Average Precision)作为预测框和实例分割掩膜的评价指标.AP 计算如(26)~(28)式所示.由于IoU 阈值的选取会影响精确度和召回率大小,选用AP50(IoU=0.5),AP75(IoU=0.75),mAP(IoU=0.50:0.05:0.95)作为评价指标.
其中TP表示模型预测类别与真实标注类别匹配的样本数量;FP表示模型预测类别与真实标注类别不匹配的样本数量;FN表示预测为背景但真实标注为其他类别的样本数量.
网络模型复杂度采用参数量(Parameter)和浮点计算量(FLOPs)作为评价标准.对于一次卷积运算,其模型参数和浮点计算量公式如下:
其中Cin、Cout分别为输入、输出特征图通道数,K为卷积核的大小,H×W为输出特征图的大小.由于激活函数(activation function)以及偏置(bias)等方面的不同,对FLOPs 的计算方式不尽相同.为便于对比分析,本文采用Pytorch 中的第三方库thop 对模型参数量、浮点计算量进行统一计算.
4.4 实验结果与分析
实验数据集内共包含碧根果样本6000张,其中用作训练集4800 张,测试集1200 张.训练epoch 为800 次,GPU 每次处理4 张图片,使用随机梯度下降(SGD)作为训练时的优化器,初始动量设置为0.9,学习率为0.001,权重衰减系数0.0001.
4.4.1 参数量与计算量对比结果
主干网络的改进将同一特征层的不同通道特征图进行多次多尺度的特征融合,使得主干在充分提取图片语义信息的同时造成主干网络模型尺寸与参数的增加,边界框回归损失函数与Fast NMS 改进也在一定程度上增加了模型的计算量.网络改进前后的参数量及总浮点运算量FLOPs 量化结果如表2 所示.可以看出网络参数、模型大小、浮点运算量相较于改进前提升了9.8%、1.06%、6.7%.
表2 网络改进前后参数量与计算量对比Tab.2 Comparison of parameters and FLOPS before and after network improvement
4.4.2 主干网络改进前后热力图对比
采用Grad-CAM 生成主干网络的热力图,对主干网络的输出进行可视化分析,主干网络改进前后生成的热力图如图7 所示.颜色越亮表示主干网络对于该区域的关注力越强,原主干网络关注的区域包含碧根果的部分区域和背景区域,存在关注区域错误的问题.改进的主干特征提取网络增强了对图像深层信息的提取能力,引入CBAM注意力机制,使得主干网络更关注于碧根果区域,并极大地抑制了背景的干扰.
图7 主干网络热力图Fig.7 Backbone network heat map
4.4.3 网络分割效果对比
损失值用来衡量网络预测结果与标注之间的误差,损失值越小表示模型预测性能越高,网络每一次迭代训练过程中生成损失值,并记录于训练日志中.网络改进前后的掩膜损失函数相同,均采用预测掩膜与标注掩膜的二值交叉熵作为损失函数.掩膜损失折线图如图8 所示,损失值随着迭代次数的增加而下降,原网络进行800 次迭代后loss 值稳定在0.52 左右.改进后网络损失值最终稳定在0.22左右.
图8 掩膜损失值曲线Fig.8 Mask loss value curve
从测试集中选择不同条件下的图片测试模型改进前后分割效果.图9 显示出原YOLACT++网络实例掩膜会受到预测框区域的限制,本文算法采用CIoU 作为边界框回归损失函数,提升边界框回归精度.原算法对传送带上的阴影与脏污容易造成边缘分割错误,对果壳掉落与多果情况,存在果壳重叠造成分割区域识别错误的问题,本文提出改进的主干特征提取网络,在加强网络对于图像深层信息的提取能力同时使得主干网络更关注于碧根果区域,减少背景干扰,增强掩膜分割的准确率.对于碧根果堆叠情况,原算法缺乏对预测框中心距离考量,重合度高的碧根果预测框被删除,造成部分堆叠的碧根果被识别为同一个实例.采用改进后的Fast NMS 能保留更多的候选框进行判断,一定程度上解决了部分重叠目标预测框被误删除的问题.
图9 不同情景下的分割结果Fig.9 Segmentation results in different scenarios
4.4.4 不同改进点对比
为了验证不同改进点的有效性,本文做了8 组对比实验,对比结果如表3 所示.通过对比实验1 和实验2 可以发现主干网络中改进的Res2Net 模块的引入使得预测框与掩膜的mAP 有部分提升,分别提升1.79%,1.88%.对比实验1 与实验6 可以发现边界框回归损失与非极大值抑制的改进使得预测框的mAP有显著提升,预测框mAP提升4.91%.对比实验1 与实验8,相较于原算法在预测框mAP 与掩膜mAP 上分别提升5.49%与5.18%,但速度上降低了6.5FPS.
表3 不同改进点的实验对比结果Tab.3 Experimental comparison results of different improvement points
4.4.5 样本等级预测实验
为了验证网络改进前后碧根果的分级效果,将4 个等级的碧根果样本送入训练好的模型中进行等级预测实验,样本等级预测结果如表4、表5所示.碧根果分级标准如下:1 级(长大于45mm,宽大于26mm)、2级(长大于40mm小于45mm,宽大于21mm小于26mm)、3 级(长大于35mm 小于40mm,宽大于15mm 小于21mm)、4 级(长小于35mm,宽小于15mm).
表4 网络改进前碧根果分级召回率与精确率Tab.4 Recall and precision of pecans classification before network improvement
表5 网络改进后碧根果分级召回率与精确率Tab.5 Recall and precision of pecans classification after network improvement
原网络分割出的碧根果掩膜受到打光阴影及预测框的影响较大,进而影响到掩膜的区域,造成果长、果径测量失误,导致分级准确率较低.改进后的网络极大抑制了背景阴影的干扰,提高了预测框的精度,使得碧根果的分级准确率得以提升.
4.4.6 不同算法对比
为进一步验证本文算法的实例分割效果,将本文算法与当前先进的实例分割算法进行对比,利用碧根果数据集分别对Mask R-CNN、BlendMask、Deep Snake、SOLOv2、YOLACT++与本文算法进行训练,用训练好的模型验证碧根果的检测与分割效果.训练结果对比如表6 所示.从表6 可以看出,本文算法掩膜mAP 相较于相较Mask R-CNN、BlendMask、Deep Snake、SOLOv2 分 别 高 出4.40%、6.07%、5.46%、1.38%,预测框mAP 相较于Mask R-CNN、BlendMask 分别高出4.76%、3.84%.在对比6 种算法的检测效果图可以看出,Mask R-CNN分类准确率较高,但碧根果堆叠时存在单个实例检测错误的问题.YOLACT++算法预测框的回归存在较为明显的问题.Deep Snake 算法对于边缘细节的精确度较低.BlendMask 与SOLOv2 能够较为准确地识别单个实例,但存在边缘误分割问题.本文算法在YOLACT++的基础上增强主干特征提取能力,改进了检测框的检测精度,进而提升了掩膜分割精度.
表6 不同算法数据对比Tab.6 Data comparison of different algorithms
4.4.7 公共数据集对比实验
MS COCO数据集是微软开发维护的大型图像数据集.本实验采用COCO2017实例分割数据集进行实例分割算法对比实验,该数据集提供了80个类别的数据及对应标签.本文在训练时尽可能保证主干网络相同、避免引入任何训练技巧,以达到算法性能比较的公平性,训练结果如表7所示.由于COCO数据集图片相较于碧根果数据集具有更加复杂的背景,实例目标的尺寸和数目差异较大,导致掩膜平均精度低于碧根果数据集.APS、APM、APL表示对小尺寸(面积小于322像素)、中尺寸(面积大于322像素小于962)、大尺寸(面积大于962像素)的目标分别计算掩膜平均精度.可以看出改进后的YOLACT++算法对于不同尺寸的实例掩膜平均精度相较改进前均有所提升,且精度略高于BlendMask等先进算法.本文算法掩膜mAP值相较于Mask R-CNN、YOLACT++、BlendMask、Deep Snake、SOLOv2 分 别 高 出3.20%、4.91%、1.51%、3.79%、1.31%,网络具有较高的泛化性.
表7 公共数据集实例分割对比实验Tab.7 Comparison experiment on instance segmentation of public data set
5 结论
本文分析了碧根果自动化加工生产线上的关键问题,提出了一种基于YOLACT++改进的实例分割算法用于碧根果的检测任务,采用数据增强完成碧根果数据集的扩充.在YOLACT++主干网络引入改进的Res2Net 模块,加深了主干网络模型对于碧根果图像的信息提取能力,使得网络的关注区域更集中于碧根果区域,改善了传送带阴影或脏污被错误识别的问题.边界框回归中引入CIoU 损失函数,改善了边界框预测不精确的问题.并将DIoU 与Fast NMS 结合,解决部分重叠度高的候选框丢失造成的碧根果误检问题.通过测试实验结果表明,训练出的模型在处理背景脏污、碧根果堆叠和果壳脱落等图片时均有较好的检测效果,改进的算法在碧根果数据集上的预测框mAP 达到67.21%,掩膜mAP 达到了65.81%,相较于原始网络平均精度分别提升了5.49%,5.18%,分级准确率达到98.5%,可以满足工业现场需求.改进的算法应用于公共数据集,相较于Mask R-CNN、BlendMask、Deep Snake、SOLOv2、YOLACT++具有更好的分割效果,因此本文算法具有良好的泛化性,也可应用于其他数据集.