midasklr / yolov5prune

544 stars 113 forks source link

更改backbone后如何全局剪枝 #64

Open lrh454830526 opened 2 years ago

lrh454830526 commented 2 years ago

大佬你好!看了您的代码受益匪浅,这里有两个问题想请教下

  1. 如何实现对网络不同的层采用不同的剪枝率 或者说代码支持这样的功能嘛,比如同第一层设置剪枝率60% 第二层80%...
  2. 如果我要更换yolov5网络的backbone,比如换成ghostnet,mobilenetv3 ,之后对整个网络模型全局进行剪枝 包括backbone和head部分,需要做那些工作
midasklr commented 2 years ago
  1. 目前是统计整个网络参加剪枝的bn层weights的norm,然后sort后选取阈值,如果要分层设置剪枝率,可以分层统计该层bn层的weights然后选阈值。不过可以先分析不同层的bn层weights分布,并不是所有层都是适合剪的,一般深层的channel多应该更容易裁剪。
  2. 替换backbone的话,可以参考论文 Learning Efficient Convolutional Networks Through Network Slimming 提供的思路,可以具体研究下,稀疏训练较为简单,就是: https://github.com/midasklr/yolov5prune/blob/45254c275433e916857e36a33ff43bbfa093dfed/train_sparsity.py#L325-L338

主要是剪纸的时候处理稍微复杂,注意前后层的关系。

hhnxAI commented 2 years ago

我也是改了主干网络 然后进行剪枝,稀疏训练简单 但是剪枝是您的代码 看的不是很懂 能否加点注释 特别是剪枝mask的内容。谢谢

AustinzzZ-1997 commented 1 year ago

我也改了主干网络后剪枝,请问您成功了吗

Doris-miao commented 11 months ago

请问你们成功了吗?求指教