本系列博客介绍yolov5剪枝方法
神经网络一般都存在过参数化
(over-parameterized)的问题,存在冗余的神经元或权重,所以可以进行剪枝。
其实对网络可以针对不同的颗粒度
进行剪枝,可以进行权重、神经元级别的剪枝,也可以基于channel, shape,filter以及layer级别的剪枝。
如果对element-wise级别的剪枝会导致非结构化的网络剪枝,所以我们研究的重点是结构化的剪枝方法。
Network Sliming
就是一种结构化的网络剪枝方法,论文发表于ICCV 2017, 论文的题目是:Learning Efficient Convolutional Networks through Network Slimming,它是一种实用高效的通道级别的结构化剪枝方法。
scale factor
就比较小,这种通道就会认为不重要的通道,就会被剪掉。剪枝以后,就能得到更加精简的网络模型。微调finetune
以达到与正常训练网络相当的精度。上图可以看出,正常训练如果我们不施加L1正则化训练的话,训练结束后的BN层的scale factor(gamma)分布近似正态分布,无法进行剪枝。
采用稀疏化训练以后,随着epoch的增加,越来越多的gamma逼近0,所以稀疏训练是非常关键的,在此基础上我们可以裁剪比较小的gamma值所对应的通道。
论文中作者证明了剪枝后的网络性能具有良好的表现,作者尝试了VggNet,DenseNet,ResNet,可以看到对ResNet进行了40%,60%的剪枝,它的Test error
反而有所降低。它的Parameters大大的减少,它的运算量Flops也有所减少。
这里对比了不同网络剪枝后,网络的参数量和Flops降低的比率,所以效果还是比较显著的
本项目利用yolov5对足球数据集进行训练,并进行Network Slimming剪枝,本系列博客主要包括以下内容。
具体内容包括:原理篇、实战篇、代码讲解篇,在原理篇将介绍网络剪枝的基础知识及Network Slimming的剪枝原理,在项目实战中包括windows和ubantu系统中项目代码的讲解。在代码讲解篇将说明针对网络剪枝代码的修改以及具体哪些代码进行了修改。
在项目实战中,我们对yolov5s网络进行了剪枝,我们会得到正常训练模型的性能,包括precision,recall,mAP
以及推理时间。然后我们再进行稀疏化训练得到它的性能指标,然后再剪枝后对模型进行微调,可以发现他的precision,recall,mAP和正常训练模型效果近似
。剪枝后yolov5s
模型的大小从14.46降低到6.3M左右