APP下载

基于点云语义分割的猪只体尺测量方法研究

2023-07-31耿艳利季燕凯岳晓东付艳芳

农业机械学报 2023年7期
关键词:体尺腹围测量方法

耿艳利 季燕凯 岳晓东 付艳芳

(1.河北工业大学人工智能与数据科学学院, 天津 300130;2.智能康复装置与检测技术教育部工程研究中心, 天津 300130; 3.河北省畜牧总站, 石家庄 050035)

0 引言

我国是世界上最大的猪肉生产国和消费国[1],为了高效地发展我国生猪养殖行业,“十四五”畜牧发展规划提出到2025年,大幅推进全国生猪养殖行业现代化建设[2]。现代化养殖育种离不开精准的数据[3],而猪只体尺参数的测量在猪的科学养殖中占有关键地位。生猪的体尺参数是生猪生长情况的重要评判指标,传统的猪只体尺参数采集需要人与猪直接接触[4],容易导致猪只出现应激反应,甚至导致猪只死亡。在体尺测量过程中,使用非接触设备测量可以有效避免猪只应激,并且有效解决传统测量方法的效率、精度和动物福利问题[5-7]。

近几年,为了解决非接触式测量问题,研究者研究了机器视觉[8-10]测量动物的方法[11-13]。司永胜等[14]利用最小外接矩形对猪只背部图像中的姿态进行调整,利用猪背实现体尺测量。马学磊等[15]通过法向量特征实现羊体点云分割,利用手工选点测量羊体体尺。张馨月等[16]应用主成分分析法对提取出的奶牛背部点云进行基于法矢量与曲率相结合的精简操作,完整保留了奶牛背脊点和边缘特征点。王可等[17]利用地面法向量结合主成分分析法矫正猪只点云坐标,便于猪只测点的选取与测量。WANG等[18]提出了一种基于猪腿部形状约束的体尺测点定位方法,并根据测点间距自动计算相应体尺,无需人工定位体尺测点,平均误差为7.73%。LI等[19]利用龙门架安装5个深度相机,对采集的点云预处理、配准和三维重建并测量体尺参数,计算出体尺和体宽的最大误差为20 mm。赵宇亮等[20]利用深度学习模型在猪背图像上检测身体测量的关键点,为动物体尺测量提供了新思路。

综上所述,利用相机俯视拍摄动物背部的彩色图与深度图数据测量方法,只能获取长度与宽度信息,无法测量围度信息。利用动物三维点云数据进行测量,由于身体结构复杂,部分测点特征相似,测点选取难度大,多数为手动交互式选点测量。为了实现自动测量猪只体尺,借鉴语义分割[21]模型,本文提出一种融合注意力机制的点云语义分割猪只体尺测量方法,将猪只分为头部、肩部、腹部、臀部4部分,对带有语义标签的点云数据分别设计测量方法,以实现猪只体尺自动测量。

1 材料与方法

1.1 猪只点云采集平台搭建

猪只点云数据采集平台结构示意图如图1所示,猪只在进食时无大幅度运动,体态相对稳定,利于猪只点云数据的采集,因此模拟猪只进食情况,在实验室中设计搭建猪只点云采集平台。该平台主要由点云数据采集单元、耳标触发单元、采集通道和上位机组成。点云数据采集单元选用KinectV2相机,其主要由RGB摄像头(分辨率1 920像素×1 080像素)、深度传感器(分辨率为512像素×424像素)和红外发射器等组成,深度检测范围为0.5~4.5 m,视场70°×60°。耳标触发单元采用无线射频识别装置KLM900,射频范围为0~0.8 m,采样频率50 帧/s。采集通道长1.6 m,宽0.9 m,相机对称放置在通道两侧,高度为0.8 m,水平相距1.2 m,与地面水平夹角35°~40°。当猪只进入采集通道时,无线射频识别装置识别猪只身份信息传输给上位机并且触发相机采集5帧数据,触发最小间隔设置为10 s。

图1 猪只点云信息采集平台

1.2 猪只点云数据采集

试验数据分两次采集,2020年12月22—27日于沧州市东辛庄某养殖场和2022年12月14—20日于山西省沁源县某养殖场采集猪只点云,品种为大约克夏猪,日龄80~110 d。如图2所示,在猪舍的水嘴处设置铁丝网,通道仅允许单只猪通过,同实验室放置条件一样,将KinectV2相机安装在通道两侧。两次分别采集56、15头猪,共71头,3 510个点云数据。使用Matlab自带的Stereo Camera Calibrator程序完成两个相机外参数标定,通过输出外参数系数完成2个相机所拍摄的点云拼接。

