瑞芯微RKNN开发·yolov7

官方预训练模型转换

  1. 下载yolov7源码解压到本地,并配置基础运行环境。
  2. 下载官方预训练模型
  1. 进入yolov7-main目录下,新建文件夹weights,并将步骤2中下载的权重文件放进去。
  2. 修改models/yolo.py文件
    def forward(self, x):
        # x = x.copy()  # for profiling
        z = []  # inference output
        self.training |= self.export
        for i in range(self.nl):
            x[i] = self.m[i](x[i]).sigmoid()  # conv
        return x[0], x[1], x[2]
  1. 新建export_nnie.py文件
import os
import torch
import onnx
from onnxsim import simplify
import onnxoptimizer
import argparse
from models.yolo import Detect, Model

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='./weights/yolov7.pt', help='initial weights path') 
    parser.add_argument('--cfg', type=str, default='./cfg/deploy/yolov7.yaml', help='initial weights path') 
    #================================================================
    opt = parser.parse_args()
    print(opt)

    #Save Only weights
    ckpt = torch.load(opt.weights, map_location=torch.device('cpu'))
    torch.save(ckpt['model'].state_dict(), opt.weights.replace(".pt", "-model.pt"))

    #Load model without postprocessing
    new_model = Model(opt.cfg)
    new_model.load_state_dict(torch.load(opt.weights.replace(".pt", "-model.pt"), map_location=torch.device('cpu')), False)
    new_model.eval()

    #save to JIT script
    example = torch.rand(1, 3, 640, 640)
    traced_script_module = torch.jit.trace(new_model, example)
    traced_script_module.save(opt.weights.replace(".pt", "-jit.pt"))

    #save to onnx
    f = opt.weights.replace(".pt", ".onnx")
    torch.onnx.export(new_model, example, f, verbose=False, opset_version=12,
                            training=torch.onnx.TrainingMode.EVAL,
                            do_constant_folding=True,
                            input_names=['data'],
                            output_names=['out0','out1','out2'])

    #onnxsim
    model_simp, check = simplify(f)
    assert check, "Simplified ONNX model could not be validated"
    onnx.save(model_simp, opt.weights.replace(".pt", "-sim.onnx"))

    #optimize onnx
    passes = ["extract_constant_to_initializer", "eliminate_unused_initializer"]
    optimized_model = onnxoptimizer.optimize(model_simp, passes)
    onnx.checker.check_model(optimized_model)
    onnx.save(optimized_model, opt.weights.replace(".pt", "-op.onnx"))
    print('finished exporting onnx')
  1. 命令行执行python3 export_nnie.py脚本(默认为yolov7.pt, 加–weights参数可指定权重,–cfg指定模型配置文件),转换成功会输出一下信息, 转换后的模型存于权重同级目录(*-op.onnx后缀模型)
Namespace(cfg='./cfg/deploy/yolov7.yaml', weights='./weights/yolov7.pt')
finished exporting onnx

请添加图片描述

RKNN开发板植入-模型转换篇

前期准备
  • RKNN开发环境(python)
  • rknn-toolkit2
详细流程
  1. 进入rknn-toolkits2/examples/onnx/yolov5示例目录下
  2. 修改test.py内容(按需修改ONNX_MODEL、RKNN_MODEL、IMG_PATH、DATASET等等超参数)
def sigmoid(x):
    # return 1 / (1 + np.exp(-x))
    return x
  1. 命令行执行python3 test.py即可获取推理结果
    请添加图片描述
    请添加图片描述

RKNN开发板植入-NPU加载推理篇(C++)

后续放出代码

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
yolov8是一种目标检测模型,而瑞芯微RKNN(Rockchip Neural Network)是一种用于在瑞芯微处理器上部署深度学习模型的工具。通过使用RKNN,可以将yolov8模型部署到瑞芯微处理器上进行推理。 以下是使用RKNN部署yolov8的步骤: 1. 准备模型:首先,需要将yolov8模型转换为RKNN支持的格式。可以使用RKNN提供的转换工具将yolov8模型转换为RKNN模型。 2. 安装RKNN工具包:在进行模型转换之前,需要先安装RKNN工具包。可以通过以下命令在Linux系统上安装RKNN工具包: ```shell pip install rknn-toolkit ``` 3. 模型转换:使用RKNN提供的转换工具将yolov8模型转换为RKNN模型。可以使用以下命令进行转换: ```shell rknn-toolkit -i yolov8.onnx -o yolov8.rknn --model_type yolov3 ``` 其中,`yolov8.onnx`是原始的yolov8模型文件,`yolov8.rknn`是转换后的RKNN模型文件,`--model_type yolov3`指定了模型类型为yolov3。 4. 加载RKNN模型:在代码中加载RKNN模型,并进行初始化。可以使用以下代码加载RKNN模型: ```python import rknn # 创建RKNN对象 rknn = rknn.RKNN() # 加载RKNN模型 rknn.load_rknn('./yolov8.rknn') # 初始化RKNN模型 rknn.init_runtime() ``` 5. 进行推理:使用加载和初始化后的RKNN模型进行推理。可以使用以下代码进行推理: ```python # 输入数据 input_data = ... # 进行推理 outputs = rknn.inference(inputs=[input_data]) # 处理输出结果 ... ``` 通过以上步骤,就可以使用RKNN工具包将yolov8模型部署到瑞芯微处理器上进行推理了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值