剪枝分软剪枝和硬剪枝,软剪枝的概念来源于Soft Filter Pruning (SFP)这篇论文,下图阐述了软剪枝(SFP)和硬剪枝(Hard Filter Pruning,HFP)的区别,它们的不同点是HFP在每个epoch后会将卷积核直接剪掉,被剪掉的卷积核在下一个epoch中不会再出现,而SFP在每个epoch后,会将需要剪枝的卷积核仍然保留,只是将其参数置为0,依旧参与下一轮的迭代更新,在所有的epoch循环结束后再进行权重修剪。
剪枝之后,模型变小了4m多,但是cpu速度640*640 150ms。
https://github.com/ZJU-lishuang/yolov5_prune
slim_prune_yolov5s.py 剪枝:
def prune_and_eval(model, CBL_idx, CBLidx2mask):
model_copy = deepcopy(model)
for idx in CBL_idx:
# bn_module = model_copy.module_list[idx