图2 养殖场猪只点云采集

1.3 猪只点云预处理

当采集通道固定时,猪只所在范围也是相对固定的。为了方便后续对猪只点云进行分割与测量,需要提取完整的猪只点云。对拍摄点云进行预处理:

(1)猪只点云粗滤波获取猪只点云区域。两相机拼接完成后的点云数据中,如图3a所示,只有猪只所在的部分点云需要进行后续处理,该部分点云与相机的相对位置基本固定,本文使用直通滤波器在坐标轴上设定阈值,去除阈值之外的无关点云,快速获取猪只区域点云,如图3b所示。

图3 猪只点云预处理

(2)基于随机采样一致性算法去除地面点云。地面点云会对后续处理造成不利影响,因此通过随机采样一致性算法去除点云中的地面部分。具体操作为在点云中任意取3个点,计算其对应的平面方程为

ax+by+cz+d=0

(1)

式中a、b、c、d——平面方程系数

x、y、z——点云坐标值

计算所有点至该平面的代数距离为

di=|axi+byi+czi+d|

(2)

式中di——距离i——点序号

xi、yi、zi——任意一点的坐标值

选取阈值dmax,若di≤dmax,则该点被认为是该平面的点,否则为平面外的点。重复以上步骤,设置最大迭代次数N,得到平面点数最多的面,然后将其删除掉,达到去除平面的效果,如图3c所示。

(3)基于统计滤波器去除离群点:猪只点云中的离群点会对体尺测量造成巨大的影响,使用统计滤波器将游离在猪体外的点去除。首先对每个点的邻域进行统计分析,将点云中所有的距离假设构成高斯分布,其形状由均值μ和标准差σ决定,设点云中的第n个点坐标为Pn(Xn,Yn,Zn),该点到任意一点Pm(Xm,Ym,Zm)的距离Si为

(3)

计算遍历每个点到任意点之间距离的平均值μ和标准差σ为

(4)

(5)

式中n——点云总数

当某点临近K个点的平均距离在标准范围(μ-xσ,μ+xσ)内则保留该点,不在该范围内定义为离群点删除,如图3d所示。

(4)基于体素下采样的点云精简。猪只点云点数庞大,严重影响后续分割的处理速度。为了提升后续处理速度且保留更多的特征信息,对猪只点云进行体素网格下采样处理。计算点云的包围盒,将包围盒离散成小体素。设置体素大小为1 mm,获取落在每个体素中的点集,在每个体素中取一个采样点代替原来的点集,如图3e所示。

1.4 融合注意力机制的猪只点云语义分割

1.4.1自注意力模块

自注意力机制可以依据目标去关注输入信息的部分细节,挖掘更深层次的语义特征。自注意力机制首先通过卷积将输入特征X线性映射为query(查询矩阵)、key(键矩阵)和value(值矩阵)3个分支,先将query与key进行点积得到对应的权重, 随后利用 Softmax 函数进行归一化处理,最后通过加权求和得到注意力,具体计算公式为

(6)

式中Q——查询矩阵dk——维数

K——键矩阵V——值矩阵

A——输入矩阵

WQ——Q的权重矩阵

WK——K的权重矩阵

WV——V的权重矩阵

经过上述过程,可以对当前点特征进行更新,有利于相同类别点云进行相互补充,加强点云特征学习,增强网络鲁棒性。

1.4.2融合注意力模块

自注意力模块能够增强网络对特征的感知和学习能力,丰富点的特征信息。本文设计的融合注意力模块的语义分割网络结构如图4所示,该网络的输入是N个原始的点云数据,每个点云数据包含X、Y、Z、R、G、B共6个维度信息,之后每个点云数据与T-Net空间变换网络进行乘积,使得点云旋转到隐含的规范空间,得到更好进行特征提取的角度。空间变换网络的输出结果将作为多层感知器(Multi-layer perceptron, MLP)的输入,以将点云数据升维至N×64,提取到点云高层次局部特征。高层语义特征将通过注意力模块,以提取到关键的特征维度信息。注意力模块输出的数据通过多层感知器将数据的维度从64维扩大到1 024维,利用最大池化操作提取到点云的全局描述特征。此时点云的全局特征中忽略了局部信息的表达,将N×1 024全局特征信息与注意力模块输出的关键特征信息N×64拼接成N×1 088,以增强数据中包含的语义信息的丰富度,最终通过多层感知器将语义分割的结果输出,得到分割后的猪只点云数据。

图4 融合注意力模块的语义分割网络

1.5 体尺测量

鉴于猪只的体尺参数比较丰富,确定体长、体高、腹围、肩宽、腹宽、臀宽6种能够反映猪只体型特征的体尺参数。如图5所示,人工测量标准如下:①体长:猪只耳根到尾根的水平距离。②体高:猪只耆点(一般为肩部最高点)和地面的垂直距离。③肩宽:肩部的最大宽度。④腹宽:猪只腹部的最大宽度。⑤臀宽:猪只臀部的最大宽度。⑥腹围:猪只腹部的最大宽度处绕腹部一周的距离。根据实际人工测量方法结合猪只身体特点设计自动测量方法。

图5 人工测量特征示意图

1.5.1点云坐标系矫正

由于猪只点云在分割时利用了T-Net空间变换网络,导致猪只实际坐标系与测量所需坐标系存在差异,故测量之前先对坐标系进行矫正[22]。首先对猪只点云做最小包围长方体,根据猪只体尺特征,体长与长方体长度方向一致,体高与长方体高度方向一致 ,体宽与长方体宽度方向一致。利用长方体长、宽、高的方向与长方体中心,重新对猪只建立坐标系,完成坐标系矫正,如图6所示。

图6 坐标系矫正

1.5.2肩宽、腹宽、臀宽测量

手工测量猪只体尺时,选取肩部、腹部、臀部最突出的位置为肩宽、腹宽、臀宽的测量点,根据手工测量方法,设计猪只宽度测量方法。分别将语义分割后的肩部、腹部与臀部3部分做xoz面垂直投影,如图7所示,其中x轴方向为体长方向,z轴方向为体宽方向。遍历点云,分别计算每一部分沿z轴的最大值与最小值,确定两点位置(x1,z1)、(x2,z2),计算两点之间的距离为

图7 不同宽度测量示意图

(7)

式中d——相应语义分割后对应部位的宽度

1.5.3体长、体高测量

手工测量时,猪只体高为肩部最高点到地面的垂直距离。如图8a所示,选取肩部点云,作xoy平面投影,y轴方向为体高方向,遍历y轴,获得最大值y1与最小值y2。计算猪只体高h为

图8 体高与体长测量示意图

h=|y1-y2|

(8)

猪只体长为耳根点到尾根点(尾巴在预处理时作为离散点去除)的距离,进行语义分割处理时,以耳根作为头部与肩部的分割点,因此选取肩部、腹部与臀部点云测量。后肢的位置容易对测量造成影响,故将猪只的腿部点云去除掉,如图8b所示。所以体长测量只需要遍历去除腿部点云的x轴,获取最大值x1与最小值x2,猪只体长l计算公式为

l=|x1-x2|

(9)

1.5.4腹围切片与测量

腹围是反映猪只生长情况的重要参数,手工测量时,围绕体宽测点测量腹部周长。提取语义分割后的腹部点云,过体宽测量点做yoz面竖直切片,对切片点云进行椭圆拟合,如图9所示。椭圆周长计算式为

图9 腹围切片与椭圆拟合测量示意图

L=2πr2+4(r1-r2)

(10)

式中r1——拟合椭圆的长轴半径

r2——拟合椭圆的短轴半径

L——猪只腹围长度

2 结果与分析

2.1 语义分割分析

本文在自制数据集上进行验证。共采集71头猪只数据,得到3 510组点云数据,对每组点云数据进行预处理,得到3 510组数据样本,其中训练集2 910组,验证集600组。数据标签分为头部、肩部、腹部、臀部4类。采用平均精度(Average precision, AP)与总体精度(Overall accuracy, OA)对结果进行统计分析。结果如表1所示。

表1 自制训练集语义分割精度

由表1可知,PointNet在自制数据集的分割效果表现最差,这是由于PointNet模型对点云中的点进行单独处理,忽视了点之间的联系,局部特征提取能力较差,导致其模型性能不佳。PointNet++在PointNet基础上进行改进,加强模型在局部特征上的提取能力。3D-RCNN是一种针对点云数据的卷积方法,利用关系形状设计网络模块,通过提取点云特征包含的形状信息,辅助语义分割,该网络结构更为复杂。可以看出与基准网络PointNet相比,本文方法在OA方面提升8个百分点,并且每个部位的AP均有明显提升;与其他网络相比也有小幅提升,因此本文的融合注意力机制的语义分割算法性能上优于其他语义分割网络,验证了所提算法的有效性。从图10来看,出现错误点多数集中在两类标签的分界处,对后续体尺测量几乎没有影响。

图10 猪只点云分割结果

2.2 体尺测量结果分析

为了验证体尺算法的有效性,利用语义分割后的点云,自动测量肩宽、腹宽、臀宽、体高、体长与腹围。在养殖场对71头猪只进行3次人工体尺测量,取3次平均值作为人工测量值。实际采集点云时,猪只身体会出现卷曲或者头部摆动等非自然站立姿态情况,体尺测量会产生较大误差,因此人为对每头猪筛选5组接近自然站立且身体保持直立状态的猪只点云作为自动测量的数据,通过算法计算5组点云的体尺数据,将5次测量的平均值作为自动测量值,部分数据如表2所示,体尺平均绝对误差与相对误差如表3所示。

表2 人工测量与自动测量对比

表3 猪只体尺参数的平均绝对误差与平均相对误差

利用箱线图对肩宽、腹宽、臀宽、体高、体长与腹围数据的绝对误差进行统计分析,如图11所示。因为肩宽与臀宽的特征明显,不易受姿态影响,绝对误差明显小于其他部位,但是该测量部位实际长度较短,所以其相对误差没有明显小于其他部位。腹宽测量易受猪只姿态影响,导致相对误差最大。肩宽的绝对误差在-2.6~3.5 cm之间,平均相对误差为4.21%;腹宽的绝对误差在-4.6~4.5 cm之间,平均相对误差为5.74%;臀宽的绝对误差在-2.9~3.1 cm之间,平均相对误差为3.83%;体高的绝对误差在-5.8~5.4 cm之间,平均相对误差为4.67%;体长的绝对误差在-4.8~5.9 cm之间,平均相对误差为3.98%;腹围的绝对误差在-6.3~6.8 cm之间,平均相对误差为4.39%。

图11 测量部位绝对误差箱线图

对比文献[12,14,19],利用背部图像进行体尺测量,无法提取围度信息。本文基于三维点云进行体尺测量,通过腹部椭圆拟合的方法,实现腹围测量。对比文献[13,15],其利用完整动物点云,基于交互式人工选点测量动物体尺。本文将猪只点云分割成4个部位,对每个部位单独设计体尺测量方法,实现猪只体尺自动测量。文献[16]采用完整猪只点云,对整体设计体尺测量方法,平均相对误差为7.76%,将整体测量方法应用于本试验采集的猪只点云,测量结果的整体平均相对误差为6.81%,均高于本文方法的4.47%。对于猪只点云测量,由于猪只身体结构复杂,且不同的体尺参数可能存在相同的体尺特征,导致直接在整体点云上计算测点难度大。本文通过改进的语义分割模型对猪只关键部位分割,将整体测量转变为部分测量,对每一个分割部位单独设计测量方法,降低了体尺测量难度。

3 结束语

基于人工测量猪只体尺方法,本文将猪只分割为头部、肩部、腹部、臀部4个关键部位,测量肩宽、腹宽、臀宽、体高、体长与腹围关键参数。基于PointNet网络,提出了融合注意力机制的语义分割算法,自注意力模块在低维度的特征中根据贡献度矩阵和所有点的特征对当前点的特征进行更新,挖掘更深层次的语义特征,将深层次特征与全局特征结合,提升特征区分度以提高分割精度。试验结果表明,语义分割模型准确率为86.3%,相较于PointNet、PointNet++和3D-RCNN分别高8、5.7、2.6个百分点。基于语义分割的结果,对分割部位分别设计体尺测量方法,以实现肩宽、腹宽、臀宽、体高、体长与腹围的自动测量,各项体尺的平均相对误差均小于6%,平均绝对误差均小于5 cm,表明利用分割后的部位进行测量,有助于提高体尺测量精度。

猜你喜欢

体尺腹围测量方法
家畜体尺自动测量技术研究进展
基于Kinect相机的猪弯曲体尺测量算法研究
孕中、晚期不同特征胎儿超声生物学指标Z-评分的差异性
超声测量胎儿腹围预测出生体重的探讨
肉羊体尺测量 用上“智慧眼”
胎儿超声生物学指标Z-评分值评估胎儿生长发育效果
超声测量胎儿腹围在预测新生儿出生体重中的应用
基于迭代稀疏分解的介损角测量方法
基于应变原理随钻钻压测量方法研究
一种高效的PCB翘曲度测量方法