【杨延展】深度学习在手机端的应用

公孙湛蓝

2017/12/31 发布于 技术 分类

2017年,droidcon 第2次来到中国,并将于2017年11月在北京盛大开幕。参会人群包括业界领袖、技术大咖、技术开发者、大众创业者及领域从业者。大会将邀请来自Google、微软、Facebook、Ebay、Intel、Telenav、阿里巴巴、腾讯、小米、乐视、联想等国内外安卓技术与应用领域的大咖,沿袭历年国际大会特色,聚焦行业最前沿技术,碰撞切磋技术火花。

文字内容
1. 深度学习在移动端的应用 杨延展 百度多模交互搜索部 高级工程师
2. 目录 深度学习简介 移动端落地方案 移动端局限及解决技巧
3. 目录 深度学习简介 移动端落地方案 移动端局限及解决技巧
4. 深度学习 - 目标:寻找最佳函数 f ) = 你好 f ) = 猫 f  嗨! ) = 你好
5. 深度学习 - 结构:基于层与层的连接 卷积 池化 归一化 以GoogLeNet v1丼例
6. 深度学习 - 层(丼例):全连接层 1 1 4 0.98 2 0.86 3 0.62 -2 1 -1 0 -1 -2 -1 -2 0.12 -2 0.11 -1 0.83 -1 1 -1 4 0 0 2 1 0.62 -1 0.83 猫
7. 深度学习 - 预测过程 Input x1 x2 f Output 向量 概率 输出 Y 0 0.62 0.05 iiss 01 Y 2 0.83 0.8 iiss 22 …… …… …… 16 x 16 = 256 Ink → 1 No ink → 0 x 256 Y 9 ... 0.1 Is 9 ) = 2 The image is “2”
8. 深度学习 - 训练过程 NN y1 1 f 1 NN y2 2 2 NN y3 3 3 NN yR ?????? ?????? …… …… …… …… ) = 2
9. 目录 深度学习简介 移动端落地方案 移动端局限及解决技巧
10. 落地方案 - 可能的服务端及移劢端分工 • 服务端训练 + 服务端识别 • 移劢端训练 + 移劢端识别 • 服务端训练 + 移劢端识别
11. 落地方案 - 移劢端只适合识别过程 PC Server 训练模型文件 Model File 移动端加载模型进行识别
12. 落地方案 - Android硬件现状 • CPU :高通 & (三星、联发科、华 为) • GPU :Mali GPU • CPU门槛1:骁龙600以上 • GPU门槛2:Mali T820 4核以上 • • CPU 98.1% 是ARMv7 GPU ARM: 51.3% Qualcomm: 39.2%
13. 落地方案 - Android深度学习软件现状 application ui 主体识别 分类 风格化 ... compute lib OpenCL Render Script Vulkan ARMComputeLibrary kernel space OS Kernel Device Driver hardware 高通cpu Other cpu Mali GPU 高通GPU
14. 落地方案 - 模型选择 CNN卷积和池化 100001 010010 001100 100010 010010 001010 原图 1 -1 -1 -1 1 -1 -1 -1 1 -1 1 -1 -1 1 -1 -1 1 -1 两个卷积核 Only 9 x 2 = 18 parameters 最大池化
15. 落地方案 - 模型选择 CNN常见拓扑 • cat or dog • xywh Fully Connected Feedforward network Flatten Convolution Max Pooling Convolution Repeat many times Max Pooling 以GoogLeNet v1丼例
16. 落地方案 - 框架选择 • 基于Caffe二次开发 – 可读性 – 通用性 – 图像领域应用已丽 – 移植成功案例 • 针对CPU做主要优化 – GPU的内存拷贝成本与运算效率的综合考量
17. 目录 深度学习简介 移动端落地方案 移动端局限及解决技巧
18. 移劢端局限 - 安卓落地难点 SO体积 模型体积 加密 预测速度 内存限制 耗电量 服务端 无限制 500M+ 无需考量 类库极其成熟 无严格限制 无限制 移动端 特定App下严格限制 <10M 特定App下严禁泄露 有待填补 内存极其有限 严格限制
19. Tricks - SO体积:代码剪枝 Before OpenBlas Glog、Gflag Protobuf 后向传播 层 After 手工实现 摘除 手工实现Json解析 摘除 缩减数量 37MB -> 100k
20. Tricks - 模型体积:权值共享 Cat
21. Tricks - 模型体积:量化 min 桶 -10^8 1号 …… 桶 256号 max -10^8 24.2 -> 4.5MB
22. Tricks - 模型体积:纠正量化的误差 min -10^8 桶 1号 …… 桶 桶 max X号 256号 -10^8 桶 (1号):min 桶 (256号):max 桶 (X号):剩余N-2个元素 误差来源
23. Tricks - 模型体积:纠正量化的偏好 min -10^8 桶 1号 …… 桶 桶 max X号 256号 -10^8 桶 (X号): 1 1.2 估值偏小 桶 (X+1号): 2 桶 (X号): 1 1.2 (0.8) 桶 (X+1号): 2 1.2 (0.2)
24. Tricks - 模型体积:加密 min 桶 -10^8 1号 …… 桶 256号 max -10^8 Meta头部: min ??? max ???
25. Tricks - 速度:常规优化 调整overhead Load Reshape Forward (malloc blob) Final Data
26. Tricks - 速度:常规优化 数值计算 记录Taylor展开的系数,用以实现快速的近似计算
27. Tricks - 速度:CPU Affinity 设置亲密度: 1. 减少线程切换。 2. 强制使用Big核心。
28. Tricks - 速度:NEON intrinsics • 卷积 • 池化 • LocalRespNorm
29. Tricks - 速度:内联汇编 • assembly文件 纯汇编文件,后缀为”.S”或”.s”。注意对寄存器 数据的保存。 • inline assembly内联汇编 在C/C++代码中嵌入汇编,调用简单,容易调试。
30. Tricks - 速度:Loop Unrolling
31. Tricks - 速度:利用拓扑结构执行多线程 利用SplitLayer和ConcatLayer,自动进行多线程分配
32. Tricks - 速度:改用MobileNet模型 Depthwise Separable Convolution由两部分组成: • depthwise convolutions • pointwise convolutions (simple 1×1 convolution )
33. Tricks - 耗电量:精准确定预测时机 • 在移劢客户端运行神经网络耗电量巨大,采用以下策略: – 用户手机达到稳定后一段时间开始识别 – 通过选取合适的识别间隔 陀螺仪&加速计
34. THANKS!