tanluren / yolov3-channel-and-layer-pruning

yolov3 yolov4 channel and layer pruning, Knowledge Distillation 层剪枝,通道剪枝,知识蒸馏
Apache License 2.0
1.5k stars 446 forks source link

layer-keep #1

Open MiniBullLab opened 4 years ago

MiniBullLab commented 4 years ago

channel keep percent per layer 0.01这个参数太小了把

tanluren commented 4 years ago

看稀疏情况的,有时0.01比0.1剪枝后的精度更高,它可能对应了更合理的结构,去掉了冗余的甚至是不利于精度的权重,可以下载我分享的cfg和权重剪剪试下。你也可以观察下剪枝后的cfg,哪些位置被剪的多,哪些剪得少。

MiniBullLab commented 4 years ago

在SlimYOLOv3中提到“在本项目中还对激活偏移值添加了处理,降低剪枝时的精度损失”,这个怎么理解

tanluren commented 4 years ago

稀疏训练中只是对bn层的gamma进行L1正则化,达到压缩效果,但是beta没有进行压缩,它经过激活函数后会输入到下一层卷积,并且对下一层卷积的输出有影响,如果剪掉了某个通道,就会导致由beta引起的激活偏移值,并且参与剪枝的层和通道越多,产生的偏差越大,直接影响了模型的输出,所以需要将偏移值传递到下一层的bn running mean或者conv bias中。这个问题在shortcut中更加复杂,需要进行连续的传递。