模型压缩的两种方法:
一、设计轻量级的模型(SqueezeNet,MobileNet,ShuffleNet等):不需要压缩。
二、模型结构/内存优化:剪枝、权值量化等
二、模型结构/内存优化
目前的框架主要有:
Deep Compression、XNorNet、Distilling、PocketFlow腾讯、transform_graph(tensorflow)
框架简介:
1、 Deep Compression
a) 权值减枝
b) 权值量化(基于权值聚类,连续分布的权值离散化)
c) 霍夫曼编码(减少平均编码长度大小)
论文地址:http://arxiv.org/pdf/1510.00149v5.pdf
项目地址:https://github.com/songhan/Deep-Compression-AlexNet
评价:Deep Compression的主要设计是针对网络存储尺寸的压缩,但在前向时,如果将存储模型读入展开后,并没有带来更大的速度提升。因此Song H.等人专门针对压缩后的模型设计了一套基于FPGA的硬件前向加速框架EIE
2、 XNorNet
二值网络
3、 Distilling(蒸馏)
其基本思想是通过一个性能好的大网络来教小网络学习,从而使得小网络能够具备跟大网络一样的性能,但蒸馏后的小网络参数规模远远小于原始大网络,从而达到压缩网络的目的。
论文地址:https://arxiv.org/abs/1503.02531
项目地址:https://github.com/NervanaSystems/distiller
4、 golw(facebook)(编译深度学习模型)
项目地址:https://github.com/openai/glow
5、 PocketFlow(腾讯)
说明文档:https://pocketflow.github.io/
项目地址:https://github.com/Tencent/PocketFlow
PocketFlow包含许多模型压缩方法(通道减枝、权值稀疏化、权重量化、蒸馏、超参数优化)
暂不支持对象检测类型的模型压缩:https://github.com/Tencent/PocketFlow/issues/44
6、transform_graph
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms