RT-DETR: 实时目标检测的又一次进化

点击下方卡片,关注“小白玩转Python”公众号

实时目标检测是一个具有广泛应用的关键领域,从物体跟踪到自动驾驶。想象一下,一辆能够实时检测行人和其他车辆的自动驾驶汽车,或一个可以同时跟踪多个移动物体的监控系统。这些系统的效率和准确性取决于其快速、准确地处理和分析视觉数据的能力。这就是实时目标检测的重要性所在。

在这篇文章中,我们将讨论 RT-DETR 及其实现。虽然 RT-DETR 可能听起来像一个秘密代码,但它涉及复杂的编码,以实现比当前方法更优越的图像预测。可以把它想象成使你的视觉数据处理更快、更准确的秘密调料。就像物体检测领域的新超级英雄,带着其增强的能力前来救援。

RT-DETR 宣称自己是第一个实时端到端目标检测器。这到底是什么呢?

RT-DETR 代表实时检测转换器(Real-Time DEtection TRansformer),是第一个实时端到端目标检测器。利用转换器在计算机视觉任务中的能力,RT-DETR 为实时目标检测带来了新的性能水平。就像从普通汽车升级到高速列车一样,速度和效率得到了极大的提升。

RT-DETR 如何不同于 YOLO?它有哪些新的实现?

传统上,YOLO(You Only Look Once)因其轻量级和简洁设计,一直是实时目标检测的首选模型。然而,RT-DETR 引入了使其区别于 YOLO 的创新。尽管 YOLO 因其速度和准确性之间的平衡而广受欢迎,但在处理非极大值抑制(NMS)时面临挑战。

什么是 NMS?

非极大值抑制(NMS)是一种计算机视觉方法,用于从多个重叠实体中选择一个,通常是在目标检测中的边界框。该方法涉及丢弃低于某个概率阈值的实体,并反复选择概率最高的实体。任何与先前选定框的交并比(IoU)≥ 0.5 的剩余框都会被丢弃。这个过程影响 YOLO,通过降低推理速度并引入不稳定的超参数来降低速度和准确性。

NMS 如何影响 YOLO?

现有的实时检测器,如 YOLO,通常使用基于卷积神经网络(CNN)的架构。尽管 YOLO 在速度和准确性之间达到了合理的平衡,但它需要 NMS 进行后处理,这不仅降低了推理速度,还引入了导致速度和准确性不稳定的超参数。

DETRs 和 RT-DETR 如何解决 NMS 问题?

DETR 和 RT-DETR 解决了这些问题。虽然 DETR 模型可以解决 YOLO 的 NMS 问题,但其高计算成本使其无法满足实时检测的要求,从而抵消了无 NMS 架构的速度优势。这将我们引向了 RT-DETR,它基于 DETR,但进行了显著的改进。

RT-DETR 需要哪些修改?

RT-DETR 的基础模型是 DETR。然而,尽管多尺度特征的引入有利于加速训练收敛,但显著增加了输入编码器的序列长度。多尺度特征的交互导致的高计算成本使得变压器编码器成为计算瓶颈,需对编码器进行重新设计。此外,当前直接采用分类分数的查询选择方法忽视了检测器同时对目标类别和位置建模的需求。这可能导致选择具有低定位置信度的编码器特征作为初始查询,增加不确定性并降低性能。

什么是 Transformer 编码器?

Transformer 编码器是 Transformer 模型架构的一部分,由 Vaswani 等人在《Attention is All You Need》论文中提出。它使用自注意机制并行处理输入序列,使其在各种自然语言处理和计算机视觉任务中非常有效。

什么是 Vanilla Transformer 编码器?

“Vanilla” 指的是某物的原版或基本版本。一个 “vanilla Transformer 编码器” 是指初始论文中描述的标准、未修改的 Transformer 编码器版本。它通过自注意和前馈神经网络处理输入序列,而没有任何额外的增强或修改。

RT-DETR 实现了哪些想法来解决这些问题?

RT-DETR 实现了几种想法来克服这些挑战。为了有效处理多尺度特征,RT-DETR 使用高效的混合编码器来取代原始的 Transformer 编码器。通过将同一尺度的特征交互和不同尺度的特征融合分离处理,这显著提高了推理速度。

→ 混合编码器:

高效混合编码器是重新设计的标准编码器版本,结合了不同的技术以优化性能。它将同一尺度内的交互(处理同一尺度的特征)和跨尺度融合(结合不同尺度的特征)分离,以减少计算成本并提高处理速度。

为了避免选择具有低定位置信度的编码器特征作为目标查询,RT-DETR 引入了不确定性最小化查询选择。该方法通过显式优化不确定性,提供高质量的初始查询给解码器,从而提高准确性。

→ 不确定性最小化查询选择:

不确定性最小化查询选择是一种通过最小化不确定性来选择解码器初始查询的技术。它确保选择的特征具有高定位置信度,从而提高目标检测过程的准确性和可靠性。

此外,RT-DETR 支持灵活的速度调节,以适应各种实时场景而无需重新训练,这要归功于 DETR 的多层解码器架构。这使得 RT-DETR 成为实时目标检测的多功能且强大的解决方案,解决了先前模型的局限性,并在该领域设立了新的标准。

