瑞芯微RKNN开发·yolov5

官方预训练模型转换

  1. 下载yolov5-v6.0分支源码解压到本地,并配置基础运行环境。
  2. 下载官方预训练模型
  • yolov5n.pt
  • yolov5s.pt
  • yolov5m.pt
  1. 进入yolov5-6.0目录下,新建文件夹weights,并将步骤2中下载的权重文件放进去。
  2. 修改models/yolo.py文件
    def forward(self, x):z = []  # inference outputfor i in range(self.nl):x[i] = self.m[i](x[i]).sigmoid()  # conv#     bs, _, ny, nx = x[i].shape  # x(bs,255,20,20) to x(bs,3,20,20,85)#     x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()#     if not self.training:  # inference#         if self.grid[i].shape[2:4] != x[i].shape[2:4] or self.onnx_dynamic:#             self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)#         y = x[i].sigmoid()#         if self.inplace:#             y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i]  # xy#             y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i]  # wh#         else:  # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953#             xy = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i]  # xy#             wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i]  # wh#             y = torch.cat((xy, wh, y[..., 4:]), -1)#         z.append(y.view(bs, -1, self.no))# return x if self.training else (torch.cat(z, 1), x)return x[0], x[1], x[2]
  1. 新建export_rknn.py文件
import os
import torch
import onnx
from onnxsim import simplify
import onnxoptimizer
import argparse
from models.yolo import Detect, Modelif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--weights', type=str, default='./weights/yolov5n.pt', help='initial weights path') #================================================================opt = parser.parse_args()print(opt)#Save Only weightsckpt = torch.load(opt.weights, map_location=torch.device('cpu'))torch.save(ckpt['model'].state_dict(), opt.weights.replace(".pt", "-model.pt"))#Load model without postprocessingnew_model = Model("./models/{}.yaml".format(os.path.basename(opt.weights).strip(".pt")))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 scriptexample = 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 onnxf = 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'])#onnxsimmodel_simp, check = simplify(f)assert check, "Simplified ONNX model could not be validated"onnx.save(model_simp, opt.weights.replace(".pt", "-sim.onnx"))#optimize onnxpasses = ["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_rknn.py脚本(默认为yolov5n.pt, 加–weights参数可指定权重),转换成功会输出一下信息, 转换后的模型存于权重同级目录(*-op.onnx后缀模型)
Namespace(weights='./weights/yolov5n.pt')
finished exporting onnx

请添加图片描述

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

前期准备
  • RKNN开发环境(python)
  • rknn-toolkits2
详细流程
  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++)

后续放出代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/110808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提高编程效率-Vscode实用指南

您是否知道全球73%的开发人员依赖同一个代码编辑器? 是的,2023 年 Stack Overflow 开发者调查结果已出炉,Visual Studio Code 迄今为止再次排名第一最常用的开发环境。 “Visual Studio Code 仍然是所有开发人员的首选 IDE,与专业…

eBay类目限制要多久?eBay促销活动有哪些?-站斧浏览器

eBay类目限制要多久? 1、eBay对不同类目的商品有不同的限制和要求。一些类目可能对新卖家有一定的限制,限制他们在该类目下销售商品的数量或需要满足某些条件才能进行销售。 2、对于新卖家的限制通常是在一定时间内,比如30天或90天&#xf…

(转)STR 内核做了什么

参考这篇文章: Linux电源管理(6)_Generic PM之Suspend功能 写的很清晰

微信小程序一键获取位置

需求 有个表单需要一键获取对应位置 并显示出来效果如下&#xff1a; 点击一键获取获取对应位置 显示在 picker 默认选中 前端 代码如下: <view class"box_7 {{ showChange1? change-style: }}"><view class"box_11"><view class"…

Stable Diffusion WebUI报错RuntimeError: Torch is not able to use GPU解决办法

新手在安装玩Stable Diffusion WebUI之后会遇到各种问题&#xff0c; 接下来会慢慢和你讲解如何解决这些问题。 在我们打开Stable Diffusion WebUI时会报错如下&#xff1a; RuntimeError: Torch is not able to use GPU&#xff1b;add --skip-torch-cuda-test to COMMANDL…

SQL题目记录

1.商品推荐题目 1.思路&#xff1a; 通过取差集 得出要推荐的商品差集的选取&#xff1a;except直接取差集 或者a left join b on where b null 2.知识点 1.except selectfriendship_info.user1_id as user_id,sku_id fromfriendship_infojoin favor_info on friendship_in…

vue3脚手架搭建

一.安装 vue3.0 脚手架 如果之前安装了2.0的脚手架&#xff0c;要先卸载掉&#xff0c;输入&#xff1a; npm uninstall vue-cli -g 进行全局卸载 1.安装node.js&#xff08;npm&#xff09; node.js&#xff1a;简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是…

【C++笔记】模板进阶

【C笔记】模板进阶 一、非类型模板参数二、类模板的特化三、模板的分离编译 一、非类型模板参数 我们之前学过的模板虽然能很好地帮我们实现泛型编程&#xff0c;比如我们可以让一个栈存储int类型的数据&#xff0c;一个栈存储double类型的数据&#xff1a; template <cla…

