RF-DETR: Neural Architecture Search for Real-Time Detection Transformers
- 来源: https://arxiv.org/abs/2511.09554
- 本地PDF:
../raw/2025-11-15-rf-detr.pdf - 日期: 2025-11-15
- 标签:
DETR,NAS,real-time detection,open-vocabulary - 研究方向: 2D Object Detection → 实时检测 → DETR + NAS
- 会议/状态: ICLR 2026
- 作者: Neehar Peri et al. (Roboflow)
- GitHub: https://github.com/roboflow/rf-detr
- Project Page: https://rfdetr.roboflow.com/
摘要
问题: Open-vocabulary detectors (GroundingDINO, YOLO-World) 在 COCO 上 zero-shot 性能好,但在 out-of-distribution 类别上泛化差;专用检测器 (D-FINE, RT-DETR) 推理快但性能不如微调后的 VLM
方案: RF-DETR — 结合 NAS + 互联网规模预训练,为目标数据集发现 accuracy-latency Pareto 曲线
核心方法:
- Weight-sharing NAS:训练时同时优化数千子网,无需完整训练
- 5 个 Tunable Knobs:Patch Size、Decoder Layers、Query Tokens、Resolution、Window 数
- Backbone 用 DINOv2(替换 LW-DETR 的 CAEv2)
SOTA 性能:
- RF-DETR (nano): 48.0 AP @ COCO,超越 D-FINE (nano) +5 AP
- RF-DETR (2x-large): 首个实时检测器突破 COCO 60 AP (60.1)
- RF-DETR (2x-large) 超越 GroundingDINO (tiny) 且 20x faster
1 引言 (Introduction)
1.1 背景 — Open-vocabulary vs Specialist Detectors
- Open-vocabulary detectors (GroundingDINO, YOLO-World) 在常见类别上 zero-shot 效果惊艳
- 但问题: 在预训练未出现的类别上泛化差,需要 fine-tune
- Fine-tune VLM 的代价:推理慢(重-weight 文本编码器)+ 失去 open-vocabulary 能力
1.2 关键发现:SOTA 检测器过拟合 COCO
- YOLOv8 在 COCO 上性能好,但泛化到真实世界数据集(分布差异大)表现差
- 原因: bespoke 架构、学习率 scheduler、数据增强都是针对 COCO 优化的
1.3 RF-DETR 核心思路
- 不做 VLM fine-tune,而是训练一个轻量 specialist detector
- 用 Weight-sharing NAS 自动搜索最优架构配置
- 核心洞察:训练时随机采样不同配置,OFA 风格"架构增强"同时是 regularizer
1.4 本文贡献
- RF-DETR:首个端到端 weight-sharing NAS 用于检测和分割
- 5 个 Tunable Knobs 提升 DETR 到不同领域的迁移能力
- SOTA 性能:COCO 和 RF100-VL(100个不同领域数据集)
- Latency Benchmarking 标准化方案
2 相关工作 (Related Work)
2.1 Neural Architecture Search (NAS)
| 方法 | 特点 |
|---|---|
| 早期 NAS (NASNet, AmoebaNet) | 只追求精度,忽略效率 |
| Hardware-aware NAS | 加入硬件反馈,但每换平台需重新搜索 |
| OFA (Cai et al., 2019) | Weight-sharing NAS,训练时同时优化数千子网,解耦训练与搜索 |
| 本文 | 直接优化端到端检测精度,而非仅替换 backbone |
2.2 Real-Time Object Detectors
| 类型 | 代表 | 特点 |
|---|---|---|
| Two-stage | Mask-RCNN | 高精度,高延迟 |
| Single-stage | YOLO, SSD | 速度优先,精度牺牲 |
| DETR 系列 | RT-DETR, LW-DETR | 端到端无 NMS,但早期延迟高 |
| 本文 | 首个 >60 AP 实时检测器 |
2.3 Vision-Language Models
- GLIP、Detic、MQ-Det 等在 zero-shot 上表现好
- 问题:预训练未出现的类别泛化差 + 推理慢
- RF-DETR 方案:结合实时检测器速度 + VLM 互联网规模先验
3 方法 (Method)
3.1 基础架构 (继承 LW-DETR)
| 组件 | 实现 |
|---|---|
| Backbone | DINOv2 (ViT/S-14, 12层) — 替换 LW-DETR 的 CAEv2 |
| Neck | 无 FPN,用 Projector 将多尺度特征投影到统一空间 |
| Encoder | Windowed + Non-windowed Attention 交替 |
| Decoder | Deformable Cross-Attention(固定结构,不在 NAS 范围内) |
| Head | Box Head + Class Head + Segmentation Head (RF-DETR-Seg) |
DINOv2 多尺度来源: 多个 intermediate block outputs (Block 1-4),类似 ResNet 多层 skip connections
Backbone 训练方式: 非冻结,Fine-tune,端到端训练但用较低 LR 保护预训练知识
3.2 Weight-sharing NAS 搜索空间 (5 个 Tunable Knobs)
| Knob | 变体 | 效果 |
|---|---|---|
| Patch Size | 8x8 ~ 32x32 (FlexiVIT) | 小 patch → 高精度,代价是计算量大 |
| Decoder Layers | 1~N 层 | 删减 decoder 层可 turn into single-stage detector |
| Query Tokens | 数量可调 | 隐式编码数据集的平均目标数 |
| Image Resolution | 可变分辨率 | 高分辨率利好小目标,低分辨率利好速度 |
| Window Attention | 每 block 的 window 数 | 控制全局信息混合与计算效率 |
- 训练时每个 iteration 随机采样一种配置
- 这个"架构增强"同时是 regularizer,提升泛化
- 评估时用 grid search 在验证集上选最优配置
3.3 训练策略:Scheduler-free
问题: Cosine schedule 假设固定训练轮数,对多样目标数据集不实际
解决:
- 不限 schedule,用更温和的超参数(更大 batch、更低 LR)
- 用 layer norm 替代 batch norm,支持消费级 GPU 梯度累积
Augmentation: 只做 horizontal flip 和 random crop
- 避免 VerticalFlip 等引入的偏差(如自动驾驶场景中,反射误检)
3.4 预训练
- RF-DETR-Seg 在 Objects-365 上用 SAM2 伪标签预训练
4 实验 (Experiments)
4.1 数据集与指标
- COCO val2017: 标准 benchmark
- RF100-VL: Roboflow 100个不同领域数据集,平均性能是 transfer 到任意领域的 proxy
- 指标: mAP, AP50, AP75, APS/M/L, GFLOPs, Params, Latency (T4 GPU + TensorRT 10.4)
4.2 Latency Benchmarking 标准化
| 问题 | 解决方案 |
|---|---|
| YOLO 报 latency 不含 NMS | - |
| D-FINE 测的 LW-DETR 比原 reported 快 25% | 200ms buffering 防止 GPU power throttling |
| FP16 量化可能让 D-FINE 掉到 0.5 AP | 用 ONNX opset 17 解决 |
| YOLO 用 FP32 测精度,FP16 报 latency | 统一用同一个 model artifact |
4.3 COCO Detection 结果
| Model | Size | Params | AP | AP50 | Latency |
|---|---|---|---|---|---|
| RF-DETR | N | 30.5M | 48.0 | 67.0 | 2.3ms |
| D-FINE | N | 3.8M | 42.7 | 60.2 | 2.1ms |
| LW-DETR | T | 12.1M | 42.9 | 60.7 | 1.9ms |
| RF-DETR | S | 32.1M | 52.9 | 71.9 | 3.5ms |
| D-FINE | S | 10.2M | 50.6 | 67.6 | 3.5ms |
| RF-DETR | M | 33.7M | 54.7 | 73.5 | 4.4ms |
| D-FINE | M | 19.2M | 55.0 | 72.6 | 5.4ms |
| RT-DETR | R18 | 36.0M | 49.0 | 66.6 | 4.4ms |
| RF-DETR | 2XL | 126.9M | 60.1 | 78.5 | 17.2ms |
结论:
- RF-DETR (nano) 超越 D-FINE (nano) +5.3 AP
- RF-DETR (nano) 精度追平 YOLOv8/YOLOv11 的 medium 模型
- 首个 >60 AP 实时检测器
4.4 RF100-VL 结果 (100 个不同领域数据集)
| Model | Size | AP | AP50 | Latency |
|---|---|---|---|---|
| RF-DETR | 2XL | 63.3 | 88.9 | 15.6ms |
| GroundingDINO | T | 62.3 | 88.8 | 309.9ms |
| D-FINE | M | 60.6 | 85.5 | 5.6ms |
结论: RF-DETR (2x-large) 超越 GroundingDINO (tiny) 且 20x faster
4.5 Instance Segmentation 结果
| Model | Size | AP | Latency |
|---|---|---|---|
| RF-DETR-Seg | N | 40.3 | 3.4ms |
| YOLOv11-Seg | M | 38.5 | 6.9ms |
| FastInst | R50 | 34.9 | 39.6ms |
| MaskDINO | R50 | 46.3 | 242ms |
结论: RF-DETR-Seg (nano) 超越 YOLOv11 所有尺寸,且 快 10x
4.6 消融实验
| 配置 | AP 变化 |
|---|---|
| LW-DETR (M) baseline | 52.6 |
| + Gentler Hyperparameters | -1.0 |
| + DINOv2 Backbone | +2.0 |
| + Additional O365 Pre-training | +0.7 |
| + Weight-sharing NAS | +2.0 |
关键结论:
- DINOv2 超越 CAEv2 2.4% AP
- Weight-sharing NAS 额外提升 2% AP,且作为 regularizer 提升泛化
- Fine-tuning after NAS: COCO 上提升有限,RF100-VL 有小幅提升
5 结论 (Conclusion)
- RF-DETR: 首个 SOTA 的 NAS 基础方法,用于为不同目标数据集和硬件平台微调专用端到端检测器
- SOTA 性能: COCO 和 RF100-VL 上超越所有实时方法;D-FINE (nano) +5% AP
- 发现: 当前架构/学习率/数据增强都是针对 COCO 优化的,社区应在更多样化数据集上 benchmark,防止隐式过拟合
- 贡献: 提出 latency benchmark 标准化方案(200ms buffering),提升可复现性
6 局限 (Limitations)
- 即使控制 power throttling,TensorRT 编译非确定性导致 latency 有 ±0.1ms 波动
代码与资源
| 项目 | 链接 |
|---|---|
| GitHub | https://github.com/roboflow/rf-detr |
| Project Page | https://rfdetr.roboflow.com/ |
个人评价
核心价值: RF-DETR 是首个将 weight-sharing NAS 成功应用于端到端检测器的作品,结合 DINOv2 的大规模预训练和 NAS 的架构搜索,在 COCO 和 RF100-VL 上都达到 SOTA。
亮点:
- NAS 搜索空间设计合理:5 个 knobs 覆盖主要精度-速度 tradeoff
- Scheduler-free 训练:对多样目标数据集更友好
- Benchmark 标准化:200ms buffering 方案有实践价值
与 YOLO26 对比:
| 方面 | RF-DETR | YOLO26 |
|---|---|---|
| 架构 | DETR (Transformer) | CNN (CSP-Muon) |
| NMS | 端到端无 NMS | NMS-Free |
| DFL | 有 (Deformable) | DFL-Free |
| NAS | 有 | 无 |
| AP (nano) | 48.0 | 40.9 |
| 延迟 (nano) | 2.3ms | 1.7ms |
建议方向:
- RF-DETR 适合需要高精度的场景
- YOLO26 适合需要极致轻量 + 确定性延迟的边缘部署
Q&A (猴哥提问)
Q4: RF-DETR 用的互联网规模数据预训练,是怎么回事?
答: 不是 RF-DETR 自己预训练,而是 Backbone DINOv2 用了互联网规模数据(ImageNet 等)预训练。RF-DETR 继承了这个 Foundation Model 的视觉特征。
Q5: 微调后的 VLM 比专用检测器强,文章有具体论述吗?
答: 有的。原文 Introduction 明确说:
"Fine-tuning VLMs on a target dataset significantly improves in-domain performance... In contrast, specialist (i.e., closed-vocabulary) object detectors like D-FINE and RT-DETR achieve real-time inference, but underperform fined-tuned VLMs like GroundingDINO."
Table 4 数据支撑:GroundingDINO (T) AP=62.3 > D-FINE (M) AP=60.6 > RT-DETR (M) AP=59.6 (RF100-VL)
Q6: RF-DETR 比 GroundingDINO 强吗,怎么做到的?
答: 强。RF-DETR (2XL) AP=63.3 vs GroundingDINO (T) AP=62.3,且 快 20 倍 (15.6ms vs 309.9ms)。
怎么做到的:
- DINOv2 Backbone — 继承互联网规模预训练的视觉先验
- Weight-sharing NAS — 为目标数据集自动搜索最优架构
- Fine-tuning — NAS 后在小数据集上微调 (+0.2~0.3 AP)
Q7: RF-DETR 是 open-vocabulary 吗?
答: 不是。RF-DETR 是 closed-set(闭集)检测器,只能检测训练时见过的类别。
GroundingDINO 是 open-vocabulary,可以通过文本描述检测任意新类别。这是 RF-DETR 的 局限。
Q8: RF-DETR 的 latency 测试环境?和 YOLO26 相比呢?
答:
- 测试环境: NVIDIA T4 GPU + TensorRT 10.4 + CUDA 12.4
- RF-DETR vs YOLO26 对比 (T4 TensorRT):
| Model | AP | Latency | Params |
|---|---|---|---|
| RF-DETR (nano) | 48.0 | 2.3ms | 30.5M |
| YOLO26n | 40.9 | 1.7ms | 2.4M |
结论: YOLO26 更轻更快(参数量少 12x,延迟少 0.6ms),但 RF-DETR 精度更高(+7 AP)。两者都是 NMS-Free,但 YOLO26 的 DFL-Free 架构更适合 edge 部署。
Q9: Objects-365 预训练是 YOLO26 用的吗?
答: 不是。Objects-365 预训练是 RF-DETR 用来预训练 RF-DETR-Seg 的(用 SAM2 伪标签)。
YOLO26 没有用 Objects-365 预训练,是从 COCO 直接开始训练的。
这也是 YOLO26 精度略低于 RF-DETR 的原因之一:CNN backbone 没有经过大规模互联网数据预训练。
CNN backbone 提升预训练的方式:
- ImageNet 预训练(YOLO 传统做法)
- Objects-365 + 伪标签(RF-DETR 思路)
- 自监督预训练 (MAE/DINO) — 但 ViT 会变重
Q10: Objects-365 规模?为啥用 SAM2 伪标签?
答:
- Objects-365 规模: 365 类,200 万张图片,3000 万个边界框(有标注)
- Objects-365 只有 box 标注,没有 mask 标注
- 用 SAM2 伪标签的原因: Segmentation head 需要 mask 来学习 instance segmentation,而原始数据没有
预训练流程:
- Detection head: 用 Objects-365 的 box 标注预训练(+0.7 AP,消融实验 Table 5)
- Segmentation head: 用 SAM2 生成的 pseudo masks 预训练
- 整个模型(backbone + detection + segmentation)都在 Objects-365 上预训练,不是冻结
目的: 用大规模数据(200万图,365类)提升检测和分割的基线能力,类似 ImageNet 预训练但更大更专。
