AI開發(fā)者看過來,主流移動端深度學(xué)習(xí)框架大盤點
移動設(shè)備相較于 PC ,攜帶便攜,普及率高。近年來,隨著移動設(shè)備的廣泛普及與應(yīng)用,在移動設(shè)備上使用深度學(xué)習(xí)技術(shù)的需求開始涌現(xiàn)。
作者 dangbo 在《移動端深度學(xué)習(xí)展望》一文中對現(xiàn)階段的移動端深度學(xué)習(xí)做了相關(guān)展望。作者認(rèn)為,現(xiàn)階段的移動端 APP 主要通過以下兩種模式來使用深度學(xué)習(xí):
- online 方式:移動端做初步預(yù)處理,把數(shù)據(jù)傳到服務(wù)器執(zhí)行深度學(xué)習(xí)模型,優(yōu)點是這個方式部署相對簡單,將現(xiàn)成的框架(Caffe,Theano,MXNet,Torch) 做下封裝就可以直接拿來用,服務(wù)器性能大, 能夠處理比較大的模型,缺點是必須聯(lián)網(wǎng)。
- offline 方式:在服務(wù)器上進(jìn)行訓(xùn)練的過程,在手機上進(jìn)行預(yù)測的過程。

當(dāng)前移動端的三大框架(Caffe2、TensorFlow Lite、Core ML)均使用 offline 方式,該方式可在無需網(wǎng)絡(luò)連接的情況下確保用戶數(shù)據(jù)的私密性。
各主流移動端深度學(xué)習(xí)框架誕生時間如下:
- 2017 年 3 月,XMART LABS 在 GitHub 上開源 Bender
- 2017 年 4 月 19 日,F(xiàn)acebook 在 F8 開發(fā)者大會上推出 Caffe2
- 2017 年 5 月 17 日,在 Google I/O 2017 大會上,移動端深度學(xué)習(xí)框架 TensorFlow Lite 誕生
- 2017 年 6 月 6 日,蘋果在 WWDC 大會上推出 Core ML
- 2017 年 9 月 25 日,百度開源移動端深度學(xué)習(xí)框架 mobile-deep-learning(MDL)
- ......
接下來,將介紹當(dāng)前主流的移動端深度學(xué)習(xí)框架,其中包括移動端三大框架——Facebook、谷歌、蘋果三大巨頭發(fā)布的 Caffe2、TensorFlow Lite、Core ML,新秀 Bender,國產(chǎn)百度 MDL 以及支持移動端的 MXNet,以便剛剛?cè)肟拥拈_發(fā)者們對這些框架有初步的了解和認(rèn)識。
Facebook 開源 Caffe2,最終將其并入 PyTorch

2017 年 4 月 19 日的 F8 年度開發(fā)者大會上,F(xiàn)acebook 發(fā)布了一款全新的開源深度學(xué)習(xí)框架——Caffe2,按照 Caffe2 官網(wǎng)介紹,它最大的特點就是輕量、模塊化和可擴展性,即一次編碼,到處運行(和 Java 的宣傳語類似)。說得更直白一點,就是 Caffe2 可以方便地為手機等移動終端設(shè)備帶來 AI 加持,讓 AI 從云端走向終端。
Caffe2 在此前流行的開源框架 Caffe 基礎(chǔ)上進(jìn)行了重構(gòu)和升級,一方面集成了諸多新出現(xiàn)的算法和模型,另一方面在保證運算性能和可擴展性的基礎(chǔ)上,重點加強了框架在輕量級硬件平臺的部署能力。它可以部署在包括 iOS,Android,英偉達(dá) Tegra X1 和樹莓派(Raspberry Pi)等在內(nèi)的各種移動平臺上。用戶只需要加載 Caffe2 框架,然后通過幾行簡單的 API 接口調(diào)用(Python 或 C++),就能在手機 APP 上實現(xiàn)圖像識別、自然語言處理和計算機視覺等各種 AI 功能。此外,Caffe2 還對 Caffe 平臺的另一項核心競爭力:Model Zoo 社區(qū)方面提供了完整的支持。
除了框架自身,Caffe2 還獲得了一系列的云平臺支持,例如亞馬遜 AWS 旗下的 Deep Learning AMI和微軟 Azure 旗下 Data Science Virtual Machine (DSVM),另外也獲得了英偉達(dá)和高通的硬件平臺支持。目前,Caffe2 框架已經(jīng)被 Facebook 內(nèi)部采用,開發(fā)者和研究人員們正在使用該框架提供的各種工具訓(xùn)練大型的機器學(xué)習(xí)模型,并為 Facebook 旗下的移動應(yīng)用提供 AI 智能體驗。
現(xiàn)在 Caffe2 代碼也已正式并入 PyTorch,來使 Facebook 能在大規(guī)模服務(wù)器和移動端部署時更流暢地進(jìn)行 AI 研究、訓(xùn)練和推理。
- Caffe2 官網(wǎng):http://Caffe2.ai/
- GitHub 地址:https://github.com/Caffe2/Caffe2
- Caffe2go 移動端項目 Github 鏈接: https://github.com/Caffe2/Caffe2
谷歌移動端深度學(xué)習(xí)框架 TensorFlow Lite,有望成為移動端模型部署推薦解決方案
谷歌于美國時間 2017 年 11 月 14 日正式發(fā)布 TensorFlow Lite 預(yù)覽版,這一框架主要用于移動端和嵌入式設(shè)備,顧名思義,相較于 TensorFlow,TensorFlow Lite 是一個輕量化版本。這個開發(fā)框架專門為機器學(xué)習(xí)模型的低延遲推理做了優(yōu)化,專注于更少的內(nèi)存占用以及更快的運行速度。
TensorFlow Lite 具備以下三個重要功能:
- 輕量級(Lightweight):支持機器學(xué)習(xí)模型的推理在較小二進(jìn)制數(shù)下進(jìn)行,能快速初始化/啟動
- 跨平臺(Cross-platform):可以在許多不同的平臺上運行,現(xiàn)在支持 Android 和 iOS
- 快速(Fast):針對移動設(shè)備進(jìn)行了優(yōu)化,包括大大減少了模型加載時間、支持硬件加速
結(jié)構(gòu)
下圖是 TensorFlow Lite 的結(jié)構(gòu)設(shè)計:

模塊如下:
- TensorFlow Model: 存儲在硬盤上已經(jīng)訓(xùn)練好的 TensorFlow 模型
- TensorFlow Lite Converter: 將模型轉(zhuǎn)換為 TensorFlow Lite 文件格式的程序
- TensorFlow Lite Model File: 基于 FlatBuffers 的模型文件格式,針對速度和大小進(jìn)行了優(yōu)化。
模型
- TensorFlow Lite 目前支持很多針對移動端訓(xùn)練和優(yōu)化好的模型。
- MobileNet:能夠識別 1000 種不同對象類的視覺模型,為實現(xiàn)移動和嵌入式設(shè)備的高效執(zhí)行而設(shè)計。
- Inception v3:圖像識別模型,功能與 MobileNet 相似,它提供更高的精度,但相對來說更大。
- Smart Reply: 設(shè)備對話模型,可以即時回復(fù)聊天消息,在 Android Wear 上有使用這一功能。
Inception v3 和 MobileNets 已經(jīng)在 ImageNet 數(shù)據(jù)集上訓(xùn)練了。大家可以利用遷移學(xué)習(xí)來輕松地對自己的圖像數(shù)據(jù)集進(jìn)行再訓(xùn)練。
TensorFlow Lite 發(fā)布一個月后,谷歌即宣布與蘋果達(dá)成合作——TensorFlow Lite 將支持 Core ML。TensorFlow Lite 為 Core ML 提供支持后,iOS 開發(fā)者就可以利用 Core ML 的優(yōu)勢來部署模型。
目前,該框架還在不斷更新與升級中,隨著 TensorFlow 的用戶群體越來越多,同時得益于谷歌的背書,假以時日,TensorFlow Lite 極大可能會成為在移動端和嵌入式設(shè)備上部署模型的推薦解決方案。
- TensorFlow Lite 文檔頁面:http://Tensorflow.org/mobile/tflite
- Core ML 轉(zhuǎn)化器頁面:https://github.com/tf-coreml/tf-coreml
- pypi pip 安裝包地址:https://pypi.python.org/pypi/tfcoreml/0.1.0
蘋果 Core ML:離線狀態(tài)下,隱私與 AI 可兼得。

