修改训练策略,无损提升性能

news2025/1/16 8:07:21

🏡作者主页:点击! 

🤖编程探索专栏:点击!

⏰️创作时间:2024年11月29日15点40分


神秘男子影,
  秘而不宣藏。
泣意深不见,
男子自持重,
   子夜独自沉。

论文链接

点击开启你的论文编程之旅icon-default.png?t=O83Ahttps://www.aspiringcode.com/content?id=17326316345929&uid=1adc7982ac8c43c9a938bfec5b51c2b9

引言

目标检测是一项基本的视觉任务,涉及在图像中识别和定位物体。其中,实时目标检测是一个重要的领域,并且有着广泛的应用,例如自动驾驶。

RT-DETR 的出现为实时目标检测开辟了一条新的技术途径,打破了该领域对 YOLO 的依赖。RT-DETR 提出了一种高效的混合编码器来替代 DETR 中的标准 Transformer 编码器,通过解耦多尺度特征的尺度内交互和跨尺度融合显著提高了推理速度。为进一步提升性能,RT-DETR 提出了不确定性最小化查询选择机制,通过显式优化不确定性向解码器提供高质量的初始查询。此外,RT-DETR 提供了多种检测器尺寸并支持灵活的速度调整,无需重新训练即可适应各种实时场景。RT-DETR 是一种全新的端到端实时检测器,标志着 DETR 家族的重大进步。

在本文中,我们介绍的论文是《RT-DETRv2: Improved Baseline with Bag-of-Freebies for Real-Time Detection Transformer》,这是一种改进的实时检测 Transformer。

这项工作基于最近的 RT-DETR 并在 DETR 家族内部引入了一系列灵活性和实用性的优化选项,同时优化了训练策略以实现更好的性能。具体而言,RT-DETRv2 建议在可变形注意力模块中为不同尺度的特征设置不同的采样点数,以实现解码器的选择性多尺度特征提取。在增强实用性方面,RT-DETRv2 提供了一个可选的离散采样算子来替换原始的 grid_sample 算子,后者是 DETRs 特有的,从而消除了通常与检测 Transformer 相关的部署限制。此外,RT-DETRv2 优化了训练策略,包括动态数据增强和自适应超参数定制,旨在提升性能的同时不损失速度。实验结果表明,RT-DETRv2 为 RT-DETR 提供了一个改进的基线,增加了灵活性和实用性,提出的训练策略优化了性能和训练成本。

RT-DETR模型框架

RT-DETRv2 的框架与 RT-DETR 保持一致,仅对解码器中的可变形注意力模块进行了修改。

不同尺度下不同的采样点数量

当前的 DETRs 使用可变形注意力模块来缓解由多尺度特征组成的长输入序列带来的高计算开销。RT-DETR 解码器保留了这个模块,并在每个尺度上定义了相同的采样点数量。我们认为这种约束忽略了不同尺度特征之间的固有差异,限制了可变形注意力模块的特征提取能力。因此,我们提出为不同尺度设置不同的采样点数量,以实现更灵活高效的特征提取。

离散采样

为了提高 RT-DETR 的实用性并使其在各种环境中可用,作者专注于比较 YOLOs 和 RT-DETR 的部署要求,其中 RT-DETR 专用的 grid_sample 运算符限制了其广泛应用。因此,作者提出一个可选的 discrete_sample 运算符来替换 grid_sample,从而去除 RT-DETR 的部署限制。具体来说,在预测的采样偏移量上执行四舍五入操作,省去了耗时的双线性插值。然而,四舍五入操作是非可微的,所以关闭用于预测采样偏移量的参数梯度。在实践中,首先使用 grid_sample 运算符进行训练,然后在微调阶段将其替换为 discrete_sample 运算符。对于推理和部署,模型采用 discrete_sample 运算符。

训练方案

动态数据增强

为了使模型具备强大的检测性能,提出了动态数据增强策略。考虑到检测器在早期训练期间的泛化能力较差,应用更强的数据增强,而在后期训练期间则降低其强度,使检测器适应目标域的检测。具体来说,在早期阶段保持 RT-DETR 的数据增强策略,而在最后两个epoch中关闭 RandomPhotometricDistort、RandomZoomOut、RandomIoUCrop 和 MultiScaleInput。

自适应超参数定制

由于观察到不同尺寸的缩放 RT-DETR 模型使用相同的优化器超参数进行训练,导致其性能不佳。因此,提出了针对缩放 RT-DETR 的自适应超参数定制方法。考虑到轻量级检测器预训练主干网络的特征质量较低,我们提高了其学习率。相反地,大型检测器预训练主干网络具有更高的特征质量,我们降低了其学习率。

实验

对比实验

