详解RT-DETR网络结构/数据集获取/环境搭建/训练/推理/验证/导出/部署

RT-DETR是一种基于Transformer的目标检测模型,与YOLO系列不同,强调高精度和实时性。本文详述其网络结构、环境搭建、数据集获取、训练方法(包括官方和YOLOv8版本)、验证、推理、导出及部署流程,适用于希望深入理解和应用RT-DETR的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论文地址:RT-DETR论文地址

代码地址:RT-DETR官方下载地址

目录

一、本文介绍

二、RT-DETR的网络结构

三、RT-DERT的环境搭建

四、免费数据集获取

五、获取RT-DERT

5.1 渠道一官方版本

5.2 渠道二YOLOv8版本

六、RT-DERT的官方版本训练方法

6.1 步骤一 

6.2 步骤二 

七、RT-DERT的YOLO版本训练方法

7.1 方式一

7.2 方式二(推荐)

7.3 方式三 

八、RT-DERT的验证方法

8.1 参数讲解 

8.2 验证方法 

九、RT-DERT的推理方法

9.1 参数讲解

9.2 推理方法 

十、RT-DERT的导出方法

10.1 官方版本导出方法

10.2 YOLO版本导出方法

十一、全文总结


一、本文介绍

RT-DETR(Real-Time DEtection TRansformer)是一种新提出的目标检测模型,它利用Transformer的自注意力机制来处理图像数据,与YOLO系列有显著不同。不同于YOLO通过连续的卷积层直接对图像区域进行分析,RT-DETR采用Transformer架构中的自注意力机制,这允许模型更有效地理解图像中不同部分之间的关系。这种方法使得RT-DETR在处理图像中的复杂场景和多对象环境时,能够展现出更高的准确性和效率。此外,RT-DETR在保持高精度的同时,也针对实时处理进行了优化,使其适合需要快速响应的应用场景。这一结构上的创新使RT-DETR在目标检测领域成为了一种具有突破性的模型,展现出与传统方法不同的优势(从文章的实验结果来看RT-DETR在实时的目标检测上确实打败了YOLO),本文给大家带来的是关于RT-DETR网络结构、数据集获取、环境搭建、训练、推理、验证、导出、部署的讲解(同时RT-DETR支持官方版本训练和YOLOv8集成版本的训练我都会分别介绍)。 

下面是关于DETR系列的发展历程->


二、RT-DETR的网络结构

本文主要讲的是如何训练部署等方法具体的网络结构讲解可以看我的另一篇博客地址如下->

RT-DERT阅读笔记: RT-DETR论文阅读笔记(包括YOLO版本训练和官方版本训练)


三、RT-DERT的环境搭建

大家如果没有搭建环境可以看我的另一篇博客,里面讲述了如何搭建pytorch环境(内容十分详细我每次重新更换系统都要看一遍)。

Win11上Pytorch的安装并在Pycharm上调用PyTorch最新超详细过程并附详细的系统变量添加过程,可解决pycharm中pip不好使的问题

在我们配置好环境之后,在之后模型获取完成之后,我们可以进行配置的安装我们可以在命令行下输入如下命令进行环境的配置。

pip install -r requirements.txt

输入如上命令之后我们就可以看到命令行在安装模型所需的库了。 


四、免费数据集获取

在我们开始训练之前,我们需要一份数据集,如何获取一个COCO的数据集大家可以看我的另一篇博客从YOLO官方指定的数据集网站Roboflow下载数据模型训练。

(这里需要注意的是RT-DETR官方的版本Pytorch下的只支持COCO数据集训练目前,所以你没有COCO版本的数据集可以用以下教程下载一个非常的快)

超详细教程YoloV8官方推荐免费数据集网站Roboflow一键导出Voc、COCO、Yolo、Csv等格式

我在上面随便下载了一个 数据集用它导出yolov8的数据集,以及自动给转换成txt的格式yaml文件也已经配置好了,我们直接用就可以。 

8673527d34eb42348770158c69de678f.png


五、获取RT-DERT

RT-DERT有两个获取的方式一个就是官方的版本(但是官方版本不如YOLO系列这么发展的成熟开源的版本里面还有许多存在的bug和功能存在限制),另一个版本就是集成在YOLOv8最新的ultralytics库里面的RT-DERT(我看网上的教程和改进基本上都是基于这个方式)

