2017-07-04 09:43:13 zchang81 阅读数 4073

1、Caffe的移动端项目

caffe项目连接如下:

android-lib 
android-demo

2、mxnet的移动端项目

mxnet被 Amazon AWS 选为官方深度学习平台

mxnet实现的简介

项目连接如下:

android-lib

android demo

并且mxnet 提供了对caffe 模型的支持。使用caffe训练好的模型,也可以通过提供的工具讲其进行转化json格式,然后就可以在mxnet 上使用,同时然也可以在移动端使用。

caffe_converter

3、tensorflow的移动端项目

tensorflow对android端的支持也是官方提供的。

android build

4、torch移动端项目
torch android

5tiny-cnn移动端项目

tiny-cnn

tiny-cnn支持caffe模型的转化,最新的android版本也支持了caffe模型。

开源项目地址和详细介绍如下。

cnnforandroid

三.专注移动端的Caffe2go项目

4、caffe2go移动端项目

Github链接:

https://github.com/caffe2/caffe2

2017-09-25 15:12:51 zchang81 阅读数 3407

百度今天 (2017 / 9 / 25 开源了移动端深度学习框架  MDL (mobile-deep-learning) 。该移动端深度学习框架,致力于让卷积神经网络极度简单的部署在手机端。目前正在手机百度内运行。并且支持iOS  gpu 计算。体积小,速度快。

1、体积 armv7  340k+;
2、速度 iOS GPU mobilenet 可以达到 40ms、squeezenet 可以达到 30ms。


GitHub 地址:https://github.com/baidu/mobile-deep-learning


与其他支持移动端的开源框架相比较:

框架 Caffe2 TensorFlow ncnn MDL MDL
CPU/GPU CPU CPU CPU CPU GPU
速度 极快
体积
系统 Android iOS Android iOS Android & iOS Android & iOS 仅 iOS
2016-11-29 20:33:44 liyiafeia 阅读数 4977

一.移动端深度学习的几种实现方式

(1)Caffe的移动端编译项目

caffe(命令式框架)算是在国内最流行的深度学习开源框架,使用它进行商业,研究的人很多。对于移动端的实现,也有开源项目对caffe进行了移植。 
项目连接如下:

android-lib 
android-demo

我认识的很多科研院所的朋友以及百度这种大公司他们,在移动端的本地项目中也使用了caffe-Android,证明了该项目有很高的实用性。当然,我认为该项目存在的问题就是模型过大,速度性能很差;当前不支持GPU,无法做到实时;caffe是个通用的框架,调用了很多库,如果只需要做cnn的话,该项目还需要自我定制和瘦身。


(2)mxnet的移动端项目

mxnet(符号式框架)主要也是几个中国人一起发起和维护的深度开源项目,足够灵活,速度足够快,扩展新的功能比较容易,内存复用,很有潜力成为未来优秀的深度项目。最关键的是,mxnet本身提供了对android,ios移动端的的支持。而且最近,mxnet已经 被 Amazon AWS 选为官方深度学习平台。

mxnet实现的简介

项目连接如下:

android-lib

android demo

本人也使用过该项目,其中的感想如下。

1) mxnet明显从本身特点就比caffe更适合移动端,因为依赖少,内存要求少,对于android性能变化大的手机,通用性更高。

2) mxnet需要先使用ndk交叉编译项目中的amalgamation,可以根据自己的需求,修改jni中的接口,然后,编译好的动态链接库替换掉android demo 中的。不过在编译过程中我遇到了很多的问题,编译成功也不是很简单的事情。

3)mxnet 提供了对caffe 模型的支持,那么即使你用caffe训练好的模型,也可以通过提供的工具讲其进行转化json格式,然后就可以在mxnet 上使用,自然也可以在移动端使用,不过我在使用过程中也遇到了一个问题,比如prelu激活函数,mxnet本身支持的,但是转化工具不支持,所以,我训练的caffe模型一直转化不成功,但是最后改了工具的源码,就解决了这个问题。当然,mxnet提供的caffe_converter是很多坑的,很多模型都转化不成功,这个如果对caffe模型很熟悉的话,这些问题也许很容易解决。

caffe_converter