蘋果在 2017WWDC 大會更新 iOS 11 時一并推出了面向開發(fā)者的全新機器學(xué)習(xí)框架——Core ML,聲稱能讓本地數(shù)據(jù)處理愈加方便快捷。據(jù)介紹,Core ML 提供支持人臉追蹤、人臉檢測、地標(biāo)、文本檢測、條碼識別、物體追蹤、圖像匹配等任務(wù)的 API。
據(jù)了解,Core ML 是一個基礎(chǔ)機器學(xué)習(xí)框架,能用于眾多蘋果的產(chǎn)品,包括 Siri、相機和 QuickType。據(jù)官方介紹,Core ML 帶來了極速的性能提升和機器學(xué)習(xí)模型的輕松整合,能將眾多機器學(xué)習(xí)模型集成到 APP 中。它不但有 30 多種層來支持廣泛的深度學(xué)習(xí),而且還支持諸如樹集成、SVM 和廣義線性模型等標(biāo)準(zhǔn)模型。
蘋果在 Core ML 開發(fā)文檔中如此介紹:
- 使用 Core ML,你可以將訓(xùn)練好的模型整合進(jìn)自己開發(fā)的 APP 中。Core ML 支持用于圖像分析的 Vision、用于自然語言處理的 Foundation(如 NSLinguisticTagger 類)和用于評估已經(jīng)學(xué)習(xí)到的決策樹的 GameplayKit。Core ML 構(gòu)建在 Accelerate、BNNS 和 Metal Performance Shaders 之上。

Core ML 在設(shè)備上嚴(yán)格運行,確保了用戶隱私數(shù)據(jù),在無網(wǎng)絡(luò)連接的情況下依然能夠響應(yīng)用戶操作。
CORE ML 相關(guān)技術(shù)
Metal 是針對 iPhone 和 iPad 中 GPU 編程的高度優(yōu)化的框架,Metal 相較 OpenGL ES 能耗顯著降低。另外,Metal 可以預(yù)估 GPU 狀態(tài)來避免多余的驗證和編譯
Metal Performance Shader 是蘋果推出的一套借助 Metal 在 iOS 上實現(xiàn)深度學(xué)習(xí)的工具,它主要封裝了 MPSImage 來存儲數(shù)據(jù)管理內(nèi)存,實現(xiàn)了 Convolution、Pooling、Fullconnetcion、ReLU 等常用的卷積神經(jīng)網(wǎng)絡(luò)中的 Layer
可以在 iPhone 內(nèi)置應(yīng)用中利用 Core ML 的優(yōu)勢,提升或?qū)崿F(xiàn)如 Siri 語音識別、相機應(yīng)用中識別人臉、QuickType 打字聯(lián)想等新特性。Core ML+Vision 應(yīng)用場景如下所示:
- 在相機或給定圖像中檢測人臉
- 檢測眼睛和嘴巴的位置、頭部形狀等人臉面部詳細(xì)特征
- 錄制視頻過程中追蹤移動的對象和確定地平線的角度
- 轉(zhuǎn)換兩個圖像,使其內(nèi)容對齊,識別圖像中的文本
- 檢測和識別條形碼
- ......

另外,還可以使用 Vision 驅(qū)動 Core ML,即在使用 Core ML 進(jìn)行機器學(xué)習(xí)時,用 Vision 框架進(jìn)行一些數(shù)據(jù)預(yù)處理。
Core ML 文檔地址:https://developer.apple.com/documentation/coreml
Bender:基于 Metal 的機器學(xué)習(xí)框架

2017 年 3 月份左右,XMART LABS 在 GitHub 上開源了 Bender,它是一個基于 Metal 的機器學(xué)習(xí)框架,它允許你在 IOS APP 上輕松地定義和運行神經(jīng)網(wǎng)絡(luò),該框架在底層使用了蘋果的 Metal Performance Shaders。
XMART LABS 在 Github 上對 Bender 進(jìn)行了這樣的描述:
- Bender 是 MetalPerformanceShaders 之上的一個可用來操作神經(jīng)網(wǎng)絡(luò)的抽象層(abstraction layer)的工具。Bender 允許你使用卷積、池化、全連接以及一些規(guī)范化等最常見的 layer 來輕松地定義和運行神經(jīng)網(wǎng)絡(luò)。XMART LABS 還想加載在其他框架(TensorFlow 或者 Caffe2 等框架)上訓(xùn)練好的模型,現(xiàn)在的 Bender 已經(jīng)內(nèi)置了一個 TensorFlow 適配器(其可加載帶有變量的圖,并將其「翻譯」成 Bender 的 layer),并計劃將其功能大大增強。
優(yōu)勢
- Bender 支持選擇 Tensorflow、 Keras、Caffe 等框架來運行已訓(xùn)練的模型,無論是在將訓(xùn)練好的模型 freeze,還是將權(quán)重導(dǎo)至 files(官方表示該支持特性即將到來)
- 可直接從支持的平臺導(dǎo)入一個 frozen graph 或者重新定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)并加載權(quán)重。這兩項操作均只需花費幾分鐘
- Bender 支持最常用的機器學(xué)習(xí)節(jié)點和 layer,同時其也具有可擴展性,因而你可以編寫自己的可定義函數(shù)
使用 Bender 開發(fā) APP 的示例如下:

