小米開源移動端深度學習框架MACE:可轉換TensorFlow模型

選自GitHub

機器之心編譯

參與:蔣思源、李亞洲

6 月 28 日,小米首席架構師,人工智能與雲平臺副總裁崔寶秋在 2018(第十三屆)開源中國開源世界高峰論壇上宣佈,正式開源小米移動端深度學習框架 MACE。該框架採用與 Caffe2 類似的描述文件定義模型,因此它能非常便捷地部署移動端應用。

小米開源移動端深度學習框架MACE:可轉換TensorFlow模型

項目地址:https://github.com/XiaoMi/mace

文檔地址:https://mace.readthedocs.io/en/latest/

Mobile AI Compute Engine (MACE) 是一個專為移動端異構計算平臺優化的神經網絡計算框架。目前該框架為 TensorFlow 和 Caffe 模型提供轉換工具,並且其它框架定義的模型很快也能得到支持。下圖展示了該計算框架的整體結構:

小米開源移動端深度學習框架MACE:可轉換TensorFlow模型

據 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)和長度都會被記錄下來。

可用以下三種方式加載模型:

  1. 模型計算圖和張量數據都通過外部動態地加載(默認從文件系統加載,但用戶可以自由選擇它們的實現,例如使用壓縮或加密)。這種方式提供最靈活的模型部署方式,但是模型安全也是最低的。
  2. 模型計算圖和張量數據都轉化為 C++代碼,並通過執行經編譯的代碼而加載。這種方式能提供最強的模型防護和最簡單的部署。
  3. 將模型計算圖轉換為 C++代碼,並以第二種方式構建,而張量數據將在外部以第一種方式加載。

部署文件示例

部署模型到移動端的第一步就是創建 YAML 文件,該 YAML 文件描述了模型部署的情況,每一個文件都將生成一個靜態庫(如果指定了多個 ABIs,那麼每個都會有一個靜態庫)。部署文件可以包含一個或多個模型,例如智能相機應用可能包含人臉識別、目標識別和語音識別模型,它們可以在一個部署文件中定義。

以下展示了用於安卓示例應用的部署文件:

# The name of librarylibrary_name: mobilenettarget_abis: [arm64-v8a]embed_model_data: 1# The build mode for model(s).# 'code' stand for transfer model(s) into cpp code, 'proto' for model(s) in protobuf file(s).build_type: codelinkshared: 0# One yaml config file can contain multi models' config message.models: mobilenet_v1: # model tag, which will be used in model loading and must be specific. platform: tensorflow # support local path, http:// and https:// model_file_path: https://cnbj1.fds.api.xiaomi.com/mace/miai-models/mobilenet-v1/mobilenet-v1-1.0.pb model_sha256_checksum: 71b10f540ece33c49a7b51f5d4095fc9bd78ce46ebf0300487b2ee23d71294e6 subgraphs: - input_tensors: input input_shapes: 1,224,224,3 output_tensors: MobilenetV1/Predictions/Reshape_1 output_shapes: 1,1001 runtime: cpu+gpu limit_opencl_kernel_time: 0 nnlib_graph_mode: 0 obfuscate: 0 winograd: 0 mobilenet_v2: platform: tensorflow model_file_path: https://cnbj1.fds.api.xiaomi.com/mace/miai-models/mobilenet-v2/mobilenet-v2-1.0.pb model_sha256_checksum: 369f9a5f38f3c15b4311c1c84c032ce868da9f371b5f78c13d3ea3c537389bb4 subgraphs: - input_tensors: input input_shapes: 1,224,224,3 output_tensors: MobilenetV2/Predictions/Reshape_1 output_shapes: 1,1001 runtime: cpu+gpu limit_opencl_kernel_time: 0 nnlib_graph_mode: 0 obfuscate: 0 winograd: 0}

模型與性能評測

MACE Model Zoo 包含若干常用模型,不僅包括 MobileNet、SqueezeNet、ResNet-50 和 Inception-v3 等常見的卷積神經網絡,同時還有風格遷移等應用。MACE Model Zoo 會對一組手機進行每日構建,最新的性能評測結果可以從項目的持續集成頁面獲取。


分享到:


相關文章: