基于多任务学习的猪只体重和体况评分预测
2022-07-04孔商羽陈春雨
孔商羽,陈春雨
(哈尔滨工程大学 信息与通信工程学院,哈尔滨 150000)
0 引 言
我国的养殖业和畜牧业已经到了现代化、科技化产业的转型阶段。目前的猪年出栏量达7亿头以上,占世界1/2以上,规模化速度惊人[1]。传统的饲养方式已经无法满足养殖的高效性,养殖场对传统养殖技术和科技创新的结合的需求在不断增加[2]。在猪只饲养中,猪的体重和体况评分十分重要。通过测定体重的变化和拐点,调整饲喂方法,可实现生长猪的精准饲喂;同时出栏体重也跟盈利相关。通过对猪体况的评分,实时制定针对性饲喂量,是当前母猪饲养模式的难点和实现最佳母猪生产性能的关键点[3]。由于猪的生理特性,猪只的常见姿态主要有两种:站立姿态和侧卧姿态。因此,在机器学习中,利用图像分割算法分割猪只不同形态与多任务学习算法同时预测猪只饲养的体重和体况评分,实现同一网络进行同时预测,具有十分重要的意义。在猪只图像识别领域,涂淑琴等[4]提出了基于Mask R-CNN框架,结合Soft-NMS算法的群养粘连猪实例分割方法,有效降低了粘连猪的漏检率;刘坤等[5]在群养环境下,实现生猪粘连,杂物遮挡等不同条件下生猪个体的高精度分割;李丹等[6]针对目前猪只爬跨行为自动化检测程度较低的问题,提出了一种基于Mask R-CNN分割猪只的爬跨行为识别算法。刘虹[7]针对猪个体检测技术,在传统的Mask R-CNN模型上,改进了位置定位边界框损失函数的计算方法,提出了基于相对熵的损失函数代替传统的框回归损失函数以及软化的非极大抑制代替非极大抑制的方法。在多任务学习领域,谢金宝等[8]提出了循环卷积多任务学习模型用于文本多分类,分别利用多任务学习,循环神经网络(RNN)和卷积神经网络(CNN)将不同领域具有相似性的文本共同建模,获取多领域文本间的相关性和文本长期依赖关系,提取文本的局部特征。
1 图像分割网络
1.1 图像分割网络结构
目标检测[9]与实例分割是计算机视觉领域重要的两个任务。常用的目标检测算法有Faster R-CNN[10]、SDD[11]、基于YOLOv3[12]等;相对目标检测的边界框,实例分割可精确到物体的边缘,常用的实例分割算法为Mask R-CNN[13]。Mask R-CNN的网络结构是作为Faster R-CNN的扩展,在有效检测目标的同时输出高质量的实例分割掩膜,并具有很好的泛化适应能力,可和多种R-CNN框架结合。
本文的图像分割网络的整体设计是在Mask R-CNN图像分割网络的基础上,通过ResNet101[14]和FPN共享网络提取猪只站立姿态和侧卧姿态的特征。Mask R-CNN是在Faster R-CNN 的基础特征网络上加入了全连接的分割子网,由原来的分类和回归两个任务变为了分类、回归和分割3个任务。Mask R-CNN采用和Faster R-CNN相同的两个阶段:①具有相同的RPN(Region Proposal Network)层,扫描图像并生成提议(proposals);②除了预测类别和候选矩形框回归,还添加了全卷积网络的分支,对每个候选框(ROI)预测了对应的二值掩膜(binary mask),说明给定的像素是否为目标的一部分。当像素属于目标的所有位置上时标识为1,其它位置标识为 0。采用的图像分割网络的整体结构见图1。
图1 Mask R-CNN结构Fig.1 Structure of Mask R-CNN
第一个分支为原始Faster R-CNN的结构,用于对候选窗口进行分类和窗口坐标回归。第二个分支利用了一个小的全卷积网络结构(Fully Convolutional Network,FCN),对每个候选框预测分割掩模。Mask R-CNN 将ROI Pooling层替换成了ROI Align层,添加了并列的FCN层。通过像素级分割,输出二进制掩码,将ROI Align与来自Faster R-CNN的分类和边界框相结合,以便进行精确的分割。
1.2 特征提取网络
Mask R-CNN网络采用ResNet101-FPN的结构提取特征,对每个实例生成目标边界框和分割掩码。使用深度残差网络(ResNet)能够训练到更加深层的网络。
ResNet网络的骨干网络使用的是预训练好的ResNet101。输入的ROI首先获得7×7×1 024的ROI特征,然后将其升维到2 048个通道。分为两个分支,上面的分支负责分类和回归,下面的分支负责生成对应的mask掩膜。由于前面进行了多次卷积和池化,减小了对应的分辨率,生成掩膜的分支开始利用反卷积进行分辨率的提升,同时减少通道的个数,因此变为14×14×256,最后输出了14×14×80的mask模板。
FPN网络通过输入单一尺度的图片,最后对应的特征金字塔,该网络可以在一定程度上提高检测的精度。该架构也分为两个分支,作用和ResNet相同,但是分类时使用了更少的滤波器。而mask分支中进行了多次卷积操作,首先将ROI变化为14×14×256,然后进行了5次相同的操作,接着进行反卷积操作,最后输出28×28×80的掩膜。与ResNet比可以获得更细致的mask。
2 多任务学习网络
在机器学习中,绝大多数都是单输入输出的卷积神经网络模型,即一个输入对应一个输出的单任务学习。本文的体重和体况评分的双输出回归网络模型,采用的是多任务学习[15]的网络结构。多任务学习是一种联合学习,给每个样本一系列的目标值,多个任务并行学习,共享一个模型,预测出该数据点的多个属性,且结果相互影响[16]。由于多任务学习可共享它们所学到的信息,是单任务学习所不具备的,因此相关联的多任务学习比单任务学习有更好的泛化效果。
基于深度神经网络的多任务学习中常用两种方法:隐层参数的硬共享与软共享[17]。硬共享可将参数共享到所有任务的所有隐层上,而保留任务相关的输出层。多个任务之间共享网络的浅层参数,在网络的靠近输出部分开始分叉去做不同的任务。因此硬共享机制降低了过拟合的风险。软共享是每个任务都有自己的模型和参数。对模型参数的距离进行正则化来保障参数的相似。
本文在ResNet101的单任务学习的基础上,基于硬共享的方法修改设计了两种多任务学习网络结构。
第一种网络结构中,两个任务通过卷积层共享参数,得到共享特征,再从全连接层分出,将分类改为回归输出,分别输出体重预测值和体况评分预测值。该方法是在ResNet101网络上修改的简单结构,增强两者之间的联系,从而降低过拟合的风险。全连接层网络结构见图2。
图2 多任务学习网络的全连接层结构1Fig.2 First multi-tasking learning network fully connected layers structure
为进一步增强体重和体况之间的关联性,设计了第2种网络结构见图3。在结构1的基础上,通过ResNet101网络的卷积层得到共享特征,再分别通过不同的全链接层。为了加强任务间关联性,增强参数共享机制,因此在全连接层最后将不同任务的特征表示参数共享,即将不同任务的特征参数拼接后,分别输出体重预测和体况评分预测。
图3 多任务学习网络的全连接层2Fig.3 Second multi-tasking learning network fully connected layers structure
3 实 验
3.1 实验环境和设置
训练的设备参数如下:Ubuntu 18.04,显卡为GTX1080,显存8 G,CPU为i7-970K,内存为16 GB。
在模型的参数设置上,图像分割模型使用的输入图片的分辨率大小为640×480。图像分割网络是基于深度学习框架TensorFlow框架下的Mask R-CNN算法实现,训练所用的学习率初始值设置为1e-5,batch size为16。图像分割网络测试中,只检测置信度大于0.9的包围框。
体重和体况评分的预测网络是基于深度学习框架PyTorch下的ResNet101卷积神经网络实现。
3.2 猪只图像数据集
为了增强模型训练的真实性和可实践性,采用的数据集来源于猪场采集的真实数据,通过人工标注的方法进行制作。猪场的图像采集设备在限位栏母猪的上方拍摄猪只图像;体重数据来源于猪场的限位栏体重秤,按秒记录体重数据,后续通过平滑滤波等方法处理体重数据;体况评分由猪场的专业养殖人员,根据猪只后方背膘生长程度,肋骨、骨骼和髋骨周围脂肪的生长程度制定评分标准。采集数据共322头猪,2 937张图片,体重范围100~175 kg,体况评分范围1~6。猪只的姿态包括站立姿态和侧卧姿态。测试集总共60头猪,共298张图片,体重范围100~160 kg,体况评分范围1~6。
3.2.1 图像分割实验
为了检测出不同姿态的猪只,在打标签时添加站立和侧卧两种猪只形态。具体步骤如下:①挑选33张图片,分为训练集30张,测试集3张,用via标注工具制作标签,标记为站立、侧卧和不完整;②基于coco数据集进行迁移学习;③调整超参数,学习率设定为1e-5;④训练,观察损失函数下降直到收敛;⑤在测试集上测试;⑥将图像分割结果不完整、分类结果错误的猪只挑出重新打标签训练;⑦重复步骤④~⑥,得到图像分割效果较好的模型,应用到采集的数据中,分割得到站立和侧卧姿态的掩膜,分割准确率达98%。
3.2.2 深度图转点云图像
得到猪只掩膜后,需要将深度图转为点云。原理为坐标系的变换:即图像坐标系转换为世界坐标系。变换的约束条件是相机内参矩阵,相机内参数由现场摄像头得到。
坐标转换的公式:
(1)
其中:u和v分别为图像坐标系下的任意坐标点;u0和v0分别为图像的中心坐标;xω,yω,zω为世界坐标系下的三维坐标点;zc为相机坐标的z轴值,即目标到相机的距离。相机坐标系和世界坐标系的坐标原点重合,相机坐标和世界坐标下的同一个物体具有相同的深度,即zc=zω。R,T分别为外参矩阵的3×3旋转矩阵和3×1平移矩阵。由于世界坐标原点和相机原点是重合的,即没有旋转和平移,所以公式简化为
(2)
从式(2)可以计算得到图像点[u,v]T到世界坐标点[xω,yω,zω]T的变换公式:
(3)
通过相机的成像原理,将二维的图像坐标转换为空间三维坐标系。
3.2.3 数据增强实验
由于自制的采集到的数据集数据量较小,且体重和体况评分的数据分布呈现不均匀的趋势。在深度学习中,很多算法存在基本假设——数据的分布是均匀的。但在实际应用中,大部分数据都是不均衡的,因此存在分类和回归预测时不准确的现象,特别是较少的边缘数据会出现预测偏差较大的问题。从训练集的体重分布直方图见图4,每个体重数据下对应的数量分布十分不均,特别是大于150 kg的体重明显较少,这种不均匀的分布影响模型训练效果。
图4 体重分布直方图Fig.4 Histogram of weight distribution
为了减少数据量小且不平衡的样本问题,对数据做增强实验对比。解决方法为:①从训练集入手,通过改变训练集样本分布,降低不平衡程度;②从算法入手,根据算法解决不平衡时的问题,适当地修改得以解决。本文通过增加样本来扩充数据集。简单的过采样通过从少数量数据中随机采样增加新的样本,改变训练数据的分布减小数据的不平衡程度。直接复制数据的方法使得数据集中反复出现一些样本,容易导致过拟合,并且没有增加任何新的信息。结合数据集的具体情况,通过图片翻转的方法增加数据集,具体采用了180°翻转和水平镜像对称翻转两种方式,翻转结果见图5。翻转后的训练集图片总数从2 937张增加到3 865张,测试集由298张添加到345张。
图5 180度翻转和水平镜像翻转Fig.5 180 degree flip and horizontal mirror flip
3.3 单任务学习网络
为了评价多任务回归的学习效果,分别在CNN网络上训练体重和体况数据,评价标准为各个类别的平均绝对误差(MAE)和准确率。
平均绝对误差公式:
(4)
平均准确率公式:
(5)
3.3.1 体重预测网络
基于PyTorch环境下的ResNet101卷积神经网络训练体重预测模型,学习率设置为1e-5,训练迭代40次后收敛。选择收敛后的模型,用于测试集上测试模型效果,输出预测体重,见图6。通过计算得到MAE=7.214,平均准确率92.00%。
图6 单任务体重预测曲线Fig.6 Weight prediction curve for the single task
3.3.2 体况评分预测网络
与体重预测条件相同,训练结束后在测试集上测试,输出预测的体况评分。MAE=0.680,平均准确率为89.85%。体况评分预测曲线见图7。
图7 单任务体况评分预测曲线Fig.7 Prediction curve of single task body condition score
3.4 多任务学习网络
3.4.1 损失函数加权
由于本文是多任务学习下的回归网络,选用适合回归的MSE均方损失函数(L2 Loss)。使用Adam(Adaptive Moment Estimation)优化器,用来更新神经网络的权重。
梯度下降法:
(6)
(7)
在针对多任务学习的网络模型中,最简单的方法就是每个任务单独计算损失,然后汇总起来,最终的损失函数为
loss(t)=loss1(t)+loss2(t)
(8)
根据上述公式,两个任务的损失函数反向传播的梯度数量级不一致时,loss直接相加的方式导致多任务的学习被某个任务所主导。当模型倾向于去拟合某个任务时,其他任务的效果可受到负面影响,效果会相对变差。因此,引入权重来平衡梯度:
loss(t)=ω1loss1(t)+ω2loss2(t)
(9)
根据数据集的训练情况设置合理的权重。
3.4.2 动态权重调整
由于体重和体况评分的损失函数的数量级差别较大,若将损失函数的权重设置为一个固定值,会使加权后较小的任务一直被抑制,因此,设计一个简单的动态权重调整,权重随着损失函数的变化而变化,从而实现体重和体况评分任务的训练平衡。
加上权重的目的是使两个任务的损失函数的数值上大致接近,或者说量纲大致一致。因此在已知的单任务网络的学习情况下,根据式(9)设计简单的动态权重:
(10)
n1和n2分别为体重和体况评分的损失函数的最高位数。通过缩放使两个损失函数在同一数量级上,两个任务的梯度下降达到相对平衡。
3.4.3 多任务学习网络实验对比
采用2.1节所设计的网络训练多任务模型,与单任务实验的训练参数设置相同,损失函数采用直接相加的方法,同时输出体重和体况评分预测值。用平均绝对误差(MAE)和平均准确率评估体重和体况评分的预测效果。
传统的多任务学习网络结构——深度关系网络(DRN)做对比。该网络是在AlexNet网络框架下,共享卷积层,对全连接层添加矩阵先验,允许模型学习任务间的关系。该方法加强任务间的关联性,但依赖于事先预定义的共享结构。实验对比结果见表1。由表1可见,通过4种网络结构对比可见ResNet网络框架下的结构1和结构2,通过网络参数之间的共享,增强两个任务之间的关联性,使得预测的准确率提高,验证了基于ResNet网络的多任务学习网络输出猪只体重和体况评分预测的有效性。
表1 不加权重的模型效果评估Table 1 Evaluation of model effects without weights
3.4.4 权重调整实验结果对比
观察体重和体况评分的损失函数收敛时,分别在数值10和0.5左右波动,根据损失函数的比例,调整权重比例,设定loss1=0.05,loss2=0.95。结果见表2;根据设计的动态调整权重的方法,调整损失函数的权重,训练模型结果见表3。
表2 调整权重后的模型效果评估Table 2 Evaluation of model effects by adjusting weights
表3 动态调整权重后的模型效果评估Table 3 Evaluation of model effects by dynamically adjusting weight
通过调整权重,将收敛时的损失函数调整到同一数量级,平衡了体重和体况评分的模型训练,有效地降低了体重训练时因损失函数过大造成的训练主导,从而提高了体况评分的准确性。
4 结 论
本文针对猪只的不同形态,结合Mask R-CNN算法分割猪只图像,分割准确率达到98%。设计了两种ResNet网络下的多任务学习的卷积神经网络结构,根据网络训练情况动态调整了损失函数的权重,完成体重和体况评分共享一个模型的预测。有效验证了多任务学习方法应用的可行性,通过增强了体重和体况评分预测的关联性,提高了预测的准确性,使得加入动态权重调节后体重预测提高了5%准确率,体况评分预测提高了3%准确率。有利于实际的应用。