基于可见光光谱和YOLOv2的生猪饮食行为识别
2020-05-29嵇杨培
嵇杨培,杨 颖*,刘 刚,2,3
1. 中国农业大学信息与电气工程学院,北京 100083 2. 现代精细农业系统集成研究教育部重点实验室,北京 100083 3. 农业部农业信息获取技术重点实验室,北京 100083
引 言
作为人类生活必不可少的营养品和消费品,猪肉产品的品质和环境污染、食品安全、人类健康息息相关。进食、饮水量不充足,饲养管理缺乏科学依据,生理疾病等都会导致猪只营养缺失,影响商业价值。目前,生猪养殖过程自动化水平较低,过于依赖人工饲养,不能提供连续、准确、实时的监控和观察。因此,采用智能化的方法检测猪的进食、饮水行为,分析其进食、饮水的规律,对预警生猪疾病、维护猪的福利有很重要的作用。
目前已有的判断动物进食、饮水行为的方法,主要分成两大类: 基于无线射频技术(RFID)和机器视觉技术。Maselyne[1]、Brownbrandl[2]等通过RFID计量饮水量、投喂量,从而达到低成本、高收益的效果。Roland[3]等利用三轴加速度传感器监测小牛的饮水量,以此研究饮水量与小牛健康的关系。此类传感器能实际记录各项参数,但容易因为动物的咬食而损坏。机器视觉技术因为其无接触、成本低等优点在生猪养殖过程中得到大量应用。利用机器视觉技术对生猪的进食、饮水行为进行识别主要通过识别猪体姿态和生猪活动区域两种方式。Jinseong[4]等使用空插值技术消除深度噪声,实现夜间跟踪,为夜间监测生猪异常提供依据。通过活动区域判断方面,杨秋妹等[5]利用传统方法提取猪只目标和行为预判断,再利用深度学习方法构造头部检测器,精准判断生猪的饮水行为,识别率达92.11%。有研究[6]通过使用CCD相机监测生猪,利用图像识别饮水器、水表监测用水量,建立饮水器与饮水量之间的动态模型,准确率达92%。
以上实验多是设置特定的实验环境以及针对特定的姿势实现行为识别,为了解决真实养殖场景中快速、准确地识别生猪的进食、饮水行为的问题,利用YOLOv2神经网络结合头颈模型解决生猪目标检测问题,并利用头颈位置信息粗略判断生猪的行为。在检测基础上使用图像占领指数、背景差分等方法精准判断生猪进食、饮水行为。实验表明头颈模型检测方法能够有效解决部分遮挡问题,准确获取生猪位置信息,精确判断生猪发生的进食、饮水行为,为进一步研究生猪其他行为提供支持。
1 实验部分
1.1 数据采集
实验数据采集于中国农业大学西校区的养殖园,栏内共有两头重约30 kg的大长约克猪。2018年11月20日至2018年12月8日,在可见光条件下拍摄。将高清摄像头(海康威视,型号: DS-2CDTFD-3W/R/32G-T,分辨率为1 080 pix×720 pix)固定于正对猪栏的墙上,距离地面2.8 m处。猪栏的面积大小为2 m×1.5 m,底部高于地面0.5 m,摄像头所拍摄的面积比猪栏面积略小。
1.2 生猪进食、饮水行为识别方法设计
为实现快速、准确地识别真实场景中生猪进食、饮水行为,设计了以下实验方法。通过在图像序列上构建头颈模型,改善生猪目标检测过程中的遮挡问题。选用国际主流目标检测模型YOLOv2,实现真实场景中目标生猪的检测,为进一步识别日常行为提供辅助。使用K-means算法进行聚类候选边框,以缩短训练时间以及提高预测精度。通过替换激活函数,以期加快网络收敛速度、增强网络对噪声的鲁棒性。在利用目标检测的位置信息实现粗略地日常行为识别的情况下,使用背景差分法、图像占领指数等方法分割图像,进一步实现生猪精准行为识别。
1.3 YOLOv2网络简介
YOLOv2是一个基于深度学习方法的端到端的物体检测深度网络,实时和有效是YOLOv2最大的特点与优势,能够在快速检测的同时,保证物体的定位精度[7]。YOLOv2是YOLO(You Only Look Once)的改进版,在YOLO的基础上,YOLOv2主要做了以下改进: 在卷积层后添加batch normalization,修改预训练分类网络的分辨率,移除全连接层,维度聚类等,能够在保持分类准确率的基础上,提高对物体定位的准确度。
2 结果与讨论
生猪目标检测和进食、饮水行为识别的框架图如图1所示。内容包括头颈模型获取、目标生猪检测和进食、饮水行为识别三个部分。
所设计的生猪目标检测模型,使用Tensorflow深度学习平台,GPU模式(NVIDIA Tesla K40m,内存12G)。
根据真实猪舍场景下的生猪目标检测问题的特点,选择使用召回率recall和平均准确率均值mAP作为生猪目标检测模型的评价指标。
图1 生猪行为识别框架图Fig.1 Framework of Pig behavior recognition
2.1 头颈模型获取
从采集到的生猪视频中筛选出有效视频数据,人工记录15天中生猪发生的进食、饮水次数,以便与本算法计算结果做比较。利用PotPlayer视频编辑器,将视频截取成图像序列。原猪舍中有两个猪栏,本文只针对其中一个猪栏内的生猪展开研究,因此将原图由1 920×1 080大小截取成1 396×1 080大小的图像。
对于实际养殖场中的生猪目标检测问题,最重要的是解决生猪之间的遮挡、重叠问题。当猪圈中出现遮挡、重叠时,被遮挡部分的属性信息甚至关键属性信息丢失会影响检测生猪整体的特征。不能较好地解决遮挡、重叠问题,实际养殖场中的检测准确率就得不到保证。通过分析大量密集型养殖场的监控数据,可以发现生猪的头颈部位在数据中的可见性较高,无论是身体部分如何遮挡、重叠,生猪的头颈部位依旧具有较高的稳定性[11]。在获取的数据中选择2 300张图片作为训练集,600张图片作为测试集。利用LabelIMG工具标定训练集中生猪头颈(包含嘴巴到整个耳朵)部位,该数据集包含4 600个头颈部位。将所使用的头颈模型与原来使用的全身模型检测结果作对比,实验结果如表1所示,检测效果对比展示如图2所示。本模型在生猪出现遮挡、重叠等现象时,效果优于全身模型。
表1 头颈模型和全身模型实验结果Table 1 Results of head-neck model and whole-body model
2.2 目标生猪检测
以三组对比实验来证明生猪目标检测模型的可用性。首先对比使用原始边框和聚类得到的边框效果; 然后对比使用不同激活函数的性能; 最后将本文优化得到的检测模型与主流目标检测模型进行对比。
图2 头颈模型与全身模型效果对比图Fig.2 Contrast diagram of head-neck model and body model
2.2.1 候选边框聚类
假如我是水,我想要把人类丢进大海里的塑料垃圾,用海浪卷回岸边,还给他们。如果人类无视我的警告,我会一遍又一遍地重复,直到他们不再向大海丢弃讨厌的塑料制品。
为了缩短模型的训练时间以及提高最终的预测精度,初始边框选择的好坏显得尤为重要。不同数据集中目标大小及位置也不尽相同。在模型的学习过程中,根据事先选取的候选框预测,并不断对边框的位置和尺寸进行回归。因此采用K-means算法对生猪数据集中打好标签的生猪头颈边框进行聚类,得到适合本数据集的初始候选框的数量和参数。标准的K-means聚类计算距离的方法使用的是欧氏距离,而YOLOv2作者使用的距离的公式如式(1)所示
Dis(box, centroid)=1-IOU(box, centroid)
(1)
式(1)中: centroid是聚类时被选作中心的边框,box是除此外的其他边框,Dis则表示这两者之间的距离,IOU(Intersection-Over-Union)表示预测边框与真实区域面积的交并比,当IOU值越大时,两者之间的距离越小,由此得到的候选框大小越适合本数据集。
分别采用原YOLOv2的边框和用K-means聚类得到的边框进行训练,同时保持模型的其他参数和激活函数不变,最终实验结果如表2所示。
表2 不同数量、大小候选框对比结果Table 2 Results of clustering frames withdifferent Numbers and sizes
如表2所示,随着聚类框个数的增加,模型的性能呈现上升的趋势。但增加候选边框会增加模型的训练时间、消耗更夺硬件资源,因此不考虑通过增加候选框的个数来达到较优的检测效果。使用四个、五个聚类框的性能没有太大的变化,因此选取四个聚类候选边框。优选的聚类框在测试集中的直接表现是能将距离摄像头较远的生猪检测出来,如图3所示。
2.2.2 YOLOv2网络模型优化
YOLOv2网络是使用一个单独的卷积模型实现端到端的目标检测。在生猪目标检测模型训练的过程中,不仅需要对生猪预测框的尺寸位置进行学习,还需要对生猪的特征进行学习,且学习过程中噪声较多,要解决的问题复杂,因此选取合适的激活函数对卷积神经网络的学习至关重要。
目前神经网络中使用较多的激活函数是ReLU(rectified linear unit)[8],其公式定义如式(2)
(2)
相对于sigmod函数和tanh函数,其在输入正数时,不存在梯度饱和问题,且计算速度快了很多。但是当输入为负数时,会出现神经元死亡的情况。
Leaky ReLU(leaky rectified linear unit)是对ReLU的一个改进版,和ReLU相比,在负数区域内,PReLU有一个很小的斜率,可以避免神经元的死亡问题[9],其定义公式如式(3)
(3)
Leaky ReLU也是目前YOLO所采用的激活函数,虽然保留了x取负值时候的输出,但这部分输出不具备一定的抗干扰能力。
针对以上的分析,在网络的每一个卷积层后使用ELU激活函数,其定义公式如式(4)
图3 使用优选聚类候选框的生猪检测结果Fig.3 The pig detection results of optimized clustering candidate box
(4)
与ReLU和Leaky ReLU相比,当输入为正值时相同,而输入为负数时则采用的是指数函数。从ELU的函数图像看,坐标轴左侧部分软饱和能够增加ELU对输入变化或噪声的鲁棒性; 而坐标轴右侧部分采用线性函数,能够缓解梯度消失问题[10]。其输出的值均接近于零,能够增加其收敛速度。
选取ReLU,Leaky-ReLU以及ELU三个激活函数验证不同激活函数对生猪目标检测模型的影响。同时不改变模型其他参数的条件,只改变卷积层中的激活函数。最终得到的检测模型性能如表3所示。
表3 不同激活函数的性能比较Table 3 Performance comparison of differentactivation functions
如表3所示,不同的激活函数对生猪目标检测的性能影响有所不同。当模型使用ELU激活函数时,测试集上的mAP对比前两者分别高出了0.68%和2.77%,召回率分别高出了1.22%和4.37%。
如图4所示,当猪舍中生猪出现不同程度的遮挡、猪舍中光照变化等引起的图像中噪声信息,ELU激活函数比其他两者对噪声信息具有较强的鲁棒性。因此无论是检测能力还是收敛速度,都强于前两者。
最后将生猪目标检测模型与其他不同的模型进行对比,最终在测试集上性能如表4所示。实验表明,使用本文改进后的YOLOv2算法对生猪进行目标检测,无论是在检测效率还是检测精度上均优于其他3种算法,可作为生猪目标检测的模型使用。
图4 不同激活函数Loss曲线图Fig.4 Loss curve of different activation functions
表4 不同模型性能比较Table 4 Performance comparison of different models
2.3 进食、饮水行为识别
进食、饮水部分的技术路线图如图5所示,通过上述目标检测阶段得到的检测框左下角坐标,判断生猪是否处于进食或饮水区域,从而达到一个粗略的行为识别结果。当生猪处于进食、饮水区域时,读取该图像并分割,得到前景目标。利用进食、饮水区域的图像占领指数以及生猪在该区域停留的时间精细判断生猪是否真正发生了进食、饮水行为,并进行记录。
图5 进食、饮水技术路线图Fig.5 The flow chart of eating and drinkingbehavior recognition
背景差分法可用于对静止场景中的目标进行分割,该方法的原理是将当前的图像与背景图像做差分运算,对得到的前景目标区域再进行阈值化,获取目标。如图6(b)所示为生猪背景图,图6(a)所示为图像序列中的某一帧,通过背景差分法得到前景区域如图6(c)所示。对背景差分得到的图像进行膨胀、腐蚀等形态学操作并删除小联通区域,得到的分割图像如图6(d)示。
如图6所示,处理得到的二值图像中,以饮水行为为例,将饮水区域记为S,Area(S)表示饮水区像素点的值总和,饮水区占领指数记为ROccupied。S区域的像素点坐标记为(x,y),猪只头部区域像素点的值记为F(x,y)。当猪只的头部进入饮水区域后,将覆盖在该区域的像素点的值记为1,其余记作0。饮水区S的占领指数公式定义如式(5)
(5)
生猪进食、饮水区域像素占领指数以及停留时间均有一定的规律。当ROccupied超过设置的阈值时,且在该区域停留的时间大于2 s、小于4 min时,判定该生猪发生了进食或饮水行为,计数加1。像素比值的阈值根据多组实验求得,停留时间小于2 s时可能是猪只经过进食、饮水区域,大于4 min可能是在进食、饮水区躺卧休息。
在抽取的15个视频中,将本算法检测到的生猪进食、饮水次数与人工记录结果进行对比,结果如表5和表6所示。据统计,人工观察视频记录的饮水、进食次数分别为80次和127次,通过本文算法共检测出74次饮水和114次进食。与实际结果相比,正确饮水、进食的次数分别为70次和110次,将非饮水、进食行为错误识别次数分别为4次和4次,实际发生饮水、进食行为却未检测出的次数分别为10次和17次。出现误判的主要原因是生猪在进食、饮水区活动,符合判断的条件,但没有发生进食或饮水行为; 出现漏判的主要原因是网络自身对比较小的物体检测效果差。
图6 分割效果图Fig.6 Segmentation results
表5 饮水行为实验结果Table 5 Results of drinking behavior
表6 进食行为实验结果Table 6 Results of eating behavior
利用本方法正确识别出的进食、饮水次数与所检测出的次数之比定义为进食、饮水的准确率,将正确识别行为的次数与实际视频中发生的行为次数之比定义为召回率,由此计算得到的猪只饮水、进食准确率分别为94.59%和96.49%,召回率为87.5%和86.61%。另外不使用头颈模型及神经网络,仅使用背景差分、图像占领指数等传统图像处理方法识别生猪进食、饮水行为,其识别结果如表7所示。从对比结果可以看出,采用本方法的行为识别准确率和召回率均高于传统方法。传统方法无法直接判断在饮水区域的是头部还是尾部,视频采集过程中光线的变化会导致生猪目标获取不完整,且需要对每一张生猪图像进行处理判断,耗时耗力。而本文使用神经网络结合头颈模型可直接检测到生猪头部,对符合预判段的图像再进行后续的处理,不仅用时少,还能节省能源消耗。因此,本方法可用于识别生猪的进食、饮水行为。
表7 行为识别结果对比Table 7 Comparison of behavior recognition results
3 结 论
提出了基于可见光光谱图像和YOLOv2网络的生猪进食、饮水行为智能识别算法。采用改进的YOLOv2网络结合所提出的头颈模型实现了猪只检测,算法准确率达90.24%。相对于全身模型,所提出的头颈模型不仅能有效解决生猪的遮挡问题,而且能精准定位生猪的头部,为进一步判断进食、饮水行为奠定基础。在前期深度学习检测的基础上,通过计算图像占领指数、停留时间等识别生猪是否真正发生进食、饮水行为,准确率分别达到94.59%和96.49%,无论是识别效率还是准确率均高于仅使用传统图像处理方法。本方法具有高度的通用性,针对生猪的进食、饮食行为识别提出的头颈模型,还可用于检测生猪的其他部位,为识别生猪的排泄等其他日常行为作辅助。当生猪发生排泄行为时,记录该行为发生的时刻,统计出一定时间内排泄行为发生的次数,再根据次数的多少来判断生猪是否存在异常,及时通知管理员并采取相应措施。本研究还未达成产业化的目的,仅是一个有益的探究,研究过程只依赖于猪舍的监控设备,投入成本低且对生猪无伤害,本研究结果可以为猪舍管理人员科学养殖、增加商业价值的提供参考。