基于改进YOLO v4的生猪耳根温度热红外视频检测方法
2023-03-07冯彦坤
刘 刚 冯彦坤 康 熙
(1.中国农业大学智慧农业系统集成研究教育部重点实验室,北京 100083;2.中国农业大学农业农村部农业信息获取技术重点实验室,北京 100083;3.浙大宁波理工学院计算机与数据工程学院,宁波 315200)
0 引言
随着生猪规模化养殖程度的不断提高,生猪疾病已成为制约养猪产业健康发展的一个重要因素[1-2]。体温作为生猪的一项重要生理参数,可用于生猪疾病的预防和早期诊断[3-4]。此外,体温也是评估生猪的健康状况、育种能力和畜禽舍环境的重要依据[5-6]。因此对生猪体温的准确检测在规模化养殖中具有重要意义。
生猪体温测量的传统方法是人工测量生猪的直肠温度,这种方法效率低,且易造成生猪的应激反应[7]。随着传感器技术的快速发展,一些学者开展了基于温度传感器的生猪体温检测技术研究,将温度传感器植入生猪体内,这种方式能获取准确的体温数据,但成本较高,且对生猪损害较大[8]。近年来,红外热成像技术作为一种无接触式体表温度测量方法,已经被广泛用于畜禽的体温检测和疾病诊断等研究领域[9]。一些研究人员利用热像仪获取生猪不同部位的体表温度,并建立各部位温度与直肠温度之间的回归模型,表明生猪耳根温度和直肠温度显著相关[10-11]。
在利用红外热成像技术获取生猪体表温度的研究中,需要获取生猪感兴趣区域(Region of interest,ROI)温度,采用手动标记方式提取生猪ROI温度效率较低[12-13],一些学者开展了基于图像处理的生猪ROI温度自动检测方法研究。朱伟兴等[14]基于改进主动形状模型检测生猪耳部轮廓。周丽萍等[15]利用改进Otsu算法检测有完整生猪耳部的热红外图像。LU等[16]提出一种基于SVM的仔猪耳根温度检测方法。上述方法实现了热红外图像中生猪ROI温度的自动提取,但热红外图像均为人工拍摄,不适合在线检测。马丽等[17]选用在线式热像仪,采集生猪热红外视频数据,利用骨架扫描策略改进FDSST 算法,自动获取生猪耳根温度,但该方法对生猪头部跟踪精度较低。
随着深度学习技术的快速发展,深度卷积神经网络在目标检测上有了较广泛的应用。赵海涛[18]提出一种基于U-Net-4网络的生猪眼睛和耳部区域分割方法。刘勤[19]构建了Faster R-CNN网络,检测热红外图像中生猪耳部区域。肖德琴等[20]提出一种基于YOLO v4和形态学的生猪耳部温度检测算法,实现了生猪耳部温度自动监测。然而,视频中多变的生猪头部姿态会影响生猪耳根温度检测的准确性[21],视频中的保育期生猪头部多动,姿态多变,且耳根区域较小,使得生猪头部和耳根区域的定位精度大大降低,进而影响了生猪耳根温度的精准检测。
针对以上问题,本文以俯视图下的饲喂栏通道中保育期生猪热红外视频为研究对象,提出一种基于改进YOLO v4的生猪耳根温度检测方法,实现保育期生猪体温自动化精准检测,为生猪体温异常监测与预警提供技术支撑。
1 试验数据采集与数据集构建
1.1 试验数据采集
试验数据采集于北京市房山区西周各庄养殖场,采集对象为自然穿过饲喂栏通道的保育期生猪,采集时间为2021年7—8月。采集系统如图1所示,生猪进食前,需要依次通过饲喂栏通道进入采食区,在通道出口处安装RFID识别器,用于确定视频中生猪身份。将FLIR-A310型热像仪安装在饲喂栏通道中心的上方,热像仪镜头距离饲喂栏1.1 m,以确保可以通过热像仪拍摄生猪的头部和耳根,热像仪通过以太网与计算机通信。由于热像仪测温本身存在固有误差,故将黑体放于饲喂栏通道左侧,用于温度校正。使用HOBO U14-001型智能温湿度记录仪,记录热像仪安装处的环境温度和相对湿度,调整热像仪的发射率、温湿度和镜头到物体的距离等参数,试验中猪舍内的平均环境温度为28.3℃,平均相对湿度为81.6%。热像仪的发射率设定为0.95,与文献[16]中对仔猪耳根温度的研究一致。当系统输出数据稳定后,对50头保育期生猪进行热红外视频采集,采集的视频以SEQ的格式存储于计算机硬盘中。FLIR-A310型热像仪的分辨率为320像素×240像素,帧率为10 f/s。
图1 生猪视频采集示意图
为了验证本文算法对生猪耳根温度检测的准确性,使用HD-1500E型接触式数字表面温度计人工测量了50头保育期生猪左、右耳根温度,人工测量50头生猪耳根温度3次,并取3次均值作为耳根温度真实值,以减少人工测量误差。由于部分生猪耳标失效,无法和采集系统中录制的热红外视频数据相对应,最终得到38头保育期生猪的有效耳根温度数据。
1.2 数据集构建
从采集的生猪热红外视频中筛选50头自然行走生猪的视频,将视频截取成图像序列,得到2 000幅包含生猪头部和耳根的热红外图像,将其按照7∶1∶2的比例划分为训练集、验证集和测试集。
热像仪测温是通过用红外焦平面阵列传感器检测被测物体发出的辐射来确定温度,目标的遮挡会影响目标的温度测量结果[22]。因此,当生猪在饲喂栏通道行走的过程中,头部姿态变化引起的耳根遮挡,会影响生猪耳根的被测温度。为了更准确的获取生猪耳根温度,需要区分生猪的头部姿态,以提取头部端正姿态下的耳根温度。本文构建的数据集包含 “pigHead0”、“pigHead1”、“pigEl”和“pigEr” 4个类别,分别为“生猪头部,姿态歪斜”、“生猪头部,姿态端正”、生猪左耳根区域、“生猪右耳根区域”。使用LabelImg工具标注图像中的生猪头部和耳根所在区域。
2 生猪耳根温度检测方法
2.1 YOLO v4 卷积神经网络
YOLO v4[23]是性能较好的一阶段(one-stage)目标检测算法,选择CSPDarknet53作为主干网络,引入SPP(Spatial pyramid pooling)模块,显著地增加了感受野;采用PAN(Path aggregation network)替换特征金字塔网络(Feature pyramid network,FPN)进行多通道特征融合,提高模型检测精度。此外,进行了Mosaic数据增强、cmBN以及SAT自对抗训练等方面的改进,提高了YOLO v4模型的准确率和泛化能力。但在进行保育期生猪头部和耳根区域定位试验中发现,YOLO v4模型对行走过程中保育期生猪头部和耳根区域检测精度低。所以本文对YOLO v4进行改进,提高保育期生猪头部和耳根区域检测精度,进而提取更准确耳根温度。
2.2 YOLO v4网络改进
2.2.1特征提取网络改进
YOLO v4采用ResNet作为主干特征提取网络,ResNet网络的连接方式是建立前面特征层与后面特征层的短路连接,可表示为
xn=Hn(xn-1)+xn-1
(1)
式中xn——第n层输出
Hn(·)——非线性转换函数
这种连接方式有效解决了梯度消失问题,但是在目标检测期间,随着网络深度不断增加,重要的特征信息在卷积和下采样过程中可能会丢失,减少了神经网络的特征图。
基于上述问题,GAO等[24]提出了DenseNet网络,DenseNet网络采用密集连接机制,其中每一层都以前馈模式连接到其他层,第n层能够从所有先前层x0、x1、…、xn-1的输入中接收所需的特征信息xn,可表示为
xn=Hn([x0,x1,…,xn-1])
(2)
式中 [x0,x1,…,xn-1]——各层产生的特征图的拼接
与ResNet网络相比,DenseNet网络的连接方式保留了重要的特征映射,能重复利用关键特征信息,增强了网络对重要特征信息的提取能力,有效解决了ResNet网络中重要特征信息丢失的问题。
针对本文的生猪热红外图像分辨率低和耳根区域小的特点,使用密集连接块有助于促进神经网络中的特征传递和梯度转移,并在一定程度上缓解过度拟合。因此,本文在YOLO v4 的CSPDarknet53主干网络中,通过添加密集连接块,将两个残差块CSPR8和CSPR4替换为Dense1-CSPR8和Dense2-CSPR4,得到新的主干网络Dense-CSPDarknet53,用于增强最后两个特征层S2和S3的特征传播。此外,SPP模块与Dense-CSPDarknet53 主干网络中最后一个残差块(CSPR4)紧密集成,进一步增强主干网络感受野并分离出重要的上下文特征。本文提出的Dense-CSPDarknet53示意图和相应的网络参数如图2所示。
图2 Dense-CSPDarknet53主干网络和参数示意图
从图2可以看出,本文采用深度网络替换26×26和13×13下采样层,传递特征图函数H1对x0、x1、…、xn-1层进行非线性变换,其中每一层xi由64个特征层组成。由此,CSPR8前面的Dense1在分辨率为26×26层上执行特征传播和层拼接,最终正向传播特征层为26×26×512。同理,CSPR4前面的Dense2在分辨率为13×13层上执行特征传播和层拼接,最终正向传播特征层为13×13×1 024。
在CSPDarknet53主干网络中引入密集连接块,确保了在训练期间,当输入的图像被传输到较低分辨率层时,后面的特征层从前面的层中获取特征,从而减少特征损失。此外,不同的低分辨率卷积层可以重用它们之间的特征,提高了特征使用率。
2.2.2特征融合网络改进
密集连接块的引入,促进了重要特征重用,提升了网络对小目标检测能力,但是随着残差块层数的增加,其中每一层都与之前的所有层相连,会造成层与层之间的互连变得更加复杂。针对这一问题,对YOLO v4颈部的PANet结构进行修改,将PANet结构中组合两个特征图的Concat操作替换为Add操作,如图3所示。YOLO v4中PANet采用Concat操作,通道数变为原来的两倍,而采用Add操作组合两个特征图,通道数不变,修改后的特征融合网络,缩短了多尺度特征金字塔图的高、低融合路径,减少了网络参数和计算量,提升了模型检测速度。Add操作相比Concat操作会带来一定的信息损失,但由于密集连接块的引入,已经从前层获取了足够的特征信息,修改后的模型检测精度只是略有下降,降低0.52个百分点。
图3 PANet融合方式
2.2.3激活函数改进
激活函数是神经网络的关键组成部分,针对特定问题选择合适的激活函数,可以用来提高神经网络在不同分类任务中的效果。为有效训练改进YOLO v4模型,提高模型检测性能,本文在训练文件中配置了Leaky ReLU、Swish和Mish 3种激活函数。
Leaky ReLU是深度卷积神经网络中流行的激活函数之一,有效解决了梯度消失问题,并在传播过程中更新权重,参数α用于解决其前身ReLU带来的神经元死亡的问题,保证整个训练过程中梯度不为零,从而提高训练性能,Leaky ReLU计算公式为
(3)
式中x——神经元输入
f(x)——神经元输出
α——梯度调节参数
为了保持负值以稳定网络梯度流和死亡神经元,进而学习更具表现力的特征,DIGANTA等[25]提出了激活函数Mish,它在[-0.31,∞)范围内有下界、无上界,有助于消除神经元饱和问题,提高网络正则化,较Leaky ReLU激活函数更为平滑,具有更好的学习适应能力,其计算公式为
f(x)=xtan(ln(1+ex))
(4)
Swish与Mish类似,具有无上界、有下界、非单调和平滑的特性。非单调性是区分Swish与ReLU的重要依据,且平滑的特性有利于模型的生成和优化,调节训练参数β可以提高模型检测性能,其计算公式为
f(x)=xsigmoid(βx)
(5)
将上述3种激活函数与改进模型主干和颈部形成不同组合,并用平均精度均值(mAP)和检测速度两个指标对各个组合的性能进行评估,其检测结果如表1所示。
表1 激活函数检测性能对比
从表1中可以得出,在改进模型的主干和颈部使用Mish激活函数时,在测试集上的检测精度最高,但这种组合增加了检测时间。在改进模型的主干和颈部使用Leaky ReLU激活函数,在测试集上的检测速度最快,但检测精度最低。将颈部替换为Leaky ReLU激活函数,提高了检测速度,但精度也有所下降。由于耳根温度提取需要更精准的目标检测模型,本文在改进YOLO v4中,主干网络Dense-CSPDarkent53和颈部都选择Mish激活函数,这种组合在测试集上的检测精度最高。
2.2.4改进YOLO v4网络
在YOLO v4的基础上,通过本文的一系列改进,得到了改进YOLO v4(Mish Dense YOLO v4,MD-YOLO v4)网络,其网络结构如图4所示。首先,在YOLO v4主干特征提取网络CSPDarknet53中添加密集连接块,同时将SPP模块集成到主干网络;其次,在YOLO v4的颈部植入改进的PANet;最后,在改进YOLO v4的主干和颈部使用Mish激活函数。此外,为了在训练期间获得更好的准确性,输入数据集图像尺寸调整为416像素×416像素,检测头大小分别为52×52×27、26×26×27和13×13×27。
图4 改进YOLO v4网络结构
2.3 耳根温度提取方法
利用构建好的生猪热红外数据集对改进YOLO v4网络进行训练,得到生猪头部和耳根区域检测模型,该模型具有从输入图像中检测头部和耳根矩形框坐标的功能,图5为检测结果示例图。将检测的生猪耳根的位置坐标映射到热红外图像对应的温度矩阵,提取耳根区域的温度矩阵。
图5 头部和耳根检测结果
生猪头部姿态歪斜会导致耳根区域出现部分或者完全遮挡,从而影响耳根温度检测的准确性。因此,为了准确获取耳根温度,当生猪通过信息采集通道时,本文分别提取类别为“pigHead1”的图像中左、右耳根检测框内的温度数据,左耳根温度TL和右耳根温度TR的计算公式为
(6)
(7)
式中Tl(x,y)——左耳根检测框温度矩阵
Tr(x,y)——右耳根检测框温度矩阵
Max——矩阵元素最大值函数
N——类别为pigHead1的图像帧数
为降低辐射率、距离、温湿度、光照和风速等因素对测温结果的影响,本文使用黑体对算法提取的耳根温度进行校准,将校准后的耳根温度作为本文算法检测结果。设定黑体发射温度为T0,根据黑体的位置坐标,提取黑体温度最大值Tb,测温误差e和校准后左、右耳根温度计算公式为
e=Tb-T0
(8)
Tl=TL-e
(9)
Tr=TR-e
(10)
式中Tl、Tr——校准后左、右耳根温度
2.4 模型训练
本文试验所使用的硬件配置为Intel Core i7-9700k 3.60 GHz,32 GB运行内存,改进YOLO v4模型在NVIDIV GeForce RXT 2070 GPU上进行训练和测试,显存为8 GB,运行环境为64 位Windows 10 操作系统。
改进YOLO v4模型在训练前需要进行参数设置,为了在训练期间获得更好的准确性,输入的数据集图像尺寸被调整为416像素×416像素,将批量处理尺寸设置为32,训练共迭代8 000次。调整初始学习率为0.001,并且采用 steps模式更新学习率,在训练迭代次数达到6 400和7 200时,将学习率分别降低至初始学习率的10%和1%,其他超参数与YOLO v4模型中的原始参数保持一致。
图6为改进YOLO v4网络在训练时的平均损失值随迭代次数的变化曲线。从图中可以看到,当网络迭代超过6 000次后,损失值基本趋于平稳,在0.35附近波动。从参数收敛情况来看,网络训练结果理想。
图6 损失值变化曲线
2.5 评价指标
为客观衡量改进模型对生猪头部和耳根的检测效果,使用准确率(Precision)、召回率(Recall)、平均精度均值(mAP)和每秒检测帧数(Frames per second,FPS)作为评价指标,来评价检测模型性能。mAP越高说明检测精度越高,FPS 越大说明检测速度越快。
3 结果与讨论
3.1 基于MD-YOLO v4的生猪关键部位检测
为验证MD-YOLO v4用于检测生猪关键部位的准确性和鲁棒性,本文将MD-YOLO v4与Faster R-CNN、SSD、YOLO v4、YOLO v5进行对比分析。试验采用相同生猪热红外数据集训练模型,训练时尽量保持超参数一致,并采用相同测试集来评价模型性能。5种目标检测模型在测试集上的检测效果如图7所示。从图中可以看出,5种目标检测模型对生猪头部的检测均有较好的效果,都能准确识别生猪头部,而对耳根检测效果差异较大,SSD会出现耳根漏检的情况,Faster R-CNN存在耳根检测框重叠问题。
图7 不同检测模型效果对比
对上述目标检测模型检测生猪头部和耳根的准确率、召回率、平均精度均值和检测速度进行统计,结果如表2所示。由表2可知,在5种目标检测模型中,SSD和Faster R-CNN的平均精度均值分别为66.23%和75.39%,对耳根的平均检测精度均不到60%,不适用于生猪耳根区域的定位。相比SSD和Faster R-CNN网络,YOLO v4、YOLO v5和MD-YOLO v4网络对耳根检测精度更高,对小尺寸的耳根识别效果更好,其中MD-YOLO v4网络对耳根检测最精准。MD-YOLO v4比YOLO v5、YOLO v4的平均精度均值分别增加5.39、6.43个百分点,尤其是提高了对生猪耳根的检测精度,左、右耳根的平均精度分别达到93.87%和93.54%。与YOLO v4相比,MD-YOLO v4引入密集连接块、SPP和改进的PANet等操作,增强了图像特征,通过重复利用浅层特征减少错误检测,提高了对小目标检测的准确性。在检测实时性方面,MD-YOLO v4的检测速度为60.21 f/s,可以满足实时检测生猪头部和耳根的需求。
表2 5种检测算法性能比较
3.2 生猪耳根温度
将人工测量的38头生猪耳根温度真实值作为评价标准,用于验证本文方法提取耳根温度的准确性,生猪左、右耳根温度真实值和检测值如图8所示。统计了每头生猪左、右耳根温度真实值和检测值的绝对误差、均方根误差和相对误差。结果表明,本文方法提取的左耳根温度和真实值之间的最大绝对误差为0.5℃,平均绝对误差为0.26℃,均方根误差为0.29℃;本文方法提取的右耳根温度和真实值之间的最大绝对误差为0.5℃,平均绝对误差为0.21℃,均方根误差为0.25℃。左耳根温度测量的相对误差最大为1.32%,平均相对误差为0.68%;右耳根温度测量的相对误差最大为1.30%,平均相对误差为0.55%。
图8 生猪耳根温度测量结果
相关研究表明,受外界环境、进食和饮水等因素的影响,生猪体温正常变化在1℃以内,当生猪体温变化大于1℃可能发生异常,上升1.5℃以上判为中热,上升2.5℃以上判为高热[26]。本文方法检测的生猪左、右耳根温度和真实值之间的最大绝对误差均为0.5℃,平均绝对误差都在0.3℃以内,该精度可用于生猪体温异常监测。
4 结论
(1)提出了一种基于改进YOLO v4的生猪关键部位检测模型,实现对保育期生猪头部和耳根区域精准定位,改进YOLO v4在测试集上的mAP为95.71%,检测速度为60.21 f/s,与YOLO v5和YOLO v4相比,mAP分别提高5.39个百分点和6.43个百分点。
(2)在YOLO v4主干特征提取网络中引入密集连接块,重复利用浅层特征信息,增强了网络对重要特征信息的提取能力,提升了网络对小目标检测效果;在颈部特征融合网络引入改进PANet,缩短多尺度特征金字塔图的高、低融合路径,提升了检测速度。
(3)通过对生猪耳根区域的精准定位,实现生猪耳根温度自动提取,以人工测量的38头生猪耳根温度真实值为评价标准,评估了本文方法提取耳根温度的准确性,结果表明,本文方法提取的生猪左、右耳根温度平均绝对误差分别为0.26℃和0.21℃,为生猪体温异常监测提供了研究基础。