(3)tensorflow的移动端项目

tensorflow是google开源的,是最有竞争力成为未来深度框架的主流。而且,对android端的支持也是官方提供的,毕竟google公司自己的os。

android build

简单总结 
除了以上介绍的深度框架,还有torch

torch android

以上框架都是很流行,很通用的,自然带来的问题就是,过于庞大对于android系统来说,所以,如果要实现一个相对单一的深度算法,那么,我们必须需要对其进行瘦身。移动端,在不需要实时的项目中,对gpu的要求不高,但是如果能提供对gpu的支持,那么项目的性能自然可以提高很多,但是,大部分android端手机,gpu不支持cuda,所以以上介绍的深度框架,只能使用cpu-only模型进行前向传播,不过为了能利用到gpu,有一个解决方案是使用opencl进行gpu加速。我这个没有尝试过,有兴趣的人可以看下这个开源项目。

Opencl libdnn

当然,最新的nvidia 提供了android端的gpu开发接口。

Andorid-works

而且支持非Nvidia的Tegra处理器的Android设备和支持各个版本的Android系统。

这里写图片描述


二.tiny-cnn的移动端移植

tiny-cnn相对于上述的开源深度框架来说就小的多,而且是完全的c++11版本的卷积神经网络的实现,这个开源项目维护的人也很多,本人也参与到其中。

tiny-cnn

本人对tiny-cnn进行了android端的移植,做了开源项目,而且,本身tiny-cnn支持caffe模型的转化,所以,最新的android版本也支持了caffe模型。

开源项目地址和详细介绍如下。

cnnforandroid

tinycnn for android 的优缺点。

优缺点 内容
优点 易于理解和修改,对于小模型的支持更好。android端是完全的一个eclispe 工程,依赖库除了opencv其他基本配置好。提供了完全的jni源码;提供了对caffe模型的支持
缺点 不能很好支持大模型(需要的内存过大,例如vgg当前是跑不起来的);有些类型的层不支持,例如prelu;当前只支持cnn模型

三.专注移动端的Caffe2go项目

在手机端一直深度学习的算法,估计很多实验室和科技公司早就做了,不过很多估计是不开源的。 
11月9号,贾扬清在facebook上发布了一篇文章,关于手机深度学习项目caffe2go的详细介绍和应用。项目是专门为手机定制的深度框架,是在caffe2 的基础上进行迁移的,目的就是让最普遍的智能设备——手机也能广泛高效地应用深度学习算法。

关于caffe2的,介绍:

Caffe2 is a deep learning framework made with expression, speed, and modularity in mind. It is an experimental refactoring of Caffe, and allows a more flexible way to organize computation.

Github链接:

https://github.com/caffe2/caffe2

当然,caffe2go有一下几个特点:

(1)专注手机端 
之前说了,真正做到手机端是很简单的事情,关键就是技术优化。 
caffe2go的给的测试是风格化转换的实时处理。关于优化,文章说明了几点。

  • 模型压缩
  • 通过使用移动 CPU 中被称为 NEON 的功能,可以显著提高运算速度
  • 模型中,优化了卷积层的数量
  • 调整了处理过程中的空间分辨率(spatial resolution),更早地使用pooling层。

有几点是很难理解的。只能等待caffe2go尽快发布。

(2)CPU而非GPU 
我们都知道印象中的深度学习是离不开GPU的,及时只是运行模型,而且是实时的情况下。caffe2go在手机端,是运行在cpu下的,这就能保证了框架的普遍适用性。毕竟对于Android手机来说,并没有统一的硬件标准,也没有统一的GPU型号,所以就很难做到一个框架支持所有手机。这应该是facebook选择使用cpu而非GPU的一个原因。 
关于当前主流手机的GPU型号。看一下列表。

这里写图片描述

值得注意的是,当前,嵌入式设备(Android手机等)的GPU,实际上要比CPU要慢得多。所以,估计贾应该也做了GPU的,但是效果不好,因此并没有强调。

(3)强调本地,而非云。

我们都知道,关于深度学习的处理,完全可以不通过本地调用,而是远程获取,但是通过caffe2go的目标,则与此相反。他们认为随着硬件的发展,本地的运算消耗是要比远程请求更节约时间,更方便的。


2019-05-21 23:15:48 qq_42580947 阅读数 179

一、常用移动端深度学习框架

深度学习发展很快,最近又出现了几个新的移动端前向框架,例如Tengine和 TVM.
我们还没有对这两个框架进行深入研究,但是在对应的wiki中,可以看到这两个框架的速度对于现有框架都具有一定优势,通过短暂的了解,Tengine还是很不错的,支持op跟模型种类都比较丰富,还支持GPU运算。感兴趣的读者可以多了解一下。

---------------- 2018.12.07 分割线 ----------------

各大公司开源了自己的移动端深度学习框架,其中包括TensorFlow Lite、Caffe2、MACE、paddle-mobile(MDL)、FeatherCNN、NCNN等。我们参考开源的测试结果,结合自己整理的数据,针对主流的异动单深度学习框架进行简单对比及介绍。

框架 机构 支持平台 Stars Forks
Caffe2 Facebook ARM 8270* 2080*
TF_lite Google ARM * *
MACE Xiaomi ARM/DSP/GPU 2442 412
paddle-mobile Baidu ARM/GPU 4038 774
FeatherCNN Tencent ARM 658 170
NCNN Tencent ARM 4606 1163

二、性能对比 (截至2018.09)

1. NCNN / FeatherCNN / MACE

CPU:kryo&2.15GHz*2 (ms)

框架 SqueezeNet_v1.1 MobileNet_v1 ResNet18
NCNN 47.64 68.71 142.28
FeatherCNN 36.39 58.92 100.13
MACE 42.37 65.18 160.7

2. paddle-mobile (MDL)

CPU:高通835 (ms)

框架 squeezenet mobilenet_v1 googlenet_v1
1 Thread 82.41 105.43 341.25
2 Threads 56.17 62.75 233.35
4 Threads 36.45 37.13 158.55

三、框架评价

框架 集成成本 库文件大小 模型支持程度 文档完整程度 速度
caffe2 一般 良好 优秀 良好 一般
TF_Lite 一般 良好 优秀 良好 优秀
MACE 良好 优秀 良好 良好 优秀
MDL 优秀 优秀 良好 良好 良好
FeatherCNN 良好 优秀 良好 良好 优秀
NCNN 优秀 优秀 良好 优秀 优秀

四、几款移动端深度学习框架分析

移动端的框架,基本不支持训练,只支持前向推理。

1.腾讯的FeatherCNN和ncnn

这两个框架都是腾讯出的,FeatherCNN来自腾讯AI平台部,ncnn来自腾讯优图。

重点是:都开源,都只支持CPU

ncnn开源早点,文档、相关代码丰富一些,使用者相对多一些。FeatherCNN开源晚,底子很好,从测试结果看,速度具有微弱优势。

2.百度的 paddle-mobile(MDL)

MDL可以支持CPU和GPU,FPGA在开发中。

3.小米的 MACE

它有几个特点:异构加速、汇编级优化、支持各种框架的模型转换。

小米支持的GPU不限于高通,这点很通用,很好,比如瑞芯微的RK3299就可以同时发挥出cpu和GPU的好处来。

4.其它

在移动端,caffe2、tensorflow lite都可以考虑,只是可能没有以上的框架效率高。

另外据说支付宝有xNN的深度框架,商汤有PPL框架,这两个都是企业自用没有开源。

国内杭州九言科技的开源方案,用的人不多,可以参考。

5.总结

上面的大部分框架都是主要面向android的,但是用于arm-Linux也是可以的。

现在越来越多的厂商开源移动端的深度学习框架,对于从业者是好事,有更多的选择,不用从头造轮子。

相信将来会有更多的技术手段用于移动端部署深度学习网络,包括模型压缩、异构加速、汇编优化等。

五、推荐框架

针对目前开源的移动端深度学习前向框架,结合我们使用、测试的结果,我们推荐以下几个框架。

1.NCNN

第一个高效使用的移动端开源库,支持模型丰富,更新快,文档逐渐完善,被大家采用较多,遇到坑相对少。

2.MACE

性能优秀,支持GPU,但是刚刚开源,可能会遇到一些开发问题。

