實(shí)戰(zhàn)核心:RKNN-Toolkit2 的使用
硬件板卡:迅為iTOP-RK3568開(kāi)發(fā)板
在使用RKNN SDK之前,用戶需要使用RKNN-Toolkit2工具將自主研發(fā)的 算法模型轉(zhuǎn)換為RKNN模型。RKNN是Rockchip NPU平臺(tái)(也就是開(kāi)發(fā)板)使用的模型類型,是以.rknn結(jié)尾的模型文件。得到RKNN模型之后,用戶可以選擇使用C接口在RK3568平臺(tái)開(kāi)發(fā)應(yīng)用。
在第3章節(jié),我們是直接使用的已經(jīng)轉(zhuǎn)換好的模型rknn來(lái)進(jìn)行的實(shí)驗(yàn)。所以 這一章節(jié)我們來(lái)看下如何將其他模型類型轉(zhuǎn)成rknpu可以使用的rknn類型。
RKNN-Toolkit2 介紹
RKNN-Toolkit2是為用戶提供在PC、Rockchip NPU平臺(tái)上進(jìn)行模型轉(zhuǎn)換、 推理和性能評(píng)估的開(kāi)發(fā)套件,用戶通過(guò)該工具提供的Python接口可以便捷地完 成以下功能:
?模型轉(zhuǎn)換:支持Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、
PyTorch等模型轉(zhuǎn)為RKNN模型,并支持RKNN模型導(dǎo)入導(dǎo)出,RKNN
模型能夠在rk3568開(kāi)發(fā)板上加載使用
?量化功能:支持將浮點(diǎn)模型量化為定點(diǎn)模型,目前支持的量化方法為非對(duì)稱
量化( asymmetric_quantized-8及asymmetric_quantized-16 ),并支持混合量
化功能 。asymmetric_quantized-16目前版本暫不支持
?模型推理:能夠在PC上模擬rk3568開(kāi)發(fā)板運(yùn)行RKNN模型并獲取推理 結(jié)果;或?qū)KNN模型分發(fā)到iTOP-RK3568設(shè)備上進(jìn)行推理并獲取推理結(jié) 果
?性能評(píng)估:將RKNN模型分發(fā)到iTOP-RK3568設(shè)備上運(yùn)行,以評(píng)估模型在實(shí)際設(shè)備上運(yùn)行時(shí)的性能
?內(nèi)存評(píng)估:評(píng)估模型運(yùn)行時(shí)的內(nèi)存的占用情況。使用該功能時(shí),必須將
RKNN模型分發(fā)到iTOP-RK3568設(shè)備中運(yùn)行,并調(diào)用相關(guān)接口獲取內(nèi)存使
用信息
?量化精度分析:該功能將給出模型量化前后每一層推理結(jié)果與浮點(diǎn)模型推理
結(jié)果的余弦距離,以便于分析量化誤差是如何出現(xiàn)的,為提高量化模型的精 度提供思路
5.3 RKNN-Toolkit2 的使用
在rknn-toolkit2工具的examples目錄下有各種功能的Toolkit Demo,這里 我們運(yùn)行一個(gè)模型轉(zhuǎn)換Demo為例子,這個(gè)Demo展示了在Ubuntu18.04上將yolov5.onnx模型轉(zhuǎn)換成RKNN模型,然后導(dǎo)出、推理、部署到RK3568開(kāi)發(fā)板上或者模擬器上運(yùn)行并取回結(jié)果的過(guò)程。模型轉(zhuǎn)換的具體實(shí)現(xiàn)請(qǐng)參考Demo內(nèi)源代碼。
5.3.1 模型運(yùn)行在模擬器
RKNN-Toolkit2自帶了一個(gè)模擬器,在Ubuntu18.04上運(yùn)行demo程序即是 在仿真NPU模擬器上運(yùn)行demo。以下演示如何在模擬器上運(yùn)行RKNN-Toolkit2
工具自帶的yolov5.onnx模型轉(zhuǎn)換demo。
作者是在docker下使用RKNN-Toolkit2工具,大家在使用之前要按照“5.2.1
章節(jié)通過(guò)docker鏡像安裝”RKNN-Toolkit2工具。演示過(guò)程如下:
1在5.2.1小節(jié)中,已經(jīng)成功安裝并進(jìn)入了docker鏡像中,如下圖所示:

