基本原理
对以训练好的模型进行裁剪的方法,是目前模型压缩中使用最多的方法,通常是寻找一种有效的评判手段,来判断参数的重要性,将不重要的connection或者filter进行裁剪来减少模型的冗余
如何找到一个有效的对参数重要性的评价手段,在这个方法中就尤为重要
样例
yolov3
稀疏训练->剪枝->fine tune训练 必要的话,可以对这三个环节进行多次迭代
- 稀疏训练
深度神经网络的稠密连接引入稀疏性 对需要剪枝的层对应的bn gamma系数进行大幅压缩
- 剪枝
对不重要的通道或者层进行剪枝
-fine turn
对模型进行微调恢复精度 保持权重文件中参数的平衡
详细解释
1. 对每个conv channel通道做scale
2. 然后对scale factor做lasso回归(L1 Regularization)
看看最终哪些channel的scale facctor很小,接近于0,如果某些channel的scale factor很小,那说明它们对模型output没啥贡献,可以考虑把它们从网络模型去除掉
注意,是把网络模型中整条通道上参数(从输入到输出)都去除掉。
3. 一些不必要的卷积核及其参数删除掉
删除的原则就是设置一阈值,当小于某一个阈值的时候踢出该卷积核和对应的参数