RKNN3588上部署 RTDETRV2
RT-DETR V2 是由百度研究团队在 2024年 提出的,是其广受好评的实时目标检测模型 RT-DETR 的重大升级版本。它继承了第一代 RT-DETR 利用 Transformer 架构实现端到端目标检测 和 卓越实时性能 的核心优势,并针对模型精度、训练效率和部署灵活性进行了全方位的显著提升,再次刷新了实时检测的SOTA(State-of-the-Art)水平。
核心目标与核心优势:
-
更高精度: 在保持甚至超越实时速度的前提下,显著提升在各种场景下的检测精度(平均精度均值 - AP)。
-
更快训练: 极大地缩短模型训练所需时间,降低研发和迭代成本。官方宣称训练速度比 V1 快 3倍。
-
更强部署灵活性: 提供更广泛的硬件平台支持(如 NVIDIA GPU, Intel CPU, NVIDIA Jetson, ARM 处理器等)和更高效的推理引擎适配(如 TensorRT, ONNX Runtime, OpenVINO)。
关键技术革新:
RT-DETR V2 的成功源于多项创新设计:
-
混合编码器设计:
-
巧妙地融合了 CNN 骨干网络(如 HGNetv2) 和 Transformer 编码器 的优势。
-
CNN 高效提取局部特征,Transformer 则擅长捕捉长距离依赖和全局上下文。
-
这种混合结构在特征提取阶段就为高精度和高效性奠定了基础。
-
-
不确定性最小化查询(Uncertainty-minimal Queries - UMQs):
-
这是 V2 的核心创新之一。传统 DETR 类模型使用可学习的对象查询(Object Queries)来定位和识别目标,但其初始化和匹配存在不确定性。
-
UMQs 机制通过 显式地建模和最小化查询的空间位置不确定性,引导模型学习到更稳定、更精准的初始目标位置表示。
-
效果: 显著加速了训练收敛速度(是训练提速的关键),并提升了检测精度,尤其是对小目标的检测能力。
-
-
IoU 感知查询选择:
-
在将特征图上的点(Anchor Points)转换为解码器输入的对象查询时,V2 引入了 IoU(交并比)感知机制。
-
它不仅考虑分类得分,还综合考虑预测框与真实框的IoU质量来选择最具有代表性和高质量的查询。
-
效果: 筛选出更优质的初始查询,为解码器提供更有效的输入,进一步提升精度。
-
-
尺度增强的混合分配:
-
改进了训练过程中为预测框分配监督标签(即正负样本分配)的策略。
-
通过结合动态匹配(如匈牙利算法)和基于规则的静态分配(如ATSS)的优点,并融入多尺度信息。
-
效果: 为模型提供了更丰富、更稳定的监督信号,尤其是在处理不同尺度的目标时,提升了训练的鲁棒性和最终精度。
-
性能表现:
在权威的 COCO 目标检测数据集上,RT-DETR V2 展现了令人印象深刻的性能:
-
例如,RT-DETR-L 模型在 COCO val2017 上达到 54.8% AP,同时推理速度在 NVIDIA Tesla T4 GPU 上高达 74 FPS。
-
更重要的是,它在 各种硬件平台(从高端GPU到边缘CPU) 上都实现了领先的精度-速度权衡,验证了其卓越的部署灵活性。
-
其训练速度相比 V1 大幅提升(约3倍),极大地提高了研发效率。
但是在边缘端上部署确实存在较多的问题,今天我们在RK3588上部署RTDETRV2.
导出onnx:
import os
import sysimport torch
import torch.nn as nnfrom src.core import YAMLConfig
from rtModel import Modeldef main(args, ):"""main"""cfg = YAMLConfig(args.config, resume=args.resume)model = Model()data = torch.rand(1, 3, 1024, 1024)size = torch.tensor([[1024, 1024]])_ = model(data, size)dynamic_axes = {'images': {0: 'N', },'orig_target_sizes': {0: 'N'}}output_file = args.resume.replace('.pth', '.onnx') if args.resume else 'model.onnx'torch.onnx.export(model,(data, size),output_file,input_names=['images', 'orig_target_sizes'],output_names=['labels', 'boxes', 'scores'],# dynamic_axes=dynamic_axes,opset_version=16,verbose=False,do_constant_folding=True,)if args.check:import onnxonnx_model = onnx.load(output_file)onnx.checker.check_model(onnx_model)print('Check export onnx model done...')if args.simplify:import onnximport onnxsimdynamic = True# input_shapes = {'images': [1, 3, 640, 640], 'orig_target_sizes': [1, 2]} if dynamic else Noneinput_shapes = {'images': data.shape, 'orig_target_sizes': size.shape} if dynamic else Noneonnx_model_simplify, check = onnxsim.simplify(output_file, test_input_shapes=input_shapes)onnx.save(onnx_model_simplify, output_file)print(f'Simplify onnx model {check}...')if __name__ == '__main__':import argparseparser = argparse.ArgumentParser()parser.add_argument('--config', '-c', default='configs/dfine/dfine_hgnetv2_l_coco.yml', type=str, )parser.add_argument('--resume', '-r', type=str, )parser.add_argument('--check', action='store_true', default=True,)parser.add_argument('--simplify', action='store_true', default=True,)args = parser.parse_args()main(args)
转换为rknn,正常转换即可。
得到rknn将其push到开发板中。
执行命令:
./rknn_yolov5_demo ../REDETRV2_RKNN.rknn ../vedio_0_2_580.jpg 10 RTDETRV2
得到结果:
相关文章:

RKNN3588上部署 RTDETRV2
RT-DETR V2 是由百度研究团队在 2024年 提出的,是其广受好评的实时目标检测模型 RT-DETR 的重大升级版本。它继承了第一代 RT-DETR 利用 Transformer 架构实现端到端目标检测 和 卓越实时性能 的核心优势,并针对模型精度、训练效率和部署灵活性进行了全方…...

Python----循环神经网络(BiLSTM:双向长短时记忆网络)
一、LSTM 与 BiLSTM对比 1.1、LSTM LSTM(长短期记忆网络) 是一种改进的循环神经网络(RNN),专门解决传统RNN难以学习长期依赖的问题。它通过遗忘门、输入门和输出门来控制信息的流动,保留重要信息并丢弃无关…...
Elasticsearch 常用操作命令整合 (cURL 版本)
Elasticsearch 常用操作命令整合 (cURL 版本) 集群管理 查看集群健康状态 curl -X GET "localhost:9200/_cluster/health?pretty"查看节点信息 curl -X GET "localhost:9200/_cat/nodes?v"查看集群统计信息 curl -X GET "localhost:9200/_clus…...
Redis持久化策略:RDB与AOF详解
目录 1. RDB持久化工作原理触发机制优点缺点配置示例 2. AOF持久化工作原理同步策略重写机制优点缺点配置示例 3. RDB与AOF比较4. 混合持久化(Redis 4.0)5. 选择建议 Redis提供了两种主要的持久化机制来保证数据安全:RDB(Redis Database)和AOF(Append Only File)。本…...

Linux系统编程-DAY10(TCP操作)
一、网络模型 1、服务器/客户端模型 (1)C/S:client server (2)B/S:browser server (3)P2P:peer to peer 2、C/S与B/S区别 (1)客户端不同&#…...

基于eclipse进行Birt报表开发
Birt报表开发最终实现效果: 简洁版的Birt报表开发实现效果,仅供参考! 可动态获取采购单ID,来打印出报表! 下面开始Birt报表开发教程: 首先:汉化的eclipse及Birt值得拥有:至少感觉上…...

GPU虚拟化
引言 现有如下环境(注意相关配置:只有一个k8s节点,且该节点上只有一张GPU卡): // k8s版本 $ kubectl version Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.7&…...

LabVIEW工业级多任务实时测控系统
采用LabVIEW构建了一套适用于工业自动化领域的多任务实时测控系统。系统采用分布式架构,集成高精度数据采集、实时控制、网络通信及远程监控等功能,通过硬件与软件的深度协同,实现对工业现场多类型信号的精准测控,展现 LabVIEW 在…...
Python学习(7) ----- Python起源
🐍《Python 的诞生》:一段圣诞假期的奇妙冒险 📍时间:1989 年圣诞节 在荷兰阿姆斯特丹的一个寒冷冬夜,灯光昏黄、窗外飘着雪。一个程序员 Guido van Rossum 正窝在家里度假——没有会议、没有项目、没有 bug…...
Java中List的forEach用法详解
在 Java 中,List.forEach() 是 Java 8 引入的一种简洁的遍历集合元素的方法。它基于函数式编程思想,接受一个 Consumer 函数式接口作为参数,用于对集合中的每个元素执行操作。 基本语法 java 复制 下载 list.forEach(consumer); 使用示…...
LeetCode 1356.根据数字二进制下1的数目排序
题目: 给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。 请你返回排序后的数组。 提示: 1 < arr.length < 5000…...

破解HTTP无状态:基于Java的Session与Cookie协同工作指南
HTTP协议自身是属于“无状态”协议 无状态是指:默认情况下,HTTP协议的客户端和服务器之间的这次通信,和下次通信之间没有直接的关系 但在实际开发中,我们很多时候是需要知道请求之间的关联关系的 上述图中的令牌,通常就…...

JS 事件流机制详解:冒泡、捕获与完整事件流
JS 事件流机制详解:冒泡、捕获与完整事件流 文章目录 JS 事件流机制详解:冒泡、捕获与完整事件流一、DOM 事件流基本概念二、事件捕获 (Event Capturing)特点代码示例 三、事件冒泡 (Event Bubbling)特点代码示例 四、完整事件流示例HTML 结构JavaScript…...
MYSQL too many connection问题排查和修复
1.连接数据库 mysql -u root -p 1.1 查看mysql路径 如果没有配置mysql的环境变量,可以直接找mysql的安装目录 打开任务管理器-》服务-》Mysql(根据版本不同后面带有数字,找运行的那个) 打开服务->mysql->属性-》可执行文件的路径,…...
SpringCloudAlibaba和SpringBoot版本问题
SpringCloudAlibaba和SpringBoot版本问题 直接参考官方给出的版本说明,具体地址:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E Spring Cloud Alibaba VersionSentinel VersionNacos VersionRocketMQ Ver…...

算法专题七:分治
快排 1.颜色分类 题目链接:75. 颜色分类 - 力扣(LeetCode) class Solution {public void swap(int[] nums, int i, int j){int t = nums[i];nums[i] = nums[j];nums[j] = t;}public void sortColors(int[] nums) {int left=-1 ,i=0 ,right=nums.length;while(i<right){i…...

Vue中虚拟DOM的原理与作用
绪论 首先我们先了解,DOM(Document Object Model,文档对象模型) 是浏览器对 HTML/XML 文档的结构化表示,它将文档解析为一个由节点(Node)和对象组成的树形结构(称为 DOM 树…...
前端十种排序算法解析
1. 冒泡排序 1.1 说明 冒泡排序为一种常用排序算法,执行过程为从数组的第一个位置开始,相邻的进行比较,将最大的数移动到数组的最后位置执行的时间复杂度与空间复杂度为 o(n^2) 1.2 执行过程 从数组的第一个位置开始,截止位置为 …...
使用 C/C++ 和 OpenCV 添加图片水印
使用 C/C 和 OpenCV 添加图片水印 🖼️ 在数字图像处理中,添加水印是一种常见的操作,可以用于版权保护、品牌宣传或信息标注。本文将介绍如何使用 C/C 和强大的计算机视觉库 OpenCV 来实现将自定义水印(图片或文字)添…...
Secs/Gem第十二讲(基于secs4net项目的ChatGpt介绍)
好,那我们进入最关键的一讲—— 第十二讲:完整事件通知流程全景图——CEID 触发到主机接收的全过程 关键词:CEID 事件上报、S6F11 报文、事件触发流程、数据驱动机制、Report Dispatch、主机解析流程 本讲目标 你将彻底理解: 设…...
FastAPI实战起步:从Python环境到你的第一个“Hello World”API接口
上一篇文章中介绍了有关FastAPI的优势,本篇文章我将手把手带你从零开始,搭建FastAPI的开发环境,并成功运行你的第一个“Hello World”API。在开始之前,请确保你的电脑已经安装了Python 3.7或更高版本,以及VS Code&…...

使用vue3+ts+input封装上传组件,上传文件显示文件图标
效果图: 代码 <template><div class"custom-file-upload"><div class"upload"><!-- 显示已选择的文件 --><div class"file-list"><div v-for"(item, index) in state.filsList" :key&q…...
iOS 抖音导航栏首页一键分两列功能的实现
要实现 iOS 抖音首页导航栏的“一键分两列”功能(通常指将单列内容切换为双列瀑布流布局),需结合自定义导航栏控件与布局动态切换逻辑。以下是关键实现步骤和技术要点,基于 iOS 原生开发框架(Swift/Objective-C&#x…...
零基础入门 C 语言基础知识(含面试题):结构体、联合体、枚举、链表、环形队列、指针全解析!
🌟 零基础入门 C 语言基础知识(含面试题):结构体、联合体、枚举、链表、环形队列、指针全解析! C 语言是所有程序员通向“系统世界”的第一把钥匙。很多嵌入式开发、操作系统内核、网络通信、图形引擎,背后…...

【Linux】Ubuntu 创建应用图标的方式汇总,deb/appimage/通用方法
Ubuntu 创建应用图标的方式汇总,deb/appimage/通用方法 对于标准的 Ubuntu(使用 GNOME 桌面),desktop 后缀的桌面图标文件主要保存在以下三个路径: 当前用户的桌面目录(这是最常见的位置)。所…...
【Unity】R3 CSharp 响应式编程 - 使用篇(集合)(三)
1、ObservableList 基础 List 类型测试 using System;using System.Collections.Specialized;using ObservableCollections;using UnityEngine;namespace Aladdin.Standard.Observable.Collections.List{public class ObservableListTest : MonoBehaviour{protected readonly O…...
振动力学:弹性杆的纵向振动(固有振动和固有频率的概念)
文章1、2、3中讨论的是离散系统的振动特性,然而实际系统的惯性质量、弹性、阻尼等特性都是连续分布的,因而成为连续系统或分布参数系统。确定连续介质中无数个点的运动需要无限个广义坐标,因此也称为无限自由度系统,典型的结构例如:弦、杆、膜、环、梁、板、壳等,也称为弹…...

LangGraph--Agent工作流
Agent的工作流 下面展示了如何创建一个“计划并执行”风格的代理。 这在很大程度上借鉴了 计划和解决 论文以及Baby-AGI项目。 核心思想是先制定一个多步骤计划,然后逐项执行。完成一项特定任务后,您可以重新审视计划并根据需要进行修改。 般的计算图如…...

Spring Boot 常用注解面试题深度解析
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot 常用注解面试题深度解析一、核心…...

Linux系统的CentOS7发行版安装MySQL80
文章目录 前言Linux命令行内的”应用商店”安装CentOS的安装软件的yum命令安装MySQL1. 配置yum仓库2. 使用yum安装MySQL3. 安装完成后,启动MySQL并配置开机自启动4. 检查MySQL的运行状态 MySQL的配置1. 获取MySQL的初始密码2. 登录MySQL数据库系统3. 修改root密码4.…...