0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

實戰(zhàn)MNN之Mobilenet SSD部署

電子設(shè)計 ? 來源:電子設(shè)計 ? 作者:電子設(shè)計 ? 2020-12-10 18:14 ? 次閱讀
MNN 是一個輕量級的深度學(xué)習(xí)端側(cè)推理引擎,核心解決深度神經(jīng)網(wǎng)絡(luò)模型在端側(cè)推理運行問題,涵蓋深度神經(jīng)網(wǎng)絡(luò)模型的優(yōu)化、轉(zhuǎn)換和推理。目前,MNN已經(jīng)在手淘、手貓、優(yōu)酷、聚劃算、UC、飛豬、千牛等 20 多個 App 中使用,覆蓋直播、短視頻、搜索推薦、商品圖像搜索、互動營銷、權(quán)益發(fā)放、安全風控等場景,每天穩(wěn)定運行上億次。此外,菜鳥自提柜等 IoT 設(shè)備中也有應(yīng)用。在 2018 年雙十一購物節(jié)中,MNN 在天貓晚會笑臉紅包、掃一掃、明星猜拳大戰(zhàn)等場景中使用。
作者:張新棟

關(guān)于更多MNN的介紹和文檔,大家可以看這篇文章或者去MNN的Github主頁。本文主要是想跟大家介紹和討論,如何在嵌入式設(shè)備中,利用MNN來進行CNN任務(wù)的部署。本文主要想跟大家討論的CNN任務(wù)是Mobilenet SSD,是一個輕量級的anchor-based物體檢測器。

嵌入式場景的CNN部署不同于Desktop和server的CNN部署,在嵌入式場景中,沒有強勁的CPUGPU,硬件資源受限,所以部署的流程和步驟較之于Desktop和server有較大的不同。在我的理解中,我會將嵌入式場景的CNN部署流程分為如下幾部:1. 模型設(shè)計 2. 離線訓(xùn)練 3.網(wǎng)絡(luò)裁剪 4. 在線部署。下面我們將會結(jié)合這個四個步驟,討論如何利用MNN進行Mobilenet SSD的部署。

在進行討論前,我們說明一下,采用的離線訓(xùn)練框架為tensorflow,MobilenetSSD采用的是Google的物體檢測全家桶

模型設(shè)計

在進行模型設(shè)計的時候,唯一需要注意的要點是避免在核心網(wǎng)絡(luò)層中采用硬件或端上推理框架不支持的Op。比如,tflite android中的NNAPI 1.0中不支持padding、squeeze、reshape等Op。如下圖


NNAPI 1.0 不支持的Op

在使用MNN進行在線部署的時候,同樣也需要考慮這個問題。在進行模型的設(shè)計的時候,需要認真檢查核對,核心的CNN網(wǎng)絡(luò)里有沒有采用MNN框架不支持的Op。如果采用了,需要進行替換或者重新設(shè)計。

離線訓(xùn)練

離線訓(xùn)練的好壞直接影響該CNN模型實際的推斷效果,不過本文的重點不在如何進行訓(xùn)練。后續(xù)我們會再詳細寫一篇文章介紹如何訓(xùn)練,這里我們假定已經(jīng)完成了該任務(wù)。為此,我們提供了訓(xùn)練好的兩個模型,一個是300x300-0.5的人體檢測器,另一個是224x224-0.5的人臉檢測器。我們將在文章末尾附上github的鏈接。

網(wǎng)絡(luò)裁剪

如果有些Op或者layer在進行離線訓(xùn)練時不可缺少,但是端上推理框架不支持該怎么辦呢?比如Mobilenet SSD中的后處理模塊,tensorflow Object detection api的PostProcessing Ops和Caffe SSD中的ObjectDetectionLayer。網(wǎng)絡(luò)裁剪就是在這個時候派上用場的,以tensorflow的Object detection api為例,我們可以僅導(dǎo)出PostProcessing之前的Node,即concat和concat_1,然后后處理可以從device取出結(jié)果后,在cpu端進行postprocessing??蓞⒖既缦聦?dǎo)出腳本,

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               

