小米開源移動端深度學習框架MACE:可轉換TensorFlow模型
選自GitHub
機器之心編譯
參與:思源、李亞洲
6 月 28 日,小米首席架構師,人工智慧與雲平台副總裁崔寶秋在 2018(第十三屆)開源中國開源世界高峰論壇上宣布,正式開源小米移動端深度學習框架 MACE。該框架採用與 Caffe2 類似的描述文件定義模型,因此它能非常便捷地部署移動端應用。
項目地址:https://github.com/XiaoMi/mace
文檔地址:https://mace.readthedocs.io/en/latest/
Mobile AI Compute Engine (MACE) 是一個專為移動端異構計算平台優化的神經網路計算框架。目前該框架為 TensorFlow 和 Caffe 模型提供轉換工具,並且其它框架定義的模型很快也能得到支持。下圖展示了該計算框架的整體結構:
據 Github 項目介紹,小米的 MACE 主要從以下的角度做了專門的優化:
性能:代碼經過 NEON 指令,OpenCL 以及 Hexagon HVX 專門優化,並且採用 Winograd 演算法來進行卷積操作的加速。此外,還對啟動速度進行了專門的優化。
功耗:支持晶元的功耗管理,例如 ARM 的 big.LITTLE 調度,以及高通 Adreno GPU 功耗選項。
系統響應:支持自動拆解長時間的 OpenCL 計算任務,來保證 UI 渲染任務能夠做到較好的搶佔調度,從而保證系統 UI 的相應和用戶體驗。
內存佔用:通過運用內存依賴分析技術,以及內存復用,減少內存的佔用。另外,保持盡量少的外部 依賴,保證代碼尺寸精簡。
模型加密與保護:模型保護是重要設計目標之一。支持將模型轉換成 C++代碼,以及關鍵常量字元混淆,增加逆向的難度。
硬體支持範圍:支持高通,聯發科,以及松果等系列晶元的 CPU,GPU 與 DSP(目前僅支持 Hexagon) 計算加速。同時支持在具有 POSIX 介面的系統的 CPU 上運行。
模型格式
MACE 定義的定製化模型格式與 Caffe2 的類似,MACE 模型能由 TensorFlow 和 Caffe 輸出的模型轉化。YAML 文件詳細描述了模型部署細節,後文將展示該文件的示例。
模型載入
MACE 模型格式包含兩部分:定義模型的計算圖和模型參數張量。計算圖部分利用 Protocol Buffers 做序列化,而所有的模型參數張量級聯在一起成為一個連續位元組數組,我們稱這個數組為張量數據。在模型圖中,張量數據的偏移(offsets)和長度都會被記錄下來。
可用以下三種方式載入模型:
模型計算圖和張量數據都通過外部動態地載入(默認從文件系統載入,但用戶可以自由選擇它們的實現,例如使用壓縮或加密)。這種方式提供最靈活的模型部署方式,但是模型安全也是最低的。
模型計算圖和張量數據都轉化為 C++代碼,並通過執行經編譯的代碼而載入。這種方式能提供最強的模型防護和最簡單的部署。
將模型計算圖轉換為 C++代碼,並以第二種方式構建,而張量數據將在外部以第一種方式載入。
部署文件示例
部署模型到移動端的第一步就是創建 YAML 文件,該 YAML 文件描述了模型部署的情況,每一個文件都將生成一個靜態庫(如果指定了多個 ABIs,那麼每個都會有一個靜態庫)。部署文件可以包含一個或多個模型,例如智能相機應用可能包含人臉識別、目標識別和語音識別模型,它們可以在一個部署文件中定義。
以下展示了用於安卓示例應用的部署文件:
模型與性能評測
MACE Model Zoo 包含若干常用模型,不僅包括 MobileNet、SqueezeNet、ResNet-50 和 Inception-v3 等常見的卷積神經網路,同時還有風格遷移等應用。MACE Model Zoo 會對一組手機進行每日構建,最新的性能評測結果可以從項目的持續集成頁面獲取。
MACE Model Zoo 地址:https://github.com/XiaoMi/mace-models
本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。
------------------------------------------------
※世界上最好的語言PHP:OpenCV與計算機視覺已在我掌控之下
※44篇論文強勢進擊CVPR 2018,商湯科技的研究員都在做哪些研究?
TAG:機器之心 |