AI開發者看過來,主流移動端深度學習框架大盤點

..

雷鋒網按:移動設備相較於 PC ,攜帶便攜,普及率高。近年來,隨着移動設備的廣泛普及與應用,在移動設備上使用深度學習技術的需求開始湧現。

簡書作者 dangbo 在《移動端深度學習展望》一文中對現階段的移動端深度學習做了相關展望。作者認為,現階段的移動端 APP 主要通過以下兩種模式來使用深度學習:

  • online 方式:移動端做初步預處理,把數據傳到服務器執行深度學習模型,優點是這個方式部署相對簡單,將現成的框架(Caffe,Theano,MXNet,Torch) 做下封裝就可以直接拿來用,服務器性能大, 能夠處理比較大的模型,缺點是必須聯網。

  • offline 方式:在服務器上進行訓練的過程,在手機上進行預測的過程。

當前移動端的三大框架(Caffe2、TensorFlow Lite、Core ML)均使用 offline 方式,該方式可在無需網絡連接的情況下確保用戶數據的私密性。

各主流移動端深度學習框架誕生時間如下:

  • 2017 年 3 月,XMART LABS 在 GitHub 上開源 Bender

  • 2017 年 4 月 19 日,Facebook 在 F8 開發者大會上推出 Caffe2

  • 2017 年 5 月 17 日,在 Google I/O 2017 大會上,移動端深度學習框架 TensorFlow Lite 誕生

  • 2017 年 6 月 6 日,蘋果在 WWDC 大會上推出 Core ML

  • 2017 年 9 月 25 日,百度開源移動端深度學習框架 mobile-deep-learning(MDL)

  • ......

接下來,雷鋒網 AI 研習社將介紹當前主流的移動端深度學習框架,其中包括移動端三大框架——Facebook、谷歌、蘋果三大巨頭髮布的 Caffe2、TensorFlow Lite、Core ML,新秀 Bender,國產百度 MDL 以及支持移動端的 MXNet,以便剛剛入坑的開發者們對這些框架有初步的了解和認識。

Facebook 開源 Caffe2,最終將其併入 PyTorch

2017 年 4 月 19 日的 F8 年度開發者大會上,Facebook 發佈了一款全新的開源深度學習框架——Caffe2,按照 Caffe2 官網介紹,它最大的特點就是輕量、模塊化和可擴展性,即一次編碼,到處運行(和 Java 的宣傳語類似)。說得更直白一點,就是 Caffe2 可以方便地為手機等移動終端設備帶來 AI 加持,讓 AI 從雲端走向終端。

Caffe2 在此前流行的開源框架 Caffe 基礎上進行了重構和升級,一方面集成了諸多新出現的算法和模型,另一方面在保證運算性能和可擴展性的基礎上,重點加強了框架在輕量級硬件平台的部署能力。它可以部署在包括 iOS,Android,英偉達 Tegra X1 和樹莓派(Raspberry Pi)等在內的各種移動平台上。用戶只需要加載 Caffe2 框架,然後通過幾行簡單的 API 接口調用(Python 或 C++),就能在手機 APP 上實現圖像識別、自然語言處理和計算機視覺等各種 AI 功能。此外,Caffe2 還對 Caffe 平台的另一項核心競爭力:Model Zoo 社區方面提供了完整的支持。

除了框架自身,Caffe2 還獲得了一系列的雲平台支持,例如亞馬遜 AWS 旗下的 Deep Learning AMI和微軟 Azure 旗下 Data Science Virtual Machine (DSVM),另外也獲得了英偉達和高通的硬件平台支持。目前,Caffe2 框架已經被 Facebook 內部採用,開發者和研究人員們正在使用該框架提供的各種工具訓練大型的機器學習模型,並為 Facebook 旗下的移動應用提供 AI 智能體驗。

現在 Caffe2 代碼也已正式併入 PyTorch,來使 Facebook 能在大規模服務器和移動端部署時更流暢地進行 AI 研究、訓練和推理。

Caffe2 官網:http://Caffe2.ai/ 

GitHub 地址:https://github.com/Caffe2/Caffe2 

Caffe2go 移動端項目 Github 鏈接: https://github.com/Caffe2/Caffe2

谷歌移動端深度學習框架 TensorFlow Lite,有望成為移動端模型部署推薦解決方案

谷歌於美國時間 2017 年 11 月 14 日正式發佈 TensorFlow Lite 預覽版,這一框架主要用於移動端和嵌入式設備,顧名思義,相較於 TensorFlow,TensorFlow Lite 是一個輕量化版本。這個開發框架專門為機器學習模型的低延遲推理做了優化,專註於更少的內存佔用以及更快的運行速度。

TensorFlow Lite 具備以下三個重要功能:

輕量級(Lightweight):支持機器學習模型的推理在較小二進制數下進行,能快速初始化/啟動

跨平台(Cross-platform):可以在許多不同的平台上運行,現在支持 Android 和 iOS

快速(Fast):針對移動設備進行了優化,包括大大減少了模型加載時間、支持硬件加速

