Eric-mingjie / network-slimming

Network Slimming (Pytorch) (ICCV 2017)
MIT License
907 stars 214 forks source link

关于channel select的mask剪枝方式 #69

Open fire717 opened 3 years ago

fire717 commented 3 years ago

您好,感谢分享,有点疑惑请教下。

据我所知有两种剪枝实现:

  1. 直接删掉不要的channel,重构模型,比如某层原始通道为64,裁剪一些后通道数可能变为32,那么保存的模型通道也降低了,这样模型占用空间大小变小,推理速度也会变快;
  2. 采用mask的方式,对裁剪的模型不删除,只是对应mask的位置设为0,这样计算的时候也相当于裁剪了,但是这样没有裁剪,保存模型的大小几乎一样,推理速度也几乎一样。

如果我理解有误,欢迎指出,如果没错,那么有两个问题烦请指教: 1.本项目残差连接的剪枝方案如您所说使用了mask,就是我上面说的第二点的方式吗? 2.如果是,mask剪枝的意义在哪呢?我们剪枝不就是为了减少体积和提速吗?

参考您的一个之前的回复: #https://github.com/Eric-mingjie/network-slimming/issues/30

mask模型的意义就在于没有实质的剪枝发生,模型的大小仍然保持一样。只是inference的时候mask模型等价于prune后的模型

Eric-mingjie commented 3 years ago

1.是的

  1. 意义在resnet 和densenet这种复杂的结构里,有时候可能某一层的channel都会被剪枝,但是网络仍然可以正常inference,这种情况采用mask的方式实现很简单。
fire717 commented 3 years ago

感谢回复!了解了,所以如果我为了加速,不使用mask,比较简单的方案就是考虑不用残差结构吧