3.MDL

百度出品,一定的品质保证,更新较快。

参考资料

移动端深度学习框架小结

NCNN性能分析

NCNN性能对比

MACE、NCNN、FeatherCNN性能对比

2018-12-18 10:48:13 weixin_33735077 阅读数 31

采访嘉宾 | 何亮亮

AI前线导读: 随着深度学习领域的快速发展,以及移动端芯片计算能力的逐步提升,设备端上的深度学习推理正在变成一个巨大的需求和趋势,一个好用的深度学习框架成为深度学习应用落地的关键。小米团队打造的MACE (https://github.com/XiaoMi/mace),就是专门为移动端芯片优化的深度学习框架,且已开源供开发者使用。

开发这个移动端深度学习框架的过程并非一帆风顺,克服了一些困难之后,MACE才诞生并逐渐被越来越的开发者采用。在开发过程中,小米有哪些经验和踩坑经验可以分享给开发者?AI前线采访了小米深度学习框架负责人何亮亮来进行了深入的了解。

更多干货内容请关注微信公众号“AI 前线”(ID:ai-front)

作为小米深度学习框架负责人,何亮亮目前负责服务端与移动端深度学习框架的研发工作。他在分布式系统、存储与数据库、异构计算、深度学习、计算机视觉等领域有丰富的实践经验。

何亮亮介绍道,他带领的团队的主要工作内容,包括移动端深度学习框架MACE的开发,服务端深度学习框架的定制与优化,图像处理与计算机视觉算法的开发与优化等工作。

MACE创建背后的故事

相对于PC,更加轻便、易于携带的移动端越来越普及,手机更是人手一部或者多部,这就让在移动端进行深度学习成为一个迫切的需求。鉴于此,专门为移动端而设计的深度学习框架——MACE应运而生。

何亮亮告诉AI前线记者,MACE最初是为了解决公司内部业务的落地而立项的。在2017年,为了落地拍照后处理的模型,小米曾考察了SNPE专有框架和主流的开源深度学习框架。结果,从性能角度看,仅有SNPE满足速度和功耗的要求,但因为SNPE是闭源软件,在部分特性和自定义算子的定制上有较大的制约,沟通成本影响了产品开发周期的可控性。为了同时满足性能和可控性两方面的要求,小米开始了MACE的自主研发。

在研发这个深度学习框架的过程中,遇见困难在所难免。在研发初期,MACE的重点是GPU的性能优化,何亮亮回忆,开发过程中他们遇到的最大困难,无疑是GPU算子的性能优化,由于当时没有任何开源实现可以参考,这项研发工作的难度非常大。

但是,经过多方尝试以及与高通的一些交流,MACE最终达到,甚至在内部私有模型上超过了SNPE的性能,同时还支持除Adreno GPU之外的芯片。后期,小米团队还对CPU和DSP也进行了支持和优化,也达到了较高的水平。

除了算子的性能之外,移动端框架还有其他的一些特有的问题。比如,相比服务端模型推理,移动端的推理对内存占用有着更苛刻的要求。为了优化计算节点间中间结果对内存的占用,小米借鉴了寄存器分配的图染色算法,通过提升内存缓冲区的复用效率,来达到减少内存占用的目标。对于权重的内存占用,小米则采用了半精度浮点和8比特整形量化的方法来进行压缩。另一个小米遇到问题是模型的推理计算对用户体验的影响,对于移动端的GPU,除了可以用作通用计算之外,更重要的作用是图形界面的渲染。如何解决深度学习模型的推理计算对图形渲染的干扰带来的卡顿问题,小米则采用了离线Tuning并自动进行细粒度Kernel拆分的形式来解决。

那么,为什么小米后来决定将这个艰难开发出来的移动端深度学习框架开源给开发者使用呢?何亮亮表示,这是考虑到当时市面上没有成熟的支持异构计算的开源框架可用,为了帮助更广大的开发者提升手机AI方面的体验,小米决定将MACE开源。

如今,MACE项目非常活跃,社区中有200多个Issue讨论和若干Pull Request,用户交流群(756046893)用户有1000多,主要集中在手机应用开发和IoT硬件设备开发领域。

据了解,MACE框架已经广泛应用到小米手机的各种场景和业务中,例如相机场景识别、人像模式、人脸解锁、行为预测、机器翻译、语音识别等。

MACE架构设计-异构计算

\"image\"

对于深度学习框架,尤其是推理框架,最核心的部分是高性能的kernel实现。MACE的NEON, GPU的kernel实现均达到较高水平,同时对于Hexagon DSP也进行了支持和优化。

目前,MACE支持主流的CNN模型,同时也支持机器翻译、语音识别的部分模型。除此之外,与MACE一同开源的,还有MACE Model Zoo项目(https://github.com/XiaoMi/mace-models),这个项目聚合了了一些常用的深度学习模型。

何亮亮介绍道,MACE的核心框架是C++,算子分别设计为OpenCL和汇编语言,具体选择哪个取决于底层的硬件,而周边工具则采用了更灵活的Python。

目前,MACE还无法做到在安卓和苹果系统之间自由切换,只支持安卓和Linux。

MACE在易用性、资源调度和兼容性方面的表现究竟如何?据悉,MACE提供了丰富的文档和Model Zoo,让开发者可以快速入手,且兼容主流的ARM CPU和常见的移动端GPU,开发者可以灵活地选择不同的CPU/GPU/DSP计算设备。

与三大移动端框架大比拼

当前移动端的三大框架Caffe2、TensorFlow Lite、Core ML无论是从知名度还是采用广度上都比MACE有很大的优势。但是,相比于这三大框架,MACE也有自己独特的优势。

相对于Caffe/Caffe2/TensorFlow Lite,MACE最大的优势是对GPU和DSP等异构计算的支持,劣势则是知名度和生态有不小的差距;而Core ML作为不同平台的专有框架,应用场合目前没有与MACE重叠。

对于开发者来说,MACE最大的吸引力在于它对CPU/DSP异构计算的支持,这让MACE具有其他开源框架不具备的性能优势。

另一方面,Caffe2、TensorFlow Lite、Core ML 均使用 offline 方式,可在无需网络连接的情况下确保用户数据的私密性。和其他框架一样,MACE也采用端侧离线模式。

那这是否代表移动端深度学习框架的趋势会倾向于offline呢?对此,何亮亮表示,移动端深度学习框架存在的意义在于端侧的本地计算。至于深度学习的推理在未来主要是online还是offline模式,他认为主要取决于场景,并不会趋同到一个模式。

具体而言,这主要取决于业务模式、产品体验、成本、隐私法规等几个因素。

业务模式主要是指特征数据的源头以及推理结果的去向,不管是从成本还是用户体验来说,数据和计算的保持局部性大多是有益的,例如,对于特征来自服务端的场景,天然适合online模式,比如广告信息流的点击率预估;而特征来自端测,则适合offline模式,例如拍照的后处理。而未来芯片的发展,以及5G的普及,也会导致online和offline的成本变化,也会影响两种模式的选择。另外,隐私法规的出台也是一个很重要的决定因素。

跟其他技术一样,随着行业的发展和成熟,移动端深度学习框架也会逐渐成熟并成为标准化的基础设施,但在此之前,仍会存在百家争鸣的局面,选择适合的框架解决产品落地的问题是最重要的。

目前,在移动端深度学习领域,无论是深度学习的异构计算芯片,还是芯片之上的深度学习框架,都处在蓬勃发展的阶段。这不仅给开发者提供了众多的选择,同时也带来了碎片化的负担和困扰。小米作为智能手机和IoT设备厂商,同样面临着深度学习推理软硬件选型的问题。为了更好的评估不同供应商的芯片和框架软件的性能指标,小米发起了开源移动端深度学习基准测试项目Mobile AI Bench ,希望借助小米在手机和智能硬件供应链方面的优势,与广大芯片厂商和开发者共同努力,推动移动端深度学习推理领域的发展。

会议推荐:

12 月 20-21,AICon 全球人工智能与机器学习技术大会将于北京盛大开幕,学习来自 Google、微软、BAT、360、京东、美团等 40+AI 落地案例年终总结,与国内外一线技术大咖面对面交流,不见不散。

\"image\"

没有更多推荐了,返回首页