澳门1495

卷积神经网络,CNNdroid澳门1495

十二月 16th, 2018  |  球类运动

转载请讲明来源

姓名:崔少杰       学号:16040510021

欠作品翻译由:

转载自:http://www.jianshu.com/p/b60a216845e8=有修改

CNNdroid: GPU-Accelerated Execution of Trained Deep Convolutional
Neural Networks on Android

【嵌牛导读】:智能装备与而通过戴设备还拿获益于深度上算法(比如CNN)的准头与而扩张性

本来小说地址

【嵌牛鼻子】:Deep Learning, Deep Convolutional Neural Network (CNN),
Mobile GPU, Performance Optimization, Low Energy Con- sumption, Open
Source Software, Android, RenderScript

摘要

智能装备与而通过戴设备还拿收益于深度上算法(比如CNN)的准头与而扩大性。但是,性能和能耗等实际的题目令以运动端设备上这看似密集统计的算法变得分外受限。我们开了CNNdroid这多少个GPU加速库,可以在Android设备上落实CNN网络的教练。通过实验,CNNdroid在移动设备上实现了60倍速的提升,以及130倍速的节约。CNNdroid这几个库房已经开源在Github上,可以打Github项目页面

【嵌牛提问】:如何当Android上应用GPU加速实施CNN?

关键词

Deep Learning, Deep Convolutional Neural Network (CNN), Mobile GPU,
Performance Optimization, Low Energy Con- sumption, Open Source
Software, Android, RenderScript

【嵌牛正文】:1.介绍

1.介绍

智能手机、可通过戴设备、微型机器人、物联网等进一步多之移位平台皆以深上的领域找到了相应的运用方向(如图1)。例如当活动设备上,语音识别及图像识别等居多App都得益于机器上的地面算法。假诺允许用模型等数据直接放在客户端,就得避免和服务器的上下行数据交互而致的大网延迟等经验的问题。CNN卷积网络在臆度的精确性和而扩张性上还取了酷先进的收获,但是像此类密集总计型的大网布局必须依靠硬件级加速才可能在运动装备及落广大的拔取。

祈求1:CNN在走设备及之运

森按照深度上之硬件加速平台都来相应的化解方案了,IBM也着开同栽用于神经网络的CMOS的芯片,用于在移动设备和物联网设备及。与此同时,类似之化解方案还高居前期的研发等,也并不曾商用到现有的位移装备上。

同因硬件的增速平台不同之是,GPU曾大规模的商用到今之活动设备上了,同时以软件层面的编码协理吗进行的雅全面了。利用GPU现成的并行统计能力去贯彻CNN神经网络在活动端设备上的测算加速是一心可行之。

留存的GPU加速方案的深浅上CNN的开源库有众多种,都是依照服务器和桌面平台的[呈现附录的6,
7, 8, 9, 10, 11,
12].不过,由于平台架构的差异,简单的把那一个开源库移植到移动端上,在一些Case下效果是坏的(见2.2节)。如今当运动端上,据我们所知道,并无对号入座的包含GPU加速的深浅上统计框架的开源库,这多少个库
[凸显附录的13, 14, 15,
16]偏偏可以用移动装备的CPU多按总结能力,而这样局限性很要命。

现在,我们提供一个支撑GPU加速的开源库,称为“CNNdroid”,可以在Android平台用来经过练习数据集的法子设计及优化CNN的纱。以下是CNNdroid的多少个举足轻重亮点。

  1. 支撑几乎拥有的CNN的Layer Type(Section 3.1)
  2. 兼容Caffe[6]、Torch[7]、Theano[8]这一个开源框架在PC平台、服务器平台上早已锻炼好之模子(Section
    3.2)
  3. 幸存的Android App可以快的参预这多少个库房,无需附加的软件倚重(Section
    3.3)
  4. 开发者可以指定最可怜之内存消耗(Section 3.4)
  5. CNN Layer的GPU和CPU加速均补助(Section 3.5)
  6. 机关的硬件标准检测(Section 3.6)
  7. 在倒设备上领先60倍增的性质提高以及减弱130加倍之能耗(Section 4)

智能手机、可穿戴设备、微型机器人、物联网等越多之位移平台还在深度上的小圈子找到了对应的运方向(如图1)。例如在移动装备及,语音识别以及图像识别等诸多App都获益于机器上的地方算法。倘使同意以模型等数码直接在客户端,就得避与服务器的上下行数据交互而致的网延迟等经验的题材。CNN卷积网络以臆想的精确性和可增加性上且取了特别先进的硕果,然则像此类密集总括型的网布局必须依赖硬件级加速才可能于倒装备及取广泛的行使。

