CNNdroid:在Android上利用GPU加速執(zhí)行CNN(卷積神經(jīng)網(wǎng)絡(luò))

轉(zhuǎn)載請(qǐng)注明來(lái)源

該文章翻譯自:

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

原論文地址

摘要

智能設(shè)備和可穿戴設(shè)備都將受益于深度學(xué)習(xí)算法(比如CNN)的準(zhǔn)確性和可擴(kuò)展性阁吝。然而,性能和能耗等現(xiàn)實(shí)的問(wèn)題使得在移動(dòng)端設(shè)備上這類密集計(jì)算的算法變得非常受限暖侨。我們開(kāi)發(fā)了CNNdroid這個(gè)GPU加速庫(kù)树枫,可以在Android設(shè)備上實(shí)現(xiàn)CNN網(wǎng)絡(luò)的訓(xùn)練峭范。通過(guò)實(shí)驗(yàn)部蛇,CNNdroid在移動(dòng)設(shè)備上實(shí)現(xiàn)了60倍速的提升,以及130倍速的節(jié)能努潘。CNNdroid這個(gè)庫(kù)已經(jīng)開(kāi)源在Github上垃沦,可以從Github項(xiàng)目頁(yè)面

關(guān)鍵詞

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

1.介紹

智能手機(jī)客给、可穿戴設(shè)備、微型機(jī)器人栏尚、物聯(lián)網(wǎng)等越來(lái)越多的移動(dòng)平臺(tái)都在深度學(xué)習(xí)的領(lǐng)域找到了相應(yīng)的應(yīng)用方向(如圖1)起愈。例如在移動(dòng)設(shè)備上,語(yǔ)音識(shí)別和圖像識(shí)別等許多App都受益于機(jī)器學(xué)習(xí)的本地算法译仗。如果允許將模型等數(shù)據(jù)直接放在客戶端抬虽,就可以避免和服務(wù)器的上下行數(shù)據(jù)交互而導(dǎo)致的網(wǎng)絡(luò)延遲等體驗(yàn)的問(wèn)題。CNN卷積網(wǎng)絡(luò)在預(yù)測(cè)的精確性和可擴(kuò)展性上都取得了很先進(jìn)的成果纵菌,然而像此類密集計(jì)算型的網(wǎng)絡(luò)結(jié)構(gòu)必須依賴硬件級(jí)加速才可能在移動(dòng)設(shè)備上得到廣泛的應(yīng)用阐污。

圖1:CNN在移動(dòng)設(shè)備上的應(yīng)用

許多基于深度學(xué)習(xí)的硬件加速平臺(tái)都有相應(yīng)的解決方案了,IBM也正在開(kāi)發(fā)一種用于神經(jīng)網(wǎng)絡(luò)的CMOS的芯片咱圆,用于在移動(dòng)設(shè)備和物聯(lián)網(wǎng)設(shè)備上糠悼。與此同時(shí)窟社,類似的解決方案依然處于早期的研發(fā)階段麦到,也并沒(méi)有商用到現(xiàn)有的移動(dòng)設(shè)備上这弧。

和基于硬件的加速平臺(tái)不同的是,GPU已經(jīng)大規(guī)模的商用到現(xiàn)在的移動(dòng)設(shè)備上了忱详,同時(shí)在軟件層面的編碼支持也做的非常完善了围来。利用GPU現(xiàn)成的并行計(jì)算能力去實(shí)現(xiàn)CNN神經(jīng)網(wǎng)絡(luò)在移動(dòng)端設(shè)備上的計(jì)算加速是完全可行的。

現(xiàn)存的GPU加速方案的深度學(xué)習(xí)CNN的開(kāi)源庫(kù)有很多種匈睁,都是基于服務(wù)器和桌面平臺(tái)的[見(jiàn)附錄的6, 7, 8, 9, 10, 11, 12].然而监透,由于平臺(tái)架構(gòu)的差異,簡(jiǎn)單的把這些開(kāi)源庫(kù)移植到移動(dòng)端上航唆,在某些Case下效果是欠佳的(見(jiàn)2.2節(jié))胀蛮。目前在移動(dòng)端上,據(jù)我們所知糯钙,并沒(méi)有相應(yīng)的帶有GPU加速的深度學(xué)習(xí)計(jì)算框架的開(kāi)源庫(kù)粪狼,這些庫(kù) [見(jiàn)附錄的13, 14, 15, 16]僅僅能夠利用移動(dòng)設(shè)備的CPU多核計(jì)算能力退腥,而這樣局限性很大。

