暫時簡單整理一下:
1.在邊緣設備上配置相關環境。
2.配置完成后,獲取模型中間的輸入輸出結果,保存為npy格式。
3.將onnx格式的模型,以及中間輸入輸出文件傳送到邊緣設備上。
4.編寫一個python文件用于轉換模型格式,dataset作為測試可以是隨便的數據。
5.將python傳送到邊緣設備上并運行。
注意:所有文件要在同一目錄下。
參考代碼一:
# Author:SiZhen
# Create: 2024/7/15
# Description: ONNX轉RKNN
import os
import numpy as np
from rknn.api import RKNNdef convert_onnx_to_rknn(onnx_path,rknn_path,input_data,output_data):#創建RKNN對象rknn = RKNN()rknn.config(target_platforms='rk3588',quantized_algorithm='mmse',optimization_level = 2)#加載ONNX模型print('loading ONNX model...')ret = rknn.load_onnx(model=onnx_path)if ret !=0:print("load failed!")return#構建模型,進行RKNN模型轉換print('building rknn model...')ret = rknn.build(do_quantization=False,dataset='/home/DiTing/sizhen/dataset.txt')if ret !=0:print('Build RKNN model failed!')#導出RKNN模型print('Exporting RKNN model...')ret = rknn.export_rknn(rknn_path)if ret != 0:print('Export RKNN failed!')returnprint('RKNN model is successfully exported to ',rknn_path)rknn.init_runtime()outputs=rknn.inference(inputs=[input_data],data_format='nchw')try:if np.test.assert_almost_equal(outputs[0],output_data,decimal=1)is None:print('模型輸出與預期一致。')except AssertionError as e :print("不一致,詳細信息:",e)#轉換模型
i = 0
onnx_path = r'/home/DiTing/sizhen/resNet34.onnx'
rknn_path = onnx_path.replace('.onnx','.rknn')
input_data = np.load('/home/DiTing/sizhen/input_data.npy')
output_data = np.load('/home/DiTing/sizhen/output_data.npy')
convert_onnx_to_rknn(onnx_path,rknn_path,input_data,output_data)
問題及解決方法
問題一
安裝失敗。
解決方法:這個地方,諦聽盒子應該是arm的版本而不是x86:(Lite版本)
問題二
安裝成功找不到屬性
解決方法:用如下包替代
問題三
lite版本缺少屬性
初步討論結果:lite版本應該是只包含運行環境的,最好不要在盒子上進行模型轉換,會又慢又卡,可能利特版本就是沒有模型轉換的功能的。
解決方法:在其他環境轉換。(待更新)可能的解決辦法:https://bbs.eeworld.com.cn/thread-1283146-1-1.html