RT-DETR:端到端的实时Transformer检测模型(目标检测+跟踪)

博主一直一来做的都是基于Transformer的目标检测领域,相较于基于卷积的目标检测方法,如YOLO等,其检测速度一直为人诟病。
终于,RT-DETR横空出世,在取得高精度的同时,检测速度也大幅提升。

那么RT-DETR是如何做到的呢?

在研究RT-DETR的改进前,我们先来了解下DETR类目标检测方法的发展历程吧

  • 首先是DETR,该方法作为Transformer在目标检测领域的开山之作,一经推出,便引发了极大的轰动,该方法巧妙的利用Transformer进行特征提取与解码,同时通过匈牙利匹配方法完成预测框与真实框的匹配,避免了NMS等后处理过程。
  • 随后DAB-DETR引入了动态锚框作为查询向量,从而对DETR中的100个查询向量进行了解释。
  • Deformable-DETR针对Transformer中自注意力计算复杂度高的问题,提出可变形注意力计算,即通过可学习的选取少量向量进行注意力计算,大幅的降低了计算量。
  • DN-DETR认为匈牙利匹配的二义性是导致DETR训练收敛慢的原因,因此提出查询降噪机制,即利用先前DAB-DETR中将查询向量解释为锚框的原理,给查询向量添加一些噪声来辅助模型收敛,最终大幅提升了模型的训练速度。
  • DINO则是在DAB-DETR与DN-DETR的基础上进行进一步的融合与改进。
  • H-DETR为使模型获取更多的正样本特征,从而提升检测精度,因此提出混合匹配方法,在训练阶段,包含原始的匈牙利匹配分支与一个一对多的辅助匹配分支,而在推理阶段,则只有一个匈牙利匹配分支。

然而,上述方法尽管已经大幅提升了检测精度,降低了计算复杂度,但其受Transformer本身高计算复杂度的制约,DETR类目标检测方法的实时性始终令人难以满意,尤其是相较于YOLO等单阶段目标检测方法,其检测速度的确差别巨大。

为了解决这个问题,百度提出了RT-DETR,该方法依旧是在DETR的基础上改进生成的,从论文中给出的实验结果来看,该方法无论在检测速度还是检测精度方法都已经超过了YOLOv8,实现了真正的实时性。

在这里插入图片描述

  • 创新点1:高效混合编码器:RT-DETR使用了一种高效的混合编码器,通过解耦尺度内交互和跨尺度融合来处理多尺度特征。这种独特的基于视觉Transformer的设计降低了计算成本,并允许实时物体检测。
  • 创新点2:IoU感知查询选择:RT-DETR通过利用IoU感知的查询选择改进了目标查询初始化。这使得模型能够聚焦于场景中最相关的目标,从而提高了检测精度。
  • 创新点3:自适应推理速度:RT-DETR支持通过使用不同的解码器层来灵活调整推理速度,而无需重新训练。这种适应性便于在各种实时目标检测场景中的实际应用。

RT-DETR的代码有两个,一个是官方提供的代码,但该代码功能比较单一,只有训练与验证,另一个则是集成在YOLOv8中,该代码的设计就比较全面了

环境部署

conda create -n rtdetr python=3.8
conda activate rtdetr
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia
cd RT-DETR-main/rtdetr_pytorch  //这个路径根据你自己的改
pip install -r requirement.txt

该算法的环境为pytorch=2.0.1,注意,尽量要用pytorch2以上的版本,否则可能会报错:

AttributeError: module 'torchvision' has no attribute 'disable_beta_transforms_warning'

官方模型训练

参数配置

该算法的配置封装较好,我们只需要修改配置即可:train.py,指定要使用的骨干网络。

parser.add_argument('--config', '-c', default="/rtdetr_pytorch\configs/rtdetr/rtdetr_r18vd_6x_coco.yml",type=str, )

修改数据集配置文件:RT-DETR-main\rtdetr_pytorch\configs\dataset\coco_detection.yml
修改训练集与测试集路径,同时修改类别数。

在这里插入图片描述

随后便可以开启训练:该文件中指定 epochs

RT-DETR-main\rtdetr_pytorch\configs\rtdetr\include\optimizer.yml

首次训练,需要下载骨干网络的预训练模型

在这里插入图片描述

在这里,博主使用ResNet18作为骨干特征提取网络

训练结果

开始运行,查看GPU使用情况,此时的batch-size=8,可以看到显存占用4.5G左右,相较于博主先前提出的方法或者DINO,其显存占用少了许多,DINObatch-size=2时的显存占用将近16G.

在这里插入图片描述

训练了24轮的结果。

在这里插入图片描述

训练的结果会保存在output文件夹内:

在这里插入图片描述

官方模型推理

在进行模型推理前,需要先导出模型,在官方代码的tools文件夹下有个export_onnx.py文件,只需要指定配置文件与训练好的模型文件:

parser.add_argument('--config', '-c',  default="/rtdetr_pytorch\configs/rtdetr/rtdetr_r18vd_6x_coco.yml",type=str, )
parser.add_argument('
03-08
### RTDETR 技术概述 RTDETR (Real-Time Detection Transformer) 是一种专为实时目标检测设计的高效架构。该方法融合了Transformer的强大建模能力与卷积神经网络(CNN)的优势,在保持高精度的同时实现了极高的推理速度[^1]。 #### 架构特点 - **轻量化骨干网**:采用优化后的EfficientNet作为特征提取器,通过减少计算量和参数数量来提高运行效率。 - **多尺度特征聚合机制**:引入FPN(Feature Pyramid Network),使得不同层次的信息能够更好地融合在一起,增强了模型对于大小物体的识别效果。 - **解耦头结构**:将分类和回归任务分离处理,降低了训练难度并提升了最终性能表现。 ```python from rt detr import build_model model = build_model( backbone='efficientnet_b0', num_classes=80, pretrained=True ) ``` #### 安装依赖库 为了顺利部署RTDETR项目,建议先安装所需的Python包: ```bash pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple ``` 此命令会从清华大学镜像源下载必要的软件包,加快安装过程[^2]。 #### 应用实例展示 假设已经完成数据预处理工作,则可以直接调用`infer_image()`函数来进行单张图片的目标检测预测,并利用SAHI框架中的`visualize_object_predictions()`工具直观呈现结果。 ```python import cv2 from sahi.utils.file import save_json from sahi.slicing import slice_image from sahi.predict import get_sliced_prediction, visualize_object_predictions image_path = 'path/to/your/image.jpg' result = model.infer_image(image_path) visualization_result = visualize_object_predictions( image=cv2.imread(image_path), object_prediction_list=result["object_prediction_list"], output_dir="output/", file_name="prediction" ) ``` 上述代码片段展示了如何加载待测图像文件并通过已训练好的RTDETR模型获取其上的对象位置信息;随后借助于SAHI提供的绘图接口保存带有标注框的结果图至指定目录下[^3]。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

彭祥.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值