网络剪枝
整理网络剪枝(network pruning)相关的文章、论文和实现
概念
- 网络剪枝(
network pruning):通过裁剪神经元或者滤波器的方式来实现加速卷积神经网络运行速度以及减少网络占用开销的目的; - 典型的剪枝算法可分为三阶段流水线,即训练(大模型)、剪枝和微调(小模型);
- 剪枝算法的本质是网络架构搜索(人工版本
NAS(Neural Architecture Search)),而不是继承大模型的重要权重。
文章
- 概述
- 讨论
- 博客
- 自定义:相关论文、实现算法解析
论文
2020- ResRep: Lossless CNN Pruning via Decoupling Remembering and Forgetting
- 丁霄汉大神提出的通道剪枝算法,
Rep宇宙(AcNet/ResRep/RepVGG/Diverse Branch Block/。。。)的重要一员。将滤波器重置为记忆部分和遗忘部分,在前者上使用常规SGD训练,而在后者使用带有惩罚梯度的新的更新规则。完成训练后,舍弃遗忘部分滤波器即可完成剪枝操作。
2018- Rethinking the Value of Network Pruning
- 一篇类综述性的文章,通过对当时最先进(
2018年及之前)的剪枝论文进行实验、观察和总结,发现剪枝算法的本质是网络架构搜索,而不是继承大模型的重要权重
2017- Learning Efficient Convolutional Networks through Network Slimming
- 针对
BN层缩放因子进行网络剪枝,思路简单清晰,能够有效的减少模型大小和运行时内存占用,同时在常规硬件下即可提高运算速度
2016- Learning Structured Sparsity in Deep Neural Networks
- 针对模型的滤波器/通道/滤波器形状/层进行结构化稀疏学习(
Structured Sparsity Learning (SSL))。在常规计算硬件条件下就可以实现运算加速
2015- Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding
- 在上一篇论文的基础上增加了权重量化训练以及霍夫曼编码压缩算法,进一步减少了模型存储大小,同时提高了运算速度(同样的,依赖于特定的稀疏加速库)
- Learning both Weights and Connections for Efficient Neural Networks
- 早期网络剪枝算法,确立了
3阶段(训练-剪枝-微调)操作流程,其针对神经元权重的剪枝操作能够大幅减少模型大小,同时依赖特定的稀疏运算库才能提高运算速度
实现
- 实现
- DingXiaoH/ResRep
2020年论文Lossless CNN Channel Pruning via Decoupling Remembering and Forgetting的官方实现,基于Pytorch训练框架- apxlwl/MobileNet-v2-pruning
2019年发布的网络剪枝仓库,尝试了不少剪枝算法(L1-Norm/Slimming/AutoSlim)- foolwood/pytorch-slimming
2017年发布的网络剪枝仓库,复现了论文Learning Efficient Convolutional Networks through Network Slimming- Eric-mingjie/network-slimming
2017年论文Learning Efficient Convolutional Networks through Network Slimming的官方实现,基于Pytorch训练框架- wenwei202/caffe
2016年论文Learning Structured Sparsity in Deep Neural Networks的官方实现,基于CAFFE训练框架
- 自定义
- ZJCV/NetworkSlimming
- 复现了论文
Learning Efficient Convolutional Networks through Network Slimming - ZJCV/SSL
- 复现了论文
Learning Structured Sparsity in Deep Neural Networks