【MultiOTP】在Linux上使用MultiOTP进行SSH登录

在前面的文章中【FreeRADIUS】使用FreeRADIUS进行SSH身份验证已经了解过如何通过Radius去来实现SSH和SUDO的登录&#xff0c;在接下来的文章中只是将密码从【LDAP PASSWORD Googlt OTP】改成了【MultiOTP】生成的passcode&#xff0c;不在需要密码&#xff0c;只需要OTP去登录…

大鼠药代动力学(PK参数/ADME)+毒性 实验结果分析

在真实做实验的时候&#xff0c;出现了下面真实测试的一些参数&#xff0c;一起学习一下&#xff1a; 大鼠药代动力学&#xff1a; 为了进一步了解化合物 96 的药代动力学性质&#xff0c;我们选择化合物 500 进行 SD大鼠药代动力学评估。 经静脉注射和口服给药后观察大鼠血药…

广东广西大量工地建筑支模

近年来&#xff0c;广东广西地区的建筑工地发展迅猛&#xff0c;为满足日益增长的建筑需求&#xff0c;大量工地都需要使用支模模板。支模模板是建筑施工中不可或缺的重要工具&#xff0c;用于搭建楼层、梁柱等结构的模板系统。在广东广西&#xff0c;有许多专业的支模模板厂家…

TCP/IP(二十一)TCP 实战抓包分析(五)TCP 第三次握手 ACK 丢包

一 实验三&#xff1a;TCP 第三次握手 ACK 丢包 第三次握手丢失了,会发生什么? 注意: ACK 报文是不会有重传的,当 ACK 丢失了,就由对方重传对应的报文 ① 实验环境 ② 模拟方式 1、 服务端配置防火墙iptables -t filter -I INPUT -s 172.25.2.157 -p tcp --tcp-flag ACK…

基于Springboot服装商品管理系统免费分享

基于Springboot服装商品管理系统 作者: 公众号(擎云毕业设计指南) 更多毕设项目请关注公众号&#xff0c;获取更多项目资源。如需部署请联系作者 注&#xff1a;禁止使用作者开源项目进行二次售卖&#xff0c;发现必究&#xff01;&#xff01;&#xff01; 运行环境&…

新版pycharm(2023.2.2)修改字体大小

下载了2023新版pycharm&#xff0c;想修改字体&#xff0c;发现找不到之前的setting入口&#xff0c;网上搜索也都是file-setting-editor这些&#xff0c;自己找了找&#xff0c;记录下 2023版pycharm的修改字体大小在file-Manage IDE Settings-Setting Sync… 里面&#xff0…

一篇文章带你弄懂编译和链接

一篇文章带你弄懂编译和链接 文章目录 一篇文章带你弄懂编译和链接一、环境二、翻译环境1.编译①预处理②编译③汇编 2.链接 三、运行环境 一、环境 翻译环境和运行环境 翻译环境&#xff1a;源代码被转换成可执行的机器指令。 运行环境&#xff1a;用于实际执行代码。 二、…

设计模式之抽象工厂模式

前言 工厂模式一般指的是简单工厂模式、工厂方法模式、抽象工厂模式&#xff0c;这是三种工厂模式的最后一篇&#xff0c;其他两种的文章链接如下&#xff1a; 设计模式之简单工厂模式-CSDN博客 设计模式之工厂方法模式-CSDN博客 建议三种模式放在一起对比学习&#xff0c;…

亚马逊测评关于IP和DNS的问题

最近不少人询问了关于IP和DNS的问题&#xff0c;在此进行一些科普。 当客户端试图访问一个网站时&#xff0c;首先会向其所在的ISP的DNS服务器进行查询。如果ISP的DNS服务器没有相关缓存&#xff0c;则会向上级DNS服务器进行查询。 一些诸如CDN之类的服务&#xff0c;可能会为…

云安全—责任共担

0x00 前言 云安全的职责范围实际上一直遵循的是&#xff0c;谁提供谁负责&#xff0c;如果交付给云消费者的时候&#xff0c;交付者使用过程中就要自行负责&#xff0c;也就是我们经常遇到的配置不当等问题&#xff0c;在三层服务模式中&#xff0c;责任互相嵌套&#xff0c;最…

批量修改视频尺寸:简单易用的视频剪辑软件教程

如果你需要批量修改视频尺寸&#xff0c;同时保持高质量的画质&#xff0c;那么“固乔剪辑助手”这款软件是你的不二之选。下面就是如何使用这款软件进行批量修改视频尺寸的详细步骤。 1. 首先&#xff0c;你需要在浏览器中进入“固乔科技”的官网&#xff0c;然后下载并安装“…

大数据 DataX 数据同步数据分析入门

目录 一、DataX 概览 1.1 DataX 是什么 1.2 DataX 3.0 概览 设计理念 当前使用现状 二、DataX 详解 2.1 DataX 3.0 框架设计 2.2 DataX 3.0 插件体系 2.3 DataX 3.0 核心架构 2.3.1 核心模块介绍 2.3.2 DataX 调度流程 2.4 DataX 3.0 的六大核心优势 2.4.1 可靠的…