两个方式我都会讲具体选哪一个根据你个人的实际情况来定。 

5.1 渠道一官方版本

这里提供官方版本的RT-DETR下载的渠道,另一种方式就是通过Git进行克隆具体怎么选择看大家了。

方式一:

官方的RT-DERT下载地址:官方下载地址

方式二:  

通过Git的方式进行下载->

git clone https://github.com/lyuwenyu/RT-DETR.git

5.2 渠道二YOLOv8版本

这个版本的下载方式就是下载YOLOv8方式如下->

方式一:

官方YOLOv8下载地址:官方下载地址

方式二: 

(这里需要注意Git完或者下载完压缩包之后一定要进行用pip install -e . 否则会报识别不了YOLO的错误)

git clone https://github.com/ultralytics/ultralytics
cd ultralytics
pip install -e .


六、RT-DERT的官方版本训练方法

官方版本的训练方式又分两种,下面图片中使用两种不同的框架下实现的RT-DETR,我会拿PyTorch版本来进行举例另一种操作相同。

(前面提到过RT-DETR的Pytorch版本只支持COCO的数据集训练所以开始之前大家需要有一个COCO的数据集)

6.1 步骤一 

我们找到如下文件“rtdetr_pytorch/configs/dataset/coco_detection.yml”,内容如下->

6.2 步骤二 

我们找到下面的这个文件"RT-DETR-main/rtdetr_pytorch/tools/train.py" 

"RT-DETR-main/rtdetr_pytorch/tools/train.py" 文件得末尾如下图的右面所示我们找到左边的配置文件填写到右边 的config参数下。

之后我们运行整个文件即可开始训练 

PS:首次训练需要下载权重

训练过程如下-> 

 训练结果会保存在以下的文件的地址(后面我们导出需要这个文件)->

PS:这里只讲了Pytorch版本的训练方式, Paddle版本的训练方式一样就不重复了。


七、RT-DERT的YOLO版本训练方法 

这里讲的是YOLO版本的RT-DETR训练方法,一种方法是通过命令行另一种方法是通过创建文件来训练,共有参数如下->

RT-DETR的训练可以采用命令行的模型,下面是RT-DETR集成在ultralytics官方给定的训练/预测/验证/导出方式: 

yolo task=detect    mode=train    model=RT-DETR的权重或者yaml文件     args...
          classify       predict                                     args...
          segment        val                                         args...
                         export                                      format=onnx  args...

7.1 方式一

我们可以通过命令直接进行训练在其中指定参数,但是这样的方式,我们每个参数都要在其中打出来。命令如下:

yolo task=detect mode=train model=ResNet18_vd_pretrained_from_paddle.pth data=data.yaml batch=16 epochs=100 imgsz=640 workers=0 device=0

需要注意的是如果你是Windows系统的电脑其中的Workers最好设置成0否则容易报线程的错误。

7.2 方式二(推荐)

通过指定cfg直接进行训练,我们配置好ultralytics/cfg/default.yaml这个文件之后,可以直接执行这个文件进行训练,这样就不用在命令行输入其它的参数了。

yolo cfg=ultralytics/cfg/default.yaml

7.3 方式三 

 我们可以通过创建py文件来进行训练,这样的好处就是不用在终端上打命令,这也能省去一些工作量,我们在根目录下创建一个名字为run.py的文件,在其中输入代码

from ultralytics import RTDETR

# Load a model
model = RTDETR("ultralytics/cfg/models/rt-detr/rtdetr-l.yaml")  # build a new model from scratch

# Use the model
model.train(data="fire.v1i.yolov8/data.yaml", cfg="ultralytics/cfg/default.yaml", epochs=100)  # train the model

训练截图如下->

 


7.4 训练结果图

下面的图片为用我复的ResNet18经过训练了72个epochs图片的结果图!


八、RT-DERT的验证方法

8.1 参数讲解 

验证的参数如下->

