APP下载

基于DeepLabCut算法的猪只体尺快速测量方法研究

2023-03-07赵宇亮曾繁国王海峰

农业机械学报 2023年2期
关键词:体尺离群猪只

赵宇亮 曾繁国 贾 楠 朱 君 王海峰 李 斌

(北京市农林科学院智能装备技术研究中心,北京 100097)

0 引言

猪只体尺参数是衡量其生长状况的主要指标[1-3],在种猪选育、肉质评价、精准饲喂和分群管理中起着重要作用[4-7]。一般来讲,体尺参数主要包括体长、体宽、体高、臀宽和臀高5项指标。目前,猪只体尺测量主要采用人工测量方式进行。人工测量往往需要借助测杖、圆形测定器和卷尺等工具测定,费时费力,而且易引起猪只应激反应,测量精度难以保证。非接触式猪只体尺测量方法成为科研人员的重要探索方向。近年来,基于计算机视觉的非接触式测量技术经历了“平面图像—立体视觉”和“人工特征工程—自动特征工程”的发展阶段[8-10]。在猪只体尺测量方面,DESHAZER等[11]于1988年首次提出将计算机成像系统用于猪只体尺测量研究;WHITE等[12]、DOESCHL-WILSON等[13]于2004年分别采用单目相机开展了猪只生长过程的彩色图像采集和体尺指标计算研究,但猪舍环境、猪体脏污和地面高光反射等问题影响轮廓提取,测量精度有待提高[14];2019年前后,PEZZUOLO等[15]、司永胜等[16]基于Kinect深度相机采集猪只理想姿态下的背部图像,通过特征点检测来计算猪只体尺参数,但图像预处理过程繁琐[17],无法实现实时测量;近年来,DeepPose[18]、DeeperCut[19]、ArtTrack[20]、OpenPose[21]等姿态检测算法在人体姿态实时估计方面的应用成为研究热点,但前期需要大量标注数据集(5 000幅以上)进行模型训练,数据标注过程费时费力。2018年,MATHIS等[22]提出了一种基于深度神经网络迁移学习的无标记姿态估计算法(DeepLabCut),该算法只需少量数据集(约200幅)进行训练,已在老鼠[23]、灵长动物[24]、猎豹[25]和赛马[26]等多个物种的姿态实时跟踪方面呈现良好的检测性能,但在猪只姿态检测及体尺测量方面尚未有研究报道。

基于此,为实现猪只养殖过程中体尺参数的非接触式快速准确测量,本文使用RealSense L515深感相机采集猪只站立姿态图像,借助DeepLabCut算法处理猪只背部RGB图像并提取关键特征点,开展5项体尺参数的测量研究。

1 数据集与测量方法

1.1 平台搭建

猪只体尺数据采集平台结构示意图如图1所示。在猪只保育床(尺寸为1.8 m×1.8 m)正上方2 m处安装RGB-D图像采集平台。该平台主要由深度数据采集单元、微型边缘计算单元、电子秤、无线局域网和计算机工作站组成。深度数据采集单元选用Intel RealSense L515深感相机,内置RGB图像传感器(分辨率为1 920像素×1 080像素,帧率为50 f/s)、深度传感器(分辨率为1 024像素×768像素,帧率为30 f/s)和BMI085惯性测量单元,探测范围0.25~9 m,RGB视场70°×43°,深度视场70°×55°。微型边缘计算单元选用NVIDIA Jetson Xavier NX开发者套件,内置384 个 NVIDIA CUDA Cores、48 个 Tensor Cores、6 块 Carmel ARM CPU 和2个 NVIDIA 深度学习加速器引擎,可支持RealSense L515深感相机的数据采集、模型部署、多算法融合运算等功能。在前期数据收集过程中,为有效采集猪只站立图像,本研究采用电子秤(精度0.1 kg,广东寮步益科电子公司)进行辅助判断,当边缘计算单元获取的电子秤称取的猪只实时体质量数据波动小于0.2 kg并持续3 s以上时,开启并采集猪只RGB-D图像。

图1 数据采集平台

1.2 数据获取

本试验于2021年4月1日至6月15日在河北省秦皇岛明霞养殖场某一单栏中进行(图1b),猪只品种为长白,数量为12头,日龄为30~115 d,体质量为6~50 kg。基于数据采集平台,共获取单体猪只站立图像700组用于模型训练与测试。

1.3 体尺自动测量方法

1.3.1测量算法

