https://github.com/Lam1360/YOLOv3-model-pruning
YOLOv3模型剪枝,瘦身80%,提速100%,精度基本不变
以 eriklindernoren/PyTorch-YOLOv3(https://github.com/eriklindernoren/PyTorch-YOLOv3)为YOLOv3的Pytorch实现
参考论文 Learning Efficient Convolutional Networks Through Network Slimming (ICCV 2017)
【论文解析这个链接】Learning Efficient Convolutional Networks through Network Slimming
进行改进实现的 channel pruning算法
人手检测数据集 oxford hand 上做人手检测
以下只是算法的大概步骤,具体实现过程中还要做 s 参数的尝试或者需要进行迭代式剪枝等。
Results
- | 参数数量 | 模型体积 | Flops | 前向推断耗时(2070 TI) | mAP |
---|---|---|---|---|---|
Baseline (416) | 61.5M | 246.4MB | 32.8B | 15.0 ms | 0.7692 |
Prune (416) | 10.9M | 43.6MB | 9.6B | 7.7 ms | 0.7722 |
Finetune (416) | 同上 | 同上 | 同上 | 同上 | 0.7750 |
https://github.com/coldlarry/YOLOv3-complete-pruning
YOLOv3剪枝再升级!
剪枝方式 | 优点 | 缺点 |
---|---|---|
正常剪枝 | 不对shortcut剪枝,拥有可观且稳定的压缩率,无需微调。 | 压缩率达不到极致。 |
极限剪枝 | 极高的压缩率。 | 需要微调。 |
规整剪枝 | 专为硬件部署设计,剪枝后filter个数均为8的倍数,无需微调。 | 为规整牺牲了部分压缩率。 |
Tiny剪枝 | 稳定的压缩率。 | 由于Tiny本来已很小,压缩率中规中矩。 |
采用的YOLO-v3实现较为准确,mAP相对较高
提供对YOLOv3及Tiny的多种剪枝版本,以适应不同的需求。
剪枝后保存为.weights格式,可在任何框架下继续训练、推理,或以图像视频展示。
目前支持情况
功能 | 单卡 | 多卡 |
---|---|---|
正常训练 | √ | √ |
稀疏化 | √ | √ |
正常剪枝 | √ | √ |
规整剪枝 | √ | √ |
极限剪枝(shortcut) | √ | √ |
Tiny剪枝 | √ | √ |
https://github.com/tanluren/yolov3-channel-and-layer-pruning
YOLOv3通道+层剪枝,参数压缩98%,砍掉48个层,提速2倍!
参考论文 Learning Efficient Convolutional Networks Through Network Slimming (ICCV 2017) 原理基于bn层Gmma系数进行通道剪枝
引用了几种不同的通道剪枝策略,并对原策略进行了改进,提高了剪枝率和精度
在这些工作基础上,又衍生出了层剪枝,本身通道剪枝已经大大减小了模型参数和计算量,降低了模型对资源的占用,而层剪枝可以进一步减小了计算量,并大大提高了模型推理速度
通过层剪枝和通道剪枝结合,可以压缩模型的深度和宽度,某种意义上实现了针对不同数据集的小模型搜索。
使用yolov3训练自己数据集,达到理想精度
进行稀疏训练
稀疏训练是重中之重,对需要剪枝的层对应的bn gamma系数进行大幅压缩,理想的压缩情况如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NSZLYZxp-1587285735437)(https://leanote.com/api/file/getImage?fileId=5de5b52aab644153da001135)]
然后就可以对不重要的通道或者层进行剪枝
剪枝后可以对模型进行微调恢复精度
本质是 A\C\F 得一样
策略一:
只剪 B E
下一个CBL有bn的就把偏移值传给bn的running mean,没有bn的就传给conv的bias。这个偏移值是由上层的beta激活输出和下层的卷积核weight做矩阵乘法得到,对2,3维度求和是因为bn本就是spatial层面的操作,求和后conv weight变成二阶矩阵,和传入的activation做矩阵乘法得到最终的和下层outchannel对应的一阶矩阵 偏移值
https://arxiv.org/abs/1907.11093
https://github.com/PengyiZhang/SlimYOLOv3