神经网络模型压缩优化方法:
1.优化压缩模型的三个方向:
1)设计更为精细的网络设计,比如:简化卷积层和全连接层的形式
2)对模型进行裁剪。在结构复杂的神经网络中,往往存在着大量的参数冗余,因此可以寻找一个适当的评定方法进行剪枝优化
3)**数据进行量化或者二值化。**为了保持原有模型中的数据精度,一般常见的网络中,都会以32bit的浮点类型保存模型权重。这种保存方式,增加了数据存储的大小和重载模型的计算复杂度。对于以上的情况,可以将数据进行量化或者二值化。通过量化或者二值化之后,可以对于存储空间进行压缩。
此外,还可以对卷积核进行稀疏化,将卷积核一部分裁剪为0,从而减少再次加载模型的计算量。
**注意:**网络蒸馏不需要对大网络的参数初始化,其他方法需要对大网络进行参数的初始化。
1.网络裁剪
裁剪本质:
难点:
裁剪类型:
- filter pruning
- kernel/group pruning
- 稀疏矩阵
参数重要性:
旷世的论文:
LASSO regression
ResNet 迭代
实验(分类和回归)
通道剪枝:
裁剪浅层的网络结构。
2.低秩估计 Low Rank Approximation
- 矩阵分解 SVD PCA
- 张量分解 CP、Tucker
LRA加速率
Trucker分解:
步骤:
3.参数量化
聚类编码
方法:k-means
乘积量化
4.模型蒸馏 Hinton
训练好的大网络
适用条件:
- 大网络模型准确率一定比小网络好
- 小网络容量要适合任务需求
- 对于以特征图作指导的网络,需要分析特征图中的冗余信息或者错误信息。
设计技巧:
-
小网络最好与大网络结构相近
-
网络的初始化
Distilling就是将复杂网络中的有用信息提取出来迁移到一个更小的网络上,这样学习来的小网络可以具备和大的复杂网络想接近的性能效果,并且也大大的节省了计算资源。这个复杂的网络可以看成一个教师,而小的网络则可以看成是一个学生。学生网络的训练含有两个目标:一个是hard target,即原始的目标函数,为小模型的类别概率输出与label真值的交叉熵;另一个为soft target,为小模型的类别概率输出与大模型的类别概率输出的交叉熵,在soft target中,概率输出的公式调整如下,这样当T值很大时,可以产生一个类别概率分布较缓和的输出:
这里写图片描述
tiny-yolo压缩与加速
基于 Tiny-yolo 的网络压缩与硬件加速方法
Tiny-yolo的网络模型占用63. 5MB的存储空间,而Yolo的模型更是达到了258MB,不利于在存储空间有限的嵌入式端存储.同时,神经网络包含了大量的卷积运算,消耗时间多.针对这两点问题,文中采用网络裁剪的方法对网络进行压缩,达到减小模型体积的目的:通过数据量化操作,对权重值进行量化,进一步减少模型所占内存,以及运行消耗的位宽;最后在嵌入式端,采用硬件加速。FPGA并行加速,提高网络运算速度.