MNN 是一個輕量級的深度學習端側推理引擎,核心解決深度神經網絡模型在端側推理運行問題,涵蓋深度神經網絡模型的優化、轉換和推理。目前,MNN已經在手淘、手貓、優酷、聚劃算、UC、飛豬、千牛等 20 多個 App 中使用,覆蓋直播、短視頻、搜索推薦、商品圖像搜索、互動營銷、權益發放、安全風控等場景,每天穩定運行上億次。此外,菜鳥自提柜等 IoT 設備中也有應用。在 2018 年雙十一購物節中,MNN 在天貓晚會笑臉紅包、掃一掃、明星猜拳大戰等場景中使用。
作者:張新棟
關于更多MNN的介紹和文檔,大家可以看這篇文章或者去MNN的Github主頁。本文主要是想跟大家介紹和討論,如何在嵌入式設備中,利用MNN來進行CNN任務的部署。本文主要想跟大家討論的CNN任務是Mobilenet SSD,是一個輕量級的anchor-based物體檢測器。
嵌入式場景的CNN部署不同于Desktop和server的CNN部署,在嵌入式場景中,沒有強勁的CPU和GPU,硬件資源受限,所以部署的流程和步驟較之于Desktop和server有較大的不同。在我的理解中,我會將嵌入式場景的CNN部署流程分為如下幾部:1. 模型設計 2. 離線訓練 3.網絡裁剪 4. 在線部署。下面我們將會結合這個四個步驟,討論如何利用MNN進行Mobilenet SSD的部署。
在進行討論前,我們說明一下,采用的離線訓練框架為tensorflow,MobilenetSSD采用的是Google的物體檢測全家桶。
模型設計
在進行模型設計的時候,唯一需要注意的要點是避免在核心網絡層中采用硬件或端上推理框架不支持的Op。比如,tflite android中的NNAPI 1.0中不支持padding、squeeze、reshape等Op。如下圖
NNAPI 1.0 不支持的Op
在使用MNN進行在線部署的時候,同樣也需要考慮這個問題。在進行模型的設計的時候,需要認真檢查核對,核心的CNN網絡里有沒有采用MNN框架不支持的Op。如果采用了,需要進行替換或者重新設計。
離線訓練
離線訓練的好壞直接影響該CNN模型實際的推斷效果,不過本文的重點不在如何進行訓練。后續我們會再詳細寫一篇文章介紹如何訓練,這里我們假定已經完成了該任務。為此,我們提供了訓練好的兩個模型,一個是300x300-0.5的人體檢測器,另一個是224x224-0.5的人臉檢測器。我們將在文章末尾附上github的鏈接。
網絡裁剪
如果有些Op或者layer在進行離線訓練時不可缺少,但是端上推理框架不支持該怎么辦呢?比如Mobilenet SSD中的后處理模塊,tensorflow Object detection api的PostProcessing Ops和Caffe SSD中的ObjectDetectionLayer。網絡裁剪就是在這個時候派上用場的,以tensorflow的Object detection api為例,我們可以僅導出PostProcessing之前的Node,即concat和concat_1,然后后處理可以從device取出結果后,在cpu端進行postprocessing。可參考如下導出腳本,
bazel run --config=opt tensorflow/lite/toco:toco -- /
--input_file=$OUTPUT_DIR/tflite_graph.pb /
--output_file=$OUTPUT_DIR/detect.tflite /
--input_shapes=1,224,224,3 /
--input_arrays=normalized_input_image_tensor /
--output_arrays='concat','concat_1' /
--inference_type=FLOAT /
--change_concat_input_ranges=false
在線部署
我們前面進行了模型設計(保證核心CNN結構不引入MNN不支持的Op)、離線訓練(保證得到一個效果好的CNN網絡)、網絡裁剪(移除不支持的Op),目前得到的模型(pb或tflite),基本可以確保在MNN中能正常運行。在用MNN進行在線部署的時候,我們還需要完成如下幾個步驟:基于目標平臺的MNN編譯、tflite或tensorflow的MNN模型轉化、編寫基于MNN的MSSD業務代碼。我們將這幾個步驟都做了詳細的文檔,連同數據和代碼都上傳到了我的github賬戶中。大家可參考如下鏈接,工程內提供了基于MNN的tflite-mssd和tensorflow-mssd的部署流程和業務代碼,覺得有幫助的,希望大家能點個小星星。
討論
歡迎大家留言進行討論,我會第一時間進行回復。如果您對嵌入式的AI部署也感興趣,可關注專欄或本人賬號,相互交流學習。謝謝大家!
參考
本人Github:MNN-MSSD
審核編輯 黃昊宇
-
嵌入式系統
+關注
關注
41文章
3604瀏覽量
129562 -
SSD
+關注
關注
21文章
2868瀏覽量
117521 -
深度學習
+關注
關注
73文章
5507瀏覽量
121274
發布評論請先 登錄
相關推薦
評論