美文网首页
深度学习在移动端应用

深度学习在移动端应用

作者: 卡路fly | 来源:发表于2020-04-03 14:30 被阅读0次

    深度学习预测过程

    深度学习训练过程

    根据误差调解全中参数,直到收敛。

    【图4】


    落地方案

    服务端训练 + 移动端识别
    移动端:搭建网络模型可以运行的框架

    【图五】

    模型选择 CNN卷积和池化

    处理前一个输入,通过滑动窗口进行移动,当滑动窗口窗口进行移动的过程中,观察窗口下面所覆盖的节点在做什么运算
    当为线性运算,为卷积运算;
    最大值运算等则为池化运算;

    CNN

    第一层不停做卷积和池化运算,可看坐在做特征提取。
    第二层根据上一层提取的特征进行拟合,得到想要输出。

    框架:

    基于Caffe进行二次开发

    • 可读性
    • 通用性
    • 图像领域应用已久

    根据GPU的内存拷贝成本与运算效率综合考量,对MDL框架针对CPU做主要优化。

    落地难点

    服务端 移动端
    so体积 不限制 特定App下严格限制
    模型体积 500M+ <10M
    加密 无需考量 特定App下严禁泄漏
    预测速度 类库成熟 有待填补
    内存限制 无严格限制 内存极其有限
    耗电量 不限制 严格限制

    so体积:代码剪枝

    Before After
    OpenBals(一套计算接口) 手工实现
    Glog、Gflag 摘除
    Protobuf(caffe模型使用进行持久化) 手工实现json解析
    后向传播(训练过程需要) 摘除
    缩减数量

    模型体积:权值共享,通过量化进行减少

    • 纠正量化误差:分层对权重进行量化
    • 纠正量化偏好:引入随机化方案

    加密:不对整个模型文件进行加密

    速度优化

    • 调整overhead,在线操作放到离线来做
    • 常规优化:数值计算(高数太差……,总的来说通过技巧绕过复杂过程)
    • CPU Affinity:安卓8核手机,四大四小。设置亲密度来减少线程切换,强制使用大核。
    • NEON 向量运算器引入,自己写头文件intrinsics,不能过分使用,因为需要不停load,reload,导致延迟。
    • 对intrinsics使用内联汇编,循环展开。
    • 利用拓扑结构执行多线程:利用SplitLayer和ConcatLayer自动进行多线程分配。
    • 改用MobileNet模型

    耗电量:精准确定预测时机

    在移动客户端运行神经网络耗电量巨大:

    • 用户手机达到稳定一段时间开始识别
    • 通过选取合适的识别间隔

    MDL调研

    相关文章

      网友评论

          本文标题:深度学习在移动端应用

          本文链接:https://www.haomeiwen.com/subject/kkvhphtx.html