百度开源:移动端深度学习框架MDL (mobile-deep-learning)

百家 作者:程序员之家 2017-10-04 12:07:55

9 月 25 日,百度在 GitHub 开源了移动端深度学习框架 mobile-deep-learning(MDL)的全部代码以及脚本。


 移动端深度学习框架 MDL


授权协议:MIT

开发语言:C/C++

操作系统:跨平台

开发厂商:百度

Github:https://github.com/baidu/mobile-deep-learning




MDL 简介



mobile-deep-learning(MDL)是一个基于卷积神经网络实现的移动端框架。致力于让卷积神经网络极度简单的部署在手机端。目前正在手机百度内运行。支持 iOS gpu 计算。体积小,速度快。


mobile-deep-learning(MDL)特性如下:

● 一键部署,脚本参数就可以切换 iOS 或者安卓

● 支持 iOS gpu 运行 MobileNet,squeezenet 模型

● 已经测试过可以稳定运行 MobileNet,GoogLeNet v1,squeezenet 模型

● 体积极小,无任何第三方依赖。纯手工打造。

● 提供量化脚本,对 32 位浮点数转 8 位 UINT 直接支持,模型体积量化后 4M 上下

● 与 ARM 相关算法团队线上线下多次沟通,针对ARM平台会持续优化

● NEON 使用涵盖了卷积,归一化,池化所有方面的操作

● 汇编优化,针对寄存器汇编操作具体优化

● 循环展开,为提升性能减少不必要的 CPU 消耗,全部展开判断操作

● 将大量繁重的计算任务前置到开销过程




MDL 框架



MDL 框架主要包括:模型转换模块(MDL Converter)、模型加载模块(Loader)、网络管理模块(Net)、矩阵运算模块(Gemmers)及供 Android 端调用的 JNI 接口层(JNI Interfaces)。其中,模型转换模块主要负责将 Caffe 模型转为 MDL 模型,同时支持将 32bit 浮点型参数量化为 8bit 参数,从而极大地压缩模型体积;模型加载模块主要完成模型的反量化及加载校验、网络注册等过程,网络管理模块主要负责网络中各层 Layer 的初始化及管理工作;MDL 提供了供 Android 端调用的 JNI 接口层,开发者可以通过调用 JNI 接口轻松完成加载及预测过程。





MDL 使用案例



MDL 在移动端的应用场景比较常见的如分辨出一张图片中的物体是什么,也就是分类;或者识别出一张图片中的物体在哪、有多大,也就是 主体识别。


在手机百度搜索框右侧可以打开图像搜索,打开图像搜索后的界面效果如下图。当用户在通用垂直类别下开启自动拍开关(图中下方标注)时,手停稳它就会自动找到物体进行框选,并无需拍照直接发起图像搜索。整个过程可以给用户带来流畅的体验,无需用户手动拍照。图片中的框体应用的就是典型的深度学习主体识别技术,使用的就是 mobile-deep-learning(MDL)框架。MDL 目前在手机百度中稳定运行了多个版本,经过数次迭代后可靠性大幅提升



MDL 定位简单可用


MDL 开源项目在实施之初就已经有了清晰定位。在设备繁杂且性能较低的移动端平台技术研发过程中,能够为新颖的深度学习技术找到合适场景并应用到自己的产品中是非常吸引人的。但如果让每个移动端工程师在应用深度学习过程中都要重新写一次全部神经网络的实现,会增加较大成本。MDL 的定位是简单地使用和部署神经网络,如果使用基本功能则不需要进行过多配置和修改,甚至连机器学习库的编译过程都不需要,只需要关注具体业务实现、如何使用即可

编辑 | 码哥

图片源于网络,版权归原作者所有

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接