結構

下圖是 TensorFlow Lite 的結構設計:

模塊如下:

  • TensorFlow Model: 存儲在硬盤上已經訓練好的 TensorFlow 模型

  • TensorFlow Lite Converter: 將模型轉換為 TensorFlow Lite 文件格式的程序

  • TensorFlow Lite Model File: 基於 FlatBuffers 的模型文件格式,針對速度和大小進行了優化。

模型

TensorFlow Lite 目前支持很多針對移動端訓練和優化好的模型。

  • MobileNet:能夠識別 1000 種不同對象類的視覺模型,為實現移動和嵌入式設備的高效執行而設計。

  • Inception v3:圖像識別模型,功能與 MobileNet 相似,它提供更高的精度,但相對來說更大。

  • Smart Reply: 設備對話模型,可以即時回復聊天消息,在 Android Wear 上有使用這一功能。

  • Inception v3 和 MobileNets 已經在 ImageNet 數據集上訓練了。大家可以利用遷移學習來輕鬆地對自己的圖像數據集進行再訓練。

TensorFlow Lite 發佈一個月後,谷歌即宣布與蘋果達成合作——TensorFlow Lite 將支持 Core ML。TensorFlow Lite 為 Core ML 提供支持后,iOS 開發者就可以利用 Core ML 的優勢來部署模型。

目前,該框架還在不斷更新與升級中,隨着 TensorFlow 的用戶群體越來越多,同時得益於谷歌的背書,假以時日,TensorFlow Lite 極大可能會成為在移動端和嵌入式設備上部署模型的推薦解決方案。

TensorFlow Lite 文檔頁面:http://Tensorflow.org/mobile/tflite

Core ML 轉化器頁面:https://github.com/tf-coreml/tf-coreml

pypi pip 安裝包地址:https://pypi.python.org/pypi/tfcoreml/0.1.0

蘋果 Core ML:離線狀態下,隱私與 AI 可兼得

蘋果在 2017WWDC 大會更新 iOS 11 時一併推出了面向開發者的全新機器學習框架——Core ML,聲稱能讓本地數據處理愈加方便快捷。據介紹,Core ML 提供支持人臉追蹤、人臉檢測、地標、文本檢測、條碼識別、物體追蹤、圖像匹配等任務的 API。

據雷鋒網 AI 研習社了解,Core ML 是一個基礎機器學習框架,能用於眾多蘋果的產品,包括 Siri、相機和 QuickType。據官方介紹,Core ML 帶來了極速的性能提升和機器學習模型的輕鬆整合,能將眾多機器學習模型集成到 APP 中。它不但有 30 多種層來支持廣泛的深度學習,而且還支持諸如樹集成、SVM 和廣義線性模型等標準模型。

蘋果在 Core ML 開發文檔中如此介紹:

使用 Core ML,你可以將訓練好的模型整合進自己開發的 APP 中。Core ML 支持用於圖像分析的 Vision、用於自然語言處理的 Foundation(如 NSLinguisticTagger 類)和用於評估已經學習到的決策樹的 GameplayKit。Core ML 構建在 Accelerate、BNNS 和 Metal Performance Shaders 之上。

Core ML 在設備上嚴格運行,確保了用戶隱私數據,在無網絡連接的情況下依然能夠響應用戶操作。

CORE ML 相關技術

  • Metal 是針對 iPhone 和 iPad 中 GPU 編程的高度優化的框架,Metal 相較 OpenGL ES 能耗顯著降低。另外,Metal 可以預估 GPU 狀態來避免多餘的驗證和編譯

  • Metal Performance Shader 是蘋果推出的一套藉助 Metal 在 iOS 上實現深度學習的工具,它主要封裝了 MPSImage 來存儲數據管理內存,實現了 Convolution、Pooling、Fullconnetcion、ReLU 等常用的卷積神經網絡中的 Layer

可以在 iPhone 內置應用中利用 Core ML 的優勢,提升或實現如 Siri 語音識別、相機應用中識別人臉、QuickType 打字聯想等新特性。Core ML+Vision 應用場景如下所示:

  • 在相機或給定圖像中檢測人臉

  • 檢測眼睛和嘴巴的位置、頭部形狀等人臉面部詳細特徵

  • 錄製視頻過程中追蹤移動的對象和確定地平線的角度

  • 轉換兩個圖像,使其內容對齊,識別圖像中的文本

  • 檢測和識別條形碼

  • ......

另外,還可以使用 Vision 驅動 Core ML,即在使用 Core ML 進行機器學習時,用 Vision 框架進行一些數據預處理。

Core ML 文檔地址:https://developer.apple.com/documentation/coreml

Bender:基於 Metal 的機器學習框架

2017 年 3 月份左右,XMART LABS 在 GitHub 上開源了 Bender,它是一個基於 Metal 的機器學習框架,它允許你在 IOS APP 上輕鬆地定義和運行神經網絡,該框架在底層使用了蘋果的 Metal Performance Shaders。

XMART LABS 在 Github 上對 Bender 進行了這樣的描述:

Bender 是 MetalPerformanceShaders 之上的一個可用來操作神經網絡的抽象層(abstraction layer)的工具。Bender 允許你使用卷積、池化、全連接以及一些規範化等最常見的 layer 來輕鬆地定義和運行神經網絡。XMART LABS 還想加載在其他框架(TensorFlow 或者 Caffe2 等框架)上訓練好的模型,現在的 Bender 已經內置了一個 TensorFlow 適配器(其可加載帶有變量的圖,並將其「翻譯」成 Bender 的 layer),並計劃將其功能大大增強。

優勢

  • Bender 支持選擇 Tensorflow、 Keras、Caffe 等框架來運行已訓練的模型,無論是在將訓練好的模型 freeze,還是將權重導至 files(官方表示該支持特性即將到來)

  • 可直接從支持的平台導入一個 frozen graph 或者重新定義神經網絡結構並加載權重。這兩項操作均只需花費幾分鐘

  • Bender 支持最常用的機器學習節點和 layer,同時其也具有可擴展性,因而你可以編寫自己的可定義函數

使用 Bender 開發 APP 的示例如下。

Bender 有何優勢?

  • Bender 能解決 MetalPerformanceShaders(iOS 中可使用的框架)中對開發者不太友好導致需要大量重複代碼的問題

  • TensorFlow 雖然可為 iOS 進行編譯,但它並不支持在 GPU 上運行,而 Bender 的適配器則可以將 TF graph 解析並翻譯成 Bender layer 

Bender 頁面網址:https://xmartlabs.github.io/Bender/

Github 地址:https://github.com/xmartlabs/Bender

百度開源移動端深度學習框架 MDL,可在蘋果安卓系統自由切換

2017 年 9 月,百度在 GitHub 上開源了移動端深度學習框架 mobile-deep-learning(MDL)的全部代碼以及腳本,這項研究旨在讓卷積神經網絡(CNNC)能更簡單和高速的部署在移動端,支持 iOS GPU,目前已經在百度 APP 上有所使用。

MDL 具有體積小和速度快的特點。

  • 大小:340k+(在 arm v7 上)

  • 速度:對於 iOS Metal GPU Mobilenet,速度是 40ms,對於 Squeezenet,速度是 30ms

特徵

  • 一鍵部署,可以通過修改參數在 iOS 和 Android 端之間轉換 

  • iOS GPU 上支持運行 MobileNet 和 Squeezenet 模型

  • 在 MobileNet、GoogLeNet v1 和 Squeezenet 模型下都很穩定

  • 佔用空間極小(4M),不需要依賴第三方的庫

  • 支持從 32 比特 float 到 8 比特 unit 轉化

  • 接下來會與與 ARM 相關的算法團隊進行線上線下溝通,優化 ARM 平台

  • NEON 使用涵蓋了所有的卷積、歸一化、池化等

  • 利用循環展開,可以讓性能更加優化,防止不必要的 CPU 損失

  • 對於 overhead 進程,可以轉發大量繁重的計算任務

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

MXNet: AWS 官方深度學習框架,支持移動端開發

MXNet 是一款開源的、輕量級、可移植的、靈活的深度學習庫,它讓用戶可以混合使用符號編程模式和指令式編程模式來最大化效率和靈活性,目前已經是 AWS 官方推薦的深度學習框架。

MXNet 的核心是一個動態的依賴調度器,支持自動將計算任務并行化到多個 GPU 或分佈式集群(支持 AWS、Azure、Yarn 等)。它上層的計算圖優化算法可以讓符號計算執行得非常快,而且節約內存,開啟 mirror 模式會更加省內存,甚至可以在某些小內存 GPU 上訓練其他框架因顯存不夠而訓練不了的深度學習模型。

MXNet 支持在移動設備(Android、iOS)上運行基於深度學習的圖像識別等任務,它的性能如下:

  • 依賴少,內存要求少,對於 Android 性能變化大的手機,通用性更高

  • MXNet 需要先使用 ndk 交叉編譯項目中的 amalgamation,可以根據自己的需求,修改 jni 中的接口,然後,編譯好的動態鏈接庫替換掉 Android demo 中的

  • MXNet 提供了對 Caffe 模型的支持,通過提供的工具將 Caffe 訓練好的模型進行轉化 json 格式,隨後在移動端使用

此外,MXNet 的一個很大的優點是支持多語言封裝,比如 C++、Python、R、Julia、Scala、Go、MATLAB 和 JavaScript。在 MXNet 中構建一個網絡需要的時間可能比 Keras、Torch 這類高度封裝的框架要長,但是比直接用 Theano 等要快。MXNet 的各級系統架構(下面為硬件及操作系統底層,逐層向上為越來越抽象的接口)如下圖所示。

GitHub:http://github.com/dmlc/MXNet

Apache MXNet 官方網站:https://MXNet.incubator.apache.org/

(完)


想在手機閱讀更多iOS 開發資訊?下載【香港矽谷】Android應用
分享到Facebook
技術平台: Nasthon Systems