MDL调研

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

MDL介绍

在移动端应用深度学习技术比较典型的就是 CNN(Convolutional Neural Network)技术,即常被人提起的卷积神经网络。mobile-deep-learning(MDL)是一个基于卷积神经网络实现的移动端框架。

移动端应用深度学习应用

  • 分类:比较常见的如分辨出一张图片中的物体是什么
  • 主体识别:识别出一张图片中的物体在哪、有多大

移动端应用深度学习难点

面对各种机型和硬件、手机的指标要求,如何使神经网络技术稳定高效运转是最大的考验,移动端与服务器端进行对比更容易呈现问题和难点。

服务端 移动端
内存 弱限制 内存有限
耗电量 不限制 严格限制
依赖库体积 不限制 强限制
模型体积模型大小 常规模型体积200M起 不宜超过10M
性能 服务器端强大 GPU BOX 移动端 CPU 和 GPU

MDL框架设计

可扩展性

对 layer 层进行了抽象,可以根据模型的需要,自定义实现特定类型的层,通过添加不同类型的层实现对更多网络模型的支持,而不需要改动其他位置的代码;

鲁棒性

MDL 通过反射机制,将 C++ 底层异常抛到应用层,应用层通过捕获异常对异常进行相应处理,如通过日志收集异常信息、保证软件可持续优化等;

兼容性

MDL 不支持模型训练能力。提供 Caffe 模型转 MDL 的工具脚本,可以通过一行命令完成模型的转换及量化过程,会陆续支持 PaddlePaddle、TensorFlow 等模型转 MDL,兼容更多种类的模型。

MDL总体架构

MDL 框架的总体架构设计图

MDL 框架主要包括模型转换模块(MDL Converter)、模型加载模块(Loader)、网络管理模块(Net)、矩阵运算模块(Gemmers)及供 Android 端调用的 JNI 接口层(JNI Interfaces)。

  • Converter:主要负责将 Caffe 模型转为 MDL 模型,同时支持将 32bit 浮点型参数量化为 8bit 参数,从而极大地压缩模型体积;
  • Loader:主要完成模型的反量化及加载校验、网络注册等过程,网络管理模块主要负责网络中各层 Layer 的初始化及管理工作;
  • JNI Interfaces:可以通过调用 JNI 接口轻松完成加载及预测过程。

MDL使用

简单地使用和部署神经网络,如果使用基本功能则不需要进行过多配置和修改,只需要关注具体业务实现、如何使用即可。
支持手机平台交叉编译同时,也支持 Linux 和 Mac 的 x86 平台编译,在调整深度学习代码的同时可以直接在工作电脑上编译运行,而不需要部署到 arm 平台。

# mac or linux:
./build.sh mac
 cd build/release/x86/build
./mdlTest

MDL性能及兼容性

  • 体积 armv7 300k+
  • 速度 iOS GPU mobilenet 可以达到 40ms、squeezenet 可以达到 30ms
    MDL 从立项到开源,已经迭代了一年多。移动端比较关注的多个指标都表现良好,如体积、功耗、速度。百度内部产品线在应用前也进行过多次对比,和已开源的相关项目对比,MDL 能够在保证速度和能耗的同时支持多种深度学习模型,如 mobilenet、googlenet v1、squeezenet 等,且具有 iOS GPU 版本,squeezenet 一次运行最快可以达到 3-40ms。

同类框架对比

Caffe2 TensorFlown cnn MDL(CPU) MDL(GPU)
硬件 CPU CPU CPU CPU GPU
速度 极快
体积
兼容 Android&iOS Android&iOS Android&iOS Android&iOS iOS

兼容性

MDL 在 iOS 和 Android 平台均可以稳定运行,其中 iOS10 及以上平台有基于 GPU 运算的 API,性能表现非常出色,在 Android 平台则是纯 CPU 运行。高中低端机型运行状态和手机百度及其他 App 上的覆盖都有绝对优势。
MDL 同时也支持 Caffe 模型直接转换为 MDL 模型。

MDL特性

  • 一键部署,脚本参数就可以切换 iOS 或者 Android
  • 支持 Caffe 模型全自动转换为 MDL 模型
  • 支持 GPU 运行
  • 已经测试过可以稳定运行 MobileNet、GoogLeNet v1、squeezenet 模型
  • 体积极小,无任何第三方依赖,纯手工打造
  • 提供量化脚本,直接支持 32 位 float 转 8 位 uint,模型体积量化后在 4M 上下
  • 与 ARM 相关算法团队线上线下多次沟通,针对 ARM 平台会持续优化
  • NEON 使用涵盖了卷积、归一化、池化等运算过程
  • loop unrolling 循环展开,为提升性能减少不必要的 CPU 消耗,全部展开判断操作
  • 将大量繁重的计算任务前置到 overhead 过程

为了让 MDL 体积进一步缩小,MDL 并未使用 protobuf 做为模型配置存储,而是使用了** Json 格式**。目前 MDL 支持 Caffe 模型转换到 MDL 模型,未来会支持全部主流模型转换为 MDL 模型。

随着移动端设备运算性能的提升,GPU 在未来移动端运算领域将会承担非常重要的角色。

  • iOS
    目前 MDL 已经支持 iOS GPU 运行,iOS10 以上版本机型均可以使用,在 iOS10 以下可以使用 CPU 运算。
  • Android
    Android 平台目前的 GPU 运算能力与 CPU 相比整体偏弱.MDL 后面也将加入 GPU 的 Feature 实现,基于 OpenCL 的 Android 平台 GPU 运算会让高端机型的运算性能再提升一个台阶。

应用于HI

以上的一大堆优点,让人对MDL充满了期待,顺利(经过了各种配置,一点也不顺利)运行Demo

然而……

于是我屁颠屁颠的去了PaddlePaddle

新手入门,安装配置各种,追随着指引,来到了Docker

然后……

MDL框架的使用需要根据源码进行修改,需要自己搞模型进行训练等。


image.png

在GitHub上所提供的Demo中,只对物体的识别进行了简单的处理,也就是把物体圈出来。

public class MDL {
    /**
     * load model descrition
     *
     * @param modelPath
     * @param weightsPath
     * @return
     */
    public static native boolean load(String modelPath, String weightsPath) throws MDLException;

    public static native void setThreadNum(int num) throws MDLException;

    /**
     * object detection
     *
     * @param buf
     * @return
     */
    public static native float[] predictImage(float[] buf)  throws MDLException;

    /**
     * clear memory
     * @throws MDLException
     */
    public static native void clear()  throws MDLException;
}

因此将MDL接入HI的难度较大,需要相应的JNI接口,二维码数据集进行识别训练。但是,最大的问题是,并不能看懂深度学习的相关内容……

相关文章

  • MDL调研

    MDL介绍 在移动端应用深度学习技术比较典型的就是 CNN(Convolutional Neural Networ...

  • MySQL锁<一>

    MDL锁 对表的增删改查,都需要MDL锁,无所不在 MDL读锁之间不互斥,但MDL读写锁互斥 #举个栗子 假设t是...

  • YOYOW主网发布一周年系列采访,跨国伙伴MDL艺人社谈合作

    2018年1月,MDL艺人社(MDL Talent Hub)和YOYOW达成一项战略合作协议,旨在将MDL艺人社平...

  • mdl

    今天很开心,今天有很多事,比如说早上吃mdl,吃的很好 还有蛋炒饭是我炒的,还有作了很多作业比如WT,练习册订正,...

  • 2.元数据锁

    MDL (metaDataLock) 元数据: 表结构在 MySQL 5.5 版本中引入了 MDL, 当对一个表做...

  • 2021-01-30

    Segoe UI SymbolSegoe MDL2

  • 初识MDL

    我们知道mysql的默认隔离级别是RR, 在5.5之前这个隔离级别隔离的数据是有问题的, 存在状态为running...

  • 2019-07-23工作总结

    疑问1: MDL写锁, MDL读锁, 和S锁, X锁有啥区别? 疑问2: flush文件有啥作用? 答: fl...

  • 泛博电竞:Aster老板Burning专访,Major准备充分,

    Aster在本次MDL成都Major的预选赛上面表现得相当出色,他们也是成功进入了本次MDL成都Major的线下赛...

  • MySQL MDL锁

    MDL全称为metadata lock,即元数据锁。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务(...

网友评论

      本文标题:MDL调研

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