时间:2024-05-24
段青玲 赵芷青 蒋 涛 桂小飞 张宇航
(1.中国农业大学信息与电气工程学院, 北京 100083; 2.农业农村部智慧养殖技术重点实验室, 北京 100083;3.北京福通互联科技集团有限公司, 北京 101300)
肉牛是一种以生产牛肉为主的牛,是我国重要的畜禽养殖品种之一。牛肉因富含蛋白质和维生素等营养物质,对人体健康有益而深受消费者喜欢[1-2]。在肉牛养殖中,肉牛活动过程中所表现出的行为是其健康状况的综合体现,对疾病防控、自身发育评估和发情监测有重要意义。快速准确地识别肉牛爬跨、躺卧、探究、站立、运动、舔砥和互斗等常见行为能够帮助养殖者及时评估肉牛的生理健康状况,实现肉牛的精准化管理。
国内外研究学者开展了肉牛行为识别技术研究,主要分为基于传感器的接触式肉牛行为识别[3-4]和基于计算机视觉的非接触式肉牛行为识别[5-6]两种方式。基于传感器的接触式肉牛行为识别方法是在牛只不同部位佩戴传感器,根据采集的肉牛活动量、温度和声音等数据,判断肉牛的不同行为[7-8]。该方法容易造成牛只的应激反应,易损坏传感器,从而影响牛只行为识别的准确率。
基于计算机视觉的非接触式肉牛行为识别方法通过采集视频图像,利用机器学习技术对图像进行处理,实现肉牛行为识别。该方法成本较低,可以避免接触式识别方法带来的肉牛应激反应问题。GUO等[9]提出了基于图像区域几何和光流特征分析的爬跨行为识别方法,首先使用融合颜色和纹理的背景减法获得奶牛目标,然后使用帧间差分法提取奶牛的几何和光流特征,最后使用支持向量机(Support vector machine,SVM)算法进行特征分类,实现奶牛爬跨行为的识别,识别准确率为90.9%。JIANG等[10]提出了基于噪声和双向长短期记忆模型的跛行检测方法,首先采用FLYOLO v3(Fliter layer YOLO v3)算法提取奶牛背部位置坐标,并获得奶牛目标,然后提取奶牛背部曲率,采用噪声和双向长短期记忆模型,实现奶牛跛行的识别,识别准确率为96.1%。刘月峰等[11]提出了基于改进YOLO v3的奶牛进食行为识别方法,使用幅值迭代剪枝算法对YOLO v3进行优化,实现奶牛进食行为的识别,识别准确率为79.9%。王少华等[12]提出了基于改进YOLO v3的奶牛发情行为识别方法,使用锚点框聚类、DenseBlock和边框损失函数对YOLO v3进行优化,实现奶牛发情行为的识别。上述方法仅实现了牛只单一行为的识别,如果要识别多种行为,需要对多个模型进行集成,无法满足实际生产的需求。
在多行为识别方面,QIAO等[13]提出了基于C3D(Convolutional 3D)网络和ConvLSTM(Convolutional LSTM network)的牛只行为识别方法,实现了小牛和奶牛的采食、探索、舔砥、行走和站立5种行为的分类,小牛和奶牛分类准确率分别为90.32%和86.67%。WU等[14]提出了基于卷积神经网络和长短期记忆网络的奶牛行为识别方法,实现了单只奶牛的躺卧、站立、行走、饮水和反刍5种行为的识别,识别准确率为97.6%。YIN等[15]提出了基于EfficientNet-LSTM的奶牛行为识别方法,使用双向特征金字塔网络(Bi-directional feature pyramid network,BiFPN)优化EfficientNet实现特征聚合,并使用注意力机制优化双向长短期记忆网络实现时间维度的串联,最后实现了单只奶牛的行走、站立、躺卧、哺乳和饮水5种行为的识别,识别准确率为95.2%。MA等[16]提出了基于ReXNet 3D(Rank expansion networks 3D)的奶牛行为识别方法,在ReXNet(Rank expansion networks)中添加时间信息,实现了单只奶牛的躺卧、站立和行走3种行为的识别,识别准确率为95%。上述方法仅实现了单只牛的多种行为识别,无法直接应用在规模化养殖场多只牛的场景中。
综上所述,基于计算机视觉的非接触式牛只行为识别是目前研究热点,已开展了大量的相关研究,但仍存在以下问题:在实际养殖环境中存在多只肉牛且行为多种多样,现有模型无法适用于养殖场的实际情况;现有模型存在参数多和模型大的特点,不利于在算力有限的边缘端设备上部署应用。
针对上述问题,本文提出一种基于SNSS-YOLO v7的肉牛行为识别方法,首先在实际养殖环境下采集肉牛行为数据,构建肉牛行为数据集;其次在YOLO v7颈部采用Slim-Neck结构,以减小模型计算量与参数量;然后在头部引入SEAM模块增强Neck层输出后的检测效果;最后使用SimSPPF模块替换原YOLO v7的SPPCSPC模块,在增大感受野的同时进一步减少参数量。
本文试验数据通过肉牛养殖基地实地采集和网络抓取两种渠道获取。以内蒙古锡林郭勒盟正蓝旗鑫源牧场为试验场地,通过视频摄像设备(海康威视DS-2CD3T86FWDV2-I3S)采集养殖场的肉牛行为数据。通过上述两种渠道获取肉牛多天的日常活动视频,人工筛选出具有爬跨、躺卧、探究、站立、运动、舔砥和互斗7种行为的视频片段75条,视频片段长度不等。按照比例8∶2随机选择60条视频片段做训练集,15条视频片段做测试集。为避免图像相似度过高,对视频片段采取视频抽帧的方式,每间隔25帧抽取一幅图像,共获得训练集图像1 959幅,测试集图像501幅,构成本文的行为识别数据集。表1给出了肉牛7种行为判定标准和数据集信息。
表1 肉牛行为判定标准和数据集信息Tab.1 Beef cattle behavior recognition criteria and dataset description
为了模拟实际生产环境,保证算法的实用性,构建肉牛行为识别数据集时综合考虑以下因素:①姿态变化。采集包含肉牛多种姿态的图像,以增加样本的多样性。②密集程度。采集不同密集程度下的肉牛图像,每幅图像中包含多头肉牛和多种行为,以增加识别算法对不同场景的适应性。③光照变化。采集不同自然光照条件下的肉牛图像,以增加识别算法对不同光照条件的适应性。
为了进一步增强图像的复杂性,本文采用马赛克增强的方法进行数据增强。采用LabelImg人工标注每幅图像中肉牛的爬跨、躺卧等7种行为。数据集中的部分图像如图1所示。其中,图1a、1d是网络抓取的图像,图1b、1c、1e、1f是在肉牛养殖基地获取的图像。图中标注的目标①为爬跨肉牛、目标②为躺卧肉牛、目标③为探究肉牛、目标④为站立肉牛、目标⑤为运动肉牛、目标⑥为舔砥肉牛、目标⑦为互斗肉牛。
1.2.1肉牛行为识别模型架构
YOLO v7算法是优秀的目标检测算法,其网络模型主要由CBS模块、ELAN模块、MP模块、SPPCSPC模块以及Concat模块构成,包含大量的普通卷积,内存消耗较大,难以部署在边缘端设备上。本文提出基于SNSS-YOLO v7的肉牛行为识别模型,首先在网络颈部采用Slim-Neck结构轻量化网络;其次头部引入SEAM模块增强Neck层输出后的检测效果;最后使用SimSPPF模块替换原YOLO v7的SPPCSPC模块。在保持精度的同时有效减少模型内存占用量,从而实现肉牛行为的准确识别。
肉牛行为识别模型架构如图2所示。当输入图像为640像素×640像素时,主干网络从输入图像中提取80像素×80像素、40像素×40像素和 20像素×20像素共3种特征图;颈部采用SimSPPF模块增大感受野,使用Slim-Neck结构对主干网络提取的3种不同大小的特征图进行特征融合,且降低网络复杂度;头部引入SEAM模块增强Neck层输出后的检测效果。通过损失函数计算训练损失,使用优化器调整参数,获得肉牛行为识别模型,并对测试集进行结果预测。
1.2.2SNSS-YOLO v7模型网络结构
基于SNSS-YOLO v7的轻量级肉牛行为识别模型网络结构如图3所示。
图3 SNSS-YOLO v7网络结构Fig.3 SNSS-YOLO v7 network structure
采用Slim-Neck结构轻量化颈部网络,减轻模型的复杂度同时保持精度;引入SEAM模块增强Neck层输出后的检测效果;使用SimSPPF模块替换原网络的SPPCSPC模块,增加感受野的同时进一步减小参数量。
(1)Slim-Neck结构轻量化颈部
YOLO v7网络使用大量的标准卷积(Standard convolution,SC)提取图像的特征信息,但是标准卷积会耗费大量的时间,轻量化网络Xception[17]、MobileNet[18]和ShuffleNet[19]等使用的深度可分离卷积(Depthwise separable convolution,DSC)可以有效地解决标准卷积的耗时问题,但模型的检测精度也随之降低。GSConv[20]采用SC、DSC以及Shuffle相结合的方式,其计算成本仅是标准卷积的60%~70%,但效果与SC不相上下。因此,本文使用GSConv代替原网络中Neck层中的标准卷积,并在GSConv的基础上引入VoV-GSCSP模块[20]。通过GSConv和VoV-GSCSP模块所构成的Slim-Neck结构对主干网络提取的特征进行增强,在充分提取深层特征和浅层特征信息的同时,既减轻了模型的复杂度,又保持了模型的精度。GSConv卷积操作和VoV-GSCSP网络结构分别如图4和图5所示。
图4 GSConv卷积操作Fig.4 GSConv convolution operation
图5 VoV-GSCSP网络结构Fig.5 VoV-GSCSP structure
(2)SEAM模块
为进一步降低模型复杂度,本文使用SEAM模块替换原YOLO v7的Rep结构来增强Neck层输出部分的响应能力。SEAM模块[21]中使用带有残差连接的深度可分离卷积,采用一个两层的全连接网络来融合每个通道的信息,以加强所有通道之间的联系。通过上一步学习到的被遮挡行为与无遮挡行为的关系来弥补遮挡场景下的损失,可以有效解决行为之间的遮挡问题。
(3)SimSPPF
空间金字塔池化(Spatial pyramid pooling,SPP)[22]是一种将局部特征映射到不同维度空间并将其融合的池化方法,输入不同大小的图像可以产生固定大小的特征向量,进而有效提取出不同尺度的特征信息。
YOLO v7中的空间金字塔池化使用的是SPPCSPC模块(图6a),将输入分成2个不同的分支,其中一个进行常规处理,另一个进行SPP结构处理,最后将两部分通过Concat操作合并在一起。其中SPP结构处理将输入分成4部分,其中3部分分别进行尺寸为5×5、9×9和13×13的最大池化操作,第4部分输入与其他3个经过池化操作的输入通过Concat连接,生成固定尺寸的特征。SPPCSPC模块虽然有较好的表现效果,但参数量与计算量过大。
图6 SPPCSPC结构和SimSPPF结构Fig.6 SPPCSPC structure and SimSPPF structure
本文使用SimSPPF模块[23](图6b)将输入分为2部分,一部分串联3个尺寸为5×5的最大池化层(Max Pooling)。其中,串联2个5×5的最大池化层和1个9×9的最大池化层计算结果相同,串联3个5×5的最大池化层和1个13×13的最大池化层计算结果相同。通过串联最大池化层对输入进行处理,极大地减少了计算量,提高了速度和效率。另一部分输入直接与经过3个池化操作的输出通过Concat连接,生成固定尺寸的特征,在很大程度上增加感受野,起到特征增强的作用。在SimSPPF模块中使用ReLU激活函数,而SPPCSPC模块使用SiLU激活函数,单个CBL速度比CBS快。
为验证本文所提方法的有效性,将本文提出的肉牛行为识别方法与YOLO v6m、YOLO v5m、YOLOX-S、TPH-YOLO v5和Faster R-CNN方法进行对比;将本文提出的肉牛行为识别原网络与各模块改进后的网络进行对比,验证本文对原算法改进的有效性。
采用精确率(Precision)、召回率(Recall)、平均精度均值(mAP@0.5)、模型内存占用量、参数量和浮点运算量(GFLOPs)评估肉牛行为识别模型的性能,平均精度(AP)是肉牛各个行为识别的平均精度,mAP是AP的平均值,模型内存占用量使用模型所占存储空间来衡量,GFLOPs表示每秒10亿次的浮点运算数。
试验服务器配置如下:操作系统为Ubuntu 18.04,GPU为GeForce RTX 2080Ti,CPU为Intel(R)Xeon(R) Silver 4114,主频2.2 GHz,内存125 GB,深度学习库为PyTorch 1.7.1,运算平台为CUDA 10.0、CUDNN 7.6.1,编程语言为Python。
模型训练过程中参数设置有:输入图像尺寸为640像素×640像素、Epoch为300、批量大小为8、初始学习率为0.01、动量参数为0.937、权重衰减系数为0.000 5。
为验证本文提出的SNSS-YOLO v7肉牛行为识别方法对肉牛爬跨、躺卧、探究、站立、运动、舔砥和互斗7种行为识别效果的优越性,将本文方法与原YOLO v7算法进行比较,对比结果如表2所示。
表2 不同目标平均精度均值对比结果Tab.2 Comparison result of mAP@0.5 of different targets
由表2可以看出,本文方法对爬跨行为识别的平均精度均值(mAP@0.5)为99.6%,与YOLO v7相同。本文方法对探究、舔砥和互斗行为的识别平均精度均值(mAP@0.5)分别为92.6%、94.7%和93.4%,较YOLO v7分别提高1.6、0.6、1.8个百分点。
YOLO v7对7种行为的识别中,运动行为识别的平均精度均值(mAP@0.5)最低,仅有84.1%,分析其原因是肉牛的站立行为和运动行为表现相似,模型容易产生混淆,而误将运动行为识别成站立行为。本文方法对运动行为的识别平均精度均值(mAP@0.5)为88.5%,较YOLO v7提高4.4个百分点,对肉牛站立行为识别的平均精度均值(mAP@0.5)为97.8%,较YOLO v7提高1个百分点。说明本文方法对肉牛运动和站立相似行为识别能力有所提高。
本文提出的肉牛行为识别方法在测试集上的识别结果如图7所示。
图7a、7d中肉牛行为数量较少,图7a中的躺卧、探究和站立行为均被正确识别,图7d中的爬跨行为被正确识别。图7b、7e为自然光照条件下存在多只肉牛且存在遮挡行为的图像,图7b中由于站立与运动行为高度相似,导致其中一个运动行为被错误识别成站立行为,其余站立行为与运动行为均被正确识别,图7e中的躺卧、站立和探究行为均被正确识别。图7c、7f为在夜晚存在多只肉牛且存在遮挡行为的图像,夜晚肉牛行为多表现为躺卧行为, 图7c 中的躺卧和探究行为均全部被正确识别,图7f中的躺卧行为均被正确识别。总体来说,本文方法对肉牛的多种行为均取得较好的识别效果。
为验证提出的基于SNSS-YOLO v7的肉牛行为识别方法对原算法改进的有效性,设计了消融试验。将原网络与进行各模块改进后的网络在测试集上进行测试,对比结果如表3所示。
表3 消融试验结果Tab.3 Results of ablation experiments
由表3可以看出,本文方法所做的第1个改进为使用Slim-Neck轻量化Neck结构,使精确率提高0.4个百分点,平均精度均值(mAP@0.5)提高0.3个百分点,模型内存占用量减小14.3%,参数量减少14.8%,浮点运算量减少13.6%;本文方法所做的第2个改进为使用SEAM模块替换Rep结构,虽然精确率并未提升,但平均精度均值(mAP@0.5)提高0.1个百分点,模型内存占用量减小20.4%,参数量减少18.7%,浮点运算量减少12%;本文方法所做的第3个改进为使用SimSPPF模块替换SPPCSPC模块,精确率提高0.4个百分点,平均精度均值(mAP@0.5)提高1个百分点,模型内存占用量减小23.7%,参数量减少23.8%,浮点运算量减少6.1%。
为验证本文提出的基于SNSS-YOLO v7的肉牛行为识别方法的有效性,将本文方法与YOLO v6m[23]、YOLO v5m、YOLOX-S[24]、TPH-YOLO v5[25]和Faster R-CNN[26]肉牛行为识别方法进行对比。其中,YOLO v6m、YOLO v5m、YOLOX-S方法是当前主流的目标检测算法,TPH-YOLO v5和Faster R-CNN是在其他文献中性能较好的算法。为了验证本文方法的优越性,所有模型训练过程中参数设置均保持一致。对比结果如图8所示。
图8 不同模型识别效果比较Fig.8 Comparison of recognition effect of different models
由图8可以看出,本文方法与YOLO v6m、YOLO v5m和TPH-YOLO v5方法相比,精确率分别提高1.1、0.8、1.7个百分点,召回率分别提高4.3、1.1、0.4个百分点,平均精度均值(mAP@0.5)分别提高2.2、3.1、1.9个百分点。与YOLOX-S方法相比,精确率持平,召回率提高9个百分点,平均精度均值(mAP@0.5)提高13.7个百分点。与Faster R-CNN 方法相比,召回率虽有所下降,但精确率提高19.3个百分点,平均精度均值(mAP@0.5)提高4.5个百分点。综上,本文方法在识别效果上优于其他方法,验证了本文方法的优越性。
为进一步验证本文方法是否适合部署在边缘端设备上,将本文方法的参数量和模型内存占用量与YOLO v6m、YOLO v5m、YOLOX-S、TPH-YOLO v5、Faster R-CNN模型进行对比。对比结果如表4所示。
表4 不同模型参数量和模型内存占用量比较Tab.4 Comparison of different model parameters and model sizes
由表4可知,本文方法与YOLO v6m方法相比模型内存占用量减少45.4%,参数量减少43.8%;与YOLO v5m方法相比,模型内存占用量减少7.6%,参数量减少7.8%;与YOLOX-S方法相比,参数量虽然略有提升,但模型内存占用量减少43.1%;与TPH-YOLO v5方法相比,模型内存占用量减少57.8%,参数量减少57.6%;与Faster R-CNN方法相比,模型内存占用量减少92.5%,参数量减少了85.9%。综上,本文方法在识别性能方面优于对比方法,验证了本文方法的有效性。
为了验证本文提出的基于SNSS-YOLO v7的肉牛行为识别方法在肉牛不同密集程度下的识别效果,分别对轻微、中度和重度3种密集程度进行了测试,测试结果如表5所示。轻微密集程度的肉牛数量少于5头,且肉牛行为之间几乎无遮挡;中度密集程度的肉牛数量在5~10头之间,且部分肉牛行为之间存在遮挡;重度密集程度下的肉牛数量大于10头,且肉牛行为之间互相遮挡。
表5 不同密集程度下肉牛行为识别效果对比Tab.5 Comparison of behavior recognition effect under different intensities %
由表5可知,轻微密集和中度密集程度下,本文方法可以较准确地识别出肉牛行为;在重度密集情况下,肉牛行为的识别效果受到了较大的影响,因肉牛行为之间互相遮挡严重,导致精确率和mAP@0.5有所下降。
图9为不同密集程度的肉牛行为识别结果。图9a为轻微密集环境,肉牛站立行为和运动行为均被正确识别。图9b为中度密集环境,肉牛站立、舔砥和躺卧行为均被准确识别。图9c为重度密集环境,两只肉牛因遮挡严重导致躺卧行为被漏检,其它探究、躺卧、站立、舔砥行为均被正确识别。
图9 不同密集程度下的肉牛行为识别结果Fig.9 Results of beef cattle behavior recognition under different intensity levels
为了验证本文提出的基于SNSS-YOLO v7的肉牛行为识别方法的实用性,对不同光照情况下肉牛行为的识别效果进行了测试,测试结果如图10所示。
图10 不同光照情况下肉牛行为识别结果Fig.10 Recognition results of beef cattle behavior under different lighting conditions
图10a、10b光照较强,图像中的肉牛行为均被正确识别。图10c中光线较弱且肉牛重度密集,导致图像中的两个站立行为被漏检。图10d中光线较暗且肉牛中度密集,图像中的行为均被正确识别。
站立、运动和探究行为虽然相似,但可以反映肉牛的健康状况,比如,患病的肉牛运动行为减少,这些相似行为对识别精度有一定影响。如果将站立、运动和探究行为合并为一类,则肉牛行为可分为爬跨、躺卧、舔砥、互斗及其他5类,测试结果如表6所示。
表6 不同行为类别数量识别效果比较Tab.6 Comparison of recognition effect of different behavior categories %
由表6可知,将站立、运动和探究3类相似行为归为一类,精确率大幅提高,但无法准确识别肉牛行为是站立、运动还是探究,导致无法及时掌握肉牛的健康状况。详细区分站立、运动和探究3类相似行为,精确率和mAP@0.5虽然略有下降,但仍然全部在90%以上,可以及时发现肉牛养殖过程中存在的异常情况,对于肉牛健康养殖具有重要作用。
(1)提出了一种基于SNSS-YOLO v7的肉牛行为识别方法。首先在YOLO v7的Neck部分使用Slim-Neck结构,有效降低模型复杂度;其次在YOLO v7的Head引入SEAM模块,增强对Neck层输出的响应能力;最后使用SimSPPF模块替换原YOLO v7的SPPCSPC模块,在减小参数的同时进一步增大感受野。试验结果表明,本文方法能有效识别肉牛的爬跨、躺卧、探究、站立、运动、舔砥和互斗7种行为,平均精度均值为95.2%,模型内存占用量为39 MB,参数量为1.926×107,识别效果较好。
(2)与YOLO v7、YOLO v6m、YOLO v5m、YOLOX-S、TPH-YOLO v5和Faster R-CNN相比,模型内存占用量分别减小47.9%、45.4%、7.6%、43.1%、57.8%和92.5%,平均精度均值分别提高1.4、2.2、3.1、13.7、1.9、4.5个百分点。表明本文方法行为识别效果更好。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!