常用深度学习网络压缩方式

常用深度学习网络压缩方式

网络端加速的具体方式

网络加速:
**elementwise剪枝:**对于weights < threshold的点,不进行gemm运算,一次逻辑判断用的计算资源肯定要比一次运算要少
kernel 剪枝:kernel剪枝最重要的就是如何判断这个kernel重要还是不重要,一般来说就是给每个kernel加一个mask,同时训练过程中,更改mask的值为0或者1
论文参考: Accelerating Convolutional Networks via Global & Dynamic Filter Pruning
**L1正则化:**正则化其实最初是为了减少模型过拟合的一种手段,主要结果同样是某些点的weights变为0,所以L1正则化时候同样要进行逻辑判断。但是L1正则化计算量主要在训练阶段,所以inference阶段相当于只享用成果
低秩分解:低秩分解最明显的例子的话就是mobilenet系列的depthwise conv,具体低秩分解的例子可以先搜一下学习下,大致的思想就是把两个矩阵相乘,变为三个矩阵,然后相加
**winograd:**这个一般用在3*3卷积核或以上,不然的话,winograd的计算量其实比不加要高的,所以一般在实际使用的时候都要首先判断是否符合使用winograd的条件
**量化:**这个是网络加速的大头,一般情况下来说,量化的加速效果会远超其他加速方式。你可以先把其他的看一下,量化我们单独视频给你讲解,从代码上
多线程:严格意义上来说,多线程的话不太属于算法加速层面了,更像硬件加速层面。主题思想就是把for循环中每一次计算分布到更多线程中一起计算。所以这样就要求for循环两次计算间互不相关。可以搜一下OPENMP,一般都用这个。
我这边做这方面比较多,如果有什么小项目可以找我,帮你的模型提高检测速度。

相关文章: