瑞芯微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,一经查实,立即删除!

相关文章

指定类的debug日志输出到指定日志中

可在 log4j.properties 中添加以下内容,指定hadoop的TaskTracker类的debug日志单独输出TaskTracker. log 中 # 定义输出方式为自定义的 TTOUT log4j.logger.org.apache.hadoop.mapred.TaskTrackerDEBUG,TTOUT # 设置 TTOUT的输出方式为输出到文件 log4j.appender.…

Jackson 工具类

Jackson 工具类 示例代码中包含 Date LocalDate LocalDateTime 类型处理方式 JavaBean 与 json 相互转换 bean2json json2bean List 与 json 相互转换 list2json json2list Map 与 json 相互转换map2json json2map pom.xml <project xmlns"http://maven.apache.org/PO…

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

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

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

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

(转)STR 内核做了什么

参考这篇文章&#xff1a; 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…

腾讯大数据 x StarRocks|构建新一代实时湖仓

2023 年 9 月 26 日&#xff0c;腾讯大数据团队与 StarRocks 社区携手举办了一场名为“构建新一代实时湖仓”的盛大活动。活动聚集了来自腾讯大数据、腾讯视频、腾讯游戏、同程旅行以及 StarRocks 社区的技术专家&#xff0c;共同深入探讨了湖仓一体技术以及其应用实践等多个备…

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 是…

PCA降维

定义 主成分分析&#xff08;PCA&#xff09;是常用的线性数据降维技术&#xff0c;采用一种数学降维的方法&#xff0c;在损失很少信息的前提下&#xff0c;找出几个综合变量作为主成分&#xff0c;来代替原来众多的变量&#xff0c;使这些主成分能够尽可能地代表原始数据的信…

Android 13.0 系统开机屏幕设置默认横屏显示

1.概述 在13.0的系统产品开发中,对于产品需求来说,由于是宽屏设备所以产品需要开机默认横屏显示,开机横屏显示这就需要从 两部分来实现,一部分是系统开机动画横屏显示,另一部分是系统屏幕显示横屏显示,从这两方面就可以做到开机默认横屏显示了 2.系统开机设置默认横屏显…

【C++笔记】模板进阶

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

OpenCV14-图像平滑:线性滤波和非线性滤波

OpenCV14-图像平滑&#xff1a;线性滤波和非线性滤波 1.图像滤波2.线性滤波2.1均值滤波2.2方框滤波2.3高斯滤波2.4可分离滤波 3.非线性滤波3.1中值滤波3.2双边滤波 1.图像滤波 图像滤波是指去除图像中不重要的内容&#xff0c;而使关心的内容表现得更加清晰的方法&#xff0c;…

【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; 运行环境&…

Flink之Watermark水印、水位线

Watermark水印、水位线 水位线概述水印本质生成WatermarkWatermark策略WatermarkStrategy工具类使用Watermark策略 内置Watermark生成器单调递增时间戳分配器固定延迟的时间戳分配器 自定义WatermarkGenerator周期性Watermark生成器标记Watermark生成器Watermark策略与Kafka连接…