与 RT-DETR 一样,作者使用在 ImageNet 上预训练的 ResNet 作为主干网络,并使用 AdamW 优化器以批量大小为 16 来训练 RT-DETRv2,并应用指数移动平均(EMA),其中 ema_decay = 0.9999。对于可选的离散采样,作者首先使用 grid_sample 运算符进行 6 倍预训练,然后使用 discrete_sample 运算符进行 1 倍微调。

RT-DETRv2 在 COCO 的 train2017 数据集上进行训练,并在 COCO 的 val2017 数据集上进行验证。实验结果如下图。

可以看出,RT-DETRv2 在不同规模的检测器上表现优于 RT-DETR,且速度没有损失。

消融实验

采样点的消融研究

作者对网格采样(grid_sample)操作符的总采样点数量进行了消融研究。总采样点数量计算公式为 num_head × num_point × num_query × num_decoder,其中 num_point 表示每个网格中每个尺度特征的采样点之和。实验结果如下表。

研究结果表明,减少采样点的数量并不会导致性能的显著下降。这意味着在大多数工业场景中,实际应用不太会受到影响。

离散采样的消融研究

我们移除了网格采样(grid_sample),并替换成离散采样(discrete_sample)进行消融研究。结果表明,这一操作不会导致 𝐴𝑃𝑣𝑎𝑙50APval50 的显著下降,但确实消除了 DETRs 的部署限制,详见下表。

复现

我们首先对训练过程进行复现,和RT-DETR一样,数据集仍然使用COCO。

在填写好配置文件后,运行下面的命令即可开始模型的训练。

CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --master_port=9909 --nproc_per_node=4 tools/train.py -c path/to/config --use-amp --seed=0 &> log.txt 2>&1 &

训练过程如下:

运行下面的命令执行模型的推理,其中im-file是输入模型的图像路径。

python references/deploy/rtdetrv2_torch.py -c path/to/config -r path/to/checkpoint --im-file=xxx --device=cuda:0

我们使用COCO的验证集对模型进行推理测试,结果如下。

总结

这篇文章介绍了 RT-DETRv2,即 RT-DETR 的改进版本。RT-DETRv2 在前一代实时目标检测器RT-DETR的基础上进行了增强,提供了一系列的改进措施以提高灵活性和实用性,并优化了训练策略以提升性能。

RT-DETRv2 通过在可变形注意力模块中为不同尺度的特征设置不同数量的采样点,实现了解码器的选择性多尺度特征提取。文章提出了一个可选的离散采样操作符来替代 RT-DETR 中特有的 grid_sample 操作符,从而消除了与检测变压器(DETR)相关的部署限制,还引入了动态数据增强和尺度自适应的超参数定制,以在不牺牲速度的情况下提高性能。

RT-DETRv2 通过一系列改进,为DETR家族提供了一个更加灵活和实用的基线,同时优化了训练策略,提高了性能和训练成本效益。

成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

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

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

相关文章

@bytemd/vue掘金markdown插件预览内容有误

vue项目使用bytemd/vue 来预览字符串格式的markdown内容,总会多出如图的一段代码, 请问有没有大佬知道为什么? 很急,求教!!!!!

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 项目介绍 2.0 用户登录功能 3.0 用户管理功能 4.0 影院管理功能 5.0 电影管理功能 6.0 影厅管理功能 7.0 电影排片管理功能 8.0 用户评论管理功能 9.0 用户购票功…

window.structuredClone 深拷贝

概述: structuredClone 是一种新的 JavaScript 原生方法,用于创建一个对象的深拷贝。与传统的浅拷贝方法(如 Object.assign 或数组的 slice)不同,structuredClone 可以递归地拷贝对象,包括其中的嵌套对象、…

java全栈day10--后端Web基础(基础知识)