在線部署

我們前面進行了模型設(shè)計(保證核心CNN結(jié)構(gòu)不引入MNN不支持的Op)、離線訓(xùn)練(保證得到一個效果好的CNN網(wǎng)絡(luò))、網(wǎng)絡(luò)裁剪(移除不支持的Op),目前得到的模型(pb或tflite),基本可以確保在MNN中能正常運行。在用MNN進行在線部署的時候,我們還需要完成如下幾個步驟:基于目標平臺的MNN編譯、tflite或tensorflow的MNN模型轉(zhuǎn)化、編寫基于MNN的MSSD業(yè)務(wù)代碼。我們將這幾個步驟都做了詳細的文檔,連同數(shù)據(jù)和代碼都上傳到了我的github賬戶中。大家可參考如下鏈接,工程內(nèi)提供了基于MNN的tflite-mssd和tensorflow-mssd的部署流程和業(yè)務(wù)代碼,覺得有幫助的,希望大家能點個小星星。

討論

歡迎大家留言進行討論,我會第一時間進行回復(fù)。如果您對嵌入式的AI部署也感興趣,可關(guān)注專欄或本人賬號,相互交流學(xué)習(xí)。謝謝大家!

參考

本人Github:MNN-MSSD

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3534

    瀏覽量

    128999
  • SSD
    SSD
    +關(guān)注

    關(guān)注

    20

    文章

    2819

    瀏覽量

    117030
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5445

    瀏覽量

    120807
