本文针对yolov5n的模型进行结构化剪枝、微调,在文章最后会放上程序链接。
剪枝方法:基于BN层系数gamma剪枝。
前言:yolov5n模型是非常轻量级的网络模型,但针对嵌入式端依然比较大;此时,可以通过添加L1正则来约束BN层系数,使得系数稀疏化,通过稀疏训练后,裁剪掉稀疏很小的层,对应激活也很小,所以对后面的影响非常小,反复迭代这个过程,可以获得很compact的模型。
原理:
在一个卷积-BN-激活模块中,BN层可以实现通道的缩放。如下:
BN层的具体操作有两部分:
在归一化后会进行线性变换,那么当系数gamma很小时候,对应的激活(Zout)会相应很小。这些响应很小的输出可以裁剪掉,这样就实现了bn层的通道剪枝。
通过在loss函数中添加gamma的L1正则约束,可以实现gamma的稀疏化。
上面损失函数L右边第一项是原始的损失函数,第二项是约束,其中g(s) = |s|,λ是正则系数,根据数据集调整。
实际训练的时候,就
yolov5-6.0的稀疏化训练、结构化剪枝、微调
于 2023-04-22 16:15:14 首次发布