歡迎學(xué)習(xí)RKNN系列相關(guān)文章,從模型轉(zhuǎn)換、精度分析,評估到部署,推薦好資源:
一、Ubuntu系統(tǒng)上安裝rknn-toolkit
二、使用rknn-toolkit將Pytorch模型轉(zhuǎn)為RKNN模型
三、RKNN模型的評估和推理測試
四、RKNN模型量化精度分析及混合量化提高精度
五、RKNN模型性能評估和內(nèi)存評估
六、rknn-toolkit-lite2部署RKNN模型到開發(fā)板上(python版)
七、RKNN C API開發(fā)板上落地部署RKNN模型
八、RKNN零拷貝API開發(fā)板落地部署RKNN模型
在RKNN模型部署前,需要注意以下幾點:
(1)硬件平臺兼容性:
確保你的開發(fā)板與 RKNN Toolkit Lite2 兼容。目前,RKNN Toolkit Lite2 支持 Rockchip RK3566、RK3588、RK3399 等平臺。
確認開發(fā)板的 NPU 型號和版本與 RKNN 模型的 NPU 算子兼容。
(2)模型轉(zhuǎn)換:
使用 RKNN Toolkit 或 RKNNConverter 工具將 PyTorch、TensorFlow 等框架模型轉(zhuǎn)換為 RKNN 模型。
轉(zhuǎn)換時,需要指定目標硬件平臺和 NPU 型號。
確保模型轉(zhuǎn)換成功,并生成相應(yīng)的 RKNN 模型文件。
關(guān)于模型轉(zhuǎn)換的教程,參考我另外一篇博文:Pytorch轉(zhuǎn)RKNN模型
(3)部署環(huán)境:
在開發(fā)板上安裝 RKNN Runtime 和相關(guān)依賴庫。
確認開發(fā)板的系統(tǒng)版本和編譯環(huán)境與 RKNN Toolkit Lite2 兼容。
(4)模型加載:
使用 RKNN Toolkit Lite2 提供的 API 加載 RKNN 模型。
需指定模型文件路徑以及其他參數(shù)。
(5)模型推理:
使用 RKNN Toolkit Lite2 提供的 API 進行模型推理。
需提供輸入數(shù)據(jù)和相關(guān)參數(shù)。
(6)性能優(yōu)化:
可以使用 RKNN Toolkit Lite2 提供的性能分析工具分析模型性能。
根據(jù)分析結(jié)果,可以對模型進行優(yōu)化,以提高推理速度和降低功耗。
一、源碼包準備
本配套源碼包的獲取方式為文章末掃碼到公眾號「視覺研坊」中回復(fù)關(guān)鍵字:RKNN Lite2開發(fā)板部署。獲取下載鏈接。
下載解壓后的樣子如下:
二、環(huán)境準備
先在開發(fā)板上運行rknn_server,通過adb連通開發(fā)板,在開發(fā)板系統(tǒng)上安裝python編譯環(huán)境。
2.1 安裝Miniconda
在開發(fā)板系統(tǒng)上安裝Miniconda的詳細教程,見我另外一篇博客:Miniconda安裝
2.2 新建虛擬環(huán)境
上一步Miniconda安裝好后,在此基礎(chǔ)上安裝一個新的虛擬環(huán)境,如下,:
查看已有虛擬環(huán)境命令為:
conda env list
創(chuàng)建新虛擬環(huán)境命令為:
conda create -n name python=3.9
上面步驟創(chuàng)建好后激活虛擬環(huán)境,如下:
激活命令為:
conda activate name
2.3 安裝rknn_toolkit_lite2包
rknn_toolkit_lite2包的輪子文件,在我提供源碼包中的packages文件夾中,如下:
在激活的虛擬環(huán)境中,進入到存放輪子文件目錄下,使用下面命令安裝:
pip install rknn_toolkit_lite2-1.6.0-cp39-cp39-linux_aarch64.whl -i https://pypi.mirrors.ustc.edu.cn/simple/
2.4 安裝OpenCV包
在同樣的虛擬環(huán)境下,使用下面命令安裝opencv:
pip install opencv-python -i https://pypi.mirrors.ustc.edu.cn/simple/
三、推理
上面環(huán)境都準備好后,在終端通過命令進入到源碼包目錄下,運行下面命令即可在開發(fā)板上推理RKNN模型。
python rknntoolkit_lite2_inference.py
3.1 代碼
此代碼對應(yīng)源碼包中的rknntoolkit_lite2_inference.py腳本。
from rknnlite.api import RKNNLite
import cv2
import numpy as np
def show_outputs(output):
output_sorted = sorted(output,reverse = True)
top5_str = '\n----------top5-----------\n'
for i in range(5):
value = output_sorted[i]
index = np.where(output == value)
for j in range(len(index)):
if (i + j) >= 5:
break
if value > 0:
top1 = "{}:{}\n".format(index[j],value)
else:
top1 = "-1:0.0\n"
top5_str += top1
print(top5_str)
def show_perfs(perfs):
perfs = "perfs:{}\n".format(perfs)
print(perfs)
def softmax(x):
return np.exp(x)/sum(np.exp(x))
if __name__ == "__main__":
rknn = RKNNLite()
# 使用load_rknn接口直接加載RKNN模型
rknn.load_rknn(path="resnet18.rknn")
# 調(diào)用init_runtime接口初始化運行時環(huán)境
rknn.init_runtime(
core_mask = 0, # core_mask表示NPU的調(diào)度模式,設(shè)置為0時表示自由調(diào)度,設(shè)置為1,2,4時分別表示調(diào)度某個單核心,設(shè)置為3時表示同時調(diào)度0和1兩個核心,設(shè)置為7時表示1,2,4三個核心同時調(diào)度
# targt = "rk3588"
)
# 使用Opencv讀取圖片
img = cv2.imread("space_shuttle_224.jpg")
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
# 調(diào)用inference接口進行推理測試
output = rknn.inference(
inputs=[img],
data_format=None
)
show_outputs(softmax(np.array(output[0][0]))) # 根據(jù)概率排名,打印出前5名的概率
rknn.release()
3.2 開發(fā)板推理結(jié)果
運行上面腳本,輸出推理結(jié)果如下:
打開源碼包中的圖片和imagenet1000標簽.txt文件對照查看,推理預(yù)測的結(jié)果與標簽文件對應(yīng)的類名一致,說明開發(fā)板推理結(jié)果正確,如下:
四、總結(jié)
以上就是rknn-toolkit-lite2部署RKNN模型到開發(fā)板上的詳細過程,CAPI開發(fā)板部署見下一期博文。
總結(jié)不易,多多支持,謝謝!文章來源:http://www.zghlxwxcb.cn/news/detail-848010.html
感謝您閱讀到最后!關(guān)注公眾號「視覺研坊」,獲取干貨教程、實戰(zhàn)案例、技術(shù)解答、行業(yè)資訊!文章來源地址http://www.zghlxwxcb.cn/news/detail-848010.html
到了這里,關(guān)于模型部署——rknn-toolkit-lite2部署RKNN模型到開發(fā)板上(python版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!