本研究首先参考猪只体尺测量点的位置,在猪只图像中选取关键特征点,并进行图像特征点标记和模型训练,验证特征点检测效果;其次,结合深感相机内参数,计算关键特征点世界坐标并优化离群特征点;然后,计算猪只5项体尺参数。具体算法如图2所示。

图2 猪只体尺测量算法流程图

1.3.2背部特征点选择

借助传统人工体尺测量方法,观察并选择猪只图像中10个特征点进行标记,用于后续模型训练。如图3所示,B为猪只尾根区域位置,L1、R1为猪只肩部区域最宽处左、右两个区域位置,L2、R2为猪只臀部最宽处左、右两个区域位置,El为猪只左耳尖位置,Er为猪只右耳尖位置,F为颈部中点位置,M为猪只臀部最宽处中心点位置,N为猪只肩部区域最宽处中心点位置。

图3 猪只背部特征点标记示意图

1.3.3特征点提取算法

为自动提取猪只背部特征点位置,本研究选取DeepLabCut算法开展猪只背部特征点检测研究。DeepLabCut算法是一个结合对象识别和语义分割算法的深度卷积网络结构。以ResNet作为DeepLabCut主干网络结构为例,其具体实现算法是:在原有基础网络上去除ResNet残差网络结构分类层,接入反卷积层进行上采样,获得载有特征点分布情况的特征图,并以特征点概率密度状况及向量趋势数据呈现,进而确定特征点具体位置,得到该特征点的图像坐标,具体流程如图4所示。接下来,运用已采集的批量猪只图像数据按照上述流程对DeepLabCut网络进行训练,得到猪只各特征点的分布情况,如图5所示,特征数据以热力图形式映射在原始图像中。

图4 网络模型结构图

图5 特征位置分布图

为获得猪只背部特征点检测最优模型,本研究选取ResNet-50、ResNet-101、ResNet-152、MobileNet-V2-1.0、MobileNet-V2-0.75、MobileNet-V2-0.5、MobileNet-V2-0.35、EfficientNet-b0、EfficientNet-b3和EfficientNet-b6共10个网络模型[27-30]进行训练并择优作为DeepLabCut主干网络模型。

1.3.4站立姿态分类

由于猪只身体处于卷曲、头部摆动等非自然站立姿态时,体尺测量会产生较大误差,因此,为实现猪只5项体尺数据精准计算,在获得猪只特征点信息后,需筛选猪只自然站立姿态进行体尺测量。一般自然站立状态下,El与Er连线S1,L1与R1连线S2,L2与R2连线S3,这3条线间近似平行,各直线间夹角比较小;非自然站立状态下,由于头部或身体扭曲,各直线间夹角比较大。

本文在得到多组3条线间的夹角数据后(Angle_S12、Angle_S23、Angle_S13),运用支持向量机(Support vector machine, SVM)进行模型训练。SVM分类的主要思想是通过核函数定义的非线性变换将输入空间变换成一个高维空间,并在这个空间中寻找一个分类超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。本文将数据集主要分成两类(自然站立状态与非自然站立状态),如图6所示。选用径向基函数(Radial basis function)作为SVM核函数,在姿态模型训练过程中主要涉及惩罚系数与gamma两个参数。其中惩罚系数即对误差的宽容度,惩罚系数越高,说明越不能容忍出现误差,容易过拟合;惩罚系数越小,容易欠拟合。gamma值隐含地决定了数据映射到新的特征空间后的分布,gamma值越大,支持向量越少,gamma值越小,支持向量越多。在模型训练过程需要调节这两个参数,使得姿态分类模型准确率高又具备较强的泛化能力。

图6 不同状态站立图像

1.3.53D坐标转换

为获得原始数据中彩色图像与深度图像的坐标间映射关系,本研究采用Intel RealSense提供的pyrealsense2工具包进行图像配准,实现目标区域由像素坐标向世界坐标的转换。具体转换关系如图7所示,世界坐标(X,Y,Z)变换计算公式为

图7 图像坐标与世界坐标转换关系

(1)

式中cx——图像中心点横像素坐标,像素

cy——图像中心点纵像素坐标,像素

fx——横向像素焦距,像素

fy——纵向像素焦距,像素

d(u,v)——图像点(u,v)深度,m

本文深度相机cx=948.963像素,cy=524.896像素,fx=1 371.98像素,fy=1 372.58像素。

1.3.6离群特征点坐标优化

