神经网络部署手机端的优势:
1. 手机端应用的广泛使用;2. 手机端运行能够更好的保证隐私; 3. 更少的网络带宽;4. 能够根据用户操作进行模型实时处理;
神经网络部署手机端的难点:
1. 模型体积过大; 2. 能量消耗过大,手机电量限制;
算法实施步骤:
1. 模型剪枝;2. 训练量化和权值共享; 3. 哈夫曼编码进行压缩
1. 模型剪枝
神经网络模型一般上采用压缩矩阵进行存储,我们将一些权值低于阈值的边删除掉。
矩阵行压缩存储
Matrix = { int col_ind[num], int row_ind[m+1], float val[num] };
num 代表非零元素的个数, m代表行数,
col_ind[]数组存储所有非零元素的列索引,val[]数组存储所有非零元素, row_ind[]数组存储每行第一个非零元素在val数组中的次序,该数组最后一个数为num+1,这样一个稀疏矩阵仅用2*num + m + 1个数字就可以表示出来。
还可以采用如上图所示的采用记录索引差的方式记录稀疏矩阵,原理是
Matrix = { float val[num + k], diff[num + k], row_ind[m+1] };
num代表非零个数,k 代表当差距超过编码上限时,采用零填充进来, m代表行数
val[]记录非零数字和填充零, diff[]存放索引的差(除了第一个数字以外),row_ind[]代表每行第一个非零数字在val中的下标号,最后一个数字仍然是num+1,这样总的数字和为 2*(num+k) + m + 1。
这样压缩的好处是,可以将原存储列索引的数组缩小,达到减小存储大小的目的(如果数组很大的话,效果就会很明显)。