张婧婧
(新疆农业大学 计算机与信息工程学院,新疆 乌鲁木齐 830052)
马体尺数据是衡量马的生长发育及科学饲养、育种的重要依据。基于深度学习的马体测量技术重点解决了马体与背景的有效分割问题。YOLACT是一种较为简单的全卷积网络实现实例分割的方法,该方法以其快速、易泛化且产生高质量的mask等技术优势适用于不同实例分割场景。马体的目标检测与背景分割过程采用该方法首先看中其在MS-COCO数据集[1]上约30 mAP的分割表现;其次马场目标检测对象及环境相对单一,目标图像的动态稳定性不作要求,且检测的精度相对不高,就YOLACT进行实例分割的图像低损失率而言,符合马体目标检测与背景分割的基本要求。
在马体与背景分割的基础上,体测图像中特征点的标定也是马体尺测量技术的重点。不同于传统的角点检测方法,设计中利用边缘检测Canny算子[2]提取马体分割后的轮廓,在其轮廓线上采用动态网格完成体尺关键点的标定。该方法的研究旨在为相关动物体测技术提供范例参考。
目前,大型马场的马养殖方式以散养居多,采集马体的图像信息时不可避免地纳入草场的背景、房屋、其他建筑甚至养殖人员等,为此采用深度学习技术实现马体目标与背景的实例分割,旨在为马体尺测量模型的建立准备条件。设计中采用的YOLACT实例分割方法属于目前深度学习的单级目标检测方法之一,在处理图像分割算法中,其以性能损失小、速度快而备受推崇[3-5]。
YOLACT将分割问题分解为两个并行的过程,利用全连接fc层和卷积conv层分别产生“掩模系数”(mask coefficients)和“原型掩模”(prototype masks),将掩膜和预测的相应系数进行线性组合,并通过预测的b-box进行裁剪,实现掩膜合成(assembly),计算中通过单个矩阵乘法实现。由此,该方法在马体特征空间中保持了空域一致性,且满足了马体目标检测的快速分割要求。以伊犁马的图像分割为例,文中采用YOLACT方法在训练好的MS-COCO数据集上完成马体目标检测与背景分割,如图1所示。
图1 马体的实例分割
在YOLACT目标检测的前端网络中,低层的特征图信息量较少,但其特征图较大,适于检测目标位置准确且容易识别的一些小的物体;高层特征图信息量比较丰富,但是目标位置较为粗略,因此小物体的检测性能急剧下降。为了提高检测精度,YOLACT的网络前端借鉴Mask RCNN[6]中采用的FPN[7]的网络结构,构建一个自底向上的线路,如C1、C2、C3、C4、C5;一个自顶向下的线路,如P7、P6、P5、P4、P3以及对应层的链接,如图2所示。
图2 YOLACT的网络结构
其中底层的特征图用于检测较小的目标,而顶层的特征图则用于检测较大的目标,对单目标的伊犁马体图像检测而言,其顶层特征图的检测性能要求相对较高。
Mask原型的产生结构为protonet,由全卷积网络FCN实现[8],实验中预测马体图像时将生成一组(K个)原型掩模,其最后一层含K个channels(每个原型一个),并将它们附加到backbone特征层中预测,如图2右下部所示。
作为YOLACT检测器的主干网络,其预测结构采用RetinaNet中带FPN的ResNet-101[9-10]网络结构,其中头部结构设计如图2右上部所示。基于Anchor的典型目标检测算法中,预测头通常有两个分支,一支用于获得类别置信度,另一支用于进行边界框回归。YOLACT中添加第三个分支,预测K个掩模系数,用于对应每一个原型。马体图像分割实验中,从最终掩模中减去原型即可获得图1的分割效果[8],并在非线性计算中产生稳定的输出。
基于YOLACT目标检测与实例分割方法,文中对站姿较为标准、背景相对简单的马体图像进行了分割后的预处理。基于YOLACT分割后形成的马体掩膜,实验中分别将图1中透明掩膜换成白色和黑色,并通过异或运算去除背景,再与原图点乘,即可得到分割后的图像,由此完成马体测量模型的预处理。
依据新疆马产业协会发布的地方标准,马体尺主要测量指标包括体高、体长、胸围、管围等,其中涉及的马体相关部位包括臀端点、胸骨前缘点、鬐甲顶点、肩脚骨后缘、左前管部上1/3部等[11]。具体而言,体高是指从鬐甲顶点到地面的垂直距离;体长是指从胸骨前缘点到臀端点的直线距离;胸围是指肩脚骨后缘垂直绕胸一周的长度;管围是指左前管部上1/3部的下端最细处,水平绕其一周的长度。
据观察,马体尺标定所需的测点均分布在马体边缘轮廓上,为了得到马体尺测点,需要进行马体的边缘检测。实验中使用Canny算子对经过YOLACT实例分割的伊犁马体图像进行轮廓提取。
在马体边缘检测的基础上,设计中尝试使用常见的Harris角点检测[12-13]方法筛选出候选的测量点。通过调整角点检测的blockSize参数及ksize参数获得较多角点时,测量所需的测点与非测点并不能很好地区分;反之角点较少时,部分测点被遗失。
此外,马体尺测量点虽然大部分集中于被检测的角点之中,而鉴于马体体型、姿态的多样化,针对角点中测点的筛选以及设计更为通用的筛选模板仍较为困难。
综上,采用角点检测方法寻找马体尺的关键节点,其操作性不强且复杂度较高,本设计则采用了动态网格方法部分解决了马体测量中寻找测点的难题。
(1)体高的获取。
对站姿各异、体型不同的马体而言,动态网格中各测点的标定均建立在其轮廓图像中平均像素值变化的基础之上。如图3中,水平方向的中部横线Hm表示马体像素点纵坐标的动态均值,计算方式如下:
(1)
进一步地,Hu表示Hm均值线以上像素纵坐标的动态均值,计算见式(2);而Ht则为Hu均值线以上像素纵坐标的动态均值,计算见式(3)。
(2)
(3)
其中,用于标定体高的鬐甲顶点A恰好由Ht与马体轮廓的相交点得到。与此同时,根据鬐甲顶点到前后足最低点所在直线Hb的距离,即为马体的体高,如式(4)所示。
(4)
其中,ax+by+c=0表示马体前后足底部的连线。
图3 体尺测点的标定
(2)体长的获取。
如图3所示,动态网格中Wm线表示马体像素点横坐标的均值,计算如式(5)所示:
(5)
进一步地,网格中Wu线表示水平像素均值线Wm与其右边界线的等分线,计算如式(6)所示:
(6)
其中,马面水平朝左时flag=1,朝右时flag=-1。
如图3所示,在马体的体长计算中,臀端点B正是由Hu与马体轮廓的尾部交点得到;胸骨前缘点C则定为Wu与其轮廓交点中纵坐标较大的点,而体长的计算即为臀端点与胸骨前缘点的欧氏距离,如式(7)所示。
(7)
其中,(xB,yB)为臀端点坐标,(xC,yC)为胸骨前缘点坐标。
(3)体长的修正。
在图3中,容易看出马体站姿与摄像头不平行,体长的像素值较实际值偏小,需进行数据修正,其修正方法如图4所示。
图4 体长的数据修正
在图4中,由A(x1,y1)、B(x1,y1)确定的直线L表示马体中心线,其与马体前后足底部的连线ax+by+c=0平行,且与摄像头平面l形成角度为α的夹角,其中各参数间的关系如式(8)表示。
(8)
将式(7)得到的体长数值length带入公式(9),即可得到体长的修正值len_adjust。
(9)
(4)胸围直径的获取。
与体高、体长的二维数据相比,基于平面图像获取马体的胸围和管围指标更为困难,为此引入两项相关性较强的平面指标:胸围直径和管围直径,用于后期马体胸围、管围的预测。
设计中,引入胸围直径旨在利用其与胸围的强相关性,即二者标定的测点在马体平面图像中重合。如图3所示,直线Wm与轮廓交点的纵坐标间距即为胸围直径d1,如式(10)所示,实际测量中其值与胸围数据相关性最强。
(10)
(5)管围直径的获取。
同样的,设计中引入管围直径在于其与管围的强相关性,即二者在马体管围测量中的测点一致。如图3所示,管围直径计算中,需要寻找动态网格线Hg,即为足底向上三分之一处与前后足轮廓的交点,从中获取最小值即为管围d2,如式(11)所示。
(11)
基于上文中马体图像分割、轮廓提取与特征测点的标定技术,对图像像素为640*480的两匹伊犁马进行了体尺的测量,获取其特征测点,如图5所示。
图5 体尺特征测点的标定
据图5 获取的体尺特征测点,分别得到两匹马的测点数据,如表1所示。
表1 马体测点数据 (单位:像素)
以表1的像素数据为基础,根据人工测试与马体图像像素的多次匹配,选择比例为1∶1.21进行像素数据的同比缩小,得到马体尺的测量数据与实测值的对比结果,如表2所示。
表2 马体尺测量的对比(比例1∶1.21)
依据马体尺数据的测量标准,三维体尺指标如胸围、管围的测量无平面图像的测量依据。前文设计中引入的胸维直径、管围直径指标,旨在利用其数据的相关性建立胸围与管围的预测模型[14]。以100匹伊犁马体的人工测量数据为样本,完成体尺的胸围、管围预测模型如下:
(1)胸围的预测模型。
为了获得较好的预测效果,实验中采用了Regress及Polynomial两种多元回归方式完成马体胸围数据的预测,其预测结果如表3所示。
表3 胸围预测结果
根据表3所示,选择误差较小的Regress回归模型进行马体胸围预测较为理想。其胸围的回归方程为:
Y1=30.613 8+0.536 7*h+0.429 2*w-
0.108 6*d
(12)
其中,Y1为胸围,h为体高,w为体长,d为胸围直径。
(2)管围预测模型。
同样,实验采用了Regress及Polynomial回归方式完成马体管围数据的预测,其预测的结果如表4所示。
表4 管围预测结果
根据表4可知,为了将测量误差有效控制在5%之内,仍选择Regress回归模型预测管围较为理想,其管围回归方程为:
Y2= 8.377 5+0.000 9*h+0.081*w-
0.123 1*c
(13)
其中,Y2为管围,h为体高,w为体长,c为管围直径。
以伊犁马体为研究对象,通过采集马体的图像、马体尺的人工测量数据,完成了马体尺测量中四项指标的关键技术研究。
实验以深度学习的YOLACT实例分割技术为基础,首先实现了复杂背景下马体图像的快速、高质量分割;其次提出动态网格方式完成马体特征测点的数据标定,实时预测了马体在图像中的位置及身体方向,并部分解决了因其站姿不同带来的体长修正问题;然后采用Regress及Polynomial的多元线性及非线性预测方式,比较并实现了马体胸围及管围的预测,最后对两匹伊犁马体样本进行了体尺数据测量及误差计算,其各项误差均处于0.75%~3.7%之间。就大体型动物体尺测量而言,该技术较为完整且具备范例参考意义。
设计的不足之处在于对马体的姿态仍有一定要求,在马体的站姿过度倾斜或头部高昂的情况下,动态网格的测点将产生较大误差,使得测量不能准确完成。这些还有待进一步完善。