张博凡,孙丙宇,房永峰,3①
(1.安徽建筑大学 电子与信息工程学院,安徽 合肥 230022;2.中国科学院 合肥物质科学研究院,安徽 合肥 230031;3.中国科学技术大学,安徽 合肥 230026)
目前在羊群大规模养殖中,羊只计数、在栏数量、个体识别都是需要频繁执行的工作,而现阶段养殖又是以人工为主,存在环境恶劣,效率低下且人力短缺等问题,完成这些工作且在检测实时性有要求的情况下,就需要用到目标检测网络,如果想要高效且高质量的完成工作,对目标检测的优化必不可少。
随着计算机视觉领域技术与相关科技产品的不断发展,深度学习开始逐渐进入广大学者与研究者的视野[1],并逐渐运用到一些目标检测领域上。其中,在牲畜的养殖业就有大规模的应用,提高了牲畜检测与识别的实时性和准确性[2]。
毕文浩等[3]提出基于YOLOv5 的轻量级猪只检测网络设计,把主干网络中Focus 与CSP(Cross Stage Partical)结合的结构抛弃,采用MobileNetV3中深度可分离卷积的倒残差结构,同时加入通道注意力机制来衡量特征图的不同通道所占的重要性,增强目标特征。于意[4]提出基于改进YOLOv3的奶山羊目标检测方法,在YOLOv3 算法的基础上,对已有数据进行数据增强,添加SeNet(Squeeze-and-Excitation Networks)注意力机制提高对羊只个体的关注,从而提升检测精度,改用GIOU(Generalized Intersection over Union)损失函数,改进优化模型,使收敛效果更好。虽然通过增加注意力机制,改进损失函数等方法能有效地提高牲畜检测准确率,但由于牲畜大多属于群居动物,上述方法对于重叠部分检测还是未能有效解决,依然容易造成错检漏检,所以解决重叠问题成为牲畜检测的重点。
针对上述问题考虑用DIOU(Distance Intersection Over Union)作为NMS的标准,不仅考虑到羊群重叠区域,还考虑中心点问题,以期解决密集羊群重叠问题,使其检测更加精确。由于YOLO系列的主干和特征金字塔的演化,检测头仍然是耦合的,考虑将YOLO头部替换为解耦头部,以期有效地提高收敛速度,最后,考虑在C3 模块中加入SeNet 注意力机制[5],更多聚焦羊只特征,以期使检测结果更加精确,提高准确率。
YOLO系列是由Redmon等[6]提出的单阶段目标检测算法,核心是将整张图片作为网络的输入,在输出层直接输出目标位置坐标和类别。到现在为止,YOLO 系列经过多代进化发展[7],从YOLOv1 到YOLOv7,YOLOv5 仍是最经典和稳定的YOLO 系列代表,YOLOv5 相较于之前的版本,在保持检测精度基础上,能有更小的权重文件、更短的训练时间和更快的速度。YOLOv5的网络结构模型如图1所示。
图1 YOLOv5网络结构模型
由图1 可见,YOLOv5 分为Backbone、Neck、Head 3 个部分,在Backbone 中,有Conv、C3、SPPF(Spatial Pyramid Pooling-Fast)等几个部分,其中C3模块基本均为CSP(Cross Stage Partial)结构,主要是对残差特征进行学习。SPPF是在以前SPP(Spatial Pyramid Pooling)的基础上改进而来,SPP是融合空间金字塔思想,将局部特征和全局特征融合,有利于检测差异较大的目标,而SPPF在保留SPP复杂多目标的检测精度前提下,优化运行速度。
在Neck 部分,主要采用PANet(Path Aggregation Network)结构,PANet 在FPN(Feature Pyramid Network)的基础上加入1个自底向上的路径,使得处于最底处的信息也能够得到传递,从而增加定位能力。
Head由回归损失函数和分类损失函数组成,负责输出目标对象类别、得分以及边界框位置。检测网络由3个detect检测器组成,负责检测不同尺寸的目标。
在目标检测中,分类和回归任务之间是冲突的,虽然分类和回归都隶属于监督学习,都是对输入进行预测,但是分类结果可以看作是离散的,本质就是寻找一个边界,对输入数据进行分类,没有距离度量,而回归任务结果可以看作是连续的,是在一段范围的。总的来说,分类任务是将输入分为1、2、3 类,是为寻找一个边界,而回归任务是将输入分为一段范围,是为找到最优的拟合。
所以,在分类和定位的解耦头大多被用于一级与二级探测器,但是由于YOLO系列的主干和特征金字塔的进化,它们的检测头仍然是耦合的,如图2。
图2 YOLO耦合头部
本文将YOLOv5的头部替换为YOLOX 解耦的头部[8](如图3所示),对于FPN每一层特征,首先采用1×1的conv层将特征通道减少到256,然后添加2个并行分支,每个分支有2个3×3 conv层,分别用于分类和回归任务。在回归分支上添加IOU(Intersection Over Union)分支。通过实验可知,可以大大地提高收敛速度,并且在替换为解耦头部后,不论在收敛速度还是准确度都有一定程度的提升。
图3 YOLOX解耦头部
对于目标检测预测阶段,后处理是非常的重要的,对于YOLO而言,就是把纷繁复杂的预测框进行筛选过滤,把重复的预测框只保留1个,最终获得目标检测结果,这个过程就称为NMS[9]。
具体是在后处理阶段,会先把所有的预测框预测准确率做一个排序,选中准确率最高的一个,然后再一次遍历剩下的框,如果准确率最高的框IOU 大于一定的阈值(根据实际需要设置),就将其删除,因为IOU 若超过阈值,会被认为是同类,对后续判断有影响。然后再选中1个次高准确率的预测框,重复过程。
在NMS 中IOU 的计算很重要,IOU 即为交并比,是bounding box 与ground truth 的重叠度,如图4 所示。矩形A,B的IOU即为区域A与区域B交集部分面积与并集面积之比。
图4 IOU重叠示意
由于羊是群居动物,经常拥挤在一起,所以重叠率很高,为提高检测准确度,将YOLOv5的NMS更换为DIOU-NMS,DIOU 将目标与Anchor 之间的距离、重叠率以及尺度都考虑进来,使目标框回归更加稳定[10]。
在原始NMS中,IOU通常被用于抑制多余的检测框,且相交面积是唯一衡量因子,这就会导致对有重叠的目标所产生框的错误抑制。用DIOU替换IOU作为NMS标准后,不仅考虑到重叠区域,还考虑中心点的距离,所以能有效的解决重叠率高问题。
DIOU计算公式:D=X-P2(b,bgt)/c2,式中D为DIOU,X为交并比,b,bgt为预测框和真实框中心点,P为两中心点间欧式距离,c为包含预测框和真实框最小闭包区域对角线距离。
注意力机制是上世纪90年代一些科学家在研究人类视觉时发现的一种信号处理机制。随后一些研究者开始在深度学习领域研究注意力机制,并取得一些成果。但是这些注意力机制在用于小型网络时,模型速度明显变慢。因为小型网络对于大多数注意力机制计算消耗是承担不起的。比较常见的注意力机制有SE(Squeeze-and-Excitation)、CA(Coordinate Attention)、ECA(Efficient Channel Attention)等。
SeNet相对于其他注意力机制,参数数量增加相对较少,使神经网络负担较轻,在训练时,对神经网络特征图加权,使模型注意力更加有效聚焦在目标个体上,抑制周围环境对目标个体检测的干扰[11],从而提升检验准确度,并且SeNet模块可以添加在网络模块很多位置[12],方便实验即插即用。
通道注意力模块SeNet结构图如图5所示。
图5 通道注意力模块SeNet结构图
(1)Transformation
输入一个特征图X,如图5所示,经过Ftr操作之后可生成新的特征图U。
(2)Squeeze
把新得到的特征图U全局平均池化,池化后可得到一个1×1×C的特征图,公式如下:
(3)Excitation
上一步得到的1×1×C特征图通过2个全连接层,经过权重W生成一个新权重,得到所需要信息。公式如下:
(4)Scale
由图5 可见,最后1 步利用第3 步得到新权重向量s,对以前特征图U进行赋值,得到一新的特征图X2,这个特征图则是改进之后所需特征图,大小与之前大小相比没有任何变化。公式如下:
在C3模块加入SeNet注意力机制后的Backbone的网络图如图6所示。
图6 改进后Backbone的网络
本次试验运行环境CPU 为Intel(R)Xeon(R)Gold 5117 CPU @ 2.00 GHz,GPU 为NVIDIATITAN RTX,显存为24 G,操作系统为Ubuntu 20.04.4,加速环境为CUDA11.4,编程语言为Python3.8.13,深度学习框架为pytorch1.7.1。
实验数据集一部分来源于宁夏养殖场现场拍摄,一部分来源于后期在养殖场安装的摄像头远程拍摄截取,并对提取的羊只图像翻转、改变对比度和饱和度、增加噪声形式进行数据增强,最后为增加准确性,加入部分公开数据集羊只图片,数据集的数量一共5 121 张图片,按9:1 比例分为训练集和验证集,其中训练集4 608 张图片,验证集513 张图片,借助Lableimg软件对数据集进行标注,因为只需检测到羊,所以只设置1个种类sheep(羊)。
为验证本实验提出的改进算法各方面是否有效,采用目标检测算法中的多项指标对模型的性能进行评估,与原始未改进的YOLOv5 实验结果进行比较,具体评估指标包括精准度(P)、召回率(R)与平均精度均值(mAP)。
3.4.1 基于YOLOv5的DIOU-NMS改进
经过实验,对于原始未改进的YOLOv5模型,将NMS改为DIOU-NMS进行对比,结果如表1所示。
表1 不同NMS模型对比 %
由表1 可知,改为DIOU-NMS 后,精准度P提升2.1%,召回率R提升2.3%,mAP 值提升1.8%。可见DIOU-NMS能够对重叠羊群进行更加精确检测,得到更优检测结果。
3.4.2 基于YOLOv5的注意力机制改进
经过实验,将YOLOv5模型的C3模块引入SeNet注意力机制,并对加入不同注意力机制进行对比,结果如表2所示。由表2可知,C3SE相较于其它注意力机制,P值、R值和mAP值相较于原模型都有提升,能更加有效提取羊只特征信息。
3.4.3 消融实验
最后为验证改进算法有效性,做多组实验,使用相同数据集,输入图片经过输入端处理后统一为640×640,epoch 设为300,训练时,遵循控制变量的实验方法,其他实验条件均保持不变。实验对比结果如表3所示。
表3 改进模型 %
由表3可知,在分别对YOLOv5模型进行改进解耦头,NMS改为DIOU-NMS,增加注意力机制C3SE等操作后,精准度P、召回率R、平均精度均值mAP与原始模型(序号为0)相比,均得到不同程度的提升,将3组改进同时进行,可得到1个最优模型(序号为3),与原模型相比,P值提升2.8%,R值提升3.5%,mAP值提升3.0%,检测对比见图7。改进之后的检测识别效果有明显的提升,对于头部与腿部都被遮挡的羊只也能进行有效的识别检测。
图7 改进模型与YOLOv5检测结果比较
3.4.4 不同算法对比
目前目标检测主流模型有YOLOv3、YOLOv5 等,采用mAP 作为检测评估标准,用改进的YOLOv5 模型与其他主流模型检测结果做对比,如表4所示,改进后的模型与其他主流模型相比,具有更好的结果。
表4 不同算法定量对比 %
图8展示不同模型羊只检测效果。图8中共有4只目标羊只,且重叠在一起,YOLOv3只检测出3只羊,并且置信度不高,YOLOV5s也只检测出3只羊,重叠部分出现漏检,而YOLOv5n检测出4只羊,但重叠部分置信度很低,检测不够准确,本文算法模型检测出正确数量和位置,成功检测出后方头部与腿部被完全遮挡的羊只,且准确率较高,效果最好。
图8 不同模型检测对比
针对羊的群居特性导致羊只重叠程度较高,检测效率低且易造成漏检错检等问题,本文通过在C3模块加入注意力机制,将NMS改为DIOU-NMS,将YOLOX的解耦头应用于YOLOv5中,优化模型,使精准度P提升2.8%,召回率R提升3.5%,mAP提升3.0%,有效增加检测准确率,在保证精确前提下也提升收敛速度。总的来说,改进后的YOLOv5 模型可以有效地解决当前羊只目标检测算法在实际场景中的很多问题。