如今再榄,我們提供一個(gè)支持GPU加速的開(kāi)源庫(kù)阅虫,稱為“CNNdroid”,可以在Android平臺(tái)用來(lái)通過(guò)訓(xùn)練數(shù)據(jù)集的方式設(shè)計(jì)和優(yōu)化CNN的網(wǎng)絡(luò)不跟。以下是CNNdroid的幾個(gè)主要亮點(diǎn)。

  1. 支持幾乎所有的CNN的Layer Type(Section 3.1)
  2. 兼容Caffe[6]米碰、Torch[7]窝革、Theano[8]這些開(kāi)源框架在PC平臺(tái)、服務(wù)器平臺(tái)上已經(jīng)訓(xùn)練好的模型(Section 3.2)
  3. 現(xiàn)有的Android App可以快速的加入這個(gè)庫(kù)吕座,無(wú)需額外的軟件依賴(Section 3.3)
  4. 開(kāi)發(fā)者可以指定最大的內(nèi)存消耗(Section 3.4)
  5. CNN Layer的GPU和CPU加速均支持(Section 3.5)
  6. 自動(dòng)的硬件條件檢測(cè)(Section 3.6)
  7. 在移動(dòng)設(shè)備上超過(guò)60倍的性能提升以及減少130倍的能耗(Section 4)

背景知識(shí)以及相關(guān)介紹

2.1移動(dòng)設(shè)備的GPU和桌面平臺(tái)的GPU的區(qū)別

現(xiàn)代圖形處理單元(GPU)不僅僅能做圖形計(jì)算虐译,也能夠被用來(lái)做可編程的通用計(jì)算。臺(tái)式機(jī)的GPU長(zhǎng)期以來(lái)都是可編程的吴趴,近期移動(dòng)設(shè)備上的GPU也開(kāi)放了通用計(jì)算的硬件級(jí)支持漆诽。但受限于GPU的尺寸和功耗,移動(dòng)GPU和桌面GPU設(shè)備還是有很大的差異锣枝。

現(xiàn)代移動(dòng)GPU的Shader Cores(SC)通常成為若干可編程并行計(jì)算單元厢拭。每個(gè)Shader Core都是由若干個(gè)ALU并行組成。比如撇叁,三星的Exynos 5433芯片是由ARM A53/A57 CPU和Mali T-760 GPU組成(見(jiàn)圖2)供鸠。T-760 GPU中的每一個(gè)SC都具有兩個(gè)VLIW格式的128位ALU。每個(gè)128位ALU能夠執(zhí)行SIMD操作陨闹,即并行的兩個(gè)64位楞捂,四個(gè)32位或八個(gè)16位操作[17]。與桌面平臺(tái)GPU相比趋厉,移動(dòng)設(shè)備的并行ALU架構(gòu)在并行線程的有效執(zhí)行中更多地依賴于軟件和編譯器寨闹,而不是動(dòng)態(tài)硬件調(diào)度器。

圖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中廣泛應(yīng)用的線程塊快速內(nèi)存共享機(jī)制在移動(dòng)GPU中并不可用繁堡,同時(shí)許多基于CUDA的桌面平臺(tái)的Library在移動(dòng)GPU上也不可以用。

更不幸的是杈绸,在軟件層面這兩端的差異也是巨大的帖蔓。比如Android提供的RenderScript[18]是一個(gè)用于并行計(jì)算的庫(kù),但是并發(fā)線程的機(jī)制并不可用瞳脓。另外塑娇,并行線程和并行線程使用的內(nèi)存中的數(shù)據(jù)部分必須是一對(duì)一的關(guān)系。