实际应用中,由于RealSense L515自身激光扫描方式特点,部分深度信息会存在丢失情况,尤其是猪只边缘与地面交接处的深度数据丢失更为严重,还有通过DeepLabCut算法获取的靠近身体边缘区域特征点的微小偏差都会造成猪只体尺的大幅误差。

已知摄像头与地面距离,易将深度信息划分为地面区域G、猪体区域B、未获取深度区域O。如图8所示,图8a通过带通分割方式将深度图分成3个区域,红色为猪体区域,绿色为地面区域,蓝色为未得到深度数据区域。通过DeepLabCut算法得到特征点的图像位置与真实标记位置无明显差异,将特征点以3D形式呈现,明显看出点El、B深度为0 mm,点L1映射在地面区域。因此需要对离群点位置进行优化,从而计算猪只体尺数据。

图8 深度数据不同仰角3D图

为解决这一问题,本研究设计了一种离群特征点临近区域深度替换算法。对于离群特征点P,在深度图上以该点图像坐标位置作为中心点,向外扩张成(2d+1)×(2d+1)像素矩形区域,获取该区域深度数据集合,将点P的深度数据替换成该集合非零最小值。本文选用矩形区域中非零最小值与矩形区域非零平均值对比测试,最终选择矩形区域非零最小值替代离群点深度,此方式相对于矩形区域非零平均值替代方法更符合实际测量点位置。

1.3.7体尺计算

获得猪只背部各特征点世界坐标以后,计算猪只体长(从点F到点B猪体背脊曲线长度)、体宽(L1与R1直线距离)、臀宽(L2与R2直线距离)、体高(点N距地面高度)和臀高(点M距地面高度)。其中猪只体长为颈部中点到尾跟点间的脊背曲线长度,即图9所示蓝色曲线长度。需对蓝色区域经过的离散点世界坐标进行多项式函数拟合,应用弧微分法计算该曲线长度。

图9 猪只体长曲线提取效果图

2 结果与讨论

2.1 模型训练与评估

为了对DeepLabCut算法中的网络模型进行训练,同时评估10个主干网络模型的运算速度与准确度,针对模型进行离线训练与测试,试验环境:Intel Core i9-10900X型号CPU,TITAN RTX型号GPU,Ubuntu 18.04操作系统,Python 3.7编程语言。

为了量化基于DeepLabCut算法的特征点检测方法针对小样本量数据模型训练效果和预测能力,随机抽取150幅图像进行标记,将图像数据集随机分成训练集和测试集(分别为80%和20%),并在测试图像上评估DeepLabCut的性能模型。训练过程中选取Adam优化器,设置批处理为1幅,学习率为0.02,迭代次数为50 000次。

10个主干网络模型训练过程的Loss曲线如图10所示。由图可知,10个模型在迭代40 000次时均收敛,且网络损失值由小到大呈现为EfficientNet系列、ResNet系列、MobileNet系列,EfficientNet-b6模型在整个训练过程中一直保持最低的损失值。

图10 模型训练过程Loss曲线

10个主干网络模型的性能参数如表1所示,从处理速度上比较,MobileNet-V2-0.75模型检测速度最快,达到16.5 f/s,但其在测试集误差较高,更适合于时效性要求高于准确度要求的检测领域。EfficientNet-b0模型内存占用量为14.9 MB,检测速度与均方根误差在10个模型中表现不错,检测速度和准确度较为均衡。EfficientNet-b6模型为159.1 MB,帧率为3.8 f/s,其在测试集上的误差最小,适合用于高精度线测量,需要更高的检测准确度,因此选用EfficientNet-b6网络模型作为DeepLabCut算法的主干网络。

表1 不同主干网络模型性能对比

2.2 站立姿态分类模型分析

为了得到更为精确的站立姿态分类模型,采用网格搜索法通过惩罚系数与gamma参数调节训练姿态检测模型。使用288组数据进行训练,其中自然站立姿态182组,非自然站立姿态106组。实验中将数据随机打乱,80%数据作为训练集,20%数据作为测试集。经测试与验证分析,选用惩罚系数为1、gamma为0.011训练的自然站立姿态检测模型,识别准确率为94.82%。

2.3 离群特征点优化

为了验证本研究提出的离群特征点优化效果,随机抽验一组带有离群特征点的图像进行误差分析,其中点El、L1、B在点云图中发生明显偏移。针对这3点,利用1.3.6节所述的离群特征点的临近区域深度替换算法,进行测试与分析。图11为离群特征点向外扩张距离d取不同值情况下,特征点在点云图的分布情况。图11a为未针对离群特征点进行优化分布情况,其中点El、B由于深度缺失,记为0,将其转换成世界坐标系后,该两点坐标均为(0,0,0);点L1在图像中轻微向猪体外侧偏移,该点对应地面区域,由于该点深度与实际点L1深度差异明显,导致转换后的世界坐标和实际位置相差较大。图11b为原始图像中离群特征点向外扩张成21像素×21像素区域(d=10像素),优化后其特征点在点云图位置分布,可以看出,点El、L1依然处于离群区域,点B和真实尾根测量点无明显差异,经计算该点与人工标记点的距离为2.8 cm。图11c为原始图像中离群特征点向外扩张成31像素×31像素区域(d=15像素),由优化后特征点在点云图位置分布情况可以看出,El、L1分别与真实左耳尖、体宽左测量点无明显差异,点B与真实尾根测量点有偏移,经计算该点与人工标记点的距离为8.1 cm。图11d为原始图像中离群特征点向外扩张41像素×41像素区域(d=20像素),由优化后其特征点在点云图位置分布情况可以看出,El、L1分别与真实左耳尖、体宽左测量点无明显差异,点B与真实尾根测量点存在明显偏移,经计算该点与人工标记点的距离为10.4 cm。

图11 不同扩张范围下离群特征点优化后的点云图

试验结果发现,d取不同值时,结果存在很大差异。d过小,无法在扩张区域找到符合猪体深度范围的深度;d过大,造成优化后的位置与真实位置差异较大。为进一步优化离群特征点,采用d值动态调节方法,从d=1像素开始进行计算,对于每一个离群特征点,若扩张后矩形区域无法找到符合猪体深度范围的非零最小值,则d值加1像素,直到找到符合猪体深度范围的深度数据为止,表2为手动标记点与动态调整后离群点结果对比表。手动标记特征点结果与动态调节离群特征点分布如图12所示。

表2 手动标记点与动态调整后离群点结果对比

图12 手动标记特征点与动态调节离群特征点对比图

本研究采取动态调节d值方式对离群特征点进行测试,经过优化后离群特征点及骨架模型如图13所示。

图13 猪只特征点与骨架3D图

2.4 体尺测量测试

为了验证本研究方法有效性,对日龄40~70 d长白猪进行现场测试,共采集140组RGB-D图像数据用于测试。部分体尺测量结果如图14所示,结果显示,在DeepLabCut 关键点置信度设置为0.6时,基于DeepLabCut算法的特征点检测算法均可检测猪只背部图像的10个特征点。

图14 猪只体尺测量结果

表3为部分猪只实际体尺与预测体尺数据及误差,经计算体长、体宽、体高、臀宽、臀高的均方根误差分别为1.79、1.07、0.72、1.25、1.46 cm;由计算结果可知均方根误差不大于1.79 cm,符合体尺测量误差要求。体宽、臀宽均方根误差不大于1.25 cm,但这两项参数基数较小,其误差与体长、体高及臀高相比误差略大。在上述试验环境下测试,体尺测量处理时间每帧为0.27 s,符合在线测量应用要求。

表3 实际测量结果与算法计算结果对比

3 结论

(1)针对猪只体尺测量位置特征与数据集规模程度,选取DeepLabCut算法进行10个主干网络模型训练与分析,经验证选用EfficientNet-b6网络模型作为猪只背部特征点提取的最优模型。

(2)使用离群特征点临近区域深度数据替换算法进行动态优化,有效解决了深度数据缺失与不合理问题。

(3)通过现场真实环境测试,本文算法适用于部署在边缘计算单元实现猪只体尺实时精准测量的各项体尺参数,各项体尺数据均方根误差不大于1.79 cm,体尺测量处理时间每帧为0.27 s。

猜你喜欢

体尺离群猪只
降低日粮粗蛋白并添加单体氨基酸对断奶—育肥猪生长性能和营养排泄的影响(中)
家畜体尺自动测量技术研究进展
基于Kinect相机的猪弯曲体尺测量算法研究
猪胃溃疡的病因与防治措施
肉羊体尺测量 用上“智慧眼”
秋冬季防应激不可忽略饮水消毒
一种相似度剪枝的离群点检测算法
猪只硒缺乏症的预防措施和治疗方法
离群数据挖掘在发现房产销售潜在客户中的应用
应用相似度测量的图离群点检测方法