YOLOv10(6):YOLOv10基于TensorRT的部署(基于INetworkDefinition)

news2024/7/6 17:55:32

1. 写在前面

        我们在前面已经讲过很多关于YOLOv10的一些知识点,也简单理了一下如何训练自己的数据。

        现在本篇文章主要是讲解一下如何在TensorRT中部署YOLOv10,相信经过这一步,各位小伙伴已经能够无限的接近于将YOLOv10产品化了。

        另一个需要说明的是,本文中所述的TensorRT部署并不是基于ONNX中转方法的部署,而是通过基于INetworkDefinition的手动构建网络进行部署,这种方式能过使得我们对网络有一个较为清晰的了解和认识。

        登录https://github.com/tecsai/YOLOv10_TensorRT获取网络构建代码。

        话不多数,开始吧。

2. YOLOv10的网络组成

        本次以YOLOv10m为例,通过阅读“yolov10m.yaml”文件可以看到,整个网络的组成和YOLOv8极为相似,仅在一些局部位置有改动。

        从网络结构配置文件yolov10m.yaml可以看出,YOLOv10有一些基本的模块组成,包括Conv、C2f、SCDown、C2fCIB、PSA、Upsample以及v10Detection组成。

其中,

        Conv就是基本的卷积模块;

        C2f照搬了YOLOv8中的C2f;        

        SCDown由两个基本的Conv模块组成,通过控制Kernel和Stride,实现特征图的两倍下采样;

        C2fCIB就是特殊形式的C2f,其将C2f中的Bottleneck模块换成了CIB模块。

        Upsample就是特征图上采样;

        PSA是MHSA与FFN配合实现的Transformer结构(QKV自注意力);

3. 基本的Conv模块

        Conv模块就是普通的卷积模块,如下所示为训练工程中的PyTorch版本的卷积。

        可以看到,参数已经设置的非常全面了,包括输入输出通道(c1, c2),卷积核尺寸(k),stride(s),padding(p),group(g),dilation(d)以及是否使用激活函数(act)。

        对应,我们在基于TensorRT的版本中依葫芦画瓢就可以了,参考如下。

        这里有一个建议,后期大家可以将激活函数SILU换成LeakyReLU,这也算是在边缘端提速的一个技巧了。

4. C2f与C2fCIB

        C2f可以看做是C3的优化,与C3单元相比,每一个Bottleneck的输入Tensor的Channel都只有上一级的0.5倍,因此计算量明显降低。从另一方面讲,梯度流的增加,也能够明显提升收敛速度和收敛效果。如下分别是C3和C2f的网络结构。

(C3)

(C2f)

        基于上述图,我们构建的基于INetworkDefinition的C2f的代码如下。

        其中,第89行和93行即是对Tensor进行了拆分操作,依次来完成一种类“CSP”的结构。

之后在103行和108行进行一个类“ELAN”的操作,减少计算量,但丰富了梯度流。

        在前面我们说过,C2f和C2fCIB实际上是一样的,仅将Bottleneck结构换成了CIB结构,CIB又是Bottleneck的一种演化版本。

5. PSA

        PSA模块本质上是引入了QKV机制的自注意力模块,实现了CNN与Transformer的结合。

        PSA全称Partial Self-Attention,即将特征图Tensor的部分进行MHSA+FFN,另一部分则执行了Cross Stage,并与MHSA+FFN的输出进行了融合(Concatenate)。

        如下是Attention模块和PSA模块。

Attention

PSA

6. 代码参考

完整的代码可登录https://github.com/tecsai/YOLOv10_TensorRT 获取。

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

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

相关文章

qt creator在windows上配置调试器

从微软下载winsdk:https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/ 运行winsdksetup.exe 选择下载 选择debugging tools for windows 选择安装x64版本debug工具 重新打开qt,自动选择安装的编译器

[汇总] Docker容器详解 Macvlan 创建不同容器独立跑仿真(持续更新中)

一、概念介绍 1.1 什么是macvlan macvlan是一种网卡虚拟化技术,能够将一张网卡(Network Interface Card, NIC)虚拟出多张网卡,这意味着每个虚拟网卡都能拥有独立的MAC地址和IP地址,从而在系统层面表现为完全独立的网络…

下一代广域网技术-Segment Routing(SR)

1.SR MPLS 1.1.广域网VPN技术的演进 特殊的EVPN:从L2VPN发展的EVPN 以VPLS为例的L2VPN存在多种问题,例如业务部署复杂、网络规模受限、不支持双归等,IETF提出EVPN来解决这些问题EVPN最初被设计为一个基于BGP扩展的L2VPN技术,但…

DataWhale - 吃瓜教程学习笔记(三)

学习视频:第3章-对数几率回归_哔哩哔哩_bilibili 西瓜书对应章节: 3.3 对数几率回归 sigmoid函数 极大似然估计建模 信息论 以概率论、随机过程为基本研究工具,研究广义通信系统的整个过程 - 信息熵 (信息期望) 度…

上海亚商投顾:三大指数均跌超1% 全市场下跌个股近5000只

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡调整,尾盘集体跌超1%,微盘股指数跌逾4%,黄白二线分化明显…

【Hadoop集群搭建】实验3:JDK安装及配置、Hadoop本地模式部署及测试

1. 安装 SSH 工具 SSH Secure Shell Client 传输软件 FinalShell(推荐使用) 1.1使用SSH工具将JDK安装包上传至虚拟主机hadoop01, hadoop02, hadoop03,sogou500w 数据上传至 hadoop01。 a. 在虚拟主机/usr 目录下创建文件夹 java,JDK 上传至此目录&…

昇思25天学习打卡营第1天|初学教程

文章目录 背景创建环境熟悉环境打卡记录学习总结展望未来 背景 参加了昇思的25天学习记录,这里给自己记录一下所学内容笔记。 创建环境 首先在平台注册账号,然后登录,按下图操作,创建环境即可 创建好环境后进入即可&#xff0…

死锁的条件、预防、避免、检测

死锁的条件、预防、避免、检测 死锁的必要条件 互斥条件:一个资源一次只能给一个进程使用,非共享请求与保持条件:保持自己资源的同时请求其他资源,该资源可能被占有非剥夺条件:不能强行夺走资源,只能等别的…

【10】交易-交易的结构

1. 交易的结构 1.1 引言 需要说明的是,在我们之前的例子中,区块中的交易(data)是用字符串数据来表示的,但在真正的比特币网络中,交易是一个复杂的数据结构,记录了不同地址之间的价值转移信息。在比特币系统中没有账号或身份信息的概念的,也不会记录地址和身份之间的关…

iOS之如何创建.a静态库

番外:想要查看如何创建.framework静态库可前往看我​​​​​​​iOS之如何创建.framework静态库-CSDN博客这篇文章。 一、创建静态库项目 ①、打开 Xcode 并创建一个新的 Xcode 项目。 ②、选择 "macOS" -> "Framework & Library" -&…

“拿来主义”学习元素裁剪(附源码)

“拿来主义”学习元素裁剪 欢迎关注: 小拾岁月,获取源码。 参考链接:https://mp.weixin.qq.com/s/TsOOhUAff6OeqPW7A9JuaQ 预期效果图 需求分析 首先从需求上来看,需要一个主元素用于展示用户头像。例外,在页面无操…

[保姆级教程]uniapp设置字体引入字体格式

文章目录 在 UniApp 中设置和引入自定义字体(如 .ttf、.woff、.woff2 等格式)通常涉及几个步骤。 准备字体文件: 首先,你需要有字体文件。这些文件通常以 .ttf、.woff 或 .woff2 格式提供。确保有权使用这些字体,并遵守…

Docker配置国内镜像加速-2

Docker 官方镜像仓库(如 Docker Hub)可能由于网络原因,在某些地区或网络环境下下载速度较慢。使用镜像加速可以从距离用户更近、网络条件更好的镜像服务器获取镜像,从而显著提高下载速度,节省时间。 1.测试是否安装 d…

基于Java少儿编程管理系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

PyTorch实战:借助torchviz可视化计算图与梯度传递

文章目录 Tensor计算的可视化(线性回归为例) 如何使用可视化库torchviz 安装graphviz软件 安装torchviz库使用 torchviz.make_dot() 在学习Tensor时,将张量y用张量x表示,它们背后会有一个函数表达关系,y的 grad_f…

2024 年首份软件漏洞报告

Action1 Corporation 发布了其首份 2024 年软件漏洞评级报告。 该报告旨在为首席信息安全官 (CISO) 和首席信息官 (CIO) 提供有关其软件生态系统的战略见解。 它根据软件供应商的安全记录对其进行评估,以便做出更明智的采购决策。 此次发布是在国家漏洞数据库 (N…

让在制品管理更有效

徐总的工厂生产线非常繁忙,每天都在不停地运转。但在制品的流转和存储也非常混乱,导致了很多问题的出现。 一方面,由于缺乏有效的管理,在制品的库存不断增加,占用了大量的资金和空间资源。这些库存不仅增加了库存成本&…

从50分到90分,网站性能优化实践

难以置信: 我可是用尊贵的Vue3Ts开发的呢 (手动狗头). 十分抗拒: 迫于yin威,我给网站做了体检和手术. 体检 – 市面上的体检套餐有很多种,但其实都是换汤不换药.那药(标准)是什么呢?我们会在下面说明.这里我选择了谷歌亲儿子"灯塔"(LightHouse)进行性能体检. 体检…

PyTorch中“No module named ‘torch._six‘“的报错场景及处理方法

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 在使用PyTorch时,您可能会遇到"No module named ‘torch._six’"的错误。这通常是因为PyTorch的某些…

[分布式网络通讯框架]----集群与分布式的区别

单机聊天服务器 聊天系统做了模块化设计,每一个模块都包含很多特定的业务 缺点: 单机聊天服务器极大程度的受限于硬件资源,服务器所能承受的用户并发量是有限的,即使我们通过改变最大连接量等参数,但是受到单机本身…