引言:只要能通过浏览器访问的网站全是B/S架构,其中最常用的服务器就是Tomcat 在浏览器与服务器交互的时候采用的协议是HTTP协议 一、Tomcat服务器 1.1介绍 官网地址:Apache Tomcat - Welcome! 1.2基本使用(网上有安装教程,建议…

java:拆箱和装箱,缓存池概念简单介绍

1.基本数据类型及其包装类: 举例子: Integer i 10; //装箱int n i; //拆箱 概念: 装箱就是自动将基本数据类型转换为包装器类型; 拆箱就是自动将包装器类型转换为基本数据类型; public class Main {public s…

保持角色一致性!flux新模型redux用法(含模型与工作流)

​ 目录 redux模型是什么,能干啥? 用到的工具有哪些? 工具和模型文件在哪里下载? 整合包: 下载后需要分别放到指定目录: redux模型怎么用? 加载工作流 上传图片和输入提示词 生成结果…

通信原理实验:抽样定理实验

目录 一、实验目的和要求 二、实验内容和原理 实验器材 实验原理 三、实验步骤 (一)实验项目一:抽样信号观测及抽样定理验证 四、实验记录与处理 结论: 辅助学习资料: 五、实验结果及分析 一、实验目的和要求 了解抽样定理在通信系统中的重要性。掌握自然抽样及…

HarmonyOS NEXT应用开发,关于useNormalizedOHMUrl选项的坑

起因是这样的:我这库打包发布出问题了,这个有遇到的吗? 源码里面就没有 request .d.ts,这打包后哪来个这文件?且漏掉了其他文件。 猫哥csdn.yyz_1987 为啥我打包的har里面,只有接口,没有具体实现呢&#x…

Ubuntu Server 22.04.5 从零到一:详尽安装部署指南

文章目录 Ubuntu Server 22.04.5 从零到一:详尽安装部署指南一、部署环境二、安装系统2.1 安装2.1.1 选择安装方式2.1.2 选择语言2.1.3 选择不更新2.1.4 选择键盘标准2.1.5 选择安装版本2.1.6 设置网卡2.1.7 配置代理2.1.8 设置镜像源2.1.9 选择装系统的硬盘2.1.10 …

学成在线day07

视频处理 技术方案 掌握了xxl-job的分片广播调度方式,下边思考如何分布式去执行学成在线平台中的视频处理任务。 任务添加成功后,对于要处理的任务会添加到待处理任务表中,现在启动多个执行器实例去查询这些待处理任务,此时如何…

在国外,使用中国移动app办理停机保号

1.人在国内的时候,先使用手机下载中国移动app 以前网上营业厅是可以直接办理停机保号的,现在不可以了 2.人在国内的时候,确保自己的手机能够登录中国移动app 这个步骤保证回国前可以使用中国移动app复机 3.人在国内的时候,拨打…

husky,commit规范,生成CHANGELOG.md,npm发版

项目git提交工程化(钩子,提交信息commit message),npm修改版本,需要涉及到的包: husky,允许在git钩子中执行不同的脚步,如commitlint,eslint,prettier&#…

如何用 Python 构建你的第一个机器学习项目

目录 一、选择你的机器学习项目 二、准备你的开发环境 三、加载和探索数据 四、数据预处理 五、拆分数据集 六、选择并训练模型 七、评估模型 八、可视化模型 九、优化模型 十、部署模型 十一、总结 机器学习是当今技术领域的热门话题,它能够帮助我们从数…

JVM指令集概览:基础与应用

写在文章开头 在现代软件开发中,Java 语言凭借其“一次编写,到处运行”的理念成为了企业级应用的首选之一。这一理念的背后支撑技术正是 Java 虚拟机(JVM)。JVM 是一个抽象的计算机,它实现了 Java 编程语言的各种特性,并且能够执行编译后的字节码文件。了解 JVM 的工作原…

Leetcode 每日一题 104.二叉树的最大深度

目录 问题描述 示例 示例 1: 示例 2: 约束条件 题解 方法一:广度优先搜索(BFS) 步骤 代码实现 方法二:递归 步骤 代码实现 结论 问题描述 给定一个二叉树 root,我们需要返回其最大…

【微服务】 Eureka和Ribbon

一、Eureka 服务调用出现的问题:在远程调用另一个服务时,我们采用的解决办法是发送一次http请求,每次环境的变更会产生新的地址,所以采用硬编码会出现很多麻烦,并且为了应对并发问题,采用分布式部署&#…

蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、异或三角:::非常典型的必刷例题!!!)

别忘了请点个赞收藏 关注支持一下博主喵!!!! ! ! ! ! 关注博主,更多蓝桥杯nice题目静待更新:) 动态规划 三、括号序列 【问题描述】 给定一个括号序列,要求尽可能少地添加若干括号使得括号序列变…

SpringMVC工作原理【流程图+文字详解SpringMVC工作原理】

SpringMVC工作原理 前端控制器:DispactherServlet处理器映射器:HandlerMapping处理器适配器:HandlerAdapter处理器:Handler,视图解析器:ViewResolver视图:View 首先用户通过浏览器发起HTTP请求…

你真的会用饼图吗?JVS-智能BI饼图组件深度解析

在数据可视化的世界里,饼图是我们常见的一种可视化图形。在JVS-智能BI中提供了数据可视化饼图组件,接下来我通过这篇文章详细介绍,从配色方案到图形配置,从显示数据到提示信息,饼图的每一个细节配置。 饼图类图表概述…

Redis中的分布式锁(步步为营)

分布式锁 概述 分布式锁指的是,所有服务中的所有线程都去获取同一把锁,但只有一个线程可以成功的获得锁,其他没有获得锁的线程必须全部等待,直到持有锁的线程释放锁。 分布式锁是可以跨越多个实例,多个进程的锁 分布…