为什么需要代码优化
- 提升体验,扩展玩法

- 减少限制跟要求,降低门槛 ,覆盖更多群体
在谷歌内部,打造AI应用有两条思路,一是让更多人受惠,二是尽可能减少限制和要求

- 场景限制必须进行优化
个人隐私越来越被重视,以往的云端处理方案存在局限性 一些场景要求算法要有极低的延时,如实时通信项目
传统代码优化

rnnoise优化举例
- 函数近似和查表优化sigmoid函数计算


| |
最粗暴的函数近似方法:

```
atan(pi*x/2)*2/pi 24.1 ns
atan(x) 23.0 ns
1/(1+exp(-x)) 20.4 ns
1/sqrt(1+x^2) 13.4 ns
erf(sqrt(pi)*x/2) 6.7 ns
tanh(x) 5.5 ns
x/(1+|x|) 5.5 ns
```- 减少程序跳转优化RNN计算
CPU多级Cache机制
深度学习移动端优化

网络剪枝
- 网络的参数都存在冗余的,所以可以进行网络剪枝

- 网络剪枝的流程
权值的重要性:计算L1或者L2
神经元的重要性:不为零的次数
- 剪权值VS剪神经元

剪权值 剪神经元

剪权值:模型不规则,不便于实现和加速
剪神经元:模型规则,便于实现和加速
精简模型设计
- 标准CNN

- 深度分离卷积Depthwise Separable Convolution 【参见MobileNet】


- 参数比较

四、深度学习移动端部署工具
与PC端深度学习环境被大厂垄断不同,移动端的部署工具可以说是百家争鸣,很多深度学习的厂商都会推出自家的推理加速工具。
4.1 硬件厂商
| 公司 | 硬件架构 | 开发工具 |
|---|---|---|
| 海思 | NPU | HiAI Foundation |
| 高通 | CPU/GPU/DSP | Snapdragon Neural Processing Engine SDK |
| Apple | CPU/GPU/NeualEngine | CoreML |
| ARM | CPU/GPU | ARM NN SDK |
| MediaTek | CPU/GPU/APU | NeuroPilot SDK |
4.2 软件厂商
| 工具 | 公司 | 系统支持情况 | 特点 |
|---|---|---|---|
| TensorFlow Lite | Android/IOS | Android结合比较密,支持GPU加速 | |
| CoreML | Apple | IOS | 软件硬件结合紧密,更新快 |
| Caffe2 | Android/IOS | ||
| NCNN | Tencent | Android/IOS | 支持大部分CNN网络,已经落地的应用多 |
| MACE | 小米 | Android | |
| MNN | 阿里 | Android/IOS |
- 利用Caffe2进行手写数字识别在Android端的部署