收藏 人收藏

    評論

    相關(guān)推薦

    張飛實戰(zhàn)電子設(shè)計思想核心2

    張飛實戰(zhàn)電子設(shè)計思想核心2
    發(fā)表于 04-23 19:24

    【瑞芯微RK1808計算棒試用體驗】+ mobileNet SSD 練個人頭檢測模型

    `RK1808官方提供了mobileNet SSD的多分類的demo,所以基于這個算法可以較容易開發(fā)自己的檢測算法,所以用網(wǎng)上公開的人頭檢測數(shù)據(jù)集訓(xùn)練一個人頭檢測模型。caffe
    發(fā)表于 10-25 17:28

    輕量化神經(jīng)網(wǎng)絡(luò)的相關(guān)資料下載

    視覺任務(wù)中,并取得了巨大成功。然而,由于存儲空間和功耗的限制,神經(jīng)網(wǎng)絡(luò)模型在嵌入式設(shè)備上的存儲與計算仍然是一個巨大的挑戰(zhàn)。前面幾篇介紹了如何在嵌入式AI芯片上部署神經(jīng)網(wǎng)絡(luò):【嵌入式AI開發(fā)】篇五|實戰(zhàn)篇一:STM32cubeIDE上部署
    發(fā)表于 12-14 07:35

    CoolPi CM5運行ChatGLM-MNN大語言模型

    ChatGLM-MNN project git clone https://github.com/wangzhaode/ChatGLM-MNN.git Compile MNN library
    發(fā)表于 04-29 09:39

    Coolpi CM5運行ChatGLM-MNN大語言模型

    Download ChatGLM-MNN project git clone https://github.com/wangzhaode/ChatGLM-MNN.git Compile MNN
    發(fā)表于 05-03 11:30

    人工智能大模型、應(yīng)用場景、應(yīng)用部署教程超詳細資料

    、Prisma 模型、Ssd-mobilenet 模型、Ssd-inception 模型、Tnet 模型、XLSR 模型和 Z-DCE 模型。每個模型都配有介紹和實操的視頻教程并搭配相應(yīng)文檔,降低客戶在
    發(fā)表于 11-13 14:49

    ARM全國產(chǎn)云平臺部署容器實戰(zhàn)經(jīng)驗分享

    ARM全國產(chǎn)云平臺部署容器實戰(zhàn)經(jīng)驗分享
    發(fā)表于 07-18 16:11 ?71次下載
    ARM全國產(chǎn)云平臺<b class='flag-5'>部署</b>容器<b class='flag-5'>實戰(zhàn)</b>經(jīng)驗分享

    阿里MNN支持華為NPU,優(yōu)化MNN的性能和精度問題

    今天上午據(jù)軟件綠色聯(lián)盟消息,阿里MNN已經(jīng)接入華為 HiAI生態(tài),正式支持華為NPU。
    的頭像 發(fā)表于 12-23 14:04 ?3558次閱讀

    實戰(zhàn)MNN量化部署

    今天MNN更新了新的工具包---CNN網(wǎng)絡(luò)量化工具(quantization),作者也第一時間進行了測試。提升的效果還是很可觀的,量化前的CNN網(wǎng)絡(luò)大小...
    發(fā)表于 02-07 11:45 ?0次下載
    <b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>MNN</b><b class='flag-5'>之</b>量化<b class='flag-5'>部署</b>

    詳解MNN的tflite-MobilenetSSD-c++部署流程

    關(guān)于MNN以及Mobilenet SSD的介紹,大家可以參考我早些時候?qū)戇^的一篇文章實戰(zhàn)MNN
    發(fā)表于 02-07 11:55 ?0次下載
    詳解<b class='flag-5'>MNN</b>的tflite-MobilenetSSD-c++<b class='flag-5'>部署</b>流程

    如何DIY輕型的Mobilenet回歸器

    之前我們有跟大家討論過如何DIY一個輕型的Mobilenet SSD的物體檢測器,本專欄的其他文章亦有介紹如何部署該類輕型MSSD的物體檢測器于嵌...
    發(fā)表于 02-07 11:59 ?1次下載
    如何DIY輕型的<b class='flag-5'>Mobilenet</b>回歸器

    使用TVM在android中進行Mobilenet SSD部署

    所謂TVM,按照正式說法:就是一種將深度學(xué)習(xí)工作負載部署到硬件的端到端IR(中間表示)堆棧。換一種說法,可以表述為一種把深度學(xué)習(xí)模型...
    發(fā)表于 02-07 12:07 ?0次下載
    使用TVM在android中進行<b class='flag-5'>Mobilenet</b> <b class='flag-5'>SSD</b><b class='flag-5'>部署</b>

    詳解MNN的tf-MobilenetSSD-cpp部署流程

    關(guān)于MNN以及Mobilenet SSD的介紹,大家可以參考我早些時候?qū)戇^的一篇文章實戰(zhàn)MNN
    發(fā)表于 02-07 12:18 ?0次下載
    詳解<b class='flag-5'>MNN</b>的tf-MobilenetSSD-cpp<b class='flag-5'>部署</b>流程

    PFLD-lite:基于MNN和mxnet的嵌入式部署

    之前的文章跟大家介紹過如何使用mxnet和MNN做產(chǎn)品化部署,選取的案例為MNIST手寫數(shù)字識別的項目,該項目是一個比較簡單的分類問題。今天...
    發(fā)表于 02-07 12:19 ?0次下載
    PFLD-lite:基于<b class='flag-5'>MNN</b>和mxnet的嵌入式<b class='flag-5'>部署</b>

    實戰(zhàn)MNNMobilenet SSD部署(含源碼)

    MNN 是一個輕量級的深度學(xué)習(xí)端側(cè)推理引擎,核心解決深度神經(jīng)網(wǎng)絡(luò)模型在端側(cè)推理運行問題,涵蓋深度神經(jīng)網(wǎng)絡(luò)模型的優(yōu)化、轉(zhuǎn)換和推理。目...
    發(fā)表于 02-07 12:32 ?0次下載
    <b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>MNN</b><b class='flag-5'>之</b><b class='flag-5'>Mobilenet</b> <b class='flag-5'>SSD</b><b class='flag-5'>部署</b>(含源碼)