前 言
本文主要介紹基于創(chuàng)龍科技TL3588-EVM評估板的NPU開發(fā)案例,適用開發(fā)環(huán)境如下。
Windows開發(fā)環(huán)境:Windows 7 64bit、Windows 10 64bit
虛擬機(jī):VMware16.2.5
開發(fā)環(huán)境:Ubuntu20.04.6 64bit
U-Boot:U-Boot-2017.09
Kernel:Linux-5.10.160
Debian:Debian11
LinuxSDK:LinuxSDK-[版本號](基于rk3588_linux_release_v1.2.1_20230720)
無特殊說明情況下,本文默認(rèn)使用USB TO UART2作為調(diào)試串口,使用系統(tǒng)啟動卡(Micro SD方式)啟動系統(tǒng),通過路由器與PC機(jī)進(jìn)行網(wǎng)絡(luò)連接,請確保PC機(jī)、Ubuntu系統(tǒng)可正常訪問互聯(lián)網(wǎng)。
NPU(Neural network Processing Unit),即神經(jīng)網(wǎng)絡(luò)處理器。RK3588內(nèi)部已集成高能效神經(jīng)網(wǎng)絡(luò)處理器NPU,支持神經(jīng)網(wǎng)絡(luò)推理硬件加速,能夠流暢運(yùn)行AI算法。主要參數(shù)如下:
(1)支持INT4/INT8/INT16/FP16/BF16/TF32等;
(2)支持多種框架,如TensorFlow/PyTorch/Caffe/MXNet等;
(3)6TOPS算力。
備注:更多詳細(xì)信息請查看“6-開發(fā)資料數(shù)據(jù)手冊核心板元器件CPU”目錄下的文檔。
NPU開發(fā)流程如下:
(1)模型訓(xùn)練:用戶根據(jù)需求自行訓(xùn)練模型或使用官方提供的模型;
(2)模型轉(zhuǎn)換:使用RKNN-Toolkit2將預(yù)訓(xùn)練模型轉(zhuǎn)換為RK3588 NPU可使用的RKNN模型;
(3)應(yīng)用開發(fā):基于RKNN API開發(fā)應(yīng)用程序。
圖 1?NPU開發(fā)流程圖
關(guān)于RKNN-Toolkit2模型轉(zhuǎn)換使用說明、混合量化、精度問題排查的詳細(xì)介紹,可查看LinuxSDK源碼"external/rknn-toolkit2/doc/"目錄下的"Rockchip_User_Guide_RKNN_Toolkit2_CN-1.5.0.pdf"與"Rockchip_User_Guide_RKNN_Toolkit2_EN-1.5.0.pdf"文檔。
圖 2
關(guān)于RKNN API的詳細(xì)使用說明可查看LinuxSDK源碼"external/rknpu2/doc/"目錄下的"Rockchip_RKNPU_User_Guide_RKNN_API_V1.5.0_CN.pdf"與"Rockchip_RKNPU_User_Guide_RKNN_API_V1.5.0_EN.pdf"文檔。
圖 3
我司提供的NPU開發(fā)案例為產(chǎn)品資料“4-軟件資料Demoplatform-demosyolov5_object_detect”,具體說明如下。

