王红君, 时扬扬*, 岳有军, 赵 辉,2
(1.天津理工大学电气电子工程学院, 天津市复杂控制理论与应用重点实验室, 天津 300384; 2.天津农学院工程技术学院, 天津 300392)
随着水产养殖业的快速发展,对水产品加工产生迫切需求。在鱼初级处理加工生产线中,为了保证鱼肉品种的新鲜度,在去除鱼头尾之前,需要先进行去除鱼鳃的操作,其中鱼鳃切口的准确定位甚为关键[1-2]。在早期的鱼鳃加工定位中,通常采用图像处理和统计模式识别方法来定位鲑鱼鳃切割器的位置。Gamage等[3]提出了使用多元回归的参考点估计鱼鳃切割机的参考位置;Jain等[4]提出了一种智能传感器融合技术在鲑鱼机械加工自动化机器中实施;这些方法比较复杂,而且切割点定义不明确;Azarmdel等[5]根据鳟鱼的体形特征提取鳍区域,然后将胸鳍的起点和尾鳍的终点分别作为鳟鱼加工系统的头部和腹部切割点,这种利用鱼体外部轮廓提取特征的方法,容易受到鱼体损伤程度的影响。
随着图像处理和深度学习技术的发展,采用机器视觉技术对淡水鱼特定部位进行识别和定位成为可能。Bondo等[6]在三文鱼的自动化生产线中使用3D摄像机扫描传送带,采用滑动窗口的方法对三维图像进行分割,利用线性判别分析(linear discriminant analysis,LDA)分类器确定头尾区域,沿着鱼的纵向中心脊,以鼻点为起点,使用回归公式定位切口点。在定位切口点的坐标过程中,鱼鳃的定位精度受鱼头标注区域的影响,而且LDA在特征提取的过程中可能出现数据过拟合的现象;Issac等[7]提出采用基于计算机视觉的鱼鳃自动分割方法鉴定鱼的新鲜度,对输入图像进行颜色空间转换。利用主动轮廓法对鱼类图像中属于鳃部的像素进行分割,从颜色的空间饱和平面对鳃区域进行统计分析;Arora等[8]采用K均值聚类的方法对鳃组织自动分割,利用小波变换提取鱼鳃特征,根据实验得到的判别特征,建立统计小波系数与贮藏鱼鲜度之间的关系。这些方法都是通过对鳃部区域颜色的统计分析得到鱼的新鲜度关系,无法输出鱼鳃的位置坐标,不方便后续除鳃操作。参考其他目标的检测定位,任意平等[9]采用目标检测算法更快的卷积神经网络特征区域(faster convolutional neural network feature region,Faster RCNN)对图像中的花蕊区域进行定位,缩小了识别范围,提高了图片识别的准确率;基于深度学习的目标检测算法在识别精度和检测速度方面表现突出,其中基于候选区域的目标检测算法Faster RCNN不仅能够输出物体类别和对应区域的目标框,而且还能标定物体质心的坐标。为了实现鱼鳃切口的准确检测和定位,现采用改进的Faster RCNN对鱼鳃切口进行检测,在保证鱼鳃切口获得较高检测准确率的同时,输出切口包围框中心点的坐标。
模型RCNN和Fast RCNN在网络性能方面逐渐发展稳定,Ren等[10]通过引入一个区域建议网络(region proposal network,RPN),与检测网络共享完整的图像卷积特征,进一步将RPN和Fast R-CNN合并成一个单独的网络Faster RCNN。该网络主要由卷积层,区域建议网络,感兴趣区域池化,分类回归四部分组成,如图1所示。卷积神经网络(convolutional neural network,CNN)经过卷积运算获取输入图像的特征图谱[11],这些提取到的特征送入后续区域建议网络RPN和全连接层。区域建议网络RPN通过softmax损失函数分类锚点是前景或背景,使用边界框回归调整锚点获得准确的建议(proposals),以产生区域候选图像块。然后感兴趣区域池化集合输入的特征图和候选目标区域信息,送入全连接层判断输出目标类别。最后的全连接层通过目标区域特征图计算目标区域类别过程中,使用边界框回归来确定检测目标的最后位置。
1.2.1 加入批归一化
特征图在送入RPN之前需要经过基础的conv+relu+pooling层提取候选图像的特征,比较典型的特征提取网络如VGG16和ResNet101(残差网络)。VGG16与ResNet101相比,模型计算参数量比较少,而且训练速度快。另外从数据集的角度考虑,本文使用的训练数据与ResNet模型预训练使用的数据集分布不同,可能导致训练出现数据过拟合的现象。综合以上情况,选择VGG16作为Faster RCNN模型的特征提取网络。
VGG16网络的结构均使用了同样大小的卷积核尺寸和最大池化,其中卷积层具有特征提取的作用。卷积核相当于一个过滤器在特征图上进行滑动,提取需要的特征。池化是收集卷积层提取的各个位置特征图谱,使用这个区域的最大值和平均值作为区域特征代表,也称为特征降维,用于压缩数据和参数的数量。在神经网络训练过程中,首先对输入层数据进行人为的归一化处理,比如使用矩阵乘法或者进行非线性运算[12]。前面层带来的训练参数的更新会引起后面层输入数据分布发生变化,并且随着网络层数的增多,前面层的微小改变在后面层的运算中会逐步累积放大。为了解决这个问题,特引入批归一化的方法,即在卷积神经网络的每一个卷积层之后,激活函数之前插入批量归一化(batch normalization, BN)层,如图2所示。
图2 VGG16网络结构加入批归一化Fig.2 VGG16 network structure added to the BN layer
经过卷积运算之后,每一层的激活值进行归一化映射到方差为1,均值为0的区域,从而也解决了梯度弥散。经过BN层的训练数据具有相同的0~1范围分布,也使得网络在每次迭代时省去了适应不同分布的时间,提高了网络的训练速度。BN的算法原理如下。
输入层数据为m个样本:x1,x2,…,xm,输入数据的均值μ的表达式为
(1)
输入数据的方差可表示为
(2)
对样本数据标准化处理,可表示为
(3)
引入可学习重构参数,通过平移和缩放处理,使网络可以学习恢复出原始网络所要学习的特征分布,可表示为
yi=γixi+βi
(4)
(5)
βi=E[xi]
(6)
1.2.2 非极大值抑制算法的改进
区域候选网络RPN提取出的在相邻位置上有很多相似但是位置不那么精确的候选框[13],增加了检测的误检率,所以使用非极大值抑制(non-maximum suppression,NMS)算法[14]消除多余的候选框。首先设定检测框的置信度阈值,通过置信度对候选框降序排列列表。选取置信度最高的检测框 添加到输出列表,并将其从候选框列表中剔除。计算与候选框列表中所有框的 值,将超过阈值的候选框丢弃。经过n次迭代,候选框列表的数据个数为零,此时返回输出列表。假设M和N为RPN网络生成的检测框,通过计算相邻边框的重合度(IOU),将IOU大于预先设定阈值的检测框剔除,其计算公式为
(7)
从几何区域的角度也可以看作是检测框M、N重叠的面积占M、N并集的面积比例,可表示为
(8)
式(8)中:S∩为检测框M、N的重叠区域面积;SM为检测框M的面积;SN为检测框N的面积。
NMS算法的分数重置函数可表示为
(9)
式(9)中:Si为第i个检测框的得分;X为得分最高的检测框;Nt为自定义的置信度阈值。
根据边框的置信度得分筛选掉一些相似的但是得分不高的边框,增加检测的效果。但是当一个真实的物体由于重叠等原因的影响,导致与相邻的边框重合度较高,此时的IOU大于设定的阈值,即使它本身的检测分数也足够高,也会被删除,增加了漏检率,如图3所示。
图3 NMS算法检测Fig.3 NMS algorithm detection
图3中两条鱼的检测精度分别是0.95和0.80, 按照NMS算法,得分为0.80的检测框置信度被置为0或0.4。所以在上面两个检测框的 大于设定的阈值情况下,导致只能输出检测框为0.95的鱼,这样鱼目标检测的召回率就被大大降低了。为了解决这一问题,使用Soft-NMS算法[15]替代NMS,对重叠程度超过重叠阈值Nt的重置函数进行改进,Soft-NMS的重置分数表达式为
(10)
对于目标框交叉部分,NMS算法将相邻检测框大小置为零,而Soft-NMS算法则利用衰减函数处理。即如果一个检测框与X有大部分重叠,它就会有很低的分数。而如果检测框与X只有小部分重叠,那么它原有检测分数不会受太大影响。
实验均在Unbantu 18.04的操作系统下进行,使用Python3.5编码语言开发,基于tensorflow学习平台,在训练和测试过程中使用CUDA和CUDNN加快模型计算速度。训练用的服务器配备64G运行内存、48个intel Xeon CPU、2张GeForce GTX 1080Ti 显卡以及4块2 T机械硬盘。
实验中,为了测试改进的网络对于鱼鳃识别的多样性和定位的准确性,选取鲤鱼、鲫鱼,鲢鱼、鳊鱼、草鱼等多种淡水鱼作为研究对象,共收集不同种类和不同数量的淡水鱼图片2 000张,其中训练集图片数量是1 600张,测试集和验证集均为200张。统一将数据集中的图片分辨率设置为500像素×375像素,按照Pascal_VOC2007数据集的格式对获取的训练样本和测试样本进行相应的转换工作。基于深度学习的目标检测模型进行训练时,需要大量带有标注的样本,为了提高Faster RCNN网络对鱼鳃位置定位的准确性,采用labelImg图像标注软件对数据集进行标注和存储。在训练样本标注过程中,矩形框对角线的2/3部分始终经过鳃切口位置,这样就确保矩形的中心点不会超过鱼鳃部分,提高了定位的准确度。
网络在训练中,批处理数量设置为128,动量因子为0.9,迭代次数20 000,设置初始学习率为0.001, 正则项系数为0.000 1,学习率衰减系数γ为0.1。基于加入BN层的VGG16基础特征提取网络,在后处理中用Soft-NMS算法替代NMS算法,最后输出鱼鳃切口的检测框和其的坐标。
2.4.1 模型评价指标
为证明本文方法的优势,设置4组对照实验,分别是模型1:原始 Faster RCNN;模型2:单独加入批归一化的 Faster RCNN;模型3:单独改进非极大值抑制算法的 Faster RCNN;模型4:同时加入批归一化和改进非极大值抑制算法的 Faster RCNN。模型的评价指标选择目标检测中常用的准确率(precision,P)、召回率(recall,R)和F1, 分别定义为
P=TP/(TP+FP)
(11)
R=TP/(TP+FN)
(12)
F1=(2PR)/(P+R)
(13)
式中:TP表示实际目标为鱼鳃切口,网络模型预测结果也是鱼鳃切口的样本个数;FP表示实际为背景,却被网络模型预测为鱼鳃切口的样本;FN表示实际为鱼鳃切口,但网络没有识别出来的样本个数,实验结果如表1所示。
表1 不同模型检测效果对比
从表1可以看出,在网络迭代次数等条件相同的情况下,相对于原始网络模型,单独加入批归一化的模型2明显提高了鱼鳃切口检测的准确率和F1值,证明了批归一化的有效性。同样,单独改进非极大值抑制算法的模型3,相较于原始网络模型,也提升了切口检测的准确率和F1值。当同时使用两种方法时,相比于原始网络模型和改进方法单独使用的模型,模型4显著提高了切口检测的准确率和F1值,证明了相对于原始网络模型改进方法的有效性。
2.4.2 损失函数曲线
不同模型的损失函数变化曲线如图4所示,经过20 000次迭代训练,可以看出,模型1即原始的Faster RCNN网络,在训练过程中出现损失函数发散的现象,曲线波动较大。模型2中加入了批归一化,增强了VGG16的特征提取能力,有效减少了数据的过拟合,所以损失函数曲线相对模型1平稳。模型3改进了非极大值抑制算法,提高了目标检测的准确度,损失函数值小于模型1和模型2。而模型4与其他3个模型相比,同时使用两种方法,损失函数波动幅度较小,并且较早的达到平稳状态,说明本文改进方法有效提高了网络性能。
图4 不同模型损失函数曲线Fig.4 Different model loss function curves
2.4.3 改进的网络测试效果
为了更加直观地展示本文方法的效果,选取了部分图片分别送入4个网络模型中测试。鱼产品加工过程中,摄像机采集的图像有两种,一种是图像中只包括单条鱼,另一种是图像中有多条鱼。图像中的红色矩形框表示网络检测到的鱼鳃切口区域,将检测框的中心点作为鱼鳃切口点,用“·”标记,如图5、图6所示。
图5 4种网络模型对单条鱼检测效果对比Fig.5 Comparison of the detection effects of four network models on a single fish
图6 4种网络模型对多条鱼检测效果对比Fig.6 Comparison of the detection effects of four network models on multiple fish
从图5可以看出,当图片中只有单条鱼时,4个网络模型都能识别鱼鳃区域。但是原始的网络模型1出现鱼鳃切口误检的情况,单独使用一种改进方法的模型2和模型3的鱼鳃检测框中心点也偏离切口点。同时使用两种改进方法的模型4对鱼鳃切口定位的准确率最高,而且检测框的中心点距离鱼鳃切口最近,说明改进的网络能较好地满足鱼鳃切口点精准定位的要求。
从图6可以看出,当鱼鳃切口比较密集时,与模型1和模型2相比,同时加入批归一化层和改进非极大值抑制算法的模型4可以全部检测出图中的鱼鳃切口,与模型3相比提高了鱼鳃切口检测的准确率。表明本文算法提高了Faster RCNN网络检测同一类物体的精度。
为了提高鱼鳃切口检测和定位精度,在Faster RCNN网络的基础上进行改进。通过在VGG16特征提取网络上添加归一化层,提高了目标识别的准确度。采用Soft-NMS算法替代NMS算法,有效改善鱼鳃切口漏检的问题。最后收集大量样本进行标注,送入改进后的检测网络自主提取目标特征进行训练,避免了鱼体损伤和鱼鳃外部轮廓遮挡带来的影响。与未改进的Faster RCNN网络相比,目标检测和定位的准确率提高了近6%。训练后的网络不仅能输出鱼鳃切口检测框,而且定位了切口点,为后续生产过程中使用机器人剔除鱼鳃提供了位置信息。