2.2 CNNdroid 和桌面平臺(tái)相關(guān)庫(kù)的比較

在服務(wù)器和桌面端劫侧,已經(jīng)有很多現(xiàn)成的基于GPU加速的并行計(jì)算框架可用于CNN網(wǎng)絡(luò)埋酬,諸如Caffe[6]哨啃,Torch [7], Theano [8],Tensor- Flow [9]写妥, cuDNN [10]拳球, cuda-convnet [11],,and Velesnet [12]珍特,然而由于兩端的硬件和軟件的差異祝峻,這種加速和并行計(jì)算的方法并不能直接的被移植到移動(dòng)設(shè)備上。比如說(shuō)扎筒,Caffe[6]中的卷積操作被展開(kāi)并轉(zhuǎn)換為矩陣乘法莱找,這些操作對(duì)內(nèi)存的要求比較高,這在移動(dòng)設(shè)備上是不現(xiàn)實(shí)的嗜桌。再舉一個(gè)例子奥溺,Theano [8]中的并行算法雖然與CNNdroid類似,但是在移動(dòng)GPU中沒(méi)有使用SIMD單元(詳見(jiàn)Section 3.5)骨宠。

更不幸的是浮定,桌面的計(jì)算庫(kù)利用桌面GPU和CUDA框架提供的線程管理功能,如快速共享內(nèi)存和線程同步层亿,這些在移動(dòng)GPU和Android提供的RenderScript中均不可用桦卒。

2.3 CNNdroid和移動(dòng)平臺(tái)相關(guān)庫(kù)的比較

在移動(dòng)設(shè)備上,就目前所知的支持CNN深度學(xué)習(xí)的框架只有[13匿又,14闸盔,15,16]琳省。包括了Caffe Mobile[13]和Torch Mobile[14]迎吵,均受限于多核的CPU計(jì)算能力,而只有CNNdroid支持CPU和GPU(詳見(jiàn)Section 3.5)针贬。

另外击费,CNNdroid還兼容Caffe[6]、Torch[7]桦他、和Theano[8]訓(xùn)練出來(lái)的CNN模型蔫巩,方便快速將模型部署到移動(dòng)設(shè)備上(詳見(jiàn)Section 3.2)。

開(kāi)發(fā)環(huán)境上快压,不需要安裝Android NDK圆仔,只需要安裝Android SDK即可。

3.CNNdroid庫(kù)

3.1 CNNLayer Types

CNNDroid庫(kù)支持幾乎大部分的CNN Layers蔫劣,比如說(shuō)卷積層坪郭,max/mean池化層,全鏈接層脉幢,ReLu(Rectified Linear Units)激活函數(shù)歪沃,LRN(Local Response Normalization)層嗦锐,Softmax等。相關(guān)的描述和每一層的參數(shù)設(shè)置在開(kāi)源庫(kù)中的文檔里有說(shuō)明[1]沪曙。由于庫(kù)的開(kāi)源特性奕污,其它的層也可以隨時(shí)加入。

3.2 模型的準(zhǔn)備

模型轉(zhuǎn)換腳本:圖3展示了如何將訓(xùn)練好的模型部署到移動(dòng)端
CNNdroid庫(kù)提供了一系列的腳本液走,可以把不同框架訓(xùn)練的庫(kù)轉(zhuǎn)成CNNdroid格式的模型碳默,目前已經(jīng)支持Caffe[6],Torch[7]缘眶,Theano[8]腻窒,因此可以使用以上框架訓(xùn)練模型然后轉(zhuǎn)為CNNdroid庫(kù)支持的格式,最終運(yùn)行在Android移動(dòng)設(shè)備上磅崭。當(dāng)然你也可以模仿這些腳本寫(xiě)出其它平臺(tái)的轉(zhuǎn)換腳本,CNNdroid使用MessagePack序列化和存儲(chǔ)模型中不同層的參數(shù)瓦哎。具體的細(xì)節(jié)可以參考開(kāi)源庫(kù)的說(shuō)明文檔[1]砸喻。

圖3:CNNdroid的模型部署流程

