X3芯片概述
BPU是地平線自研的AI加速核,在設(shè)計過程中具體結(jié)合了AIoT/Auto的場景需求,從算法、計算架構(gòu)、編譯器三個方面進行了軟硬協(xié)同優(yōu)化,使得在功耗不變前提下提高數(shù)倍的AI計算性能。
X3和J3芯片各內(nèi)置了兩個伯努利2.0的BPU核,它極大提升了對先進CNN網(wǎng)絡(luò)的支持,同時大大降低了DDR帶寬占用率,可提供實時像素級視頻分割和結(jié)構(gòu)化視頻分析等能力。
詳細的內(nèi)容請參考地平線芯片開發(fā)手冊

1.圖片分類任務(wù)
這里主要對樣例中提供的程序進行測試
首先是系統(tǒng)中提供的圖片分類任務(wù)樣例
cd /app/ai_inference/01_basic_sample/
sudo python3 ./test_mobilenetv1.py在test_mobilenetv1.py中對斑馬的圖片進行了分類,得到的結(jié)果如下,通過查看標簽編號340: 'zebra'實現(xiàn)了對圖片的準確分類。
========== Classification result ==========
cls id: 340 Confidence: 0.991851為了簡單測試下分類算法的結(jié)果。使用其他圖片進行測試,發(fā)現(xiàn)在特征明顯時圖片分類準確度較高,如對背景干凈,特征清晰的金魚達到了0.999884的置信度,1: 'goldfish, Carassius auratus',也存在圖片分類錯誤的情況存在,如對于玉米進行檢測時998: 'ear, spike, capitulum'。

========== Classification result ==========
cls id: 1 Confidence: 0.999884
========== Classification result ==========
cls id: 998 Confidence: 0.7537212.fcos目標檢測快速驗證
使用目標檢測樣例
cd /app/ai_inference/02_usb_camera_sample/
python3 usb_camera_fcos.py在初探中已經(jīng)對其進行簡單展示,這里將代碼進行簡單分析,主要包括以下5個部分

其中加載模型 和模型正演為地平線封裝的模型方法,from hobot_dnn import pyeasy_dnn as dnn
hdmi顯示時地平線封裝的vio方法,from hobot_vio import libsrcampy as srcampy
加載的模型是通過地平線工具鏈編譯的bin模型fcos_512x512_nv12.bin,在運行中會對輸入和輸出的tensor進行打印,可以看出輸入的是512x512的圖像信息,輸入為15個tensor,其中輸出包括了檢測框坐標、類別、置信度得分等。
tensor type: NV12_SEPARATE
data type: uint8
layout: NCHW
shape: (1, 3, 512, 512)
15
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 64, 64, 80)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 32, 32, 80)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 16, 16, 80)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 8, 8, 80)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 4, 4, 80)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 64, 64, 4)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 32, 32, 4)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 16, 16, 4)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 8, 8, 4)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 4, 4, 4)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 64, 64, 1)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 32, 32, 1)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 16, 16, 1)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 8, 8, 1)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 4, 4, 1)3.改用YOLOv5進行目標檢測
更換YOLOv5模型進行目標檢測,由于工具鏈中提供了編譯后的YOLOv5模型,這里可以對其直接使用,工具鏈相關(guān)資料在AI工具鏈資料包其中
horizon_xj3_open_explorer_v1.11.4_20220413\ddk\samples\ai_toolchain\model_zoo\runtime\yolov5直接在usb_camera_fcos.py中進行模型的替換
models = dnn.load('../models/yolov5_672x672_nv12.bin')對輸入輸出進行打印,可以看到輸入是一個 (1, 3, 672, 672)的tensor,而輸出為3層的tensor,輸出的不同代表著需要對模型后處理進行重寫。
tensor type: NV12_SEPARATE
data type: uint8
layout: NCHW
shape: (1, 3, 672, 672)
3
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 84, 84, 255)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 42, 42, 255)
tensor type: float32
data type: float32
layout: NHWC
shape: (1, 21, 21, 255)
在這里我找到之前地平線對YOLOv5的后處理的相關(guān)代碼和說明,這個位于\horizon_xj3_open_explorer_v1.11.4_20220413\ddk\samples\ai_toolchain\horizon_model_convert_sample\04_detection\03_yolov5\mapper
1.4 對于 YOLOv5 模型,我們在模型結(jié)構(gòu)上的修改點主要在于幾個輸出節(jié)點處。由于目前的浮點轉(zhuǎn)換工具鏈暫時不支持 5 維的 Reshape,所以我們在 prototxt中進行了刪除,并將其移至后處理中執(zhí)行。同時我們還添加了一個 transpose 算子,使該節(jié)點將以 NHWC 進行輸出。這是因為在地平線芯片中, BPU 硬件本身以 NHWC 的layout 運行,這樣修改后可以讓 BPU 直接輸出結(jié)果,而不在量化模型中引入額外的transpose。 詳情請見文檔中benchmark部分的圖文介紹
根據(jù)說明可以看到Y(jié)OLOv5應(yīng)該屬于異構(gòu)量化,部分網(wǎng)絡(luò)在后處理中執(zhí)行,這也就代表需要更多的處理時間。在對于樣例中給出的fcos的代碼,我們主要在后處理處做出相應(yīng)的調(diào)整,并將類別展示做出更換,其中主要代碼也是參考了地平線中給出的YOLOv5的公開代碼,做了部分的修改。
檢測結(jié)果:
運行指令
python3 usb_camera_yolov5.py將檢測結(jié)果輸出,可以看到對環(huán)境中的大部分物品做出了及時的檢測,置信度也很高。

