姬江涛 刘启航,2 高荣华 李奇峰 赵凯旋 白 强
(1.河南科技大学农业装备工程学院, 洛阳 471003;2.国家农业信息化工程技术研究中心, 北京 100097;3.北京市农林科学院信息技术研究中心, 北京 100097)
奶牛进食后一段时间,将未能消化的食物从食道返回口腔,重新咀嚼后吞咽的行为称为反刍行为[1-3]。反刍行为与奶牛生产、繁殖性能及疾病等因素密切相关[4-8]。STONE等[9]、KAUFMAN等[10]和ANTANAITIS等[11]试验验证奶牛反刍时间与产奶量呈正相关性[12]。ALMEIDA等[13]研究表明,奶牛患蹄病时其反刍时长明显下降。因此,监测奶牛个体反刍行为能够及时掌握其健康状况,便于早期发现患病牛只[14],避免病情加重影响正常产奶和繁殖[15-18],提高奶牛养殖水平。
反刍行为表现出来的视觉特征是逆呕-咀嚼-吞咽,一次行为发生的时间约为70 s,每次反刍行为中咀嚼时间为50~60 s,因此咀嚼次数是反刍行为最直观体现,且咀嚼次数减少意味着反刍行为异常。传统依靠人工监测并判断反刍行为异常的工作方式,效率较低、准确率难以保证。随着养殖规模扩大及现代化、精准化畜牧业发展,智能监测设备不断涌现[19-21],使得反刍行为监测智能化成为可能。现有智能化反刍行为监测大多通过穿戴式设备,监测奶牛咀嚼加速度、声音规律等,该技术监测精度高、实时性强,但穿戴式监测设备安装成本高、易造成奶牛应激反应[22]。随着视觉技术在养殖中应用逐渐增多,基于视频分析的奶牛反刍监测方法降低了接触式设备监测奶牛反刍行为的成本,避免了设备对奶牛造成的应激反应,是未来奶牛反刍行为监测发展的重要趋势。ANDRIAMASINORO等[23]结合惯性测量单元(Inertia measuring unit, IMU)识别奶牛反刍行为,准确率为95.0%。CHEN等[24]采用Mean-Shift算法精确跟踪奶牛下颌运动,从视频中提取出牛嘴运动的质心轨迹曲线,实现奶牛反刍行为监测,准确率为92.03%。REITER等[25]采用Smartbow算法创建了Smartwell视频分析系统监测奶牛每小时反刍时间,误差为35.3 s。毛燕茹等[26]通过Kalman滤波和Hungarian算法对同一奶牛上下颚区域关联匹配获取嘴部咀嚼曲线,实现多目标奶牛嘴部跟踪和反刍行为监测,咀嚼次数平均正确率为96.93%。
基于视频分析的反刍行为监测方法,具有较强的光照敏感性,不适宜图像明暗程度差异较大的养殖环境。而光流法不会受光照条件约束且能够保证较高检测率,被广泛应用到复杂养殖环境下动物行为分析。如宋怀波等[27]利用Lucas-Kanade稀疏光流法分析视频序列帧中奶牛花斑边界平均光流变化规律,实现呼吸行为检测,帧处理耗时在0.10~0.13 s之间,检测平均准确率为98.58%。李通[28]提出了一种基于Horn-Schunck光流法的多目标奶牛嘴部区域自动检测方法,跟踪成功率达到89.12%。段恩泽等[29]基于优化Mask RCNN的实例分割网络和基于LiteFlowNet的光流计算网络,构建了一种死兔行为识别模型,识别准确率为90%。其中FlowNet算法相较于传统光流算法光流计算速度更快,对视频帧间运动信息敏感,更加适合拥有丰富大小位移信息的反刍行为监测,而由于其高灵敏度运动感知能力,会不可避免受到反刍过程中奶牛头部小细节运动干扰。
本文改进FlowNet 2.0光流算法利用垂直光流分量替代光流速度计算光流图,消除水平运动对光流分析干扰;设置光流阈值避免垂直光流中头部运动光流干扰,在保持高灵敏度的同时减小其他运动影响。
2021年9月—2022年3月分别在北京市延庆大地群生奶牛养殖基地和北京市富农兴牧奶牛养殖中心采集奶牛反刍行为视频数据,使用高清网络摄像机,摄像机位于反刍奶牛头部侧边45°~90°,距离目标奶牛0.5~1 m位置,每段视频1~2 min。
首先对反刍行为视频数据预处理,截取约10 s画质清晰视频段,每段300帧,筛选出20头奶牛共30段反刍行为视频为试验数据集。如图1所示,数据集为奶牛近距离侧面反刍行为,其中头部占据镜头主体区域,嘴巴进行大幅度的反刍咀嚼运动。反刍过程中,奶牛头部小幅度随机摆动与周围其他牛只运动干扰影响反刍光流特征提取。
图1 奶牛反刍运动视频示例Fig.1 Video example of cow rumination
由于奶牛反刍行为位移较小,需要精度较高的全局光流分析算法才能捕获到反刍行为的规律特征。FlowNet 2.0由大、小位移求解网络组成,能够捕获到小位移运动信息,因此本文以FlowNet 2.0为基础网络,网络结构如图2所示。
图2 FlowNet 2.0网络结构图Fig.2 FlowNet 2.0 network structure
图2中,FlowNetCorr、FlowNetS、FlowNetS 3个网络串联组成大位移求解网络,FlowNet-SD网络专注小位移求解。其中FlowNetS网络是只包含卷积层的连接输入两帧图像的通道;FlowNetCorr中采用关联层促进网络匹配过程。设相邻两帧图像的多通道特征图分别为f1、f2,其宽、高、通道数分别为w、h、c。关联层用来比较每个f1和f2中的图像块。定义f1以位置x1为中心的图像块和f2以x2为中心的图像块之间的关联性为
(1)
式中o——计算区域
k——计算区域边长的1/2
每个图像块是边长为K=2k+1的正方形。两帧之间计算相关性的区域被限制在一个[-k,k]×[-k,k]的区域内,C(x1,x2)表示f1中x1处特征与f2中x2处特征的相似度。当k=0时,C(x1,x2)表示f1中x1处特征向量和f2中x2处特征向量的点乘运算。
向FlowNetCorr网络输入两帧连续的待求解图像1和图像2,由上一层网络估计的光流对图像2扭曲变换得到连续图像的亮度差,融合网络将每组图像预测的光流场作为输入,对大、小位移网络结果进行卷积操作,最终得到光流图像。
奶牛反刍时其头部无规则运动,如摆头、低头等,造成FlowNet 2.0光流算法生成的光流图像存在大量干扰运动光流,无法抽取有效的反刍光流。因此,本文通过改进FlowNet 2.0光流算法消除干扰运动对反刍光流的影响。
为消除牛只自身头部运动与背景干扰对反刍光流特征提取的影响,首先使用垂直光流分量替代光流速度计算光流,消除水平运动造成的干扰;然后设置光流阈值避免垂直光流中头部运动光流干扰,生成视频帧间反刍行为光流图像。同时为减小奶牛反刍行为中因嘴巴闭合与张开至最大时光流消失对检测的影响,设置反刍区域面积阈值准确提取区域内光流数据,提升检测准确率。最终对反刍运动曲线图滤波拟合计算,准确获取奶牛反刍运动咀嚼频次。
首先计算两帧视频流间所有像素点的水平光流分量u和垂直光流分量v,每个像素点在两帧图像间的光流速度s为
(2)
每个像素点光流的运动角度a为
(3)
a确定不同颜色代表不同运动角度,s确定颜色强度,生成奶牛反刍行为光流图,如图3所示。
图3 奶牛反刍行为图像与光流图Fig.3 Rumination behavior images of cows and optical flow maps
一次完整的反刍咀嚼运动是从嘴巴闭合到张开至最大再到闭合的垂直上下过程。
牛只自身头部运动与背景运动可拆分为水平方向与垂直方向两部分,为避免背景与自身运动对光流分析影响,分别从两个方向的运动分量上对反刍行为光流进行计算。定义T为光流图像,利用FlowNet 2.0光流算法计算得到光流图像T,T由a和s共同决定。
为减少s中水平方向运动分量u对反刍行为特征提取的影响,将光流速度s替换为各像素点的垂直方向光流分量v的绝对值|v|。
从图4可以看出,图4a中红框标记出的光流区域为头部运动对反刍光流的干扰,改进后的算法有效剔除因头部运动产生的干扰光流,留下嘴部区域反刍光流。
图4 光流计算方式改进前后效果对比Fig.4 Comparison of effects before and after improvement of optical flow calculation method
反刍区域为二值化反刍光流图像的最大连通域。对二值化反刍光流图腐蚀、膨胀,获得图像最大连通域,计算其外接矩坐标,即为奶牛反刍区域坐标。理想的反刍区域检测结果如图5所示。
图5中红框为感兴趣区域(Region of interest,ROI),绿框为检测出的反刍区域。一次完整的反刍咀嚼运动中,奶牛嘴巴闭合状态与张开至最大时,不会产生光流数据,若此时出现其他剧烈且目标较小运动会影响反刍区域检测。反刍区域检测异常结果如图6所示。
图5 反刍区域检测结果Fig.5 Results of rumination area detection
图6 反刍区域检测异常结果Fig.6 Abnormal results of rumination area detection
图6a为奶牛嘴巴闭合状态下,颈部运动干扰导致反刍区域检测判断错误;图6b为背景有其他牛只闯入造成光流干扰导致反刍区域检测错误。通过设置面积阈值减少嘴巴闭合与张开至最大时对反刍区域检测的干扰,面积阈值μ的计算公式为
(4)
式中 (x1,y1)、(x2,y2)——ROI框的左上顶点、右下顶点坐标
S——检测得到的反刍区域面积
奶牛反刍行为主要表现为嘴部区域运动,当嘴巴闭合与张开至最大时,背景中其他牛只运动或牛只个体头部运动会产生小面积光流干扰反刍光流提取,因此,设置面积阈值滤掉小面积的光流区域,来提升反刍光流提取算法的鲁棒性与准确性。为确定最佳阈值,选取1/10、1/20、1/30、1/40、1/50作为候选阈值在本数据集不同场景视频中进行对比试验,以图6中出现错检的视频为例分析设置面积阈值后的反刍区域检测结果,如图7所示。
图7 不同面积阈值的反刍区域检测结果Fig.7 Rumination area detection results of different area thresholds
由图7a、7b可知,μ为1/10与1/20时,出现部分反刍区域漏检情况,原因为阈值设置过大导致算法将正常反刍区域过滤,影响后续计算;图7d、7e中设定μ为1/40与1/50时,仍会出现反刍区域错检情况,分析可知其面积阈值设置过小,未能剔除部分头部运动与背景闯入牛只的干扰;图7c中设定μ为1/30时,面积阈值成功过滤上述干扰且不会影响正常反刍区域的检测,算法准确性最高。对比分析试验结果可知,本文数据集中的最佳面积阈值μ应设定为1/30。
(5)
式中 |v|——反刍区域内光流速度绝对值
奶牛嘴巴闭合及张开最大导致无法检测到反刍区域时,ROI内光流数据均值计算公式为
(6)
设定横坐标为视频帧序列,纵坐标为光流数据的反刍运动曲线,归一化后使用Savitzky-Golay滤波器减少奶牛头部其他运动造成的噪声影响。由于滤波后反刍运动曲线呈现正弦分布波峰波谷,定义拟合函数y,公式为
y=a0sin(a1x+a2)+a3
(7)
式中a0、a1、a2、a3——拟合得出的变量
拟合函数的极大值点h可通过二阶导数计算得出,遍历曲线统计极大值点个数h,即为输入视频的奶牛反刍咀嚼次数d,令t为输入视频的时间,反刍咀嚼频次p的计算公式为
(8)
本文试验基于Windows操作系统、Pytorch框架,其中Python版本为3.6,Pytorch版本为1.0.1,CUDA API版本为10.0,Cudnn版本为7.4.1。选取9头奶牛的15段视频作为试验数据集,随机选取不同场景下11头奶牛的15段视频作为测试数据集。部分视频图像如图8所示。
为验证改进FlowNet 2.0光流算法的有效性,在相同设备、相同算法环境下,对比FlowNet 2.0光流算法与改进后算法的反刍行为光流曲线,其中以视频帧序号作为横坐标,光流速度均值作为纵坐标,如图9所示。
由图9可以看出,改进FlowNet 2.0光流算法相较于FlowNet 2.0光流算法曲线更具规律性、周期性,波峰波谷更为分明。如图9a中一次反刍运动周期内波峰往往会出现多次(图中红圈标出),难以实现曲线波峰波谷的计数。出现该现象的原因是FlowNet 2.0光流算法计算光流速度s没有对头部运动与背景干扰进行处理,导致曲线中参杂其他运动噪声干扰,波峰波谷不明显。改进后算法计算垂直光流速度v,避免了水平方向运动的干扰,且通过阈值的设置成功过滤掉垂直方向奶牛头部小幅度运动干扰,使得曲线周期性明显。如图9b所示,算法结果中一次反刍运动周期内仅出现一次波峰,保证了反刍咀嚼次数计数的准确性。
图9 光流曲线结果对比Fig.9 Comparison diagrams of optical flow curve results
为进一步验证算法的反刍区域面积阈值设置与滤波曲线拟合过程对算法准确率的提升效果,对比FlowNet 2.0光流算法与改进FlowNet 2.0光流算法的滤波效果图,如图10所示。
图10 滤波结果对比Fig.10 Comparison diagrams of filtering results
在图10中,通过比对同一数据集的滤波曲线(如图10c、10d),该数据集等140帧左右时(图中绿圈标出)奶牛出现短暂低头动作,图10c中滤波后曲线波峰波谷不明显,无法确定周期;而图10d中滤波后曲线除第140帧左右出现波峰特征不明显外,总体呈现正弦曲线规律,利用正弦函数拟合曲线,滤波后曲线与拟合曲线基本重合,而拟合曲线在第140帧左右波峰明显,避免了奶牛低头动作带来的光流干扰。由图10可知,反刍区域面积阈值的设置能够有效减少头部等其他运动对反刍光流的影响,增大波峰波谷间的差值,使曲线周期性更为明显,有效避免滤波曲线有少部分区域出现周期缺失的现象,确保算法鲁棒性。
为验证改进FlowNet 2.0光流算法获取到的奶牛反刍咀嚼次数准确性,对比FlowNet 2.0光流算法和改进算法的反刍咀嚼次数误检率,如表1所示。
由表1可知,FlowNet 2.0光流算法反刍咀嚼次数检测准确率为93.64%,改进FlowNet 2.0光流算法的反刍咀嚼次数检测准确率为99.39%,比改进前提升5.75个百分点。为了进一步验证改进FlowNet 2.0光流算法的稳定性与鲁棒性,采用新的测试试验数据验证改进FlowNet 2.0光流算法的反刍咀嚼次数与反刍咀嚼次数误检率,如表2所示。
表1 不同方法计算奶牛反刍咀嚼次数对比Tab.1 Comparative of different methods for calculating rumination times of dairy cows
表2 奶牛反刍咀嚼次数检测结果Tab.2 Testing results rumination times of dairy cows
由表2可知,除0587_2编号奶牛头部运动剧烈,造成反刍咀嚼次数检测误检率较高外,其余样本反刍咀嚼次数均检测正确。改进FlowNet 2.0光流算法在新的测试试验数据中仍保持较高反刍咀嚼次数检测准确率,验证了改进FlowNet 2.0光流算法的稳定性与鲁棒性。
为改善反刍过程中头部运动与背景牛只运动对反刍行为分析的影响,本文提出了一种改进FlowNet 2.0光流算法的奶牛反刍行为分析方法,利用垂直光流分量替代光流速度计算光流图,消除水平运动对光流分析干扰;设置光流阈值避免垂直光流中头部运动光流干扰;二值化检测奶牛反刍区域进一步消除背景运动影响;设置反刍区域面积阈值准确提取区域内光流数据,避免反刍光流消失时头部运动与闯入牛只影响;滤波拟合计算反刍曲线,增大波峰波谷差值,保证曲线周期性与算法鲁棒性,准确得到奶牛反刍咀嚼频次信息。试验结果证明,改进FlowNet 2.0光流算法反刍咀嚼频次计算准确率达到99.39%,相较于FlowNet 2.0光流算法准确率提升5.75个百分点。且改进后的光流算法避免了牛只自身头部运动与背景干扰对反刍光流特征提取的影响,解决了奶牛反刍行为中因嘴巴闭合与张开至最大导致反刍光流消失时头部运动干扰问题,确保算法准确率,为群体养殖模式下奶牛反刍行为的智能监测分析提供技术支撑。