1. rknn-toolkit-lite介紹
rknn-toolkit-lite是用于python算法的推理的組件,當前已經(jīng)在EASY-EAI-Nano完成適配,用戶可以用它進行深度學習算法的純python開發(fā)。而且同時支持已經(jīng)進行了預編譯的模型,短短幾行代碼即可完成算法的推理,大幅降低開發(fā)成本。同時很多不熟悉C/C++的算法開發(fā)人員有效降低開發(fā)門檻。本地文檔是根據(jù)已經(jīng)完成rknn模型轉換的模型進行板卡上的推理,關于rknn模型轉換請閱讀請閱讀《在EASY EAI Nano運行自定義的AI算法》。
2. 固件燒錄
當前我們通過系統(tǒng)預裝的方式支持rknn-toolkit-lite,燒錄固件方式請閱讀《固件燒錄與更新》。
固件下載鏈接:https://pan.baidu.com/s/1sWFoPf6oJtZsUPp-_do7AQ
提取碼:1234
固件包如下所示:
3. 在板卡測試demo
下載百度網(wǎng)盤:https://pan.baidu.com/s/1yoof_SyY1ty93dIRe1dZgA (提取碼:1234 )
“測試程序/inference_with_lite.tar.bz2”,把文件傳到EASY-EAI-Nano板卡目錄上。
執(zhí)行以下指令進行解壓:
tar xvf inference_with_lite.tar.bz2