案例說明
本案例基于RKNN API實(shí)現(xiàn)對圖片中目標(biāo)對象的識別,并將識別結(jié)果以加水印的方式添加至圖像,并保存成圖片文件。案例循環(huán)測試10次,統(tǒng)計(jì)出推理的平均處理耗時。
備注:本案例基于瑞芯微官方例程實(shí)現(xiàn),進(jìn)行了目錄的重構(gòu)及編譯的簡化,功能邏輯未進(jìn)行修改。官方例程位于LinuxSDK源碼"external/rknpu2/examples/rknn_yolov5_demo/"目錄下。
圖 4
程序處理流程圖如下:
圖 5
案例測試
請通過網(wǎng)線將評估板千兆網(wǎng)口ETH0連接至路由器。
圖 6
請將案例bin目錄下的所有文件拷貝至評估板文件系統(tǒng)任意目錄下。
圖 7
在可執(zhí)行文件所在目錄,執(zhí)行如下命令,對圖片目標(biāo)對象進(jìn)行模型推理。
備注:模型運(yùn)行的時間會有抖動。
Target# ./yolov5_object_detect yolov5s-640-640_rm_transpose_rk3588.rknn bus.jpg
圖 8
從輸出信息可知,本案例程序識別出測試圖片包含4個person和1個bus對象,運(yùn)行1次模型耗時為23.905000ms;循環(huán)運(yùn)行10次模型平均耗時為21.356800ms。
案例程序?qū)y試圖片的目標(biāo)對象標(biāo)記成功后將輸出名稱為out.jpg的標(biāo)記圖片至當(dāng)前目錄,請將out.jpg文件拷貝至Windows下,并使用PC端相關(guān)軟件對比查看bus.jpg與out.jpg,測試結(jié)果如下所示。
圖 9
圖 10?bus.jpg
圖 11?out.jpg
從out.jpg圖片可知,案例程序能正確框選出4位人物和1輛汽車,同時顯示person、bus文字標(biāo)簽和置信度,標(biāo)記對象的數(shù)量及信息等與程序打印信息一致。
本程序能夠支持識別的目標(biāo)數(shù)據(jù)集類型說明位于bin目錄下的coco_80_labels_list.txt文件,用戶可根據(jù)相關(guān)目標(biāo)類型進(jìn)行測試驗(yàn)證。
圖 12
案例編譯
環(huán)境搭建
打開Ubuntu,執(zhí)行如下命令,安裝NPU案例開發(fā)所需的Python3工具及依賴庫。
Host# sudo apt-get install python3 python3-dev python3-pip
Host# sudo apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev
圖 13
圖 14
執(zhí)行如下命令,安裝NPU案例開發(fā)所需的cmake和virtualenv工具。
Host# sudo apt install cmake
Host# sudo apt install virtualenv
圖 15
執(zhí)行如下命令,使用virtualenv工具創(chuàng)建虛擬環(huán)境并進(jìn)入虛擬環(huán)境。
Host# virtualenv -p /usr/bin/python3 virtual //創(chuàng)建虛擬環(huán)境
Host# source virtual/bin/activate //進(jìn)入虛擬環(huán)境
備注:虛擬機(jī)可能存在多個Python版本,由于虛擬機(jī)環(huán)境問題可能導(dǎo)致庫安裝不成功或成功亦無法找到庫,因此建議使用虛擬環(huán)境安裝庫。virtual可任意命名,指定目錄創(chuàng)建,若無指定目錄則默認(rèn)當(dāng)前目錄。
圖 16
執(zhí)行如下命令,進(jìn)入LinuxSDK源碼"rk3588_linux_release_v1.2.1/external/rknn-toolkit2/"目錄,安裝案例相關(guān)依賴庫。
Host# cd /home/tronlong/RK3588/rk3588_linux_release_v1.2.1/external/rknn-toolkit2/
Host# pip3 install six~=1.15.0
Host# pip3 install typing-extensions~=3.7.4
Host# pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r doc/requirements_cp38-1.5.0.txt
Host# pip3 install packages/rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64.whl
圖 17
圖 18
圖 19
在當(dāng)前目錄下,執(zhí)行如下命令,若無報(bào)錯信息,則表示安裝成功,如下圖所示。按下"Ctrl + D"即可退出測試。
Host# python3
from rknn.api import RKNN
圖 20
執(zhí)行如下命令,可退出虛擬環(huán)境。
Host# deactivate
圖 21
模型轉(zhuǎn)換
打開Ubuntu,執(zhí)行如下命令,進(jìn)入虛擬環(huán)境。
Host# source virtual/bin/activate
圖 22
將案例src源碼目錄拷貝至Ubuntu工作目錄下,進(jìn)入源碼目錄的model目錄,執(zhí)行如下命令進(jìn)行模型轉(zhuǎn)換,將ONNX模型轉(zhuǎn)化為RKNN模型。模型轉(zhuǎn)化成功后將會在當(dāng)前目錄下新生成rknn_models目錄,并在rknn_models目錄下生成RKNN模型。
Host# cdmodel/
Host# python3 onnx2rknn.py
圖 23
模型轉(zhuǎn)化成功后執(zhí)行如下命令,退出虛擬環(huán)境。
Host# deactivate
圖 24
案例編譯
在案例src源碼目錄下,執(zhí)行如下命令配置編譯環(huán)境,并修改CMakeLists.txt文件,請根據(jù)實(shí)際情況修改為LinuxSDK源碼路徑。
Host# source /home/tronlong/RK3588/rk3588_linux_release_v1.2.1/debian/sysroots/environment
Host# viCMakeLists.txt
圖 25
圖 26
執(zhí)行如下命令,新建一個build目錄,用于存放編譯過程產(chǎn)生的相關(guān)文件。
Host# mkdir -p build
圖 27
進(jìn)入build目錄,執(zhí)行如下命令進(jìn)行案例編譯,編譯完成將會在build目錄下生成編譯過程產(chǎn)生的相關(guān)文件,并在src目錄下生成install目錄,該目錄下存放案例相關(guān)文件。
Host# cd build
Host# cmake ../
Host# make -j8
Host# make install
圖 28
build目錄存放編譯過程產(chǎn)生的相關(guān)文件,install目錄存放案例相關(guān)文件,包括測試圖片bus.jpg、類別數(shù)據(jù)集coco_80_labels_list.txt、RKNN模型yolov5s-640-640_rm_transpose_rk3588.rknn和可執(zhí)行程序yolov5_object_detect等文件,如下圖所示。
圖 29
關(guān)鍵代碼
(1)加載圖片RGB數(shù)據(jù)。
圖 30
(2)加載模型并初始化RKNN。
圖 31
(3)前處理,對圖像進(jìn)行縮放和裁剪以適配模型輸入。
圖 32
(4)設(shè)置模型運(yùn)行輸入輸出參數(shù),NPU運(yùn)行模型,獲取模型輸出,統(tǒng)計(jì)運(yùn)行耗時。
圖 33
(5)進(jìn)行后處理,得到目標(biāo)識別結(jié)果。
圖 34
(6)使用目標(biāo)識別結(jié)果給圖片添加水印,并保存為圖片文件。
圖 35
(7)重復(fù)運(yùn)行10次模型并統(tǒng)計(jì)平均耗時。
圖 36
審核編輯 黃宇
-
開發(fā)板
+關(guān)注
關(guān)注
26文章
6310瀏覽量
118664 -
NPU
+關(guān)注
關(guān)注
2文章
378瀏覽量
21133
發(fā)布評論請先 登錄
創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—ISP圖像處理開發(fā)案例
創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—視頻圖像處理框架
創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—IgH?EtherCAT主站開發(fā)案例(下)
創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—IgH?EtherCAT主站開發(fā)案例(上)
創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—物聯(lián)網(wǎng)模塊開發(fā)案例
創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—調(diào)試工具安裝
迅為RK3588開發(fā)板Linux安卓麒麟瑞芯微國產(chǎn)工業(yè)AI人工智能
全國產(chǎn)!瑞芯微 RK3576 ARM 八核 2.2GHz 工業(yè)開發(fā)板—LVGL應(yīng)用開發(fā)案例
創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—NPU開發(fā)案例
評論