通过整合这些先进技术,RT-DETR 不仅解决了 NMS 带来的挑战,还实现了卓越的性能,使其成为实时目标检测领域的强大竞争者。

现在让我们看看 RT-DETR 的架构!!

1. 主干: 

  • 主干是处理输入图像以提取特征的初始阶段。这通常涉及一个卷积神经网络(CNN),它在减少图像空间维度的同时增加深度,在不同阶段生成特征图(S3,S4,S5)。 

2. 高效混合编码器:

该模块处理来自主干的特征图。它包含:

  • AIFI(自适应交互融合集成):它融合来自主干不同层级(S3,S4,S5)的特征,以创建更丰富的表示。

  • CCFF(跨尺度通道融合):该模块执行多层次的融合,结合不同尺度的特征,以保持高层语义信息与低层细节特征之间的平衡。 

  • F5:融合后的最终特征图,被输入到下一阶段。 

3. 不确定性最小化查询选择:

  • 该组件根据不确定性选择查询。它确保选择最有信息量的查询用于检测任务,减少冗余并提高效率。 

4. 解码器与头部:

  • 解码器和头部模块处理选定的查询以生成最终检测输出。 

  • 位置嵌入:为查询添加空间信息,帮助模型理解图像中物体的位置。 

  • 图像特征:使用来自编码器的精细特征。 

  • 物体查询:这些是可学习的嵌入,帮助模型关注图像的不同部分进行目标检测。 

5. 检测头:

有两种类型的卷积层用于最终检测:

  • Conv1x1 s1:1x1 卷积,后跟批量归一化(BN)和 SiLU 激活。

  • Conv3x3 s2:3x3 卷积,后跟批量归一化(BN)和 SiLU 激活。

这些层生成检测物体的最终边界框坐标和类别得分。

实现:

安装所有依赖项和包:

import torch
import requests


import numpy as np
import supervision as sv
import albumentations as A


from PIL import Image
from pprint import pprint
from roboflow import Roboflow
from dataclasses import dataclass, replace
from google.colab import userdata
from torch.utils.data import Dataset
from transformers import (
    AutoImageProcessor,
    AutoModelForObjectDetection,
    TrainingArguments,
    Trainer
)
from torchmetrics.detection.mean_ap import MeanAveragePrecision

加载模型:

CHECKPOINT = "PekingU/rtdetr_r50vd_coco_o365"
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")


model = AutoModelForObjectDetection.from_pretrained(CHECKPOINT).to(DEVICE)
processor = AutoImageProcessor.from_pretrained(CHECKPOINT)

加载输入图像:

URL = "https://media.istockphoto.com/id/627966690/photo/two-dogs-in-the-city.jpg?s=612x612&w=0&k=20&c=6Fj5qtEH9vs7ojnyfjF1mOgEA_i63rzAQtjtuVuw37A="


image = Image.open(requests.get(URL, stream=True).raw)
inputs = processor(image, return_tensors="pt").to(DEVICE)


with torch.no_grad():
    outputs = model(**inputs)


w, h = image.size
results = processor.post_process_object_detection(
    outputs, target_sizes=[(h, w)], threshold=0.3)

无 NMS 结果:

detections = sv.Detections.from_transformers(results[0])
labels = [
    model.config.id2label[class_id]
    for class_id
    in detections.class_id
]


annotated_image = image.copy()
annotated_image = sv.BoundingBoxAnnotator().annotate(annotated_image, detections)
annotated_image = sv.LabelAnnotator().annotate(annotated_image, detections, labels=labels)
annotated_image.thumbnail((600, 600))
annotated_image

de3a51ddfc57006701c55997cdb69221.png

有 NMS 结果:

detections = sv.Detections.from_transformers(results[0]).with_nms(threshold=0.1)
labels = [
    model.config.id2label[class_id]
    for class_id
    in detections.class_id
]


annotated_image = image.copy()
annotated_image = sv.BoundingBoxAnnotator().annotate(annotated_image, detections)
annotated_image = sv.LabelAnnotator().annotate(annotated_image, detections, labels=labels)
annotated_image.thumbnail((600, 600))
annotated_image

b9b4a6ceee60736e85ad5a3607987065.png

RT-DETR 代表了实时目标检测领域的重大飞跃。通过解决先前模型如 YOLO 的局限性,并引入诸如高效混合编码器和不确定性最小化查询选择等创新解决方案,RT-DETR 提供了更高的速度、准确性和灵活性。

这使得它成为从自动驾驶到高级监控系统的广泛应用中的宝贵工具。随着技术的不断发展,像 RT-DETR 这样的模型无疑将在塑造实时视觉数据处理的未来中发挥关键作用。

参考文献:

  • NMS: https://paperswithcode.com/method/non-maximum-suppressionRT-DETR 

  • 论文: https://arxiv.org/pdf/2304.08069RT-DETR 

  • Github: https://github.com/lyuwenyu/RT-DETRRoboflow 

  • 提供的代码: https://blog.roboflow.com/train-rt-detr-custom

·  END  ·

HAPPY LIFE

02615acbaf46c66932c704b59cb29938.png

本文仅供学习交流使用,如有侵权请联系作者删除

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值