Torch-Pruning
Torch-Pruning copied to clipboard
关于全局剪枝
您好, VainF:
对于您的作品感觉很赞赏! 终于有个可以将大多数模型剪枝简化的框架了! 真的非常感谢!
我使用了您的框架与我自己实现的对于YOLOv5n的剪枝, 但是发现结果差距很大。
试验了对YOLOv5n使用基于BN层梯度加L1正则的全局剪枝方法, 一种是手动实现版本(非torch_pruning版本), 一种是基于torch_pruning实现版本。
对比发现, 手动实现版本剪枝60%后在验证集上仍然可以达到PR值均在0.9以上, 但是基于torch_pruning实现的版本, 在剪枝60%后并finetune恢复训练后, 精度几乎为0。通过观察, 在剪枝30%以上后, 精度就会大幅下降且恢复不出来。
疑问: 该框架是不是没有将裁剪前对应通道的权重重新赋值给裁剪后的网络?
通过使用netron观察裁剪后的两个onnx网络, 发现对于两个网络的同一层, 裁剪后的通道数不同。
为什么会出现这样的情况? 使用的标准是相同的, 裁剪出来的结果是不同的。
另外, 在剪枝之前, 我已进行稀疏训练
关键部分代码如下:
pruner的构建过程:
稀疏训练增加的代码(train.py中):
剪枝增加的代码(train.py中):