NetFile:開(kāi)發(fā)者需要準(zhǔn)備一個(gè)名為NetFile.txt的文本文件,類似于Caffe的.prototxt配置文件蒋譬,NetFile.txt文件用于配置已經(jīng)訓(xùn)練好的模型的層次割岛,比如說(shuō),CNN Layer的各層的順序犯助,卷積層中的Padding和Stride的值癣漆。圖4是一個(gè)該文件的樣例,更詳細(xì)的細(xì)節(jié)可以參考說(shuō)明文檔[1]剂买。

NetFile中也可以配置如下參數(shù)惠爽,allocated_ram:用于指定本框架可以分配的最大內(nèi)存上線(見(jiàn)Section 3.4),execution_mode:用于指定是采用并行模式還是串行模式(見(jiàn)Section 3.5)瞬哼,auto_tuning:用于指定auto-tuning是否默認(rèn)開(kāi)啟(見(jiàn)Section 3.6)婚肆。

圖4:NetFile示例,如何配置AlexNet[20]的三層網(wǎng)絡(luò)結(jié)構(gòu), 以及allocated_ram, execution_mode坐慰,auto_tuning參數(shù)的配置

3.3模型的執(zhí)行

一旦將訓(xùn)練好的模型和相應(yīng)的NetFile文件上傳到了移動(dòng)設(shè)備后(圖3)较性,這個(gè)模型可以被所在的Android App輕易的調(diào)用(圖5),具體的有如下幾個(gè)步驟:

第一步结胀,在自己的App中依賴CNNdroid庫(kù)赞咙,CNNdroid庫(kù)只依賴Android SDK,而不需要安裝Android NDK的糟港,也就是說(shuō)攀操,不依賴其他的第三方庫(kù)。

第二步秸抚,構(gòu)造RenderScript和CNNdroid對(duì)象(圖5所示的Steps 2和3)崔赌。CNNdroid的構(gòu)造函數(shù)需要提供NetFile文件作為輸入意蛀,并會(huì)自動(dòng)的創(chuàng)建相應(yīng)的網(wǎng)絡(luò)層次。

最后健芭,compute函數(shù)負(fù)責(zé)利用訓(xùn)練好的模型县钥,計(jì)算傳入的單個(gè)圖像或者批量圖像并返回結(jié)果。

圖5: 使用CNNdroid庫(kù)的幾個(gè)關(guān)鍵調(diào)用步驟慈迈, 詳細(xì)的使用方法可以參見(jiàn)開(kāi)源庫(kù)中的說(shuō)明文檔 [1].

3.4 內(nèi)存分配

我們將已經(jīng)訓(xùn)練好的CNN模型若贮,上傳到手機(jī)的SD卡上,這些模型中包含了矩陣式的各層參數(shù)痒留。在執(zhí)行每一層前谴麦,在compute函數(shù)里(圖5,step5)伸头,相應(yīng)層的矩陣參數(shù)被自動(dòng)的從SD卡上加載內(nèi)存里匾效,這會(huì)導(dǎo)致大量的內(nèi)存開(kāi)銷。

為了減少這種內(nèi)存開(kāi)銷恤磷,CNNdroid采用的方法是:保持一部分的層長(zhǎng)期駐留在內(nèi)存中面哼,而其他的層每次都會(huì)被創(chuàng)建和銷毀。該選擇過(guò)程開(kāi)發(fā)者無(wú)需關(guān)心扫步,在CNNdroid構(gòu)造函數(shù)中自動(dòng)完成(圖5魔策,step3)。選擇器從最大的層開(kāi)始河胎,讓盡量多的層進(jìn)入選擇器闯袒,直到達(dá)到NetFile中allocated_ram參數(shù)指定的內(nèi)存上限。

注意:allocated_ram參數(shù)不宜設(shè)置的過(guò)大游岳,比如說(shuō)政敢,Android 5.0在系統(tǒng)層就會(huì)限制每個(gè)App的內(nèi)存上限為512MB。

3.5 加速的方法

