基于YOLO特征检测模型的非法溜宠物识别
Recognition of Illegal Pet Walking Based on YOLO Feature Detection Model
1. 引言
我国拥有极为庞大的养宠物的群体,每日的溜宠物已经成为大多数有宠物家庭的生活中必不可少的部分。它极大地丰富了人们的日常生活。然而目前来说,对于用户溜宠物中一些违规现象的识别只能通过人为的识别或者违规现象发生后通过查看相关录像来实现对于违规现象的惩处。溜宠物现象的人为识别的人力成本以及违规现象惩处的滞后性对于溜宠物现象中违规行为识别都有很大的弊端。
2021年1月22日,十三届中国人大常委会表决通过了新修订的《中华人民共和国动物防疫法》。溜宠物的违规行为纳入了法律的监管。人为识别以及惩处的滞后性对于溜宠物违规现象的监管就显得有些力不从心。因而自动、准确地识别溜宠物中的违规行为的研究更能符合时代的需要以及监管的需求了。
随着机器视觉的发展,对于动物的识别检测也迈向了一个新的台阶。从最初的将所有情况输入系统中以实现目标检测的算法系统,到之后人工设计的经典机器算法,例如Sift (Scale-invariant feature transform)、HOG (Histogram of oriented gradient)、Harris等算法 [1] 对目标进行特征提取,然后输入到SVM (Support Vector Machine)等分类器中进行目标的检测,再到2012年CNN的崛起,实现了深度学习和计算机视觉相结合的阶段,迎来了目标检测算法的更深层次的研究。如今通过深度学习网络实现的特征提取能够实现更高的检测精度和特征提取能力,从2014年rgb提出的R-CNN检测算法,开始了双步(Two-stage)检测算法的研究,这个时期代表作有Fast-Rcnn、Faster-Rcnn等 [2] ,先通过RPN网络获得先验框,然后通过建议框对提取到的特征层进行截取。最后通过回归预测(box-regressing)对建议框进行调整,从而实现对目标的检测。2014年YOLO的出现将双阶段(two-stage)的检测算法融合成了单阶段(one-stage)的检测算法。这一时期的代表作便是YOLO系列,如YOLOv1,YOLOv2,YOLOv3等 [3] 。因为单阶段的检测算法无需提取建议框而是直接输入到网络中生成目标的类别和位置,因此速度上比双阶段的检测算法更快。
上述的研究主要还是停留在大型物体识别研究上。而对于现实生活中溜宠物行为的识别更加复杂,除了准确识别目标对象之外,还需要准确识别宠物与人的关系,并综合所有复杂信息才能准确判断是否是违法的溜宠物。
本文提出了一种基于YOLO的改进的宠物违规现象的识别算法。使用界内已经十分成熟的大规模数据集VOC_2017上训练改进的SENet特征提取网络进行特征提取。然后对复杂的59种现实环境针对性的手动收集和制作部分数据集,再输入到网络中进行针对性的训练以达到精准检测的目的。
2. 相关理论
2.1. Backbone介绍
2.1.1. Anchor
Anchor Box [4] 是预先设定的一系列边框,在进行网络训练时,以真实的边框位置相对于预设边框的偏移来构建。预设定的边框可能的位置“框”出目标来,然后再在这些预设定的边框的基础上进行调整。
我们将输入的图片分割为38 * 38块区域,每一个区域由9个先验框负责进行识别。先验框会对这38 * 38个区域进行匹配,也就是一旦认为这些区域里存在目标,就让左上角点所携带的先验框去负责检测。
对于任何一个真实框,本文的算法不再使用以往的IOU正样本 [5] 匹配的方式进行选取。而是直接采用高宽比进行匹配。即使用真实的框和图1中9个不同大小的先验框计算高宽比。如果真实框与先验框的高宽比例大于设定的阈值,则说明该真实框和该先验框匹配度不够,将该先验框认定为负样本。
2.1.2. 下采样过渡模块
在常见的卷积神经网络中,常见的下采样过渡模块(如图2)是一个卷积核大小为3 * 3、步长为2 * 2的卷积或者步长为2 * 2的最大池化。通过卷积进行下采样的信息融合较好,而采用池化进行下采样则可以一定程度上忽略目标的倾斜、旋转等位置变化。从而避免网络的过拟合,提高了鲁棒性。
综合上述两种下采样方式的优点,组成了本文网络中的下采样模块,通过分别池化和卷积的下采样并将其特征进行堆叠。
Figure 2. Down sampling transaction module
图2. 下采样过渡模块
2.2. FPN特征金字塔
在卷积网络中,随着网络深度的增加,特征图的尺寸也越来越小,语义信息也越来越抽象。浅层的语义信息较少,但是目标位置相对准确,目标位置比较粗略,导致小物体容易检测不到。FPN14则是自顶向下地处理特征图并通过横向连接的方式融合底层的具有较少语义信息的特征图和高层的具有丰富语义信息的特征图,同时没有牺牲表达能力、速度和资源的消耗。
通过融合浅层到深层的特征图(如图3),从而充分利用各个层次的特征。
如图3所示,在得到c2、c3、c4、c5这些特征图之后,首先将c5进行1 * 1卷积将其通道值变为256,然后进行2倍上采样,此时得到的特征图的高和宽与c4是一样的,但是注意,c4的channel值和上采样得到的特征图的channel值不太一样,所以c4也会先进性依次1 * 1的卷积将channel变成256,然后和该特征图依次堆叠,最终得到融合的特征图。
总的来说就是,自顶向下,c5、c4、c3、c2依次进行横向的1 * 1卷积,再与上一层上采样的结果进行矩阵加法操作的结果。
2.3. SPPCSPC模块
SPP模块(见图4)的作用是能够增大感受野,使得算法适应不同的分辨率图像,它是通过最大池化来获得不同的感受野的。
我们可以通过再第一条分支中,经过maxpool的四条分支。分别是5、9、13、1。这四个不同的maxpool就代表了他能够处理不同的对象,也就是说,这四种不同的尺度的池化有四种感受野,主要是区别大目标和小目标。
CSP模块,首先将特征分为两部分,其中的一个部分进行常规的处理,另外一个部分进行SPP结构的处理,最后把这两部分进行合并,如此可以减少近一半的计算量,使得速度变快且精度增加。
3. 违规溜宠物现象识别
3.1. 基本思想
基于合法溜宠物的标准,我们需要对宠物品种,是否拴绳,溜宠物过程中宠物排泄是否清理三个方面进行准确识别。
对于宠物分类时,由于不同的宠物,外观具有一定的相似性,同一种宠物毛发颜色、姿势不同等原因,因此需要充分包含目标纹理中的细节信息,为了能在得到全局视觉特征信息的同时,还能够得到图像关键区域的细节特征共同进行对比分析,本文提出了如图的实验过程。
1) 将特征提取网络在大型公共数据集VOC2017上训练获取相关的预训练的神经网络
2) 加入SPPCSPC模块
3) 更改融合点的网络结构,让整个输入的尺寸和通道数满足第二阶段的特征金字塔的需要
4) 将整个数据集按照7:2:1的比例分成训练集,验证集和测试集
5) 将训练后得到的YOLOHead进行解码处理
6) 使用得分抑制选取置信度最高的框
7) 使用非极大抑制算法以防同一个种类的预测框的堆积
8) 将测试集送入网络,计算准确率
最后通过YOLO预测框限制检测区域增加预测精度,并对人、绳子、宠物、粪便等四种目标的关系最终按照权重比例计算是否是违法溜宠物现象。
3.2. SENet
我们将原本YOLO中用于提取特征网络主要部分换成了2017年由Momenta提出的SeNet (Squeeze and Excitation Networks),得到升级版的YOLO模型
SENet中最关键的SE模块(见图5)使用两个连续卷积层的输出并分流进入下一层,网络会将输入的尺寸为H * W * C的特征图通过全局平均池化将每个特征图压缩1 * 1 * C的实例数列,这一步称为Squeeze,然后再经过两个全连接层去构建通道之间的相关性,这一步称为Excitation,接着通过Sigmoid函数将数据归一化到0~1的权重,最后通过Scale操作将权重加到每个通道上。通过两个全连接层的目的是限制模型的复杂度,同时增加泛化能力。而在两个全连接层中穿插一个ReLu激活函数是为了增加非线性因素从而是使整个模型更好的拟合。
3.3. 改进的YOLO网络
ResNet (残差网络)是为了解决网络退化问题提出的,当神经网络进一步加深时,反向传播的梯度会非常小,对于深层的权重更新就十分困难。而残差网络提出在网络中添加直连通道,允许原始信息能够直接传入后面的层中,从而解决了梯度消失和梯度爆炸的问题。但是,他在我们的操作过程中也有不好的地方,当网络权重有一点轻微的变化时,就会引起较大的输出变化。如果采用ResNet结构,计算量将十分巨大。SENet顺着空间维度进行特征的压缩,这种全局的操作可以提供一个很好的感受野,在多分类问题上有很好的泛化能力,并且我们通过在最后Scale操作时是通过逐通道加权到之前的特征上,完成通道维度对原始特征的重新标定。重新加权的操作,可以得到抑制无效的特征,并提升有效特征的权重,从而有效地提升网络性能,而计算量不会太大。
所以本文在原本YOLO网络的基础上用SENet网络(见表1)对其特征提取网络进行了修改,并将产生不同的层输出的特征图输入特征金字塔结构中,加强网络的特征提取能力。
SEBottleneck是一个组合,先进入两个Conv + BN层中初步提取特征,再进入Conv + BN + ReLu中提高其拟合能力。接着才进入SE模块中增加其全局视野的能力。不同的Bottleneck会经过不同次数的上述操作,最后获得特征图的通道数也不同,经过SEBottleneck1后的特征图尺寸缩小,通道数变为256通道,接着进入SEBottleneck2变为512通道,进入SEBottleneck3变为1020通道,进入SEBottleneck4变为1040通道。改进后的YOLO网络会进入RPN层中通过9种大小不同的预测框对大小不同的障碍物进行检测,以满足我们实际设计的需要。
Type
Filters
Size
Output
Convolutional
64
3*3
Convolutional
64
3*3
Convolutional
128
3*3
MaxPooling
128
3*3
3x
Convolutional
128
1*1
Convolutional
256
3*3
Convolutional
256
1*1
se_module
256
8x
Convolutional
256
1*1
Convolutional
512
3*3
Convolutional
512
1*1
se_module
512
36x
Convolutional
512
1*1
Convolutional
1024
3*3
Convolutional
1024
1*1
se_module
1024
3x
Convolutional
1024
1*1
Convolutional
2048
3*3
Convolutional
2048
1*1
se_module
2048
Avgpool
7*7
Droupout
Linear
1000
Table 1. SENet
表1. SENet
本文最终的网络结果如图6所示。
4. 实验验证与分析
4.1. 数据集及其预处理
本文所使用的犬种数据集包括斯坦福大学搜集的120种犬类数据,以及kaggle竞赛所使用的有标签的训练数据,两个数据集包含的图片有部分重复。同时,用到了自己在网络搜集的图片以及通过人工打标的方式的部分数据。图片总和为40,000张。实验中随机抽70%作为训练集,20%作为验证集。剩余10%作为测试集。同时为了增强整个训练效果的鲁棒性,在进行训练前,对数据集做了随机镜像、适当高斯噪声、垂直方向上图像旋转等处理。并对光线等进行了相应的随即处理,用于减少网络过拟合的同时,增加网络泛化的能力。之后对图片进行尺寸的统一处理,方便整个网络的输入。
Figure 6. Complete network diagram
图6. 完整网络示意图
4.2. 实验环境及评价指标
本实验采用硬件设备主要是Intel(R) Xeon(R) W-2104 CPU @3.20 GHz内存64 G;NVIDIA GeForce GTX 1080Ti GPU。
模型的性能指标包括训练集、验证集、测试集的准确率以及训练集和验证集的损失率。其中训练集的置信度和损失率体现是整个模型训练的性能,验证集的损失率体现的是训练过程中是否出现了过拟合的现象。测试集的置信度则是直接体现了整个训练的模型的识别能力。这两个指标如下:
Accuracy=1M∑i=1MI(yi=f(xi))" role="presentation">Accuracy=1M∑i=1MI(yi=f(xi)) (1)
lgrad=1n∑i=1n(F(∇x(ei))+f(∇y(ei)))" role="presentation">lgrad=1n∑i=1n(F(∇x(ei))+f(∇y(ei))) (2)
其中,M是样本数量; yi" role="presentation">yi 是标签是模型, f(xi)" role="presentation">f(xi) 预测结果, I" role="presentation">I 是条件判断函数;对于损失函数,我们采用常用的l1损失。但是我们希望误差太大时,不要产生对应的loss,所以对于太大的loss,经过log变换后就会变小。我们于是便使用这种处理离群点的方式。其中 F(x)=ln(x+α)" role="presentation">F(x)=ln(x+α) , α(>0)" role="presentation">α(>0) 为超参数。
简单进行log变换会让损失函数对于边缘的误差变化不敏感。所以我们采用Hu J在2019年的论文 [9] 中提出的 lgrad" role="presentation">lgrad 来互补边缘误差得到变化的敏感。
图7为300个epoch的loss变化图
4.3. 结果分析
我们将如今主流的识别算法和本文优化后的网络进行了对应的比较,结果如表2所示:
方法来源
所用方法
识别准确率/%
文献 [6]
Alexnet微调
63
文献 [7]
拓展数据 + DCNN
67.31
文献 [8]
Googlenet迁移学习
69.07
本文
优化后的YOLO模型
68.05
Table 2. Comparison between mainstream recognition algorithm and algorithm experiment in this paper
表2. 主流识别算法与本文算法实验对比
由表1可以看出:文献 [6] 是基于传统的深度学习网络Alexnet而展开的训练,其检测精度明显低于其他方法,这是由于传统的网络参数训练队数据有着极大的依赖性,图像特征的提取也与先验知识有密切关系。特别是随着网络层数的不断增加,Alexnet包含8个隐藏层,而本文所使用的网络层数明显更深,单纯利用数据对网络进行训练是不能更好的实现分类任务的。文献 [7] 使用的数据多大163 k张,使用的训练方法是对DCNNs进行完全初始化训练。该方法虽然增加了数据总量,但训练学习到的特征过于单一。文献 [8] 的结果虽然比本文方法稍微高一点,不过在该实验中使用了比本文更多的数据集用于训练,并且在网络训练过程中特地训练一个狗脸探测器用于宠物识别对于本文的目的来说确实没有必要。
最终效果图如图8和图9所示:
Figure 8. Model identification results
图8. 模型识别结果
Figure 9. Final determination of illegal identification results
图9. 非法识别结果最终判定
最后值得一提的是,在本文所搜集的公共数据集中存在部分犬类人工标注分类错误的情况。同时数据集的犬类数量并不均匀,这都是对于网络训练造成了一定的影响。
5. 结束语
本文提出了一套基于改进型的YOLO模型实现违法溜宠物现象识别。实验证明该方法对于属于细粒度图像分类的犬种有一定的性能改进。且针对实际需要,本文选取了SENet而非常用的ResNet特征提取网络来实现基础的特征提取,在准确率变动不大的情况下提升了训练速度。同时在特征提取网络最后阶段加入SPPCSPC模块扩大了整个感受野的更好地契合了最终实验结果的需要,这个重新构成的新网络是本文最大的创新点。
为了契合识别的需求,本文选用新的损失计算方式,针对性地提升了整个网络识别的效果。在精度变化不大情况下更好地收敛整个模型,此为创新点之二。最终通过实验表明整个网络能够很好地胜任生活中识别非法溜宠物现象的使用。
相关知识
基于深度学习的高精度狗狗检测识别系统(PyTorch+Pyside6+YOLOv5模型)
基于卷积神经网络的宠物识别 Pet Recognition Based on Convolutional Neural Network
基于深度学习的犬种识别系统详解(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
基于深度学习的动物识别系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
基于深度学习的鸟类识别系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
模型案例:| 音频识别-鸟声识别模型!
夜间红外图宠物检测系统源码分享
基于深度学习的多种类动物识别系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
YOLO训练过拟合问题:分析与解决方案,让模型泛化更强
基于心率变异性的情绪识别研究
网址: 基于YOLO特征检测模型的非法溜宠物识别 https://m.mcbbbk.com/newsview276347.html
上一篇: 一种基于YOLO的宠物图像识别方 |
下一篇: 一种宠物行为检测监控系统及方法与 |