奶牛养殖业是我国畜牧业的一个重要组成部分,近年来得到了快速发展,正逐步向规模化、智能化与精准化的方向转变[1-2]。奶牛个体快速而准确的识别作为奶牛智能化和数字化养殖的关键,其识别方法的研究已成为当下奶牛养殖体系中的热点[3-4]。传统的奶牛个体识别主要通过人工观测的方式进行,该方法人力成本高、主观性强且获取的信息不能及时、准确地给予反馈,不符合现代化奶牛养殖的发展需求[5]。除人工识别方法以外,目前应用较多的个体识别方法是无线射频检测技术(Radio frequency identification, RFID),该技术将RFID标签固定在奶牛耳部,在阅读器可识别范围内即可读取标签内的奶牛个体信息,避免了人工观察标签编号的过程,但耳标的佩戴依然会对奶牛的安全造成影响而且存在标签易破损、技术成本高以及兼容性差的问题 [6]。
近年来,随着计算机技术的不断发展,基于计算机视觉的个体识别技术得到了广泛的应用。图像识别的样本通过牛场内的摄像头进行采集,所需成本低,也避免了电子耳标数量多、耳标易破损的问题[7]。传统的图像识别技术常采用方向梯度直方图、支持向量机、和局部二值模式(Local binary pattern,LBP)等方法。如陈娟娟等[8]使用优化方向梯度直方图(Histogram of gradient,HOG)特征对图像进行特征提取,并利用空间金字塔匹配原理(Spatial pyramid matching,SPM)和自定义直方图交叉核对15类奶牛的7 500张奶牛头部图像进行分类,准确率要比单独使用HOG特征高21.3%。张满囤等[9]提出了一种基于改进方向梯度直方图与局部二值模式(HOG-LBP)特征融合的特征提取算法,并将其应用到奶牛个体识别,为实现奶牛个体识别自动化打下了基础。以上这些方法虽然在奶牛个体识别领域取得了较好的试验结果,但都对图像的拍摄角度和拍摄位置敏感,适用性较差,且图像背景复杂或奶牛姿态不一时识别精度不高,难以实现自动识别。卷积神经网络(Convolutional neural network, CNN)[10]的出现为图像识别提供了新思路,它具有强大的特征学习和特征表达能力,可以用于大批量图像数据的识别和检测,有良好的抗干扰能力,适用于农场复杂环境下的奶牛个体识别,更符合现代化农场信息管理的需求[11]。2015年赵凯旋等[12]利用卷积神经网络对奶牛视频进行分析、提取并跟踪奶牛运动过程中的躯干图像,实现了奶牛个体的精准识别。2019年王毅恒等[13]使用YOLO v3算法快速、准确地实现了农场环境下奶牛图像复杂背景中的个体识别。
基于卷积神经网络的识别方法无需与奶牛直接接触,该方法可降低劳动成本、减小对奶牛的伤害,具有良好的应用价值。由此,本文采用卷积神经网络方法以实现奶牛个体的自动识别,并针对上述目标检测算法仅能生成奶牛图像中带有目标个体的选框而无法精确标出奶牛具体轮廓特征的问题选用Mask R-CNN算法,同时进行相应的改进,提出了一种基于改进Mask R-CNN的奶牛图像识别方法。此外,本文结合迁移学习的方式首先在COCO数据集上对提出的新算法网络的权重进行预训练,然后在实地拍摄的奶牛图像数据集上进行了仿真试验和结果评估。
1 材料与方法
1.1 数据采集与预处理
试验数据来源于吉林省某农场的实地拍摄,通过数码相机等设备采集了546张农场复杂背景下的奶牛图片,分辨率为800×600。对其中不清晰的图像加以剔除,最终选取500张作为数据集,所选样本数据包含不同光照强度、背景和拍摄角度下不同奶牛数量和奶牛姿态的图像,部分奶牛样本数据如图1所示。
神经网络模型的精度对数据量有着极高的要求,500张奶牛图像不足以支撑网络的训练。因此,本文选用水平翻转、垂直翻转、顺时针旋转45°、逆时针旋转45°和灰度化5种方法对样本数据进行扩展,如图2所示。增强后的奶牛图像共3000张,按照3∶1∶1的比例划分训练集、验证集和测试集,得到训练图像1800张,验证图像600张,测试图像600张。
网络的训练以监督学习的方式进行,本文采用Labelme软件对增强后的数据进行标注,标注时按照图像中奶牛的轮廓创建目标区域,并打上标签。由于本文识别的只有奶牛1个类别,因此统一用奶牛的英文cow作为标签名。
1.2 改进Mask R-CNN
1.2.1 Mask R-CNN原理
Mask R-CNN是由He等[14]于2017年提出的一种实例分割框架,该方法在Faster R-CNN[15]的基础上增加了Mask 分支,在目标检测的同时对目标进行像素级的分割与分类;并用ROI align替代Faster R-CNN中的ROI pooling,解决了区域的不匹配问题(Misalignment),具有较高的精度和速率。Mask R-CNN一经提出就在各个领域得到广泛的应用。
Mask R-CNN的整体框架如图3所示。主要由Backbone、RPN(Region proposal network,RPN)、ROI align和Classifier 共4个部分组成。Backbone用于提取输入图片的特征图(Feature map),该特征图作为后续RPN和全连接层的输入;RPN用于生成候选区域(Region proposal),并对每个特征区域进行类别可能性判断和框回归(Bounding box regression)操作;ROI align通过收集输入的特征图和候选区域提取Proposal feature maps,并作为后续全连接层的输入,进行目标类别判定;Classifier利用Proposal feature maps计算候选区域的类别,同时再次进行框回归以精确定位检测框,并为目标生成掩码。
1.2.2 SENet
SENet(Squeeze-and-excitation network)是Hu等[16]于2017年提出的新型网络结构,采用了一种全新的“特征重标定”策略对每个通道的重要程度进行评估。本文借鉴其做法,将嵌有SE block的ResNet[17]作为Mask R-CNN模型的特征提取网络基本结构,对奶牛图像的通道信息加以利用,根据Loss值对特征的权重进行学习和重调。模型采用重要特征信息的权重大、其他特征信息的权重小的方式进行训练,具体步骤如下:
1)挤压(Squeeze)操作:对所有通道的特征值进行全局平均池化(Global average pooling)操作,将每个二维特征通道变成1个实数,即zc,表征在特征通道上响应的全局分布,以获得全局感受野。zc的计算公式如下:
${{\textit{z}}_c} = \frac{1}{{H \times W}}\sum\limits_{i = 1}^H {\sum\limits_{j = 1}^W {{u_c}\left( {i,j} \right)} } ,$
(1)
式中,H、W分别表示为图片的高和宽,u表示输入图像经过标准卷积操作后得到的特征图,uc表示u中的第c个二维矩阵,c表示特征通道数,uc(i, j)代表通道特征图矩阵u c中第i行第j列的元素。
2)Excitation操作:通过捕捉通道之间的非线性相互作用关系对各个通道进行权重评估,从而在通道维度上对原始特征重定标。Excitation操作所得结果的计算公式如下:,
${{s}} = \sigma \left( {{W_2}\delta \left( {{W_1}{\textit{z}}} \right)} \right),$
(2)
式中,s表示各通道权重sc的集合,δ表示ReLU函数,σ表示Sigmoid激活函数。z表示各通道经过Squeeze操作得到的实数zc的集合,W1和W2这2个权重通过学习得到,W1和W2的维度分别是
$\dfrac{C}{{{r}}} \times C$
和
$C \times \dfrac{C}{{{r}}}$
,C为通道数目,r为缩放参数,用以降低计算量,为达到传播速度和检测准确率的平衡,参考文献[16],本文中的r取值为16。
3)Reweight操作:将 Excitation输出的权重通过乘法逐通道加权到先前的特征上,完成通道维度上的原始特征重标定,从而增强对关键通道域的注意力。输入特征图u结合权重s进行重定标后的输出
${{\tilde x}_{{c}}}$
的计算公式如下:
$ {{\tilde{{x}}_c}} = {s_c} \cdot {u_c},$
(3)
式中,sc表示各通道对应权重,uc为每个特征图对应的通道特征矩阵。
1.2.3 模型优化与构建
本文训练的目标仅奶牛一种,类别相对单一,因此对网络层数的要求较低,为提高算法的运行效率,选用网络较为简单的ResNet-50作为Mask R-CNN中Backbone网络的基础结构,整体结构如图4所示。ResNet-50虽然引入了残差学习,具备更好的特征提取能力,但其仍未对图像信息加以充分的利用,仅关注了图像的空间信息而忽略了通道之间的信息,并且其卷积层的滤波器是作用在局部视野上的,特征图之间相互独立且重要性相同,然而实际训练过程中不同的特征对于模型的影响并不相同。基于此,本文在ResNet-50的Shortcut中嵌入SE block进行优化,优化后的Identity block结构如图5所示。
由图5可看出,优化后的Identity block主体部分未变,依旧先使用Conv层对Input进行1×1卷积操作,将通道数减少1/4,然后对其进行3×3卷积操作进行特征提取,再通过1×1的卷积层,恢复通道数,使得Input与Outout的维度相同。其中,1×1的卷积操作减少了卷积的参数个数与计算量,同时改善了网络的非线性程度。在Identity block的Shortcut部分Input不再与主体部分得到的特征信息直接相加,而是先经由Global average pooling层进行Squeeze 操作,然后通过2个Fully connected层构建通道间的相关性,并输出各个通道的权重,接着在Sigmoid层对权重进行归一化,获得0~1之间的权重值,最后采用Scale操作将归一化权重加权到相对应的通道特征上。ResNet-50中除了Identity block还有Conv block,优化后的Conv block结构同Identity block相似,但由于其Input与Output的维度不一致,因此在Shortcut中先加入Conv和Batch norm操作对Input进行降维,使其与Output维度相同后再进行后续操作。
1.2.4 损失函数优化
Mask R-CNN的损失函数(L)由3个部分组成,分别为分类误差(Lcls)、检测误差(Lbox)和分割误差(Lmask), 其公式如下:
$L = {L_{{\rm{cls}}}} + {L_{{\rm{box}}}} + {L_{{\rm{mask}}}}{\text{。}}$
(4)
Lcls使用Softmax损失函数计算目标的分类概率,计算公式如下:
${L_{{\rm{cls}}}} = {\rm{Softmax}} = {\rm{ - log}}\left( {\frac{{{{\rm{e}}^{{f_{vi}}}}}}{{\displaystyle\sum\nolimits_{{j}} {{{{{\rm{e}}}}^{^{{f_{{j}}}}}}} }}} \right),$
(5)
式中,f表示评分向量,vi表示样本i的标签,fj表示分类评分向量f中第j个元素。
Lbox使用Smooth L1函数计算边框损失,计算公式如下:
${L_{{\rm{box}}}} = {\rm{Smoot}}{{\rm{h}}_{{L_1}}}{\rm{ = }}\left\{ {\begin{array}{*{20}{c}} {0.5{x^2}{\rm{ }},{\rm{ }}|x| < 1{\rm{ }}} \\ {|x| - 0.5{\rm{ }},{\rm{ }}x < - 1{\rm{ }}\;{\rm{or}}\;x > 1} \end{array}} \right.,$
(6)
式中,x为输入值。
Lmask使用二值交叉熵(Binary crossentropy)损失函数:
${L_{{\rm{mask}}}}{\rm{ = - }}\sum\limits_{{y}} {y\log (1 - \mathop y\limits^ \wedge )} + (1 - y)\log (1 - \mathop y\limits^ \wedge ),$
(7)
式中,y为期望输出,
$\mathop y\limits^ \wedge$
为实际输出。
在人工对奶牛图像进行像素级标注时,往往只需关注奶牛的边缘部分,轮廓内部分复制边缘的标注信息即可,因此边缘信息对于实例分割十分重要,它们很好地表征了实例。原始Mask R-CNN在预测时忽略了边界信息,试验中会出现边缘检测不准确的现象,从而影响Mask掩码的准确度。针对这一问题,本文借鉴文献[18]的做法,在Lmask中增加IoU boundary loss,即Lboundary对掩码部分的损失函数进行优化。首先提取Mask掩码的边界像素,降低非边界像素对损失函数的影响,然后计算真实Mask边界与预测Mask边界的重合情况。Lboundary的公式如下:
${L_{{\rm{boundary}}}}{\rm{ = }}1{\rm{ - }}\frac{{2\left| {{C_{{j}}} \cap \mathop {{C_{{j}}}}\limits^ \wedge } \right|}}{{\left| {{C_{{j}}}} \right|{\rm{ + }}\left| {\mathop {{C_{{j}}}}\limits^ \wedge } \right|}},$
(8)
式中,
$\left| {{C_{{j}}}} \right|$
表示真实Mask边界像素强度之和,
$\left| {\mathop {{C_{{j}}}}\limits^ \wedge } \right|$
表示预测Mask边界像素强度之和。优化后Mask部分的损失函数(Lmask-boundary)如下:
$\begin{array}{l} {L_{{\rm{mask}}{\text{-}}{\rm{ boundary}}}}{\rm{ = }}{L_{{\rm{mask}}}}{\rm{ + }}{L_{{\rm{boundary}}}} = \\ 1{\rm{ - }}\dfrac{{2\left| {{C_{{j}}} \cap \mathop {{C_{{j}}}}\limits^ \wedge } \right|}}{{\left| {{C_{{j}}}} \right|{\rm{ + }}\left| {\mathop {{C_{{j}}}}\limits^ \wedge } \right|}}{\rm{ - }}\displaystyle\sum\limits_{{y}} {y\log (1 - \mathop y\limits^ \wedge )} + (1 - y)\log (1 - \mathop y\limits^ \wedge ){\text{。}} \\ \end{array} $
(9)
1.3 模型训练
Mask R-CNN模型的训练在Tensorflow[19]深度学习框架下进行,采用GPU进行加速。首先利用Mask R-CNN模型在COCO数据集上的预训练权重初始化网络参数,然后利用自制奶牛数据集对奶牛识别模型进行训练,模型的整个训练分为2个阶段:
1)冻结Backbone网络,对未使用COCO预训练权重的随机初始化层(除Backbone外的其他所有层)进行训练;
2)对整个Mask R-CNN模型进行训练。
模型训练时依据本文的识别需求,类别设置为2(包含Cow和Backgroud 2个类别),Anchor大小设置为32、64、128、256、512,α权重系数设置为1,权重衰减系数设置为0.000 5,每个尺寸的Anchor对应生成3种比例(0.5、1.0、2.0)的锚框,每幅图片的Anchor个数为256。此外,模型采用非线性修正线性单元 (Rectified linear unit,ReLU) 作为激活函数,并基于随机梯度下降法(Stochastic gradient descend) 进行优化,动量因子为0.9, 网络权重参数的初始学习率为0. 001,训练共设置200个Epoch,全部训练数据完成1次运算为1个Epoch,当Epoch达到100时学习率减少为0.000 1。
2 结果与分析
2.1 评价指标
为了客观、全面地评价网络模型,本文采用分类置信度中的精度均值(Average precision,AP)对模型的整体性能进行评估。AP是预测单个目标类别的平均查准率,由精确率(Precision)和召回率(Recall)计算得出,以精确率为纵坐标,召回率为横坐标,绘制 P-R(Precision-recall)曲线,AP 即为 P-R 曲线的积分。Precision是指在所有被标记为奶牛的物体中,奶牛正样本所占的比率;Recall是测试集中所有奶牛正样本中,被正确识别为奶牛的比例。Precision和Recall的计算方式如下:
${\rm{Precision}} = \frac{{{\rm{TP}}}}{{{\rm{TP}} + {\rm{FP}}}} = \frac{{{\rm{TP}}}}{N},$
(10)
${\rm{Recall}} = \frac{{{\rm{TP}}}}{{{\rm{TP}} + {\rm{FN}}}},$
(11)
式中,TP表示奶牛被正确分类和定位的正样本个数,FP表示被标记为奶牛的负样本个数,N为样本总数,FN为测试样本中真实的正样本数减去TP。此外,AP在进行计算时需要设定奶牛的预测边界框与真实边界框的交并比(Intersection over union,IoU)[20],本文将其设定为0.7,当IoU>0.7时将测试样本认定为正样本,否则为负样本。
在大多数的实例分割任务中AP可以很好地表征模型的性能,然而AP仅适用于分类置信度的评价,无法对Mask的实际质量进行评估。针对这一问题,本文借鉴文献[21]中的做法,选用IoU值对Mask掩码的质量进行评估。本文中的IoUMask通过计算奶牛预测Mask区域(C)与其对应的人工标记Mask区域(G)之间的交集与并集之比以量化Mask的质量,从而进一步衡量奶牛个体Mask的检测定位的精确程度,计算方式如公式(12)所示:
${\rm{Io}}{{\rm{U}}_{{\rm{Mask}}}} = \frac{{{\rm{area}}\left( {\rm{C}} \right) \cap {\rm{area}}\left( {\rm{G}} \right)}}{{{\rm{area}}\left( {\rm{C}} \right) \cup {\rm{area}}\left( {\rm{G}} \right)}}{\text{。}}$
(12)
2.2 对比试验结果分析
为验证本文模型在奶牛个体识别方面的有效性,将改进模型与原始Mask R-CNN模型在前文所述的奶牛测试集上进行对比试验,改进模型在原始Mask R-CNN网络的基础上同时优化了特征提取网络结构和损失函数,训练过程中参数设置和原始Mask R-CNN网络保持一致,得到的实际检测结果如图6所示。
由图6可看出,改进前后的模型均能较为准确地识别目标的类别,但改进后网络的AP值更高,对于奶牛边缘的检测更为接近实际轮廓,图像边界与细节更为平滑,能有效识别图片中的小目标个体,不同奶牛个体之间的分割也更为准确。表1展示了Mask R-CNN模型改进前后在测试集上的客观评价结果,从中可看出改进模型在奶牛图像识别的任务上的AP为100%,IoUMask达91.34%,,相较于原始Mask R-CNN模型有了较为明显的提升,涨幅分别为3.28%和5.92%。
表 1 改进前后Mask R-CNN模型各项评价指标对比
Table 1 Comparison of evaluation indexes for Mask R-CNN model before and after improvement
综合主观的视觉效果与客观的定量评价,本文方法的识别效果要优于原始的Mask R-CNN模型,证明了本文方法的可行性和有效性。
2.3 模型性能影响因素分析
为呈现各个改进部分对模型性能所产生的影响,本节在训练参数和数据集相同的情况下,分别将仅优化网络结构的模型以及仅增加 IoU boundary loss的模型与原始的Mask R-CNN网络模型进行了对比试验。
2.3.1 网络结构优化对模型性能的影响
通过在ResNet的Shortcut中增加SE block对模型的特征提取网络结构进行优化,以此增强模型的特征学习能力。在相同条件设置下,将仅优化特征网络结构的模型与原始Mask R-CNN模型进行对比试验,结果如表2所示。
表 2 结构优化前后Mask R-CNN模型评价指标对比
Table 2 Comparison of evaluation indexes for Mask R-CNN model before and after structural optimization
表2显示结构优化后的模型在AP和IoUMask上均有提高,分别提升了3.28%和2.09%,证明加入通道注意力机制可以有效提高奶牛个体识别的准确率。
2.3.2 IoU boundary loss对模型性能的影响
为验证IoU boundary loss对模型的影响,从其对Mask loss的影响和对Mask掩码质量的影响两方面对IoU boundary loss进行评估。
1)对Mask loss的影响:
模型的训练过程实质上就是寻找最小Loss值的过程,本节不考虑网络结构优化,仅采用IoU boundary loss对Mask R-CNN的损失函数进行优化,通过分析训练过程中Mask部分的损失函数值的变化趋势,可以得到IoU boundary loss对Mask损失函数值得影响。改进前后的Mask loss的变化曲线如图7所示。
从图7可以看出,加入IoU boundary loss的模型迭代至第5个Epoch后Mask loss的曲线趋于平稳,迭代至第140个Epoch时曲线趋于收敛,而原始模型在第10个Epoch后曲线才趋于平缓,迭代至第160个Epoch时趋于收敛。相比之下,IoU boundary loss的模型的Mask loss收敛速度更快,得到的Loss值更低,模型的识别效果更好。
2)对Mask 掩码质量的影响:
本文采用IoUMask指标对模型改进前后生成的Mask掩码质量进行定量分析,得到的结果如表3所示。
表 3 损失函数优化前后Mask R-CNN模型IoUMask对比
Table 3 Comparison of IoUMask for Mask R-CNN model before and after loss function optimization
从表3中可以看出加入IoU boundary loss后的模型IoUMask为87.84%,相较于原始Mask R-CNN模型提高了2.42%,结果表明:在Mask loss中加入IoU boundary loss可以提高边界的识别精度,进而提升Mask掩码的质量,有效地优化了训练模型。
综合上述试验的结果可以看出,单独对网络结构进行优化和单独增加IoU boundary loss都可以提升模型的性能,但提升效果有限,而本文最终采用的改进模型同时使用了优化的网络结构和IoU boundary loss,融合后的改进模型在AP值和IoUMask值上均有显著的提高(表1),模型性能良好,具有较强的奶牛个体识别能力。
3 结论
为解决因传统奶牛个体识别方法的局限性以及复杂的奶牛体姿态和环境导致对奶牛个体识别的有效性、准确率较低的问题,本文提出了一种改进Mask R-CNN的方法并构建了基于改进Mask R-CNN的奶牛个体识别模型。在奶牛测试集上进行对比试验,并对模型性能的影响因素加以分析,得到如下结论:
1)使用嵌入SE block的ResNet作为Mask R-CNN的特征提取网络的基本结构对图像通道进行加权处理,可以增强网络的特征提取能力;加入IoU boundary loss,可以提高模型对识别目标边缘信息的学习能力。
2)改进的Mask R-CNN模型在奶牛图像集上的AP达100%,IoUMask达91.34%。奶牛个体的类别能被准确识别,Mask掩码位置也较为准确,与实际边缘更为贴合。与原始Mask R-CNN相比,在训练和测试条件相同的情况下,改进Mask R-CNN在测试集上的AP与IoUMask均超过原始Mask R-CNN,具有良好的有效性与准确率。