在CNNdroid中胚迫,不同的層有不同的加速方法堕仔。比如數(shù)據(jù)并行的卷積層和需要大量密集計(jì)算的全連接層,就需要用到RenderScript的框架來(lái)實(shí)現(xiàn)移動(dòng)端的GPU加速晌区。

這兩層的大部分計(jì)算可以表示為點(diǎn)積摩骨。具體地來(lái)說(shuō),在卷積層中kernels與input frames進(jìn)行卷積朗若;而在全連接層中恼五,計(jì)算可以表示為矩陣和向量的乘法。在移動(dòng)設(shè)備上使用GPU的SIMD單元可以高效的進(jìn)行點(diǎn)積的計(jì)算哭懈。因此灾馒,我們分離了大量的向量,并且使用基于RenderScript框架的預(yù)定義點(diǎn)積函數(shù)來(lái)完成運(yùn)算遣总。也就是說(shuō)睬罗,我們?cè)谲浖用骟w現(xiàn)了這種計(jì)算的并行性轨功,而不像是基于CUDA的桌面計(jì)算框架庫(kù)那樣把這類問(wèn)題交給GPU的硬件調(diào)度程序。

相對(duì)于卷積層和全連接層容达,其它層的密集型計(jì)算相對(duì)較少古涧。因此,它們通過(guò)多線程并發(fā)在多核CPU上進(jìn)行加速花盐。比較特殊的是羡滑,由于ReLU層通常出現(xiàn)在卷積層或全連接層之后,所以把它嵌入到之前的層中算芯,可以在將多個(gè)圖像傳輸時(shí)提高CNNdroid的性能柒昏。

除了上述并行計(jì)算的實(shí)現(xiàn)之外,CNNdroid還包括所有層的單線程順序執(zhí)行的實(shí)現(xiàn)熙揍≈暗唬可以通過(guò)配置NetFile中的execution_mode參數(shù),指定執(zhí)行將是順序模式還是并行模式(圖4)届囚。

3.6 自動(dòng)調(diào)整

為了能夠在移動(dòng)設(shè)備上達(dá)到最好的性能有梆,CNNdroid框架的GPU并行加速算法支持在每個(gè)GPU線程上執(zhí)行自動(dòng)配額,比如說(shuō)調(diào)配該GPU線程的工作量以及SIMD ALUs的工作量奖亚。配額的參數(shù)調(diào)整決定了并行的粒度。

如果在NetFile(圖4)中打開(kāi)了auto-tuning析砸,那么auto-tuner就會(huì)在Android App首次啟動(dòng)時(shí)執(zhí)行昔字。auto-tuner會(huì)記錄該移動(dòng)設(shè)備上多個(gè)預(yù)定義的情景下CNN模型的運(yùn)行時(shí)長(zhǎng),用于調(diào)整最佳的配額參數(shù)首繁。因此作郭,首次啟動(dòng)App需要花費(fèi)較長(zhǎng)的時(shí)間。為了公平性以及更清晰的表述我們的實(shí)驗(yàn)弦疮,在第4節(jié)中夹攒,我們將關(guān)掉auto-tuning。

4.實(shí)驗(yàn)評(píng)估

我們?cè)谌堑腉alaxy Note 4和HTC One M9進(jìn)行了實(shí)驗(yàn)胁塞。采用的模型是幾個(gè)標(biāo)準(zhǔn)的CNN網(wǎng)絡(luò):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].

基準(zhǔn)CNN的層設(shè)置如圖6所示啸罢。當(dāng)移植到CNNdroid格式時(shí)编检,我們還統(tǒng)計(jì)了文件大小和內(nèi)存占用。具體的結(jié)果如圖7所示扰才。

我們的實(shí)驗(yàn)環(huán)境是將手機(jī)充滿電允懂,同時(shí)進(jìn)入飛行模式并且將屏幕亮度調(diào)為最低。以下的實(shí)驗(yàn)中衩匣,并沒(méi)有每次都從SD卡加載配置和模型蕾总,因?yàn)樵诘谝淮芜\(yùn)行時(shí)候就加載到內(nèi)存中了粥航。每次我們都會(huì)將16張圖片作為輸入傳給CNNdroid App,接下來(lái)測(cè)量輸出的準(zhǔn)確性以及運(yùn)行耗時(shí)和耗電量生百。