2在rknn-toolkit2/examples下有各種功能的Toolkit Demo,如下圖所示:
3運(yùn)行一個(gè)模型轉(zhuǎn)換例子,進(jìn)入到onnx/yolov5目錄,如下圖所示:
4轉(zhuǎn)換yolov5s.onnx為rknn模型并運(yùn)行模型推理圖片,輸入以下命令:
python3 test.py
5運(yùn)行模型如下圖所示:

由上圖結(jié)果可以看出,圖上有三個(gè)人和一個(gè)巴士,所在坐標(biāo)與原圖相符,推
理圖片成功。原圖如下圖所示:

6轉(zhuǎn)換后的模型默認(rèn)保存路徑為“examples/onnx/yolov5/yolov5s.rknn”,如下圖所
示:

5.3.2 模型運(yùn)行在 RK3568 開(kāi)發(fā)板
1首先連接好開(kāi)發(fā)板硬件,連接好燒寫線,屏幕,調(diào)試串口和電源。開(kāi)發(fā)板燒寫
Android11系統(tǒng)。在本小節(jié)中,作者使用的開(kāi)發(fā)環(huán)境是Ubuntu18.04,使用pip3
安裝RKNN-Toolkit2工具。

2開(kāi)發(fā)板系統(tǒng)啟動(dòng)之后,提示如下,我們將開(kāi)發(fā)板連接到Ubuntu18.04上。

3在ubuntu18.04上使用adb命令來(lái)連接開(kāi)發(fā)板。如果沒(méi)有安裝adb命令,可以使用命令“apt install adb”安裝。輸入以下命令查看iTOP-RK3568開(kāi)發(fā)板
adb devices
4如上圖所示,iTOP-rk3568開(kāi)發(fā)板設(shè)備id號(hào)為“67188a9846568f84”,說(shuō)明設(shè)備已經(jīng)成功通過(guò)adb工具連接到開(kāi)發(fā)板。
5打開(kāi)一個(gè)終端命令窗口,進(jìn)入RKNPU2工程目錄,
cd rknpu2
6 adb獲得開(kāi)發(fā)板root權(quán)限,輸入以下命令:
adb root
7重新掛載開(kāi)發(fā)板,輸入以下命令:
adb remount
8更新板子的rknn_server和librknnrt.so,rknn_server和librknnrt.so介紹如下
所示:
librknnrt.so:是一個(gè)板端的runtime庫(kù)。
rknn_server:是一個(gè)運(yùn)行在板子上的后臺(tái)代理服務(wù),用于接收PC通過(guò)USB傳
輸過(guò)來(lái)的協(xié)議,然后執(zhí)行板端runtime對(duì)應(yīng)的接口,并返回結(jié)果給PC。
9推送拷貝rknn_server到開(kāi)發(fā)板,輸入以下命令:
adb push runtime/RK356X/Android/rknn_server/arm64/rknn_server /vendor/bin/
10推送拷貝librknnrt.so到開(kāi)發(fā)板,輸入以下命令:
adb push runtime/RK356X/Android/librknn_api/arm64-v8a/librknnrt.so /vendor/lib64
11打開(kāi)adb shell命令行,即可操作iTOP-rk3568開(kāi)發(fā)板。
adb shell
12修改rknn_server權(quán)限,并同步修改的內(nèi)容,輸入以下命令:
chmod +x /vendor/bin/rknn_server
13重啟設(shè)備,輸入以下命令:
reboot
14 Android系統(tǒng)啟動(dòng)時(shí)會(huì)自動(dòng)運(yùn)行rknn_server, "ps -ef|grep rknn_server"可以查看是否運(yùn)行,如下圖所示:
15我們進(jìn)入rknn-toolkit2-1.3.0文件夾。以demo(onnx/yolov5)為例,使用rk3568
平臺(tái)進(jìn)行推理。輸入以下命令進(jìn)入examples/onnx/yolov5文件夾。
cd examples/onnx/yolov5
16修改examples/onnx/yolov5/test.py文件,我們修改對(duì)應(yīng)的平臺(tái)為rk3568,修改如下所示,“-”代表需要?jiǎng)h除的內(nèi)容,“+”代表需要新增的內(nèi)容。
if __name__ == '__main__':
# Create RKNN object
-
rknn = RKNN(verbose=True)
+
rknn = RKNN()
# Pre-process config
print('--> Config model')
-
rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128])
+
rknn.config(mean_values=[128, 128, 128], std_values=[128, 128, 128],
target_platform='rk3568')
print('done')
# Load model
@@ -62,7 +62,7 @@ if __name__ == '__main__':
# Init runtime environment
print('--> Init runtime environment')
-
ret = rknn.init_runtime()
+
ret = rknn.init_runtime(target='rk3568')
if ret != 0:
print('Init runtime environment failed!')
exit(ret)
修改完,保存文件并退出。
17激活虛擬化環(huán)境,輸入以下命令
source venv/bin/activate
18在運(yùn)行模型之前,首先檢查開(kāi)發(fā)板是否被識(shí)別到,輸入adb devices,如下圖
所示:
adb devices
19進(jìn)入到examples/onnx/yolov5文件夾,輸入以下命令,執(zhí)行模型轉(zhuǎn)換和推理模型的test.py腳本。python test.py