Bender 有何優(yōu)勢?
- Bender 能解決 MetalPerformanceShaders(iOS 中可使用的框架)中對開發(fā)者不太友好導(dǎo)致需要大量重復(fù)代碼的問題
- TensorFlow 雖然可為 iOS 進(jìn)行編譯,但它并不支持在 GPU 上運行,而 Bender 的適配器則可以將 TF graph 解析并翻譯成 Bender layer
Bender 頁面網(wǎng)址:https://xmartlabs.github.io/Bender/
Github 地址:https://github.com/xmartlabs/Bender
百度開源移動端深度學(xué)習(xí)框架 MDL,可在蘋果安卓系統(tǒng)自由切換

2017 年 9 月,百度在 GitHub 上開源了移動端深度學(xué)習(xí)框架 mobile-deep-learning(MDL)的全部代碼以及腳本,這項研究旨在讓卷積神經(jīng)網(wǎng)絡(luò)(CNNC)能更簡單和高速的部署在移動端,支持 iOS GPU,目前已經(jīng)在百度 APP 上有所使用。
MDL 具有體積小和速度快的特點。
- 大?。?40k+(在 arm v7 上)
- 速度:對于 iOS Metal GPU Mobilenet,速度是 40ms,對于 Squeezenet,速度是 30ms
特征
- 一鍵部署,可以通過修改參數(shù)在 iOS 和 Android 端之間轉(zhuǎn)換
- iOS GPU 上支持運行 MobileNet 和 Squeezenet 模型
- 在 MobileNet、GoogLeNet v1 和 Squeezenet 模型下都很穩(wěn)定
- 占用空間極小(4M),不需要依賴第三方的庫
- 支持從 32 比特 float 到 8 比特 unit 轉(zhuǎn)化
- 接下來會與與 ARM 相關(guān)的算法團(tuán)隊進(jìn)行線上線下溝通,優(yōu)化 ARM 平臺
- NEON 使用涵蓋了所有的卷積、歸一化、池化等
- 利用循環(huán)展開,可以讓性能更加優(yōu)化,防止不必要的 CPU 損失
- 對于 overhead 進(jìn)程,可以轉(zhuǎn)發(fā)大量繁重的計算任務(wù)
GitHub 地址:https://github.com/baidu/mobile-deep-learning
MXNet: AWS 官方深度學(xué)習(xí)框架,支持移動端開發(fā)

MXNet 是一款開源的、輕量級、可移植的、靈活的深度學(xué)習(xí)庫,它讓用戶可以混合使用符號編程模式和指令式編程模式來最大化效率和靈活性,目前已經(jīng)是 AWS 官方推薦的深度學(xué)習(xí)框架。
MXNet 的核心是一個動態(tài)的依賴調(diào)度器,支持自動將計算任務(wù)并行化到多個 GPU 或分布式集群(支持 AWS、Azure、Yarn 等)。它上層的計算圖優(yōu)化算法可以讓符號計算執(zhí)行得非???,而且節(jié)約內(nèi)存,開啟 mirror 模式會更加省內(nèi)存,甚至可以在某些小內(nèi)存 GPU 上訓(xùn)練其他框架因顯存不夠而訓(xùn)練不了的深度學(xué)習(xí)模型。
MXNet 支持在移動設(shè)備(Android、iOS)上運行基于深度學(xué)習(xí)的圖像識別等任務(wù),它的性能如下:
- 依賴少,內(nèi)存要求少,對于 Android 性能變化大的手機,通用性更高
- MXNet 需要先使用 ndk 交叉編譯項目中的 amalgamation,可以根據(jù)自己的需求,修改 jni 中的接口,然后,編譯好的動態(tài)鏈接庫替換掉 Android demo 中的
- MXNet 提供了對 Caffe 模型的支持,通過提供的工具將 Caffe 訓(xùn)練好的模型進(jìn)行轉(zhuǎn)化 json 格式,隨后在移動端使用
此外,MXNet 的一個很大的優(yōu)點是支持多語言封裝,比如 C++、Python、R、Julia、Scala、Go、MATLAB 和 JavaScript。在 MXNet 中構(gòu)建一個網(wǎng)絡(luò)需要的時間可能比 Keras、Torch 這類高度封裝的框架要長,但是比直接用 Theano 等要快。MXNet 的各級系統(tǒng)架構(gòu)(下面為硬件及操作系統(tǒng)底層,逐層向上為越來越抽象的接口)如下圖所示。

GitHub:http://github.com/dmlc/MXNet
Apache MXNet 官方網(wǎng)站:https://MXNet.incubator.apache.org/