• pytorch模型转换为rknn模型,使用npu推理


    一、转换为onnx模型

    在yolov5代码中运行export.py,转换为onnx模型,参数根据自己需要修改

    二、创建转换目录

    然后在rknn文件夹下,找到onnx2rknn.py、dataset.txt和coco2017数据集,将它们复制到新的文件夹中,作为rknn模型转换目录。将需要转换的onnx模型也放在该目录中。

    在这里插入图片描述

    我的目录结构如图所示,其中第一个文件夹是已经转换成功的生成目录。

    在这里插入图片描述

    三、转换为rknn模型

    RKNN-Toolkit2 是为用户提供在 PC、 Rockchip NPU平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的 Python 接口可以便捷地完成以下功能:

    1. 🏆模型转换:支持Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch 等模型转为 RKNN模型,并支持 RKNN 模型导入导出,RKNN 模型能够在 Rockchip NPU 平台上加载使用。

    2. 🎽量 化 功 能 : 支 持将 浮 点 模 型 量 化 为 定 点 模 型 , 目 前 支 持 的 量 化 方 法 为 非 对 称 量 化 , 并 支 持 混 合 量化 功 能 。asymmetric_quantized-16 目前版本暂不支持。

    3. 🎯模型推理:能够在 PC 上模拟Rockchip NPU 运行 RKNN 模型并获取推理结果;或将 RKNN模型分发到指定的 NPU 设备上进行推理并获取推理结果。

    4. 🏋性能和内存评估:将 RKNN 模型分发到指定 NPU 设备上运行,以评估模型在实际设备上运行时的性能和内存占用情况。

    5. 🎼量化精度分析:该功能将给出模型量化前后每一层推理结果与浮点模型推理结果的余弦距离,以便于分析量化误差是如何出现的,为提高量化模型的精度提供思路。

    进入我们之前配置安装有rknn-toolkit2的环境,输入命令进行转换。

    python export.py
    
    • 1

    过程中的日志输出:

    (py36) (base) dzh@dzh-Lenovo-Legion-Y7000:~/modelConvert/onnx2rknn$ python onnx2rknn.py 
    W __init__: rknn-toolkit2 version: 1.3.0-11912b58
    --> Loading model
    W load_onnx: It is recommended onnx opset 12, but your onnx model opset is 10!
    W load_onnx: Model converted from pytorch, 'opset_version' should be set 12 in torch.onnx.export for successful convert!
                 More details can be found in examples/pytorch/torch2onnx
    done
    --> Building model
    Analysing : 100%|███████████████████████████████████████████████| 168/168 [00:00<00:00, 3731.11it/s]
    Quantizating : 100%|█████████████████████████████████████████████| 168/168 [00:00<00:00, 755.22it/s]
    W build: The default input dtype of 'images' is changed from 'float32' to 'int8' in rknn model for performance!
                          Please take care of this change when deploy rknn model with Runtime API!
    W build: The default output dtype of 'output' is changed from 'float32' to 'int8' in rknn model for performance!
                          Please take care of this change when deploy rknn model with Runtime API!
    W build: The default output dtype of '335' is changed from 'float32' to 'int8' in rknn model for performance!
                          Please take care of this change when deploy rknn model with Runtime API!
    W build: The default output dtype of '336' is changed from 'float32' to 'int8' in rknn model for performance!
                          Please take care of this change when deploy rknn model with Runtime API!
    done
    --> Export RKNN model: ./rknn_models/yolov5s-640-640_rm_transpose.rknn
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    然后在rknn_models下可以看到yolov5s-640-640_rm_transpose.rknn文件,重命名下,我们就可以拷贝到开发板上进行目标检测了。

    在这里插入图片描述

    四、问题记录

    W __init__: rknn-toolkit2 version: 1.3.0-11912b58
    --> Loading model
    W load_onnx: It is recommended onnx opset 12, but your onnx model opset is 10!
    W load_onnx: Model converted from pytorch, 'opset_version' should be set 12 in torch.onnx.export for successful convert!
                 More details can be found in examples/pytorch/torch2onnx
    E load_onnx: The len of mean_values ([0, 0, 0]) for input 0 is wrong, expect 12!
    W load_onnx: ===================== WARN(3) =====================
    E rknn-toolkit2 version: 1.3.0-11912b58
    E load_onnx: Catch exception when loading onnx model: /home/dzh/modelConvert/onnx2rknn/yolov5s.onnx!
    E load_onnx: Traceback (most recent call last):
    E load_onnx:   File "rknn/api/rknn_base.py", line 1182, in rknn.api.rknn_base.RKNNBase.load_onnx
    E load_onnx:   File "rknn/api/rknn_base.py", line 663, in rknn.api.rknn_base.RKNNBase._create_ir_and_inputs_meta
    E load_onnx:   File "rknn/api/rknn_log.py", line 113, in rknn.api.rknn_log.RKNNLog.e
    E load_onnx: ValueError: The len of mean_values ([0, 0, 0]) for input 0 is wrong, expect 12!
    load model failed!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    pt模型的输入图像的通道一定要和转换时的图像通道数相同,对于RGB图像肯定是3通道。

  • 相关阅读:
    软件需求的三大层次,逐层细化的注意事项
    专精特新!2024年湖北省专精特新中小企业申报奖励、申报条件整理
    python写一个开机启动的选项
    leetcode.792 匹配子序列的单词数 哈希表 + 二分优化
    JVM运行时参数查看
    【Redis学习笔记】第十三章 Redis集群
    《软件性能测试、分析与调优实践之路》(第2版)--第7章节选--常见性能问题分析总结
    LocalDateTime的使用
    Excel文档名称批量翻译的高效方法
    消息队列:原理与应用
  • 原文地址:https://blog.csdn.net/qq_42257666/article/details/127490117