用于人体检测的YOLOv3改进及压缩算法的研究*
2022-03-22张玉杰
张玉杰,董 蕊
(陕西科技大学电气与控制工程学院,陕西 西安 710021)
1 引言
人体检测是目标检测的重要研究方向之一,在智能监控等领域被广泛应用[1]。近年来,随着深度学习的发展,基于深度学习的目标检测方法也取得了很大的研究进展[2,3],基于深度学习的目标检测算法分为2类:(1)以Fast R-CNN(Fast Region-based Convolutional Neural Network)[4]和R-FCN(Region-based Fully Convolutional Neural Network)[5]算法为代表的双步检测算法;(2)以SSD(Single Shot Detector)[6]和YOLO(You Only Look Once)[7]算法为代表的单步检测算法。两者都是以卷积神经网络CNN(Convolutional Neural Network)为核心架构,通过卷积层、池化层等基础网络提取区域特征,再经过一系列的分类过程,最后利用非极大值抑制NMS(Non-Maixmum Suppression)算法[8]得到输出结果。相比较来说,双步检测算法的精度高,但实时性相对较差;单步检测算法的精度较前者稍低,但实时性很好,检测速度也较快。
YOLO是一种端到端的目标检测算法,检测速度快,但在检测精度上略显不足,尤其是对小目标的识别性能明显下降。 YOLOv3 以较好的检测精度和速度得到广泛的研究和应用[9]。
YOLOv3算法虽然在目标检测方面已达到了较好的效果,但对于人体检测来说仍有不足。现实环境中的人体检测面临2大难点:(1)行人穿着多样化和姿态个性化导致在人体检测过程中,人体的外观和形态没有相对固定的特征描述;(2)人体距离摄像头的远近导致图像中人体的尺度不同,小尺度人体目标的特征信息少导致不容易被检测到[10]。
对于人体检测场景,YOLOv3在主干网络的多次卷积过程中容易丢失有用的人体特征,且主干网络中使用单一的3×3卷积核只能提取一种尺寸的信息,导致特征信息泛化能力差,并且其检测模块中只使用单一的3×3卷积核对提取到的人体特征进行检测,而单一的感受野不能充分地检测特征,导致各尺度目标尤其是小目标检测效果较差。
因此,本文通过改进YOLOv3的主干网络提升特征提取能力;改进检测模块提高各尺度人体的检测效果。最后,联合优化权重损失函数和BN层缩放因子的L1正则项对其进行通道剪枝,减小参数量、计算量和模型体积,使其可以应用于嵌入式平台上。
2 存在的问题
2.1 YOLOv3原理
YOLOv3的网络结构如图1所示,DBL由Darknet的卷积层后接BN和LeakyReLU构成。resn残差模块由步长为2的3×3 DBL下采样层和n个res_unit残差单元组成[11]。DBL*5包含3个1×1和2个3×3 DBL。YOLOv3实现目标检测包含卷积特征提取、特征金字塔融合[12]和多尺度预测3个阶段。(1)卷积特征提取。主干网络由3×3 DBL和res1、res2、res8、res8和res4构成,经过主干网络的多层卷积提取目标特征。(2)特征金字塔融合。将res4模块输出的特征图通过DBL*5和1×1 DBL层后进行上采样再与第2个res8模块输出的特征图在通道上拼接。然后以相同的方式与第1个res8模块输出的特征图拼接,实现特征金字塔融合。(3)多尺度预测。将res4模块输出的特征图与特征金字塔融合后的特征图经过检测模块(DBL*5结构、3×3 DBL与1×1 conv层)输出深度为3×(4+1+C)的特征图,其中4是指预测框宽、高和中心点坐标共4个元素,1为目标置信度,C为类别数。人体检测中C=1。YOLOv3算法采用多尺度预测可以输出3种不同尺寸的特征图,分别为图1中的y1,y2和y3。采用不同尺度锚框进行检测,根据不同预测框与真实框的交并比IOU(Intersection Over Union)重合度做非极大值抑制得到最终的预测框。
Figure 1 Network structure of YOLOv3图1 YOLOv3的网络结构
2.2 YOLOv3检测人体存在的问题
人体由于穿着多样化和姿态个性化而拥有复杂的特征。YOLOv3用于人体检测时存在以下问题:(1)YOLOv3经过多层卷积会丢失有用的人体特征,导致检测精度低;(2)YOLOv3只使用3×3卷积核提取人体特征,卷积核尺寸单一,对于复杂的人体特征只能提取一种尺寸的特征信息,导致提取的特征泛化能力差;(3)YOLOv3的检测模块中只使用单一的3×3卷积核进行检测,导致各尺度人体特征检测不充分,尤其是小尺度人体的检测效果较差。
3 改进的人体检测算法
针对上述YOLOv3检测人体时存在的问题,本文借鉴DenseNet[13]和GoogleNet[14]思想对其进行改进,在主干网络中加强特征重用、增加多尺度感受野和网络宽度,以提高网络特征提取能力;在网络的检测模块中增加多种感受野充分检测各尺度人体特征,以提升小尺度人体检测效果。
3.1 密集连接结构
DenseNet网络的密集连接结构如图2所示,将前面所有层与后面层建立密集连接,每一层的输入都由前面所有层的输出构成,将特征在通道上拼接实现特征重用[15]。
Figure 2 Densely connected structure图2 密集连接结构
在密集连接结构的前向过程中,输入x0经过包括BN(Batch Normalization)、ReLU和卷积操作的非线性函数H(*)得到输出x1,下一层以x0和x1作为输入,以此类推,第l层的输入如式(1)所示:
xl=Hl([x0,x1,…,xl-1])
(1)
每个密集连接单元都利用1×1卷积操作,融合各个通道特征并减少输入特征图数量来降维和减少计算量。密集连接结构减轻了梯度消失的情况,网络也更容易训练。
3.2 多分支结构
GoogleNet网络中的多分支结构如图3所示,对输入特征图在4个分支上分别进行堆叠的3×3卷积、3×3卷积、最大池化(max pooling)和1×1卷积操作,经过4个分支处理输出尺寸相同的特征图,在通道上拼接后输出融合的特征图。在4个分支的处理过程中,在3×3卷积前、堆叠的3×3卷积前和最大池化后分别加上1×1的卷积核以减少维度,降低进行3×3等卷积操作的特征图的厚度。多分支结构可以增加网络的宽度,增强网络对尺度的适应性,减少参数量[16]。
Figure 3 Multi-branch structure图3 多分支结构
3.3 改进方法
本文在YOLOv3的特征提取网络中引入密集连接与多分支组合的新结构提取人体特征;经过特征金字塔融合后,在检测模块中引入多分支结构以充分检测各尺度人体特征,预测人体类别和位置。改进的YOLOv3网络结构如图4所示。CBL由卷积层后接BN和LeakyReLU构成,Ip是多分支结构,DI_unit是由密集连接和多分支组成的改进密集连接单元,DIn模块由步长为2的3×3 CBL下采样层和n个DI_unit改进密集连接单元组成。CI模块由3个1×1 CBL和2个多分支结构组成。
Figure 4 Network structure of improved YOLOv3 图4 改进YOLOv3的网络结构
3.3.1 改进的特征提取网络
相比YOLOv3网络,本文在特征提取网络中引入DI1、DI2、DI6、DI6和DI4 5个密集连接结构,并在相邻2个DIn模块之间加入一个1×1 CBL层,用于降维减少输入特征图的数量。进入密集连接结构的特征图,先经过下采样得到尺寸减半的特征图,再经过对应个数的改进密集连接单元处理。在改进的密集连接单元中,特征图先进行1×1卷积降维,再经过多分支结构的4个分支处理并融合,然后将其与降维前的特征图进行融合。由此在主干网络中引入了密集连接和多分支结构。密集连接结构实现了特征重用,通过重复利用浅层卷积层提取的特征,使每层卷积层提取的特征都可以作为后面层的输入,有效利用了浅层的人体特征信息,也可以避免多层卷积过程中损失有用人体特征的问题。
3.3.2 改进的检测模块
相比YOLOv3网络,本文在网络的检测模块中引入多分支结构,将特征金字塔融合的3种尺度特征图经过CI模块处理,再经过1个多分支结构和1个带有18个1×1卷积核的卷积层检测人体特征,预测人体类别和位置。
改进的YOLOv3算法中引入了多分支结构,多分支结构相比单一3×3卷积核增加了5×5卷积核、最大池化等多种感受野,可以提取更丰富的人体特征,提升对各种尺度人体的检测效果。
4 模型压缩
深度学习模型在边缘侧实现是当下研究的热点,而深度学习模型在只拥有有限内存和计算能力的嵌入式端部署面临模型参数量、计算量和体积大3大难点。改进的YOLOv3模型体积比YOLOv3的减小了很多,但仍需进一步压缩模型使其满足部署条件。
卷积神经网络模型的参数冗余度高[17,18],可以通过模型剪枝将不重要的参数去除,大幅度减小模型的参数量、计算量和体积。
模型剪枝方法根据细粒度和粗粒度分为权重剪枝和通道剪枝2类。权重剪枝是消除权重张量中不重要的值,减少神经网络层之间的连接数量,减少计算中涉及的参数,从而减少操作次数[19]。通过设定最终目标稀疏度和执行剪枝的计划,随着训练的进行,开始执行剪枝过程,消除最接近零的权重,直到达到当前稀疏度目标。但是,权重剪枝生成的稀疏模型依赖于专用的稀疏矩阵运算库和硬件,而通道剪枝没有破坏原有的卷积结构,因此更适合在通用的硬件上使用,并且通道剪枝的可实现性高、总计算量小。
本文对改进的YOLOv3模型进行通道剪枝以实现模型压缩。改进的YOLOv3模型中卷积层后为BN层,可以解决训练过程中发生的中间层数据分布改变的情况,加快网络收敛,提高网络泛化能力[20]。BN层的计算公式如式(2)所示,将特征图所有参数归一化到均值为0,方差为1的正态分布范围内,再通过缩放因子γ和偏置β进行微调。
(2)
从式(2)可以看出,BN层对每一个通道都引入了一个缩放因子γ,γ是可学习的参数。L1正则化具有稀疏作用,对BN层的缩放因子γ施加L1正则化,可以推动γ趋向于零,从而根据γ的值判断通道的重要程度。定义目标函数如式(3)所示,联合优化γ的正则项和权重损失函数,网络自动鉴别出不重要的通道。
(3)
其中,(x,y)是训练输入和目标,W是网络中可训练参数,等号右边第1项是网络的训练损失函数,g(*)是在γ上的惩罚项,定义g(s)=|s|,即L1正则化,λ是2项的平衡因子,L是稀疏化训练过程中的损失函数。
训练得到改进的人体检测模型后,进行通道剪枝,剪枝过程为:(1)稀疏化训练:联合优化γ的正则项和权重损失函数,鉴别通道的重要程度;(2)剪枝:根据γ从小到大的排序结果和给定的剪枝率得到γ的全局阈值,将小于或等于该阈值的γ置0,设置剪枝掩码为0(表示剪枝),大于该阈值的γ保持不变,设置剪枝掩码为1(表示不剪枝)。(3)微调:剪枝后网络的检测精度会有一定的下降,需要微调训练使其重新达到理想的效果。重复以上过程,网络在模型大小、运行阶段的内存占用、计算量方面都会更紧凑。模型剪枝前后效果如图5和图6所示。
Figure 5 Schematic diagram before channel pruning图5 通道剪枝前示意图
Figure 6 Schematic diagram after channel pruning图6 通道剪枝后示意图
5 实验验证
5.1 数据集
本文实验中训练用到的数据集为Pascal VOC目标检测数据集,包含VOC2007和VOC2012,共有20种类别的标签信息。通过编程只保留person类别的标签信息,并将得到的数据按7∶2∶1分为训练集、验证集和测试集,图像数量如表1所示。
Table 1 Number of images in the dataset
5.2 生成锚框
YOLOv3算法中的锚框是聚类VOC的20种目标得到的,不适合本文实验中的单个person类别。本文输入图像大小为416×416,使用K-means聚类算法聚类训练集标签信息中的边界框,迭代80次之后,锚框与真实框交并比达到72.56%,得到9个锚框,如表2所示。
Table 2 Anchor frame size
5.3 模型搭建与训练
本文实验包含3个训练过程:改进的YOLOv3人体检测模型训练、改进的YOLOv3人体检测模型的稀疏化训练和剪枝后模型的微调训练。实验平台软硬件配置如表3所示。
Table 3 Software and hardware configuration of the experimental platform
本文在YOLOv3算法的特征提取网络中引入密集连接与多分支的组合结构,在检测模块中引入多分支结构。训练改进的YOLOv3人体检测模型时学习率初始为0.001,第70轮时衰减到初始的1/10,共迭代训练140轮。权值衰减系数为0.000 5,动量系数为0.9,批大小为64。为了增强网络的泛化性,在网络训练时通过旋转角度、调整饱和度、调整曝光量和调整色调来生成更多的训练样本。改进的YOLOv3人体检测模型训练过程中损失函数收敛曲线如图7所示。
Figure 7 Train_loss curve图7 训练损失曲线
5.4 实验结果与分析
YOLOv3人体检测模型、改进的YOLOv3人体检测模型、压缩后的人体检测模型在部分测试集和本文自行采集的人体图像上的检测效果分别如图8和图9所示。
Figure 8 Human body detection effect diagram of part of the test sets图8 部分测试集上的人体检测效果图
Figure 9 Human body detection effect on images collected by ourselves图9 自行采集的图像上的人体检测效果图
从图8可以看出,改进的YOLOv3人体检测模型比YOLOv3人体检测模型的人体检测效果好,压缩后的人体检测模型相比改进的YOLOv3人体检测模型的人体检测效果略有下降,但比YOLOv3人体检测模型的检测效果好很多。图9是压缩后的人体检测模型在自行采集的图像上的人体检测效果图,可以看出仍具有很好的检测效果。
压缩后的人体检测模型对小尺度人体的检测效果如图10所示,图10a中检测到2个人体目标,大目标与小目标的高度之比小于1/10,图10b中检测到4个人体目标,其中最大的人体目标和最小的人体目标的高度之比小于1/10,因此压缩后的人体检测模型对大的人体目标和小的人体目标都有很好的检测效果。
Figure 10 Effect of small-scale human body detection图10 小尺度人体检测效果图
5.4.1 改进前后的YOLOv3人体检测模型的性能比较
人体检测模型的性能主要包括检测速度、精度、召回率、计算量、参数量和模型体积等方面。
(1)检测速度FPS(Frames PerSecond)。
本文采用的检测速度的评判标准为FPS,是指每秒传输的画面帧数。FPS越大,表示每秒传输的帧数越多,所显示的视频就会越流畅。为了满足人体检测的实时性要求,FPS的值越大越好。
(2)精度mAP(mean Average Precision)。
mAP的定义如式(4)所示,表示h类目标的平均精度APi的均值,本文实验中h为1。
(4)
(3)召回率Recall。
召回率的定义如式(5)所示,表示测试数据集的全部目标中,正确检测出的目标所占的比例。
(5)
其中,TP表示模型检测正确的人体数量,FN表示没有检测到的人体数量。
(4)计算量BFLOPs(Billion FLoat OPerations)。
BFLOPs指十亿次浮点运算,多次卷积等运算所耗费的BFLOPs加起来表示模型的复杂度。
(5)参数量。
模型的参数量是指模型含有多少参数,一个模型的参数量等于模型的每一层参数量的总和,直接决定模型的大小,也影响模型推断时对内存的占用量。
(6)模型体积。
模型的体积由模型的参数量决定,模型体积的大小决定其是否可以在资源有限的嵌入式平台上部署。
改进的YOLOv3人体检测模型的mAP和Recall曲线如图11和图12所示。
Figure 11 mAP curve图11 mAP曲线图
Figure 12 Recall curve图12 Recall曲线图
从模型的检测精度、参数量、计算量、体积大小和检测速度5个方面与改进前的YOLOv3人体检测模型进行比较的结果如表4所示。对比分析,改进的YOLOv3网络模型相比YOLOv3,检测精度提升了6.01%,计算量减少了36.5%,参数量减少了38.7%,模型体积减小了38.46%,检测速度是YOLOv3的1.82倍。可以看出,改进的YOLOv3网络性能比YOLOv3的好很多。
Table 4 Performance comparison between YOLOv3 and improved YOLOv3
5.4.2 改进的YOLOv3人体检测模型压缩前后的性能比较
改进YOLOv3人体检测模型压缩前的BN分布如图13所示,γ值比较大。对其稀疏化训练285轮,初始稀疏率为0.000 1,到145轮后稀疏率为0.001,稀疏化速度加快,γ值趋近于0,精度先下降再回升到0.7左右。稀疏化训练后的BN分布和mAP曲线如图14和图15所示。
Figure 13 BN distribution before sparse training图13 稀疏化训练前BN分布图
Figure 14 BN distribution after sparse training图14 稀疏化训练后BN分布图
Figure 15 mAP curve in sparsity training图15 稀疏化训练mAP曲线
剪枝后模型的精度为69.99%,精度有所下降,因此需要进行微调,初始学习率设为0.001,训练到70轮和100轮时学习率依次衰减到初始的1/10,共迭代训练140轮,压缩后模型的mAP曲线如图16所示。
Figure 16 mAP curve of the compressed model图16 压缩后模型的mAP曲线
模型压缩主要体现在对模型中不重要的参数进行剪枝,减少模型的参数量和计算量,压缩模型的体积。为了验证压缩后的人体检测模型的性能,从模型检测精度、参数量、计算量、体积大小和检测速度5个方面对改进的YOLOv3人体检测模型和压缩后的人体检测模型的性能进行比较的结果如表5所示。对比分析,压缩后的人体检测模型的检测精度比改进的YOLOv3人体检测模型下降了3.16%,而计算量减少了86.69%,参数量减少了96.71%,模型体积减小了96.69%,仅有4.77 MB,检测速度是改进的YOLOv3人体检测模型的1.71倍。可以看出,压缩后的人体检测模型在精度损失很小的情况下可以大幅减小模型参数量、计算量和体积,从而可以用于嵌入式部署。
Table 5 Performance comparison between the improved YOLOv3 and the compressed model
5.4.3 压缩后的人体检测模型和其他模型的性能比较
为了验证压缩后的人体检测模型的性能,从模型检测精度、参数量、计算量、体积大小和检测速度5个方面对SSD、YOLOv2-tiny、YOLOv3-tiny、YOLOv3-spp和压缩后的人体检测模型的性能进行比较,结果如表6所示。对比分析,压缩后的人体检测模型相比SSD,检测精度提升了2.94%,计算量减少了84.91%,参数量减少了95.28%,模型体积减小了95.24%,检测速度为SSD的1.55倍。压缩后的人体检测模型相比YOLOv2-tiny和YOLOv3-tiny,检测精度分别提升了4.97%和4.75%,计算量分别减少了22.41%和1.08%,参数量分别减少了92.14%和85.71%,模型体积分别减小了92.08%和85.59%,检测速度是YOLOv2-tiny的1.13倍,是YOLOv3-tiny的1.34倍。压缩后的人体检测模型相比YOLOv3-spp,检测精度略微下降了2.88%,而计算量减少了91.80%,参数量减少了98.02%,模型体积减小了97.99%,仅有4.77 MB,检测速度为YOLOv3-spp的3.48倍。可以看出,压缩后的人体检测模型在具有较好的检测精度的情况下拥有很小的参数量、计算量和体积,从而可以用于嵌入式部署。
Table 6 Performance comparison between the compressed model and other models
6 结束语
本文提出了一种基于密集连接和多分支结构的改进型YOLOv3人体检测算法,提高模型检测精度的同时也减少了参数量和计算量。通过通道剪枝压缩模型进一步减小参数量、计算量和模型体积,达到了在嵌入式上部署的要求。在Pascal VOC数据集上的实验表明,改进及压缩后的人体检测模型的检测精度得到了提高,参数量、计算量和模型体积得到大幅度减小,可以在嵌入式平台上实现。