点击我爱计算机视觉标星,更快获取CVML新技术
尽管目标检测新算法层出不穷,但在实际工程项目中不少52CV群友还是念着YOLOv3的好。将其部署到边缘设备等时,模型剪枝是非常有必要的,毕竟有原始模型有239M的参数,剪枝后往往也能提速不少。
比如之前52CV曾经分享过:
YOLOv3模型剪枝,瘦身80%,提速100%,精度基本不变
上述剪枝是减少模型通道数,而今天向大家介绍的工程可以实现通道和层的双向剪枝,在oxford hand 数据集hand检测问题中,作者实验中可以实现精度下降很小而参数减少 98%,砍掉 48 个层,提速 2 倍!(不同问题参数减少和提速比例不同,在作者另一个私人项目中,实现了提速 3 倍。)
作者已将其开源,仅需要几行命令就可以在自己数据集中实现更加灵活和搜索空间更大的剪枝。
工程地址:
https://github.com/tanluren/yolov3-channel-and-layer-pruning
欢迎大家给大佬加Star!
以下内容为原作者52CV群友漂的投稿。
本项目以ultralytics/yolov3(https://github.com/ultralytics/yolov3)为基础实现,根据论文Learning Efficient Convolutional Networks Through Network Slimming (ICCV 2017)原理基于bn层Gmma系数进行通道剪枝,下面引用了几种不同的通道剪枝策略,并对原策略进行了改进,提高了剪枝率和精度;在这些工作基础上,又衍生出了层剪枝,本身通道剪枝已经大大减小了模型参数和计算量,降低了模型对资源的占用,而层剪枝可以进一步减小了计算量,并大大提高了模型推理速度;通过层剪枝和通道剪枝结合,可以压缩模型的深度和宽度,某种意义上实现了针对不同数据集的小模型搜索。
项目的基本工作流程是,使用yolov3训练自己数据集,达到理想精度后进行稀疏训练,稀疏训练是重中之重,对需要剪枝的层对应的bn gamma系数进行大幅压缩,理想的压缩情况如下图,然后就可以对不重要的通道或者层进行剪枝,剪枝后可以对模型进行微调恢复精度,后续会写篇博客记录一些实验过程及调参经验,在此感谢行云大佬(https://github.com/zbyuan)的讨论和合作!