参数名类型参数讲解
1valbool用于控制是否在训练过程中进行验证/测试。
2splitstr用于指定用于验证/测试的数据集划分。可以选择 'val'、'test' 或 'train' 中的一个作为验证/测试数据集
3save_jsonbool用于控制是否将结果保存为 JSON 文件
4save_hybirdbool用于控制是否保存标签和附加预测结果的混合版本
5conffloat/optional用于设置检测时的目标置信度阈值
6ioufloat用于设置非极大值抑制(NMS)的交并比(IoU)阈值。
7max_detint用于设置每张图像的最大检测数。
8halfbool用于控制是否使用半精度(FP16)进行推断。
9dnnbool,用于控制是否使用 OpenCV DNN 进行 ONNX 推断。
10plotsbool用于控制在训练/验证过程中是否保存绘图结果。

8.2 验证方法 

 验证我们划分的验证集/测试集的情况,也就是评估我们训练出来的best.pt模型好与坏

yolo task=detect mode=val model=best.pt data=data.yaml device=0


九、RT-DERT的推理方法

我们训练好自己的模型之后,都会生成一个模型文件,保存在你设置的目录下,当我们再次想要实验该模型的效果之后就可以调用该模型进行推理了,我们也可以用官方的预训练权重来进行推理。

推理的方式和训练一样我们这里就选一种来进行举例其它的两种方式都是一样的操作只是需要改一下其中的一些参数即可:

9.1 参数讲解

参数名类型参数讲解
0sourcestr/optinal用于指定图像或视频的目录
1showbool用于控制是否在可能的情况下显示结果
2save_txtbool用于控制是否将结果保存为 .txt 文件
3save_confbool用于控制是否在保存结果时包含置信度分数
4save_cropbool用于控制是否将带有结果的裁剪图像保存下来
5show_labelsbool用于控制在绘图结果中是否显示目标标签
6show_confbool用于控制在绘图结果中是否显示目标置信度分数
7vid_strideint/optional用于设置视频的帧率步长
8stream_bufferbool用于控制是否缓冲所有流式帧(True)或返回最新的帧(False)
9line_widthint/list[int]/optional用于设置边界框的线宽度,如果缺失则自动设置
10visualizebool用于控制是否可视化模型的特征
11augmentbool用于控制是否对预测源应用图像增强
12agnostic_nmsbool用于控制是否使用无关类别的非极大值抑制(NMS)
13classesint/list[int]/optional用于按类别筛选结果
14retina_masksbool用于控制是否使用高分辨率分割掩码
15boxesbool用于控制是否在分割预测中显示边界框。

9.2 推理方法 

yolo task=detect mode=predict model=best.pt source=images device=0

 这里需要需要注意的是我们用模型进行推理的时候可以选择照片也可以选择一个视频的格式都可以。支持的视频格式有 

  • MP4(.mp4):这是一种常见的视频文件格式,通常具有较高的压缩率和良好的视频质量

  • AVI(.avi):这是一种较旧但仍广泛使用的视频文件格式。它通常具有较大的文件大小

  • MOV(.mov):这是一种常见的视频文件格式,通常与苹果设备和QuickTime播放器相关

  • MKV(.mkv):这是一种开放的多媒体容器格式,可以容纳多个视频、音频和字幕轨道

  • FLV(.flv):这是一种用于在线视频传输的流式视频文件格式


十、RT-DERT的导出方法

10.1 官方版本导出方法

官方版本目前只支持导出ONNX格式, 方法如下->

我们找到如下文件“RT-DETR-main/rtdetr_pytorch/tools/export_onnx.py”。

我们将我们训练完的权重文件输入到resume里,然后运行整个文件就会在同级目录下导出onnx文件如下->

10.2 YOLO版本导出方法

 当我们进行部署的时候可以进行文件导出,然后在进行部署。

YOLOv8支持的输出格式有如下

1. ONNX(Open Neural Network Exchange):ONNX 是一个开放的深度学习模型表示和转换的标准。它允许在不同的深度学习框架之间共享模型,并支持跨平台部署。导出为 ONNX 格式的模型可以在支持 ONNX 的推理引擎中进行部署和推理。

2. TensorFlow SavedModel:TensorFlow SavedModel 是 TensorFlow 框架的标准模型保存格式。它包含了模型的网络结构和参数,可以方便地在 TensorFlow 的推理环境中加载和使用。