對時間進行統(tǒng)計,檢測的時間根據(jù)實際環(huán)境中的復(fù)雜度變化而變化,經(jīng)過實際測試發(fā)現(xiàn)在0.5s~0.8s之間,檢測結(jié)果較快。主要對cv_time(獲取圖像并縮放到模型的輸入尺寸)、forward_time(模型的正向推演)、postprocess_time(后處理)時間進行了統(tǒng)計,其中模型量化后的時間主要是Forward_time,可以看到需要的時間較短,表明模型的量化有效的減少了檢測時間。占用的時間主要集中在后處理和顯示,還有優(yōu)化的空間。
time: 0.8004379272460938
cv_time = 0.15749073028564453
Forward_time = 0.06625533103942871
postprocess_time= 0.38094043731689453
chair is in the picture with confidence:0.8259
pottedplant is in the picture with confidence:0.7951
tvmonitor is in the picture with confidence:0.7798
tvmonitor is in the picture with confidence:0.4708
tvmonitor is in the picture with confidence:0.4420
time: 0.8241267204284668
cv_time = 0.1624467372894287
Forward_time = 0.06629300117492676
postprocess_time= 0.3649098873138428
chair is in the picture with confidence:0.6791
pottedplant is in the picture with confidence:0.7784
tvmonitor is in the picture with confidence:0.7809
tvmonitor is in the picture with confidence:0.54004.使用工具鏈量化模型
查看工具鏈介紹主要有以下兩種方式:

這里使用浮點轉(zhuǎn)定點工具鏈,這種方法適用于最多的模型,詳細介紹可以去查看數(shù)據(jù)鏈的視頻。使用wegt下在docker文件,安裝docker讀取鏡像
docker image ls
docker run -it hub.hobot.cc/aitools/ai_toolchain_centos_7_xj3:v2.1.7 /bin/bash這里發(fā)現(xiàn)其中有YOLOv5s的相關(guān)內(nèi)容,使用該模型進行快速部署
cd /open_explorer/horizon_xj3_open_explorer_v2.1.7_20220520/ddk/samples/ai_toolchain/horizon_model_convert_sample/04_detection/03_yolov5s/mapper
bash 01_check.sh
bash 02_preprocess.sh
bash 03_build.sh #此步驟需要耗費一定時間在model_output中輸出了yolov5s_672x672_nv12.bin ,由于輸出模型一致,直接在板子代碼中修改運行,得到了與YOLO相似的效果。

原作者:Tobark
-
嵌入式
+關(guān)注
關(guān)注
5177文章
20003瀏覽量
325358 -
AI
+關(guān)注
關(guān)注
88文章
37210瀏覽量
291619 -
人工智能
+關(guān)注
關(guān)注
1812文章
49536瀏覽量
259176
發(fā)布評論請先 登錄
技術(shù)分享 | RK3588基于Yolov5的目標識別演示
基于瑞芯微RK3576的 yolov5訓(xùn)練部署教程
在k230上使用yolov5檢測圖像卡死,怎么解決?
yolov5訓(xùn)練部署全鏈路教程
在K230上部署yolov5時 出現(xiàn)the array is too big的原因?
AI功能(SC171開發(fā)套件V3)
RV1126 yolov8訓(xùn)練部署教程
請問如何在imx8mplus上部署和運行YOLOv5訓(xùn)練的模型?
【幸狐Omni3576邊緣計算套件試用體驗】RKNN 推理測試與圖像識別
YOLOv5類中rgb888p_size這個參數(shù)要與模型推理和訓(xùn)練的尺寸一致嗎?一致會達到更好的效果?
yolov5轉(zhuǎn)onnx在cubeAI進行部署,部署失敗的原因?
【米爾RK3576開發(fā)板評測】+項目名稱YOLOV5目標檢測
【ELF 2學(xué)習(xí)板試用】ELF2開發(fā)板(飛凌嵌入式)部署yolov5s的自定義模型
在RK3568教學(xué)實驗箱上實現(xiàn)基于YOLOV5的算法物體識別案例詳解
在樹莓派上部署YOLOv5進行動物目標檢測的完整流程

旭日X3派AI推理(YOLOv5測試)
評論