執(zhí)行以下指令切換目錄并執(zhí)行測試程序:
cd /userdata/inference_with_lite/ python3 test.py
結果如下所示:
4. rknn-toolkit-lite流程說明
4.1 使用流程圖
RKNN Tookit Lite使用流程如下:
4.2 例程
第三小節(jié)的例程如下所示:
import platform import cv2 import numpy as np from rknnlite.api import RKNNLite RKNN_MODEL = '10class_ResNet50_pre.rknn' IMG_PATH = './test-1.jpg' INPUT_SIZE = 224 BOX_THRESH = 0.25 NMS_THRESH = 0.6 CLASSES = ("SUV", "bus", "family sedan", "fire engine", "heavy truck", "jeep", "minibus", "racing car", "taxi", "truck") def show_outputs(output): print("softmax output:", output) max_confidence = np.max(output) index = np.where(output == max_confidence) print("max confidence:", max_confidence) print("max confidence index:", index[0][0]) print("CLASSES predict: ", CLASSES[index[0][0]]) def softmax(x): return np.exp(x)/sum(np.exp(x)) if __name__ == '__main__': rknn_lite = RKNNLite() # load RKNN model print('--> Load RKNN model') ret = rknn_lite.load_rknn(RKNN_MODEL) if ret != 0: print('Load RKNN model failed') exit(ret) print('done') # Set inputs img = cv2.imread(IMG_PATH) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) resize_img = cv2.resize(img,(224,224)) # init runtime environment print('--> Init runtime environment') ret = rknn_lite.init_runtime(target=None) if ret != 0: print('Init runtime environment failed') exit(ret) print('done') # Inference print('--> Running model') outputs = rknn_lite.inference(inputs=[resize_img]) print("outputs[0]:", outputs[0]) print("outputs[0].shape:", outputs[0].shape) show_outputs(softmax(np.array(outputs[0][0]))) rknn_lite.release()
5. API詳細說明
5.1 RKNNLite初始化及對象釋放
在使用RKNN Toolkit Lite時,都需要先調用RKNNLite()方法初始化一個RKNNLite對象,并在用完后調用該對象的release()方法將資源釋放掉。
初始化RKNNLite對象時,可以設置verbose和verbose_file參數(shù),以打印詳細的日志信息。其中verbose參數(shù)指定是否要在屏幕上打印詳細日志信息;如果設置了verbose_file參數(shù),且verbose參數(shù)值為True,日志信息還將寫到這個參數(shù)指定的文件中。
舉例如下:
# 將詳細的日志信息輸出到屏幕,并寫到inference.log文件中 rknn_lite = RKNNLite(verbose=True, verbose_file='./inference.log') # 只在屏幕打印詳細的日志信息 rknn_lite = RKNNLite(verbose=True) … rknn_lite.release()
5.2 加載RKNN模型
API | Load_rknn |
描述 | 加載RKNN模型。 |
參數(shù) | path:RKNN模型文件路徑 |
load_model_in_npu: 是否直接加載npu中的rknn模型。其中path為rknn模型在npu中的路徑。只有當RKNN Toolkit Lite運行在連有NPU設備的PC上或RK3399Pro Linux開發(fā)板時才可以設為True。默認值為False. | |
返回值 | 0:加載成功 |
-1:加載失敗 |
舉例如下:
# 從當前目錄加載 ResNet50模型 ret = rknn_lite.load_rknn('10class_ResNet50_pre.rknn')
5.3 初始化運行時環(huán)境
在模型推理之前,必須先初始化運行時環(huán)境,確定模型在哪一個芯片平臺上運行。
API | init_runtime |
描述 | 初始化運行時環(huán)境。確定模型運行的設備信息(芯片型號、設備 ID)。 |
參數(shù) | target:目標硬件平臺,目前支持“rk3399pro”、“rk1806”、“rk1808”、“rv1109”、 “rv1126”。默認為 None,將根據(jù)應用所運行的開發(fā)板自動選擇。 |
device_id:設備編號,如果 PC 連接多臺智能設備時,需要指定該參數(shù),設備編號可 以通過”list_devices”接口查看。默認值為 None。 | |
async_mode:是否使用異步模式。調用推理接口時,涉及設置輸入圖片、模型推理、 獲取推理結果三個階段。如果開啟了異步模式,設置當前幀的輸入將與推理上一幀同 時進行,所以除第一幀外,之后的每一幀都可以隱藏設置輸入的時間,從而提升性能。 在異步模式下,每次返回的推理結果都是上一幀的。該參數(shù)的默認值為 False。 | |
返回值 | 0:加載成功 |
-1:加載失敗 |
舉例如下:
# init runtime environment print('--> Init runtime environment') ret = rknn_lite.init_runtime(target=None) if ret != 0: print('Init runtime environment failed') exit(ret) print('done')
5.4 模型推理
API | inference |
描述 | 對指定輸入進行推理,返回推理結果。 |
參數(shù) | inputs:待推理的輸入,如經(jīng)過 cv2 處理的圖片。類型是 list,列表成員是 ndarray。 |
data_type:輸入數(shù)據(jù)的類型,可填以下值:’float32’, ‘float16’, ‘uint8’, ‘int8’, ‘int16’。 默認值為’uint8’。 | |
data_format:數(shù)據(jù)模式,可以填以下值: “nchw”, “nhwc”。默認值為’nhwc’。這兩個的 不同之處在于 channel 放置的位置。 | |
inputs_pass_through: 將輸入透傳給 NPU 驅動。非透傳模式下,在將輸入傳給 NPU 驅 動之前,工具會對輸入進行減均值、除方差等操作;而透傳模式下,不會做這些操作。 這個參數(shù)的值是一個數(shù)組,比如要透傳 input0,不透傳 input1,則這個參數(shù)的值為[1, 0]。默認值為 None,即對所有輸入都不透傳。 | |
返回值 | results:推理結果,類型是 list,列表成員是 ndarray。 |
舉例如下:
以分類模型為例,如 resnet50,代碼如下(完整代碼參考第三小節(jié)):
# Inference print('--> Running model') outputs = rknn_lite.inference(inputs=[resize_img]) print("outputs[0]:", outputs[0]) print("outputs[0].shape:", outputs[0].shape) show_outputs(softmax(np.array(outputs[0][0])))
5.5 查詢 SDK 版本
API | get_sdk_version |
描述 |
獲取 SDK API 和驅動的版本號。 注:使用該接口前必須完成模型加載和初始化運行環(huán)境。 |
參數(shù) | 無 |
返回值 | sdk_version:API 和驅動版本信息。類型為字符串 |
舉例說明:
# 獲取 SDK 版本信息 …… sdk_version = rknn_lite.get_sdk_version() ……
返回的 SDK 信息如下:
審核編輯 黃宇
-
API
+關注
關注
2文章
1563瀏覽量
63597 -
開發(fā)板
+關注
關注
25文章
5565瀏覽量
102741 -
SDK
+關注
關注
3文章
1067瀏覽量
47792 -
rv1126
+關注
關注
0文章
106瀏覽量
3380
發(fā)布評論請先 登錄
基于RV1126開發(fā)板實現(xiàn)人臉檢測方案

基于RV1126開發(fā)板實現(xiàn)人臉檢測方案

基于RV1126開發(fā)板實現(xiàn)人臉識別方案

基于RV1126開發(fā)板實現(xiàn)人臉檢測方案

基于RV1126開發(fā)板實現(xiàn)安全帽檢測方案

基于RV1126開發(fā)板實現(xiàn)人員檢測方案

基于RV1126開發(fā)板的音頻硬件電路設計

基于RV1126開發(fā)板網(wǎng)絡配置方法

評論