模型部署之——ONNX模型转RKNN

提示:这里可以添加学习目标

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


一、加载Docker镜像

加载rknn官方提供的基于x86架构下模型转换的镜像文件,生成容器,以及执行镜像。

sudo docker load -i rknn-toolkit2:1.3.0-cp36
sudo docker run -v `pwd`/rknn_model_convert:/data -it rknn-toolkit2:1.3.0-cp36 /bin/bash  # 将文件路径rknn_model_convert绑定在docker容器的data文件夹下
docker exec -it de0f9e94348c /bin/bash         #de0f9e94348c 为加载镜像生成容器的id

二、转换脚本

c 复制代码
from rknn.api import RKNN
import cv2

def export_rknn_inference(img, model_path, Dataset, rknn_path):

    # Create RKNN object
    # 只在屏幕打印详细的日志信息 
    # rknn = RKNN(verbose=True)
    rknn = RKNN(verbose=True)

    # pre-process config
    print('--> Config model')
    
    # mean_values 通道均值
    # std_values 方差, rknn是除以方差
	# quant_img_RGB2BGR 该参数是将量化图片格式又RGB转换为BGR,通常caffe训练的模型需要这个操作
	# quantized_algorithm 量化算法,normal 和 mmse, 不写该参数默认值为 normal, 其中:normal量化速度快, mmse量化速度快,精度稍微比normal保持的好
	# quantized_method 量化方法 channel, layer可选; layer:每层的 weight 只有一套量化参数; channel:每层的 weight 的每个通道都有一套量化参数。默认使用channel
	# target_platform 可以用来配置不同的芯片, 目前支持 rk3566、rk3568、rk3588、rv1103、rv1106, 该参数的值大小写不敏感。

    #rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], quantized_algorithm='normal', quantized_method='channel', target_platform='rk3566')
    rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], quantized_algorithm='normal', quantized_method='channel', target_platform='rk3588')
    print('done')

    # Load ONNX model
    print('--> Loading model')
    # 从当前目录加载 mobilenet_v2 的 onnx 模型,outputs 为 onnx输出层的名字(outputs可不写)
    #ret = rknn.load_onnx(model=model_path, outputs=['output1', 'output2', 'output3'])
    ret = rknn.load_onnx(model=model_path)

    if ret != 0:
        print('Load model failed!')
        exit(ret)
    print('done')

    # Build model
    print('--> Building model')

    # 构建 RKNN 模型
    # do_quantization 是否做量化(不做量化为float16)
    # dataset 为量化图片的路径
    # rknn_batch_size 为 batch_size 默认值为1(可以不写),建议 batch_size 小于 32

    ret = rknn.build(do_quantization=True, dataset=Dataset, rknn_batch_size=1)
    if ret != 0:
        print('Build model failed!')
        exit(ret)
    print('done')

    # Export RKNN model
    print('--> Export rknn model')
    ret = rknn.export_rknn(rknn_path)
    if ret != 0:
        print('Export rknn model failed!')
        exit(ret)
    print('done')
    
    # Init runtime environment
    print('--> Init runtime environment')
    ret = rknn.init_runtime(target=None, device_id=None, perf_debug=True)
    # ret = rknn.init_runtime(target='rk3566')
    if ret != 0:
        print('Init runtime environment failed!')
        exit(ret)
    print('done')

    # Inference
    print('--> Running model')
    outputs = rknn.inference(inputs=[img])
    rknn.release()
    print('done')
    return outputs

if __name__ == '__main__':

    print('This is main ....')
    # Set inputs
    img_path = '20231116_paper_1042005.jpg'
    model_input_w = 640
    model_input_h = 480
    model_path = './yolox.onnx'
    Dataset = './test_export_1.txt'
    rknn_path = './yolox.rknn'
    origimg = cv2.imread(img_path)
    origimg = cv2.cvtColor(origimg, cv2.COLOR_BGR2RGB)
    img = cv2.resize(origimg, (model_input_w , model_input_h ))
    outputs = export_rknn_inference(img, model_path, Dataset, rknn_path)
    print("outputs:",outputs)

其中test_export_1为量化图像的路径,在rknn_model_convert文件夹下新建quant_image文件夹,将量化图像拷贝到里面并且使用

ls -l ./quant_image/*.jpg > test_export_1.txt 生成test_export_1.txt


相关推荐
KeepThinking!21 分钟前
YOLO-World:Real-Time Open-Vocabulary Object Detection
人工智能·yolo·目标检测·多模态
前网易架构师-高司机4 小时前
游泳溺水识别数据集,对9984张原始图片进行YOLO,COCO JSON, VOC XML 格式的标注,平均识别率在91.7%以上
yolo·溺水·游泳溺水·游泳安全
发呆小天才O.oᯅ5 小时前
YOLOv8目标检测——详细记录使用OpenCV的DNN模块进行推理部署C++实现
c++·图像处理·人工智能·opencv·yolo·目标检测·dnn
深度学习lover5 小时前
<项目代码>YOLO Visdrone航拍目标识别<目标检测>
python·yolo·目标检测·计算机视觉·visdrone航拍目标识别
深度学习lover16 小时前
[项目代码] YOLOv8 遥感航拍飞机和船舶识别 [目标检测]
python·yolo·目标检测·计算机视觉·遥感航拍飞机和船舶识别
学习BigData18 小时前
【使用PyQt5和YOLOv11开发电脑屏幕区域的实时分类GUI】——选择检测区域
qt·yolo·分类
红色的山茶花1 天前
YOLOv9-0.1部分代码阅读笔记-dataloaders.py
笔记·深度学习·yolo
千天夜1 天前
YOLO系列正传(三)神经网络的反向传播(back propagation)与公式推导
人工智能·python·深度学习·神经网络·学习·yolo·卷积神经网络
红色的山茶花1 天前
YOLOv9-0.1部分代码阅读笔记-downloads.py
笔记·深度学习·yolo
Zhijun.li@Studio2 天前
联合目标检测与图像分类提升数据不平衡场景下的准确率
yolo·目标检测·分类