圖6: 三種標(biāo)準(zhǔn)的CNN網(wǎng)絡(luò)的層次
圖7: 在CNNdroid格式下使用三種標(biāo)準(zhǔn)CNN網(wǎng)絡(luò)的文件大小以及內(nèi)存消耗

4.1準(zhǔn)確度

為了測(cè)量CNNdroid的準(zhǔn)確度递雀,我們同時(shí)使用了CNNdroid和Caffe作對(duì)比實(shí)驗(yàn)。結(jié)果顯示兩者的結(jié)果方差是10的-12次方置侍,也就意味著CNNdroid的準(zhǔn)確度和Caffe幾乎一樣映之。

4.2性能

圖8顯示了僅使用CPU的線性運(yùn)行CNN的運(yùn)行耗時(shí)以及使用GPU加速的運(yùn)行耗時(shí)和加快的倍速。報(bào)告顯示的值是十次運(yùn)行結(jié)果的平均值蜡坊。

圖8:(a)是CNN運(yùn)行的平均耗時(shí)和加速的速率杠输,(b)是整個(gè)CNN中最耗時(shí)的卷積層的耗時(shí)和加速速率

4.3能耗

我們使用“Qualcomm Trepn Profiler”應(yīng)用程序[25]測(cè)量HTC One M9手機(jī)基于AlexNet網(wǎng)絡(luò)結(jié)構(gòu)的每一幅圖像的功耗和能耗。
GPU加速執(zhí)行時(shí)秕衙,消耗約523 mW功率和0.4 J能量蠢甲,而僅僅使用CPU執(zhí)行時(shí)消耗2338 mW功率和51.6 J能量。 因此据忘,GPU加速執(zhí)行消耗的電池消耗減少51.6÷0.4 = 129X鹦牛。值得注意的是,我們的測(cè)量中有大約20%的波動(dòng)勇吊。

5.結(jié)論

我們介紹了CNNdroid:一個(gè)在Android平臺(tái)上基于GPU加速CNN網(wǎng)絡(luò)的開(kāi)源庫(kù)曼追。經(jīng)過(guò)實(shí)驗(yàn)評(píng)估證明該庫(kù)可以提升60倍速,以及130倍的能耗節(jié)省汉规。相關(guān)的代碼以及說(shuō)明文檔都已經(jīng)開(kāi)源并發(fā)布在Github上[1]礼殊。

6. 相關(guān)引用

[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.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市针史,隨后出現(xiàn)的幾起案子晶伦,更是在濱河造成了極大的恐慌,老刑警劉巖啄枕,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婚陪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡频祝,警方通過(guò)查閱死者的電腦和手機(jī)泌参,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)常空,“玉大人及舍,你說(shuō)我怎么就攤上這事】弑粒” “怎么了锯玛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我攘残,道長(zhǎng)拙友,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任歼郭,我火速辦了婚禮遗契,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘病曾。我一直安慰自己牍蜂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布泰涂。 她就那樣靜靜地躺著鲫竞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逼蒙。 梳的紋絲不亂的頭發(fā)上从绘,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音是牢,去河邊找鬼僵井。 笑死,一個(gè)胖子當(dāng)著我的面吹牛驳棱,可吹牛的內(nèi)容都是我干的批什。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼社搅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼驻债!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起罚渐,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤却汉,失蹤者是張志新(化名)和其女友劉穎驯妄,沒(méi)想到半個(gè)月后荷并,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡青扔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年源织,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片微猖。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谈息,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凛剥,到底是詐尸還是另有隱情侠仇,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站逻炊,受9級(jí)特大地震影響互亮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜余素,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一豹休、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桨吊,春花似錦威根、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至炊林,卻和暖如春姥卢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渣聚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工独榴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奕枝。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓棺榔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親隘道。 傳聞我的和親對(duì)象是個(gè)殘疾皇子症歇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容