模型部署之——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


相关推荐
荪荪1 小时前
yolov8检测模型pt转rknn
人工智能·yolo·机器人·瑞芯微
时光之源1 小时前
一场关于红绿灯检测项目的辩论赛——YOLOv26
深度学习·yolo·grok·gemini·deepseek
Uopiasd1234oo4 小时前
AAttn区域注意力机制改进YOLOv26特征感知与表达能力提升
人工智能·yolo·目标跟踪
QQ676580085 小时前
智慧AI甲骨文检测 目标检测图像数据集 甲骨文识别第10341期
人工智能·yolo·目标检测·目标跟踪·甲骨文检测·甲骨文识别
嵌入式吴彦祖5 小时前
yolo简述和训练原理
yolo
mahtengdbb16 小时前
AdaptiveConv动态权重卷积改进YOLOv26自适应特征提取能力
深度学习·神经网络·yolo
mahtengdbb16 小时前
ADown高效下采样改进YOLOv26目标检测性能提升
yolo·目标检测·目标跟踪
泰恒20 小时前
国内外大模型的区别与差距
人工智能·深度学习·yolo·机器学习·计算机视觉
QQ676580081 天前
建筑热成像检测数据集 建筑物表面缺陷图像识别 建筑外墙保温缺陷检测、管道热损失识别 建筑物表面温度识别第10357期(代码+数据集+模型+界面)
yolo·建筑物表面缺陷图像·建筑外墙保温缺陷检测·管道热损失·建筑物表面温度
张二娃同学1 天前
深度学习入门:YOLOv5 与 Fast R-CNN的认识
人工智能·python·深度学习·神经网络·yolo