背景知识和相关介绍

澳门1495 1

2.1倒设备的GPU和桌面平台的GPU的界别

当代图形处理单元(GPU)不仅仅会做图形总结,也可以被用来做而编程的通用总计。台式机的GPU短时间以来都是只是编程的,近日运动装备及之GPU也放了通用总结的硬件级扶助。但受限于GPU的尺寸和功耗,移动GPU和桌面GPU设备或者发生死要命之差异。

现代走GPU的Shader Cores(SC)平日成为多但编程并行总括单元。每个Shader
Core都是由于若干个ALU并行组成。比如,三星体之Exynos 5433芯片是出于ARM A53/A57
CPU和Mali T-760 GPU组成(见图2)。T-760
GPU中之每一个SC都具备两独VLIW格式的128各项ALU。每个128各ALU可以尽SIMD操作,即互相的一定量单64个,三只32员仍然两只16员操作[17]。与桌面平台GPU相比,移动设备的连行ALU架构在相互线程的管用执行着又多地借助让软件和编译器,而未是动态硬件调度器。

图2: Exynos 5433 mobile processor with ARM A53 / A57 CPU and Mali T-760
GPU (SC: Shader Core, VLIW: Very Long Instruction Word, SIMD: Single
Instruction Multiple Data

再也着重的凡,在桌面GPU中广大应用之线程块急忙内存共享机制当活动GPU中连无可用,同时广大基于CUDA的桌面平台的Library在走GPU上为不可以用。

再度不幸之是,在软件层面那半端的差距也是宏伟的。比如Android提供的RenderScript[18]举凡一个用于并行总计的库,可是出现线程的建制并无可用。此外,并行线程和互动线程使用的内存中之数码有假如一定之干。

希冀1:CNN在移动设备上之动

2.2 CNNdroid 和桌面平台相关库的较

每当服务器和桌面端,已经闹许多备的依照GPU加速的并行统计框架只是用于CNN网络,诸如Caffe[6],Torch
[7], Theano [8],Tensor- Flow [9], cuDNN [10], cuda-convnet
[11],,and Velesnet
[12],但是由于个别端的硬件与软件的差异,这种增速与并行总结的措施并无可以直接的让移植到倒装备及。比如说,Caffe[6]未遭的卷积操作让举办并转移为矩阵乘法,那些操作对内存的要求比强,这当运动装备及是匪具体的。再推一个例子,Theano
[8]受之并行算法即便与CNNdroid类似,然则当移动GPU中从不应用SIMD单元(详见Section
3.5)。

重复不好的凡,桌面的统计库利用桌面GPU和CUDA框架提供的线程管理效果,如飞共享内存和线程同步,这个在运动GPU和Android提供的RenderScript中全未可用。

群因深度上的硬件加速平台还出照应的化解方案了,IBM也着开发同栽用于神经网络的CMOS的芯片,用于在动装备及物联网设备上。与此同时,类似的缓解方案如故高居早期的研发等,也并无商用到存活的运动装备及。

2.3 CNNdroid和动平台相关库的相比

当移动设备上,就近年来所领悟之支撑CNN深度上之框架唯有[13,14,15,16]。包括了Caffe
Mobile[13]和Torch
Mobile[14],均受限于多对的CPU总括能力,而只有CNNdroid援助CPU和GPU(详见Section
3.5)。

另外,CNNdroid还兼容Caffe[6]、Torch[7]、和Theano[8]教练出的CNN模型,方便高效将模型部署到倒装备及(详见Section
3.2)。

开条件上,不欲安装Android NDK,只需要安装Android SDK即可。

跟冲硬件的加速平台不同的是,GPU都广泛的商用到现在的移动设备上了,同时于软件层面的编码协助吧开的不行健全了。利用GPU现成的并行统计能力去实现CNN神经网络在走端设备上的计加速是意可行之。

3.CNNdroid库

存的GPU加速方案的纵深上CNN的开源库有许多种植,都是依照服务器和桌面平台的[展现附录的6,
7, 8, 9, 10, 11,
12].不过,由于平台架构的出入,简单的管这多少个开源库移植到活动端上,在某些Case下效果是不好的(见2.2节)。最近在活动端上,据大家所知,并不曾对应的盈盈GPU加速的纵深上总括框架的开源库,这几个库
[表现附录的13, 14, 15,
16]止可以采纳移动装备的CPU多按总结能力,而如此局限性很特别。

3.1 CNNLayer Types

CNNDroid库协理几乎大部分的CNN
Layers,比如说卷积层,max/mean池化层,全链接层,ReLu(Rectified Linear
Units)激活函数,LRN(Local Response
诺玛(Norma)lization)层,Softmax等。相关的描述和每一样层的参数设置在开源库中之文档里来征[1]。由于库的开源特性,其余的叠也可天天在。

前几天,我们提供一个协助GPU加速的开源库,称为“CNNdroid”,可以于Android平台用来经操练数据集的方设计以及优化CNN的大网。以下是CNNdroid的几乎单重点亮点。

3.2 模型的备

范转换脚本:图3出示了什么样用训练好的型部署到移动端
CNNdroid库提供了一如既往序列之台本,可以将不同框架磨练的库转成CNNdroid格式的型,近期曾支撑Caffe[6],Torch[7],Theano[8],因此可接纳上述框架磨炼模型然后转为CNNdroid库补助的格式,最后运行在Android移动装备及。当然你也可以套这一个本子写起其他平台的换脚本,CNNdroid使用MessagePack体系化和储存模型中不同层的参数。具体的底细可以参见开源库的辨证文档[1]。

图3:CNNdroid的模型部署流程

NetFile:开发者需要预备一个叫吧NetFile.txt的文件文件,类似于Caffe的.prototxt配置文件,NetFile.txt文件用于配置都锻炼好的型的层系,比如说,CNN
Layer的各层的逐条,卷积层中的Padding和Stride的值。图4凡是一个欠公文之样例,更详尽的细节可以参照表达文档[1]。

NetFile中吗可以安排如下参数,allocated_ram:用于指定本框架可以分配的极端可怜内存上线(见Section
3.4),execution_mode:用于指定是接纳互动形式依旧串行格局(见Section
3.5),auto_tuning:用于指定auto-tuning是否默认开启(见Section 3.6)。

贪图4:NetFile示例,如何配置AlexNet[20]的老三层网络布局,
以及allocated_ram, execution_mode,auto_tuning参数的安排

支撑几乎拥有的CNN的Layer Type(Section 3.1)

3.3模子的尽

如若将磨练好之模子与呼应的NetFile文件上传到了动设备后(图3),这多少个模型可以叫所当的Android
App轻易的调用(图5),具体的爆发如下多只步骤:

首先步,在团结之App中倚重CNNdroid库,CNNdroid库只倚重Android
SDK,而不欲安装Android NDK的,也就是说,不指其他的老三方库。

老二步,构造RenderScript和CNNdroid对象(图5所展现之Steps
2和3)。CNNdroid的构造函数需要提供NetFile文件作为输入,并会面自动的创导相应的网层次。

说到底,compute函数负责运用训练好之模型,总计传入的么图像或者批量图像并重返结果。

图5: 使用CNNdroid库的几乎单至关重要调用步骤,
详细的采纳办法好参见开源库中的认证文档 [1].

兼容Caffe[6]、Torch[7]、Theano[8]这多少个开源框架在PC平台、服务器平台及早已训练好之模子(Section
3.2)

3.4 内存分配

俺们拿曾锻练好之CNN模型,上传到手机的SD卡上,这多少个模型中含了矩阵式的各层参数。在履行各类一样层前,在compute函数里(图5,step5),相应层的矩阵参数为自动的起SD卡上加载内存里,这会导致大气的内存开销。

为削减这种内存开销,CNNdroid采纳的措施是:保持有的层短期驻扎留于内存中,而另外的交汇每趟都会面给创立及销毁。该接纳经过开发者无需关注,在CNNdroid构造函数中自动就(图5,step3)。采纳器从太特另外重合开头,让尽量多之交汇进入选取器,直到上NetFile中allocated_ram参数指定的内存上限。

注意:allocated_ram参数不宜设置的了好,比如说,Android
5.0在系统层就会限制每个App的内存上限为512MB。

现有的Android App能够长足的入此库房,无需额外的软件倚重(Section 3.3)

3.5 加速的点子

于CNNdroid中,不同的层爆发异之加速法。比如数据交互的卷积层和内需大量密集统计的全连接层,就需要用到RenderScript的框架来兑现移动端的GPU加速。

及时点儿交汇的多数盘算好代表为点积。具体地以来,在卷积层中kernels与input
frames举行卷积;而于全连接层中,总结好代表也矩阵和向量的乘法。在移动装备及用GPU的SIMD单元可以快的开展点积的盘算。由此,我们分别了大气之于量,并且动基于RenderScript框架的预约义点积函数来完成运算。也就是说,我们在软件层面展示了这种总结的并行性,而无像是基于CUDA的桌面总结框架库这样将当时看似题目提交GPU的硬件调度程序。

对峙于卷积层和全连接层,另外层的密集型总结相对较少。由此,它们经多线程并发在多核CPU上开展加速。相比较新鲜之是,由于ReLU层平日出现在卷积层或全连接层之后,所以把它们内置至事先的层中,可以在以多单图像传输时增长CNNdroid的性。

除了上述并行总结的实现之外,CNNdroid还连所有层的单线程顺序执行之贯彻。能够经配备NetFile中的execution_mode参数,指定执行将是各种形式或并行模式(图4)。

开发者能够指定最酷的内存消耗(Section 3.4)

3.6 自动调整

为可以以活动装备及达标异常好之属性,CNNdroid框架的GPU并行加速算法协助于每个GPU线程上实施活动配额,比如说调配该GPU线程的工作量和SIMD
ALUs的工作量。配额的参数调整决定了交互的粒度。

要当NetFile(图4)中开拓了auto-tuning,那么auto-tuner就会在Android
App首差启动时实施。auto-tuner会记录该活动设备上大都独预定义的气象下CNN模型的周转时长,用于调整最佳的配额参数。因而,首破启动App需要花比丰裕的光阴。为了公平性以及重复显明的达我们的尝试,在第4节省被,我们以关掉auto-tuning。

CNN Layer的GPU和CPU加速均扶助(Section 3.5)

4.实验评估

俺们以三星的Galaxy Note 4和金立 One
M9举办了试。选取的模型是几乎单正式的CNN网络:LeNet network for MNIST
dataset [21],Alex Krizhevsky’s network for CIFAR-10 (Alex’s CIFAR-10)
[22], Alex Krizhevsky’s network for ImageNet 2012 dataset (AlexNet)
[20].

极CNN的交汇设置如图6所展示。当移植到CNNdroid格式时,大家还总计了文件大小和内存占用。具体的结果要图7所展现。

我们的试行环境是用手机充满电,同时跻身飞行格局还要以屏幕亮度调整为压低。以下的实验被,并无每一遍都于SD卡加载配置以及模型,因为当首先涂鸦运行时便加载到外存中了。每一趟大家且碰面以16布置图纸作为输入传为CNNdroid
App,接下测量输出的准确性和运行耗时及耗电量。

希冀6: 两种标准的CNN网络的层次

图7: 在CNNdroid格式下以二种标准CNN网络的文件大小以及内存消耗

自动的硬件条件检测(Section 3.6)

4.1准确度

为测量CNNdroid的准确度,我们还要以了CNNdroid和Caffe作相比试验。结果显示两者的结果方差是10之-12次方,也便象征CNNdroid的准确度和Caffe几乎等同。

在走设备上抢先60倍之性提高与缩小130倍增的能耗(Section 4)

4.2性能

图8展现了仅使用CPU的线性运行CNN的运作耗时以及利用GPU加速的周转耗时和增速的倍速。报告彰显的价值是十次运转结果的平均值。

图8:(a)是CNN运行的平分耗时和加速的速率,(b)是整整CNN中可是耗时的卷积层的耗时和加疾速率

背景知识和相关介绍

4.3能耗

大家以“Qualcomm Trepn Profiler”应用程序[25]测Motorola One
M9手机基于AlexNet网络布局的各种一样幅图像的功耗和能耗。
GPU加速实施时,消耗大约523 mW功率和0.4 J能量,而单独以CPU执行时耗费2338
mW功率和51.6 J能量。 由此,GPU加速实施消耗的电池组消耗裁减51.6÷0.4 =
129X。值得注意的是,我们的测中暴发约20%之波动。

2.1移动设备的GPU和桌面平台的GPU的区别

5.结论

咱介绍了CNNdroid:一个当Android平台及冲GPU加速CNN网络的开源库。经过试验评估表明该库能够荣升60倍速,以及130加倍的可以耗节省。相关的代码和表达文档都早就开源并发布于Github上[1]。

现代图形处理单元(GPU)不仅仅可以开图形统计,也克为用来开只是编程的通用总括。台式机的GPU长期以来都是可编程的,近日移动设备上之GPU也开了通用统计的硬件级匡助。但受限于GPU的尺码和功耗,移动GPU和桌面GPU设备或者暴发死死的差距。

6. 有关引用

[1] CNNdroid open source GPU-accelerated library.
https://github.com/ENCP/CNNdroid.

[2] Inchul Song, Hyun-Jun Kim, and Paul Barom Jeon. Deep learning for
real-time robust facial expression recognition on a smartphone. In IEEE
International Conference on Consumer Electronics, pages 564–567, Jan
2014.

[3] Yu-Hsin Chen, Tushar Krishna, Joel Emer, and Vivienne Sze. 14.5
eyeriss: an energy-e cient reconfigurable accelerator for deep
convolutional neural networks. In IEEE International Solid-State
Circuits Conference, pages 262–263, Jan 2016.

[4] Mohammad Motamedi, Philipp Gysel, Venkatesh Akella, and Soheil
Ghiasi. Design space exploration of fpga-based deep convolutional neural
networks. In Asia and South Pacific Design Automation Conference, pages
575–580, Jan 2016.

[5] Paul A Merolla, John V Arthur, Rodrigo Alvarez-Icaza, Andrew S
Cassidy, Jun Sawada, Filipp Akopyan, Bryan L Jackson, Nabil Imam, Chen
Guo, Yutaka Nakamura, Bernard Brezzo, Ivan Vo, Steven K Esser,
Rathinakumar Appuswamy, Brian Taba, Arnon Amir, Myron D Flickner,
William P Risk, Rajit Manohar, and Dharmendra S Modha. A million
spiking-neuron integrated circuit with a scalable communication network
and interface. Science, 345(6197):668–673, 2014.

[6] Yangqing Jia, Evan Shelhamer, Jeff Donahue, Sergey Karayev,
Jonathan Long, Ross Girshick, Sergio Guadarrama, and Trevor Darrell.
Caffe: Convolutional architecture for fast feature embedding. arXiv
preprint arXiv:1408.5093, 2014.

[7] Torch.
http://torch.ch/.
Accessed 2016-08-01.

[8] James Bergstra, Olivier Breuleux, Fr ́ed ́eric Bastien,
Pascal Lamblin, Razvan Pascanu, Guillaume Desjardins, Joseph Turian,
David Warde-Farley, and Yoshua Bengio. Theano: a CPU and GPU math
expression compiler. In Proceedings of the Python for Scientific
Computing Conference, 2010.

[9] TensorFlow.
https://www.tensorflow.org.
Accessed 2016-08-01.

[10] Nvidia cuDNN.
https://developer.nvidia.com/cudnn.
Accessed 2016-08-01.

[11] cuda-convent.
https://code.google.com/p/cuda-convnet/.
Accessed 2016-08-01.

*[12] Velesnet.
https://velesnet.ml/.
Accessed 2016-08-01. *

[13] Caffe Android Library.
https://github.com/sh1r0/caffe-android-lib.
Accessed 2016-08-01.

[14] Torch-7 for Android.
https://github.com/soumith/torch-android.
Accessed 2016-08-01.

*[15] A convolutional neural network for the Android
phone.
https://github.com/radiodee1/
awesome-cnn-android-python. Accessed 2016-08-01. *

[16] Facial attractiveness prediction on Android.
https://github.com/eldog/fmobile.
Accessed 2016-08-01.

*[17] ARM. Mali-T600 Series GPU OpenCL, Version 1.1.0,
Developer Guide. Accessed 2016-08-01. *

*[18] Android RenderScript Developers Guide.
http://developer.android.com/guide/topics/
renderscript/compute.html. Accessed 2016-08-01. *

*[19] Messagepack.
http://msgpack.org/index.html.
*

[20] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E.Hinton. Imagenet
classification with deep convolutional neural networks. In Advances in
Neural Information Processing Systems, 2012.

[21] Y. Lecun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based
learning applied to document recognition. Proceedings of the IEEE,
86(11):2278–2324, Nov 1998.

[22] Alex Krizhevsky. Learning multiple layers of features from tiny
images. Technical report, University of Toronto, 2009.

[23] Trepn power profiler.
https://developer.qualcomm.com/software/trepn-power-profiler.

现代倒GPU的Shader Cores(SC)通常成为多只是编程并行总计单元。每个Shader
Core都是由多少个ALU并行组成。比如,三星的Exynos 5433芯片是出于ARM A53/A57
CPU和Mali T-760 GPU组成(见图2)。T-760
GPU中的各国一个SC都抱有五个VLIW格式的128各ALU。每个128各ALU能够实践SIMD操作,即彼此的少只64员,四独32员或多个16位操作[17]。与桌面平台GPU相比,移动装备的并行ALU架构在交互线程的行实施着还多地赖让软件与编译器,而未是动态硬件调度器。

澳门1495 2

图2: Exynos 5433 mobile processor with ARM A53 / A57 CPU and Mali T-760
GPU

(SC: Shader Core, VLIW: Very Long Instruction Word, SIMD: Single
Instruction Multiple Data

又着重之是,在桌面GPU中普遍利用的线程块快速内存共享机制以动GPU中连无可用,同时多基于CUDA的桌面平台的Library在倒GPU上吗无能够为此。

重新不佳之是,在软件层面这点儿端的差异为是高大的。比如Android提供的RenderScript[18]举凡一个用以并行统计的库房,可是出现线程的机制并无可用。其余,并行线程和相互线程使用的内存中之数有假若一对一底涉及。

2.2 CNNdroid 和桌面平台相关库的比

于服务器和桌面端,已经发出那些成的因GPU加速的并行总计框架而用于CNN网络,诸如Caffe[6],Torch
[7], Theano [8],Tensor- Flow [9], cuDNN [10], cuda-convnet
[11],,and Velesnet
[12],但是由于个别端的硬件和软件的距离,这种加速和并行总结的情势并无可知一向的于移植到活动设备上。比如说,Caffe[6]境遇之卷积操作让举办并易为矩阵乘法,这么些操作对内存的求比强,这在移动装备及是不具体的。再推一个例子,Theano
[8]蒙的并行算法即使同CNNdroid类似,可是于倒GPU中无应用SIMD单元(详见Section
3.5)。

重复不幸之是,桌面的统计库利用桌面GPU和CUDA框架提供的线程管理效果,如飞共享内存和线程同步,这么些在运动GPU和Android提供的RenderScript中全都未可用。

2.3 CNNdroid和走平台相关库的较

每当移动设备上,就当前所精晓之支撑CNN深度上的框架只有[13,14,15,16]。包括了Caffe
Mobile[13]和Torch
Mobile[14],均受限于多对的CPU统计能力,而只有CNNdroid帮忙CPU和GPU(详见Section
3.5)。

另外,CNNdroid还兼容Caffe[6]、Torch[7]、和Theano[8]磨练出的CNN模型,方便急速将模型部署至移动设备上(详见Section
3.2)。

支付环境及,不待安装Android NDK,只待安装Android SDK即可。

3.CNNdroid库

3.1 CNNLayer Types

CNNDroid库扶助几乎大部分底CNN
Layers,比如说卷积层,max/mean池化层,全链接层,ReLu(Rectified Linear
Units)激活函数,LRN(Local Response
诺玛(Norma)lization)层,Softmax等。相关的叙说和各国一样重合的参数设置在开源库中的文档里发出证实[1]。由于库底开源特性,其余的重合为可以随时参与。

3.2 模型的预备

型转换脚本:图3显了哪用练习好的型部署及移动端

CNNdroid库提供了一致多元之台本,能够将不同框架磨练的库转成CNNdroid格式的型,目前曾经支撑Caffe[6],Torch[7],Theano[8],因而可采用上述框架训练模型然后转为CNNdroid库协理的格式,最后运行于Android移动装备及。当然你吧足以套这么些本子写来别样平台的转移脚本,CNNdroid使用MessagePack序列化和储存模型中不同层的参数。具体的底细可以参考开源库的表明文档[1]。

澳门1495 3

祈求3:CNNdroid的模型部署流程

NetFile:开发者需要准备一个名也NetFile.txt的文书文件,类似于Caffe的.prototxt配置文件,NetFile.txt文件用于配置都练习好之范的层次,比如说,CNN
Layer的各层的依次,卷积层中之Padding和Stride的值。图4凡是一个欠文件的样例,更详尽的底细可以参照表明文档[1]。

NetFile中呢堪配备如下参数,allocated_ram:用于指定本框架可以分配的突出特别外存上线(见Section
3.4),execution_mode:用于指定是运用互动形式仍然串行格局(见Section
3.5),auto_tuning:用于指定auto-tuning是否默认开启(见Section 3.6)。

澳门1495 4

祈求4:NetFile示例,怎么样配置亚历克斯(Alex)Net[20]的老三重叠网络布局,
以及allocated_ram, execution_mode,auto_tuning参数的配备

3.3模子的执行

设若用练习好的模型与对应的NetFile文件上传到了移动设备后(图3),这些模型可以吃所当的Android
App轻易的调用(图5),具体的生如下八只步骤:

首先步,在投机的App中倚重CNNdroid库,CNNdroid库只倚重Android
SDK,而不欲安装Android NDK的,也就是说,不指其他的老三方库。

第二步,构造RenderScript和CNNdroid对象(图5所出示之Steps
2和3)。CNNdroid的构造函数需要提供NetFile文件作为输入,并会自动的创办相应的纱层次。

终极,compute函数负责运用练习好之型,总括传入的么图像或者批量图像并回到结果。

澳门1495 5

希冀5: 使用CNNdroid库的六只第一调用步骤,

翔的运模式可瞻仰开源库中的认证文档 [1].

3.4 内存分配

咱俩用曾经练习好之CNN模型,上传到手机的SD卡上,这些模型中含了矩阵式的各层参数。在实施各类一样层前,在compute函数里(图5,step5),相应层的矩阵参数为机关的从SD卡上加载内存里,这会导致大气底内存开销。

为裁减这种内存开销,CNNdroid采取的法子是:保持有底层长时间驻扎留于内存中,而此外的交汇每一回都会师被创建同销毁。该选取经过开发者无需关注,在CNNdroid构造函数中活动就(图5,step3)。接纳器从可是可怜的重合开首,让尽量多之交汇进入选取器,直到上NetFile中allocated_ram参数指定的内存上限。

注意:allocated_ram参数不宜设置的过好,比如说,Android
5.0在系统层就相会限制每个App的内存上限为512MB。

3.5 加速的点子

于CNNdroid中,不同之叠发生异的加速法。比如数据交互的卷积层和消大量凝聚统计的全连接层,就待因而到RenderScript的框架来实现活动端的GPU加速。

立刻有限层的绝大多数计好表示也点积。具体地吧,在卷积层中kernels与input
frames举行卷积;而在全连接层中,计算好象征也矩阵和向量的乘法。在动装备及采用GPU的SIMD单元可以便捷的拓展点积的计。因而,大家分手了大量的为量,并且利用基于RenderScript框架的预定义点积函数来好运算。也就是说,我们在软件层面显示了这种总结的并行性,而不像是基于CUDA的桌面总计框架库这样将及时类问题提交GPU的硬件调度程序。

争持于卷积层和全连接层,此外层的密集型统计相比较少。因而,它们经过多线程并发在多核CPU上进展加速。比较出色之是,由于ReLU层平日现身于卷积层或全连接层之后,所以将其放到至前边的层中,可以以以多单图像传输时提高CNNdroid的习性。

除外上述并行统计的实现之外,CNNdroid还连所有层的单线程顺序执行之兑现。可以经过部署NetFile中的execution_mode参数,指定执行将是各种形式或者并行形式(图4)。

3.6 自动调整

为可以以活动设备及直达最好之属性,CNNdroid框架的GPU并行加速算法援助于每个GPU线程上推行活动配额,比如说调配该GPU线程的工作量和SIMD
ALUs的工作量。配额的参数调整决定了互相的粒度。

设若当NetFile(图4)中开拓了auto-tuning,那么auto-tuner就会当Android
App首浅启动时实施。auto-tuner会记录该活动设备上六只预定义的观下CNN模型的运作时长,用于调整最佳的配额参数。因而,首潮开行App需要花费比丰盛的工夫。为了公平性以及更清的发挥我们的试,在第4省中,我们将关掉auto-tuning。

4.尝试评估

咱俩以三星的Galaxy Note 4和小米 One
M9举办了试验。拔取的模子是多只正规的CNN网络:LeNet network for MNIST
dataset [21],Alex Krizhevsky’s network for CIFAR-10 (Alex’s CIFAR-10)
[22], Alex Krizhevsky’s network for ImageNet 2012 dataset (AlexNet)
[20].

规格CNN的叠设置如图6所出示。当移植到CNNdroid格式时,我们还总括了文件大小和内存占用。具体的结果要图7所著。

我们的试验环境是以手机充满电,同时跻身飞行形式还要以屏幕亮度调整为压低。以下的试行被,并从未每趟都于SD卡加载配置和模型,因为在首先次于运行时刻就是加载到外存中了。每趟大家且会面拿16摆图纸作为输入传给CNNdroid
App,接下去测量输出的准确性和运行耗时以及耗电量。

澳门1495 6

图6: 两种标准的CNN网络的层次

澳门1495 7

图7: 在CNNdroid格式下使用三栽标准CNN网络的文件大小以及内存消耗

4.1准确度

为测量CNNdroid的准确度,我们同时使了CNNdroid和Caffe作相比试验。结果呈现两者的结果方差是10底-12次方,也尽管象征CNNdroid的准确度和Caffe几乎相同。

4.2性能

图8显示了单使用CPU的线性运行CNN的运作耗时以及下GPU加速的周转耗时和增速的倍速。报告呈现的价值是十次运行结果的平均值。

澳门1495 8

图8:(a)是CNN运行的平分耗时和增速的速率,(b)是百分之百CNN中尽耗时的卷积层的耗时和加速速率

4.3能耗

俺们以“Qualcomm Trepn Profiler”应用程序[25]测Samsung One
M9手机基于AlexNet网络布局的各级一样幅图像的功耗和能耗。

GPU加速实施时,消耗大约523 mW功率和0.4 J能量,而独以CPU执行时吃2338
mW功率和51.6 J能量。 由此,GPU加速实施消耗的电池组消耗缩短51.6÷0.4 =
129X。值得注意的凡,我们的测中暴发大体20%的动荡。

5.结论

咱俩介绍了CNNdroid:一个在Android平台及冲GPU加速CNN网络的开源库。经过实验评估表明该库可以提高60倍速,以及130加倍之能耗节省。相关的代码和表明文档都已经开源并发布在Github上[1]。

  1. 有关引用

[1] CNNdroid open source GPU-accelerated
library.https://github.com/ENCP/CNNdroid.

[2] Inchul Song, Hyun-Jun Kim, and Paul Barom Jeon. Deep learning for
real-time robust facial expression recognition on a smartphone. In IEEE
International Conference on Consumer Electronics, pages 564–567, Jan
2014.

[3] Yu-Hsin Chen, Tushar Krishna, Joel Emer, and Vivienne Sze. 14.5
eyeriss: an energy-e cient reconfigurable accelerator for deep
convolutional neural networks. In IEEE International Solid-State
Circuits Conference, pages 262–263, Jan 2016.

[4] Mohammad Motamedi, Philipp Gysel, Venkatesh Akella, and Soheil
Ghiasi. Design space exploration of fpga-based deep convolutional neural
networks. In Asia and South Pacific Design Automation Conference, pages
575–580, Jan 2016.

[5] Paul A Merolla, John V Arthur, Rodrigo Alvarez-Icaza, Andrew S
Cassidy, Jun Sawada, Filipp Akopyan, Bryan L Jackson, Nabil Imam, Chen
Guo, Yutaka Nakamura, Bernard Brezzo, Ivan Vo, Steven K Esser,
Rathinakumar Appuswamy, Brian Taba, Arnon Amir, Myron D Flickner,
William P Risk, Rajit Manohar, and Dharmendra S Modha. A million
spiking-neuron integrated circuit with a scalable communication network
and interface. Science, 345(6197):668–673, 2014.

[6] Yangqing Jia, Evan Shelhamer, Jeff Donahue, Sergey Karayev,
Jonathan Long, Ross Girshick, Sergio Guadarrama, and Trevor Darrell.
Caffe: Convolutional architecture for fast feature embedding. arXiv
preprint arXiv:1408.5093, 2014.

[7]
Torch.http://torch.ch/
Accessed 2016-08-01.

[8] James Bergstra, Olivier Breuleux, Fr ́ed ́eric Bastien,

Pascal Lamblin, Razvan Pascanu, Guillaume Desjardins, Joseph Turian,
David Warde-Farley, and Yoshua Bengio. Theano: a CPU and GPU math
expression compiler. In Proceedings of the Python for Scientific
Computing Conference, 2010.

[9]
TensorFlow.https://www.tensorflow.org
Accessed 2016-08-01.

[10] Nvidia
cuDNN.https://developer.nvidia.com/cudnn
Accessed 2016-08-01.

[11]
cuda-convent.https://code.google.com/p/cuda-convnet/.
Accessed 2016-08-01.

*[12]
Velesnet.https://velesnet.ml/
Accessed 2016-08-01. *

[13] Caffe Android Library.

https://github.com/sh1r0/caffe-android-lib.
Accessed 2016-08-01.

[14] Torch-7 for Android.

https://github.com/soumith/torch-android.
Accessed 2016-08-01.

*[15] A convolutional neural network for the Android

phone.https://github.com/radiodee1/

awesome-cnn-android-python.  Accessed 2016-08-01. *

[16] Facial attractiveness prediction on
Android.https://github.com/eldog/fmobile
Accessed 2016-08-01.

*[17] ARM. Mali-T600 Series GPU OpenCL, Version 1.1.0,

Developer Guide. Accessed 2016-08-01. *

*[18] Android RenderScript Developers Guide.

http://developer.android.com/guide/topics/

renderscript/compute.html. Accessed 2016-08-01. *

*[19]
Messagepack.http://msgpack.org/index.html.
*

[20] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E.Hinton. Imagenet
classification with deep convolutional neural networks. In Advances in
Neural Information Processing Systems, 2012.

[21] Y. Lecun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based
learning applied to document recognition. Proceedings of the IEEE,
86(11):2278–2324, Nov 1998.

[22] Alex Krizhevsky. Learning multiple layers of features from tiny
images. Technical report, University of Toronto, 2009.

[23] Trepn power
profiler.https://developer.qualcomm.com/software/trepn-power-profiler.

相关文章

Your Comments

近期评论

    功能


    网站地图xml地图