yolov9 瑞芯微芯片rknn部署、地平线芯片Horizon部署、TensorRT部署

  特别说明:参考官方开源的yolov9代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。

  模型和完整仿真测试代码,放在github上参考链接 模型和代码。

  之前写过yolov8检测、分割、关键点模型的部署的多篇博文,yolov8还没玩溜,这不yolov9又来了。yolov9刚出来两三天,有朋友就问:yolov9都出来好几天了,怎么没有见到你写一篇部署博客呢。其实yolov9出来两三天,说实话还是通过朋友告知才知道的。一直想抽时间把yolov9部署给盘一下,奈何一拖就又是好几天,这两天抽时间终于把这个yolov9给盘完了。

1 模型和训练

  训练代码参考官方开源的yolov9训练代码,考虑到有些板端对SiLU的支持有限,本示例训练前把激活函数SiLU替换成了ReLU,训练使用的模型配置文件是yolov9.yaml,输入分辨率640x640。用 from thop import profile 统计的模型计算量和参数 Flops: 120081612800.0(120G),Params: 55388336.0(55M)

2 导出 yolov9 onnx

  导出onnx时需要修改两个地方。

  特别说明:只在导出onnx时修改,训练时无需修改,修改以下代码后运行会报错,但是可以生成onnx文件,无需关注报错。

   第一个处:增加以下代码(红色框能新增):
在这里插入图片描述

        reslut = []for i in range(self.nl):reslut.append(self.cv2[i](x[i]))reslut.append(self.cv3[i](x[i]))return reslut

第二处修改:增加以下代码(红色框能新增)
在这里插入图片描述

class CBFuse(nn.Module):def __init__(self, idx):super(CBFuse, self).__init__()self.idx = idxdef forward(self, xs):target_size = xs[-1].shape[2:]if target_size[0] < 10:res = [F.interpolate(x[self.idx[i]], size=target_size, mode='nearest') for i, x in enumerate(xs[:-1])]out = torch.sum(torch.stack(res + xs[-1:]), dim=0)return outj = 0for i, x in enumerate(xs[:-1]):j = iif target_size[0] < 10:continueif i == 0:x0 = F.interpolate(x[self.idx[i]], size=target_size, mode='nearest')if i == 1:x1 = F.interpolate(x[self.idx[i]], size=target_size, mode='nearest')if i == 2:x2 = F.interpolate(x[self.idx[i]], size=target_size, mode='nearest')if j == 2 and target_size[0] > 10:out = x0 + x1 + x2 + xs[-1:][0]return outif j == 1 and target_size[0] > 10:out = x0 + x1 + xs[-1:][0]return outif j == 0 and target_size[0] > 10:out = x0 + xs[-1:][0]return outres = [F.interpolate(x[self.idx[i]], size=target_size, mode='nearest') for i, x in enumerate(xs[:-1])]out = torch.sum(torch.stack(res + xs[-1:]), dim=0)return out

最后:增加保存onnx文件代码
在这里插入图片描述

    print(torch.onnx.ir_version)print("===========  onnx =========== ")dummy_input0 = torch.randn(1, 3, 640, 640)input_names = ["data"]output_names = ["output1", "output2", "output3", "output4", "output5", "output6"]torch.onnx.export(model, (dummy_input0), "./test_onnx/yolov9_relu_80class.onnx", verbose=True, input_names=input_names, output_names=output_names, opset_version=12)print("======================== convert onnx Finished! .... ")

3 yolov9 测试效果

pytorhc测试效果
在这里插入图片描述

onnx测试效果(确保修改CBFuse后导出的onnx测试结果和pytorch是一致的)
在这里插入图片描述

4 tensorRT 时耗

  模型训练使用的配置文件是yolov9.yaml,输入分辨率是640x640,转trt使用的fp16_mode,显卡Tesla V100,cuda_11.0。
在这里插入图片描述

5 rknn 板端C++部署

  模型训练使用的配置文件是yolov9.yaml,输入分辨率是640x640,芯片rk3588.

  把在rk3588板子上测试的模特推理时耗,和用C++代码写的后处理时耗,都给贴出来供大家参考。【rk3588的C++代码参考链接】。
在这里插入图片描述

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

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

相关文章

leetcode有效的括号-中等

题目描述 解题思路 不要被事例骗到&#xff0c;没有事例中写的那么简单&#xff0c;其中还包括&#xff08;[ ]&#xff09;这种例子。如果是计算机本专业的同学来说&#xff0c;一眼看出来&#xff0c;需要使用栈的数据结构。在python中需要使用列表进行。如果匹配的是左括号…

IDEA如何开启Dashboard

普通的面板 Run Dashboard面板 修改配置文件 找到项目的.idea文件夹 点击编辑workspace.xml文件 添加下方代码 <component name"RunDashboard"><option name"ruleStates"><list><RuleState><option name"name" valu…

什么是去中心化云计算?

去中心化云计算是一种新型的云计算方式&#xff0c;它与传统的中心化云计算不同&#xff0c;将数据和计算任务分布到多个节点上&#xff0c;而不是将数据集中存储在中心服务器上。这种云计算方式具有许多优势&#xff0c;包括提高数据安全性、降低运营成本、增强可扩展性和灵活…

HTML-基础标签

1. HTML初识 1.1 什么是HTML HTML&#xff08;英文Hyper Text Markup Language的缩写&#xff09;中文译为“超文本标签语言”&#xff0c;是用来描述网页的一种语言。所谓超文本&#xff0c;因为它可以加入图片、声音、动画、多媒体等内容&#xff0c;不仅如此&#xff0c;它还…

nebula容器方式安装:docker 安装nebula到windows

感谢阅读 基础环境安装安装docker下载nebula 安装数据库命令行安装查询network nebula-docker-compose_nebula-net并初始化查询安装初始使用root&#xff08;God用户类似LINUX的root&#xff09; 关闭服务 安装UI 基础环境安装 安装docker 点我下载docker 下载nebula 数据…

GIS之深度学习03:Anaconda无法正常启动问题汇总(更新)

在安装完成anaconda后&#xff0c;总会出现一些问题&#xff0c;以下为遇到的问题及解决方案&#xff1a; &#xff08;有问题请私信&#xff0c;持续更新&#xff09; 01&#xff1a;anaconda navigator启动时一直卡在 loading applications 页面 解决&#xff1a; 找到anac…

【Docker】安装及相关的命令

目录 一 Docker简介 1.1 是什么 1.2 优缺点 1.3 应用场景 1.4 安装 二 命令 2.1 Docker基本命令 2.2 Docker镜像命令 2.3 Docker容器命令 一 Docker简介 1.1 是什么 Docker是一个开源的应用容器引擎&#xff0c;它基于Go语言实现&#xff0c;并利用操作系统本身已有的…

springboot-基础-eclipse集成mybatis+使用方法+排错

备份笔记。所有代码都是2019年测试通过的&#xff0c;如有问题请自行搜索解决&#xff01; 目录 集成mybatis安装mybatis的jar包安装插件&#xff1a;mybatis-generator安装方法生成方法报错&#xff1a;java.lang.RuntimeException: Exception getting JDBC Driver mybatis注解…

H3C OSPF 外部路由引入实验

H3C OSPF 外部路由引入实验 实验拓扑 实验需求 按照图示配置 IP 地址R1&#xff0c;R2&#xff0c;R3 运行 OSPF 使内网互通&#xff0c;所有接口&#xff08;公网接口除外&#xff09;全部宣告进 Area 0&#xff1b;要求使用环回口作为 Router-id业务网段不允许出现协议报文…

Idea安装gideabrowser插件

Idea安装gideabrowser插件 一、安装二、设置教程 一、安装 gideabrowser链接地址 二、设置教程 在人生的舞台上&#xff0c;奋力拼搏&#xff0c;才能演绎出最精彩的人生之歌。面对挑战和困难&#xff0c;不妥协、不气馁&#xff0c;只争朝夕&#xff0c;方显坚韧与智慧。努…

基于ssm框架的博客系统

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1课题背…

2024智慧城市革命:人工智能、场景与运营的融合之力

在数字革命的浪潮中&#xff0c;2024年的智慧城市将成为人类社会进步的新地标。 三大关键元素——人工智能、场景应用和精准运营——正在重新塑造城市面貌&#xff0c;构建未来的智慧城市生活图景。 一、人工智能&#xff1a;赋能智慧城市 随着人工智能技术的快速发展&#x…