本期課程,將以計算機(jī)視覺領(lǐng)域的目標(biāo)檢測任務(wù)為目標(biāo),帶領(lǐng)大家動手完成從模型訓(xùn)練優(yōu)化到深度學(xué)習(xí)應(yīng)用部署的整個端到端的開發(fā)流程。你會逐步學(xué)習(xí)了解到如何使用飛槳[1]目標(biāo)檢測套件 PaddleDetection[2]工具套件完成目標(biāo)檢測模型的訓(xùn)練與適配,如何使用深度學(xué)習(xí)編譯器 TVM 編譯飛槳模型以及如何將編譯后的模型部署在含有 Arm Cortex-M55 處理器的 Arm Corstone-300 虛擬硬件上。
百度飛槳與 Arm 深度合作,增加了 Cortex-M 硬件上支持的深度學(xué)習(xí)模型的數(shù)量,同時也填補了飛槳模型在 Arm Cortex-M 硬件上的適配空白,為開發(fā)者提供了更多的選擇。
項目概述
經(jīng)典的深度學(xué)習(xí)工程是從確認(rèn)任務(wù)目標(biāo)開始的,我們首先來簡單地介紹一下目標(biāo)檢測任務(wù)以及本期部署實戰(zhàn)課程中我們所使用的工具和平臺。
1.1 目標(biāo)檢測任務(wù)
目標(biāo)檢測任務(wù)就是將圖片或視頻中所有目標(biāo)的類別識別出來,并在該目標(biāo)周圍繪制邊界框,標(biāo)示出每個目標(biāo)的位置。常見的目標(biāo)檢測任務(wù)包括人物檢測、人臉檢測、車輛跟蹤等方向,在工業(yè)、智慧城市、安防、交通、零售、醫(yī)療等十余種行業(yè)場景中應(yīng)用廣泛。
圖 1:目標(biāo)檢測任務(wù)案例
1.2PP-PicoDet
PaddleDetection 中提出了全新的輕量級系列模型 PP-PicoDet,在移動端具有卓越的性能,成為全新的 SOTA 輕量級模型。PP-PicoDet 模型通過創(chuàng)新 SOTA 模塊,例如 ESNet、CSP-PAN、SimOTA 等,不僅第一個實現(xiàn)了在 1M 參數(shù)量之內(nèi) mAP (0.5:0.95) 超越 30+ (輸入 416 像素時),而且其性能優(yōu)于同類算法模型。
圖 2:PP-PicoDet 系統(tǒng)框圖
更多關(guān)于 PP-PicoDet 的詳細(xì)技術(shù)細(xì)節(jié),可查看 PP-PicoDet arXiv 技術(shù)報告[3]。
1.3 Arm 虛擬硬件 (Arm Virtual Hardware, AVH)
作為 Arm 物聯(lián)網(wǎng)全面解決方案的核心技術(shù)之一,AVH 很好地解決了實體硬件所面臨的難擴(kuò)展、難運維等痛點。AVH[4] 提供了簡單便捷并且可擴(kuò)展的途徑,讓 IoT 應(yīng)用的開發(fā)擺脫了對實體硬件的依賴并使得云原生開發(fā)技術(shù)在嵌入式物聯(lián)網(wǎng)、邊緣側(cè)機(jī)器學(xué)習(xí)領(lǐng)域得到了應(yīng)用。尤其是在芯片緊張的當(dāng)今時代,使用 AVH,開發(fā)者甚至可以在芯片 RTL 之前便可接觸到最新的處理器 IP。
目前 AVH 提供兩種形式供開發(fā)者使用。一種是托管在 AWS 以及 AWS China 上以亞馬遜機(jī)器鏡像 AMI 形式存在的 Arm Corstone 和 Cortex CPU 的虛擬硬件,另外一種則是由 Arm 以 SaaS 平臺的形式提供的 AVH 第三方硬件[5]。本期課程我們將使用第一種托管在 AWS 以及 AWS China 上以亞馬遜機(jī)器鏡像 AMI 形式存在的 Corstone 和 Cortex CPU 的虛擬硬件。
由于目前 AWS China 賬號主要面向企業(yè)級開發(fā)者開放,個人開發(fā)者可訪問 AWS Marketplace 訂閱 AVH 相關(guān)服務(wù)。參考下圖步驟創(chuàng)建 AVH AMI 實例。
圖 3:AVH AMI 創(chuàng)建步驟
(訪問 AWS Marketplace[6] 訂閱 AVH)
端到端部署流程
接下來將重點向大家展示從模型訓(xùn)練到部署的全流程,本期課程所涉及的相關(guān)代碼已在 GitHub 倉庫開源,歡迎大家下載體驗!
https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.5/deploy/third_engine/demo_avh
圖 4:端到端部署流程示意圖
2.1 模型訓(xùn)練
PaddleDetection 使用配置文件 (.yml) 管理網(wǎng)絡(luò)訓(xùn)練、評估的參數(shù)。在靜態(tài)圖版本下,一個模型往往可以通過兩個配置文件 (一個主配置文件、一個 reader 的讀取配置) 實現(xiàn),在 PaddleDetection 2.0 后續(xù)版本,采用了模塊解耦設(shè)計,用戶可以組合配置模塊實現(xiàn)檢測器,并可自由修改覆蓋各模塊配置。我們使用的配置文件[7]位于 configs/picodet 目錄下的 picodet_s_320_coco_lcnet.yml。訓(xùn)練命令可參考如下:
# Example of training on single-GPU
export CUDA_VISIBLE_DEVICES=0
python tools/train.py -c configs/picodet/picodet_s_320_coco_lcnet.yml --eval
2.2 模型導(dǎo)出
模型訓(xùn)練完成后,還需要將訓(xùn)練好的目標(biāo)檢測模型導(dǎo)出為 Paddle Inference 模型,才能使用深度學(xué)習(xí)編譯器 TVM 對其進(jìn)行編譯從而獲得適配在 Cortex-M 處理器上運行的代碼。在導(dǎo)出模型時,由于 CMSIS-NN 不支持 NMS 算子,可通過指定 -o export.nms=False 完成算子適配。參考以下命令導(dǎo)出 Paddle Inference 模型:
# Example exporting model command
python tools/export_model.py
-c configs/picodet/picodet_s_320_coco_lcnet.yml
-o weights=https://paddledet.bj.bcebos.com/models/picodet_s_320_coco_lcnet.pdparams
export.nms=False
--output_dir=output_inference
為了便于開發(fā)者朋友直接體驗推理部署的流程,大家可以通過鏈接直接下載我們訓(xùn)練完成并完成導(dǎo)出適配的目標(biāo)檢測 Paddle Inference 模型:
https://bj.bcebos.com/v1/paddledet/deploy/Inference/picodet_s_320_coco_lcnet_no_nms.tar
2.3 模型編譯
為實現(xiàn)在 Cortex-M 上直接完成飛槳模型的部署,我們需要借助深度學(xué)習(xí)編譯器 TVM 來進(jìn)行相應(yīng)模型的轉(zhuǎn)換和適配。TVM 是一款開源的深度學(xué)習(xí)編譯器,主要用于解決將各種深度學(xué)習(xí)框架部署到各種硬件設(shè)備上的適配性問題。
如下圖所示,它可以接收由飛槳等經(jīng)典的深度學(xué)習(xí)訓(xùn)練框架編寫的模型并將其轉(zhuǎn)換成可在目標(biāo)設(shè)備上運行推理任務(wù)的代碼。
圖 5:編譯流程示意圖
我們使用 TVM 的 Python 應(yīng)用程序 tvmc 來完成模型的編譯。大家可參考如下命令對 Paddle Inference 模型進(jìn)行編譯。通過指定 --target=cmsis-nn,c 使得模型中 CMSIS NN[8]庫支持的算子會調(diào)用 CMSIS-NN 庫執(zhí)行,而不支持的算子則會回調(diào)到 C 代碼庫。
# Example of Model compiling using tvmc
python3 -m tvm.driver.tvmc compile --target=cmsis-nn,c
--target-cmsis-nn-mcpu=cortex-m55
--target-c-mcpu=cortex-m55
--runtime=crt
--executor=aot
--executor-aot-interface-api=c
--executor-aot-unpacked-api=1
--pass-config tir.usmp.enable=1
--pass-config tir.usmp.algorithm=hill_climb
--pass-config tir.disable_storage_rewrite=1
--pass-config tir.disable_vectorize=1
--output-format=mlf
--model-format=paddle
--module-name=picodet
--input-shapes image:[1,3,320,320]
--output=picodet.tar
picodet_s_320_coco_lcnet_no_nms/model.pdmodel
更多關(guān)于參數(shù)配置的具體說明,大家可以直接輸入 tvmc compile --help 來查看。編譯后的模型可以在 --output 參數(shù)指定的路徑下查看 (此處為當(dāng)前目錄下的picodet.tar 壓縮包內(nèi))。
2.4 模型部署
參考圖 3 所示的 AVH AMI 實例創(chuàng)建的流程并通過 ssh 命令遠(yuǎn)程登錄到實例中去,當(dāng)看到如下所示的提示畫面說明已經(jīng)成功登入。
圖 6:AVH AMI 成功登錄界面
成功登入后大家可以切換到“/opt/VHT”以及“/opt”目錄下查看當(dāng)前版本 AVH AMI 所支持的 Corstone 和 Cortex CPU 虛擬硬件。下圖為部分 1.2.3 版本 AVH AMI 所支持的 AVH 列表。本期部署課程中所使用的正是 Corstone-300 虛擬硬件 (VHT_Corstone_SSE-300_Ethos-U55),其內(nèi)含有 Cortex-M55 處理器、Arm Ethos-U55 處理器及一些基本外設(shè)。更多關(guān)于 Corstone-300 虛擬硬件的相關(guān)信息,歡迎訪問 Arm 開發(fā)者社區(qū)的技術(shù)文檔[9]進(jìn)行查看。
圖 7:1.2.3 版本 AVH AMI 所支持的 AVH 部分示意圖
為便于開發(fā)者朋友更直觀地體驗如何在AVH上完成飛槳模型部署,我們?yōu)榇蠹姨峁┝瞬渴鸬氖纠a腳本(run_demo.sh)來幫助大家自動化的完成環(huán)境配置,構(gòu)建目標(biāo)檢測應(yīng)用以及在含有 Cortex-M55 的 Corstone-300虛擬硬件上執(zhí)行并獲取結(jié)果。
您也可以按照以下幾個步驟來手動部署。
第一步:下載安裝相應(yīng)的軟件包并配置運行環(huán)境
確保示例代碼路徑下 configure_avh.sh 腳本以及 requirment.txt 腳本中涉及的相應(yīng)軟件包均根據(jù)其版本要求正確安裝。
第二步:(下載) 獲取目標(biāo)檢測 Paddle Inference 模型
可使用 wget 命令下載模型 (下載地址詳見 2.2 節(jié)) 并通過 tar 命令解壓模型文件壓縮包。
第三步:使用 TVMC 命令編譯 Paddle Inference 模型
參考 2.3 節(jié)中使用的 TVMC 命令編譯第二步下載好的 Paddle Inference 模型 (model.pdmodel)。
第四步:處理圖片數(shù)據(jù)
參考提供的 convert_image.py 腳本對所測試的示例圖片 000000014439_640x640.jpgs (如下圖所示) 進(jìn)行處理,并生成相應(yīng)的輸入輸出頭文件。
圖 8:目標(biāo)檢測示例圖片
第五步:構(gòu)建應(yīng)用程序
使用 Makefile 工具構(gòu)建目標(biāo)檢測應(yīng)用程序的二進(jìn)制鏡像文件。
第六步:執(zhí)行目標(biāo)檢測應(yīng)用并查看運行結(jié)果
調(diào)用 VHT_Corstone_SSE-300_Ethos-U55 (Corstone-300 虛擬硬件) 執(zhí)行構(gòu)建好的目標(biāo)檢測應(yīng)用并查看運行結(jié)果。運行結(jié)果如下圖所示。
其中,前四個數(shù)字為 box 框位置,class 為類別序號,score 為得分。由于模型可能存在精度損失的問題,得分偏低,但整體目標(biāo)識別結(jié)果與圖片一致,說明將飛槳模型直接部署在 Cortex-M55 虛擬硬件上運行良好。
圖 9:Corstone-300
(含 Cortex-M55) 虛擬硬件運行結(jié)果
總結(jié)
本期課程帶領(lǐng)大家學(xué)習(xí)了如何將 PaddleDetection 中發(fā)布的 PP-PicoDet 目標(biāo)檢測模型 (完成算子適配后) 部署在 Corstone-300 的虛擬硬件平臺上,歡迎大家動手體驗。后續(xù)我們也將持續(xù)為大家?guī)砀嗳绾卧?Arm 虛擬硬件上部署百度飛槳模型的實例,敬請期待!
-
硬件
+關(guān)注
關(guān)注
11文章
3444瀏覽量
67036 -
檢測模型
+關(guān)注
關(guān)注
0文章
17瀏覽量
7354 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5547瀏覽量
122312
原文標(biāo)題:AVH 動手實踐 (三) | 在 Arm 虛擬硬件上部署 PP-PicoDet 模型
文章出處:【微信號:Arm軟件開發(fā)者,微信公眾號:Arm軟件開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
如何在Arm虛擬硬件的虛擬樹莓派4上完成圖像識別應(yīng)用的部署
基于C#和OpenVINO?在英特爾獨立顯卡上部署PP-TinyPose模型
百度飛槳PP-YOLOE ONNX 在LabVIEW中的部署推理(含源碼)

評論