3. PyTorch JIT(Just-In-Time):PyTorch JIT 是 PyTorch 的即时编译器,可以将 PyTorch 模型导出为优化的 Torch 脚本或 Torch 脚本模型。这种格式可以在没有 PyTorch 环境的情况下进行推理,并且具有更高的性能。

4. Caffe Model:Caffe 是一个流行的深度学习框架,它使用自己的模型表示格式。导出为 Caffe 模型的文件可以在 Caffe 框架中进行部署和推理。

5. TFLite(TensorFlow Lite):TFLite 是 TensorFlow 的移动和嵌入式设备推理框架,支持在资源受限的设备上进行高效推理。模型可以导出为 TFLite 格式,以便在移动设备或嵌入式系统中进行部署。

6. Core ML(Core Machine Learning):Core ML 是苹果的机器学习框架,用于在 iOS 和 macOS 上进行推理。模型可以导出为 Core ML 格式,以便在苹果设备上进行部署。

这些格式都提供了不同的优势和适用场景。选择合适的导出格式应该考虑到目标平台和部署环境的要求,以及所使用的深度学习框架的支持情况。

模型输出的参数有如下

参数名类型参数解释
0formatstr导出模型的格式
1kerasbool表示是否使用Keras
2optimizebool用于在导出TorchScript模型时进行优化,以便在移动设备上获得更好的性能
3int8bool用于在导出CoreML或TensorFlow模型时进行INT8量化
4dynamicbool用于在导出CoreML或TensorFlow模型时进行INT8量化
5simplifybool用于在导出ONNX模型时进行模型简化
6opsetint/optional用于指定导出ONNX模型时的opset版本
7workspaceint用于指定TensorRT模型的工作空间大小,以GB为单位
8nmsbool用于在导出CoreML模型时添加非极大值抑制(NMS)

命令行命令如下: 

yolo task=detect mode=export model=best.pt format=onnx  


十一、全文总结

到此本文的正式分享内容就结束了,在这里给大家推荐我的RT-DETR改进有效涨点专栏,本专栏目前为新开的平均质量分98分,后期我会根据各种最新的前沿顶会进行论文复现,也会对一些老的改进机制进行补充,目前本专栏免费阅读(暂时,大家尽早关注不迷路~),如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

专栏回顾RT-DETR改进专栏——论文收割机——持续复现各种顶会改进机制

### RT-DETR模型训练时所需的数据集文件格式 RT-DETR模型在训练过程中所需的输入数据集必须遵循COCO格式[^1]。这意味着如果当前使用的数据集是以其他格式(如YOLO或VOC)存储的,则需要先将其转换为COCO格式。 #### COCO格式的主要组成部分 COCO格式是一种广泛用于目标检测任务的标准数据格式,其核心结构通常由以下几个部分组成: 1. **图像信息** - 图像ID、宽度、高度以及路径等基本信息。 2. **标注信息** - 每个对象的类别标签及其边界框坐标(通常是[x, y, width, height]的形式),其中(x,y)表示边界框左上角的位置。 3. **类别信息** - 定义了数据集中所有可能类别的列表,每种类别都有唯一的ID号。 具体来说,在JSON文件中会定义如下字段: ```json { "images": [ {"id": 1, "file_name": "image1.jpg", "width": 640, "height": 480}, ... ], "annotations": [ {"id": 1, "image_id": 1, "category_id": 1, "bbox": [100, 50, 150, 200]}, ... ], "categories": [ {"id": 1, "name": "person"}, {"id": 2, "name": "car"}, ... ] } ``` 对于希望利用官方版本的RT-DETR进行自定义数据集训练的情况,建议按照上述标准准备相应的训练验证集合,并确保它们被正确解析以便于后续处理流程能够顺利执行[^2]。 ### 数据预处理注意事项 当原始数据并非处于COCO格式下时,开发者需编写脚本来完成必要的转换工作。此过程涉及读取源格式中的各项参数并映射到目标结构之中去。例如从txt文档里提取bounding box位置数值再保存成符合要求的新形式等等操作均属于此类范畴之内。
评论 207
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Snu77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值