由上圖結(jié)果可以看出,圖上有三個(gè)人和一個(gè)巴士,所在坐標(biāo)與原圖相符,推
理圖片成功。原圖如下圖所示:

通過(guò)迅為電子提供的完整工具鏈和詳細(xì)文檔,我們輕松從模型轉(zhuǎn)換到真機(jī)運(yùn)行,整個(gè)流程清晰明了,讓開(kāi)發(fā)者能夠快速上手,真正發(fā)揮RK3568NPU的強(qiáng)大算力。
-
開(kāi)發(fā)板
+關(guān)注
關(guān)注
26文章
6161瀏覽量
114177 -
NPU
+關(guān)注
關(guān)注
2文章
361瀏覽量
20868 -
RK3568
+關(guān)注
關(guān)注
5文章
628瀏覽量
7610 -
迅為電子
+關(guān)注
關(guān)注
0文章
86瀏覽量
310
發(fā)布評(píng)論請(qǐng)先 登錄
迅為RK3568手冊(cè)上新 | RK3568開(kāi)發(fā)板NPU例程測(cè)試
手冊(cè)上新 |迅為RK3568開(kāi)發(fā)板NPU例程測(cè)試
手冊(cè)上新 |迅為RK3568開(kāi)發(fā)板NPU例程測(cè)試
RK3568開(kāi)發(fā)板NPU使用安裝步驟
迅為RK3588開(kāi)發(fā)板使用RKNN-Toolkit-lite2運(yùn)行測(cè)試程序
迅為iTOP-RK3568開(kāi)發(fā)板npu手冊(cè)更新
爆款推薦 |?迅為RK3568開(kāi)發(fā)板4核處理器+1T算力NPU+好用到爆的配套資料和視頻!
迅為RK3576開(kāi)發(fā)板NPU例程測(cè)試-rknn-toolkit2環(huán)境搭建和使用
迅為RK3576開(kāi)發(fā)板NPU環(huán)境搭建和使用rknn-toolkit2功能演示模型轉(zhuǎn)換
迅為RK3576開(kāi)發(fā)板NPU環(huán)境搭建和使用rknn-toolkit2功能演示連板推理
迅為RK3568開(kāi)發(fā)板模型推理測(cè)試實(shí)戰(zhàn)LPRNet?車牌識(shí)別
實(shí)戰(zhàn)RK3568性能調(diào)優(yōu):如何利用迅為資料壓榨NPU潛能-在Android系統(tǒng)中使用NPU
【RK3568 NPU實(shí)戰(zhàn)】別再閑置你的NPU!手把手帶你用迅為資料跑通Android AI檢測(cè)Demo,附完整流程與效果
【迅為工業(yè)RK3568穩(wěn)定可靠】itop-3568開(kāi)發(fā)板Linux驅(qū)動(dòng)開(kāi)發(fā)實(shí)戰(zhàn):RK3568內(nèi)核模塊符號(hào)導(dǎo)出詳解

【迅為RK3568開(kāi)發(fā)板NPU實(shí)戰(zhàn)】別再閑置你的NPU!手把手教你玩轉(zhuǎn)RKNN-Toolkit2 的使用
評(píng)論