{"notes":[{"id":"object-detection/rf-detr","category":"object-detection","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"RF-DETR","subtitle":"先训练，再挑尺寸","author":"Z. Yuan","paperDate":"2025-11-12","publishedOn":"2026-05-12","paperTitle":"RF-DETR: Neural Architecture Search for Real-Time Detection Transformers","paperUrl":"https://arxiv.org/abs/2511.09554","bibliography":{"title":"RF-DETR: Neural Architecture Search for Real-Time Detection Transformers","authors":["Isaac Robinson","Peter Robicheaux","Matvei Popov","Deva Ramanan","Neehar Peri"],"url":"https://arxiv.org/abs/2511.09554","pdfUrl":"https://arxiv.org/pdf/2511.09554v2","codeUrl":"https://github.com/roboflow/rf-detr","preprint":{"id":"2511.09554","submittedOn":"2025-11-12","url":"https://arxiv.org/abs/2511.09554"},"publication":{"venue":"ICLR","year":2026,"kind":"conference","url":"https://iclr.cc/virtual/2026/poster/10007257"},"citation":"@misc{objectdetectionrfdetr2025,\n  title = {{RF-DETR: Neural Architecture Search for Real-Time Detection Transformers}},\n  author = {Isaac Robinson and Peter Robicheaux and Matvei Popov and Deva Ramanan and Neehar Peri},\n  year = {2025},\n  eprint = {2511.09554},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2511.09554}\n}\n","citationPath":"/content/papers/citations/object-detection/rf-detr.f78ec4489185.bib"},"thumbnail":{"src":"/content/papers/assets/10f93bab733752bf97f8b3ed5c86569a2c4d85840b99b338a6443431fb506555.png","width":1080,"height":775},"locale":"zh-hans","path":"/content/papers/zh-hans/object-detection/rf-detr.9db17f9464a9.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"在-coco-上调得太细","text":"在 COCO 上调得太细","depth":3},{"id":"一个尺寸只对一种硬件","text":"一个尺寸只对一种硬件","depth":3},{"id":"解决问题","text":"解决问题","depth":2},{"id":"底座是-lw-detr","text":"底座是 LW-DETR","depth":3},{"id":"五个旋钮","text":"五个旋钮","depth":3},{"id":"每个尺寸看到多少-token","text":"每个尺寸看到多少 token","depth":3},{"id":"训练完再挑","text":"训练完再挑","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"先校准测延迟的尺子","text":"先校准测延迟的尺子","depth":3},{"id":"coco","text":"COCO","depth":3},{"id":"rf100-vl","text":"RF100-VL","depth":3},{"id":"消融多出来的-2-ap-从哪里来","text":"消融：多出来的 2 AP 从哪里来","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"object-detection/detr","relation":"referenced","topic":""},{"id":"object-detection/deformable-detr","relation":"referenced","topic":""},{"id":"contrastive-learning/dinov2","relation":"referenced","topic":""}]},{"id":"object-detection/detr","category":"object-detection","legacyPath":"object-detection/2005-detr","legacySlug":"2005-detr","legacyPaths":[],"title":"DETR","subtitle":"跨领域的奠基者","author":"Z. Yuan","paperDate":"2020-05-26","publishedOn":"2024-06-04","paperTitle":"End-to-End Object Detection with Transformers","paperUrl":"https://www.ecva.net/papers/eccv_2020/papers_ECCV/html/832_ECCV_2020_paper.php","bibliography":{"title":"End-to-End Object Detection with Transformers","authors":["Nicolas Carion","Francisco Massa","Gabriel Synnaeve","Nicolas Usunier","Alexander Kirillov","Sergey Zagoruyko"],"url":"https://www.ecva.net/papers/eccv_2020/papers_ECCV/html/832_ECCV_2020_paper.php","pdfUrl":"https://www.ecva.net/papers/eccv_2020/papers_ECCV/papers/123460205.pdf","codeUrl":"https://github.com/facebookresearch/detr","preprint":{"id":"2005.12872","submittedOn":"2020-05-26","url":"https://arxiv.org/abs/2005.12872"},"publication":{"venue":"ECCV","year":2020,"kind":"conference","url":"https://www.ecva.net/papers/eccv_2020/papers_ECCV/html/832_ECCV_2020_paper.php"},"citation":"@misc{objectdetectiondetr2020,\n  title = {{End-to-End Object Detection with Transformers}},\n  author = {Nicolas Carion and Francisco Massa and Gabriel Synnaeve and Nicolas Usunier and Alexander Kirillov and Sergey Zagoruyko},\n  year = {2020},\n  eprint = {2005.12872},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2005.12872}\n}\n","citationPath":"/content/papers/citations/object-detection/detr.5258ffe0b9a0.bib"},"thumbnail":{"src":"/content/papers/assets/dd7e8441e6460ff562cf558374789924518fafaed7ecde0e3e35ee778c316330.jpg","width":1024,"height":266},"locale":"zh-hans","path":"/content/papers/zh-hans/object-detection/detr.99d0f3b81385.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"模型架构","text":"模型架构","depth":3},{"id":"损失设计","text":"损失设计","depth":3},{"id":"数据集","text":"数据集","depth":3},{"id":"技术细节","text":"技术细节","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"这次行吗","text":"这次行吗？","depth":3},{"id":"模型组件分析","text":"模型组件分析","depth":3},{"id":"模型行为分析","text":"模型行为分析","depth":3},{"id":"对未见过目标数量的泛化能力","text":"对未见过目标数量的泛化能力","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"object-detection/deformable-detr","relation":"next","topic":"集合预测与注意力检测器"},{"id":"object-detection/smca-detr","relation":"comparison","topic":"让 Transformer 检测器更快收敛"}]},{"id":"object-detection/deformable-detr","category":"object-detection","legacyPath":"object-detection/2010-deformable-detr","legacySlug":"2010-deformable-detr","legacyPaths":[],"title":"Deformable DETR","subtitle":"可变形的注意力机制","author":"Z. Yuan","paperDate":"2020-10-08","publishedOn":"2024-09-20","paperTitle":"Deformable DETR: Deformable Transformers for End-to-End Object Detection","paperUrl":"https://arxiv.org/abs/2010.04159","bibliography":{"title":"Deformable DETR: Deformable Transformers for End-to-End Object Detection","authors":["Xizhou Zhu","Weijie Su","Lewei Lu","Bin Li","Xiaogang Wang","Jifeng Dai"],"url":"https://arxiv.org/abs/2010.04159","pdfUrl":"https://arxiv.org/pdf/2010.04159","codeUrl":null,"preprint":{"id":"2010.04159","submittedOn":"2020-10-08","url":"https://arxiv.org/abs/2010.04159"},"publication":{"venue":"ICLR","year":2021,"kind":"conference","url":"https://arxiv.org/abs/2010.04159"},"citation":"@misc{objectdetectiondeformabledetr2020,\n  title = {{Deformable DETR: Deformable Transformers for End-to-End Object Detection}},\n  author = {Xizhou Zhu and Weijie Su and Lewei Lu and Bin Li and Xiaogang Wang and Jifeng Dai},\n  year = {2020},\n  eprint = {2010.04159},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2010.04159}\n}\n","citationPath":"/content/papers/citations/object-detection/deformable-detr.df721a30472e.bib"},"thumbnail":{"src":"/content/papers/assets/36edfc5595a85c73fcdc9a4bbb9e1ca512e1f100676eb7c37203d71c84905c05.jpg","width":1224,"height":752},"locale":"zh-hans","path":"/content/papers/zh-hans/object-detection/deformable-detr.d2987152d10d.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"可变形注意力","text":"可变形注意力","depth":3},{"id":"多尺度计算","text":"多尺度计算","depth":3},{"id":"模型架构","text":"模型架构","depth":3},{"id":"程式码拆解","text":"程式码拆解","depth":3},{"id":"训练策略","text":"训练策略","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"与-detr-的比较","text":"与 DETR 的比较","depth":3},{"id":"消融实验","text":"消融实验","depth":3},{"id":"sota-比较","text":"SOTA 比较","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"object-detection/detr","relation":"background","topic":"集合预测与注意力检测器"},{"id":"object-detection/h-detr","relation":"next","topic":"集合预测与注意力检测器"},{"id":"object-detection/smca-detr","relation":"comparison","topic":"让 Transformer 检测器更快收敛"}]},{"id":"contrastive-learning/dinov2","category":"contrastive-learning","legacyPath":"contrastive-learning/2304-dinov2","legacySlug":"2304-dinov2","legacyPaths":[],"title":"DINOv2","subtitle":"通用特征锻造法","author":"Z. Yuan","paperDate":"2023-04-14","publishedOn":"2025-07-01","paperTitle":"DINOv2: Learning Robust Visual Features without Supervision","paperUrl":"https://arxiv.org/abs/2304.07193","bibliography":{"title":"DINOv2: Learning Robust Visual Features without Supervision","authors":["Maxime Oquab","Timothée Darcet","Théo Moutakanni","Huy V. Vo","Marc Szafraniec","Vasil Khalidov","Pierre Fernandez","Daniel Haziza","Francisco Massa","Alaaeldin El-Nouby","Mahmoud Assran","Nicolas Ballas","Wojciech Galuba","Russell Howes","Po-Yao Huang","Shang-Wen Li","Ishan Misra","Michael Rabbat","Vasu Sharma","Gabriel Synnaeve","Hu Xu","Hervé Jégou","Julien Mairal","Patrick Labatut","Armand Joulin","Piotr Bojanowski"],"url":"https://arxiv.org/abs/2304.07193","pdfUrl":"https://arxiv.org/pdf/2304.07193","codeUrl":"https://github.com/facebookresearch/dinov2","preprint":{"id":"2304.07193","submittedOn":"2023-04-14","url":"https://arxiv.org/abs/2304.07193"},"publication":{"venue":"Transactions on Machine Learning Research","shortVenue":"TMLR","year":2024,"kind":"journal","url":"https://openreview.net/forum?id=a68SUt6zFt"},"citation":"@misc{contrastivelearningdinov22023,\n  title = {{DINOv2: Learning Robust Visual Features without Supervision}},\n  author = {Maxime Oquab and Timothée Darcet and Théo Moutakanni and Huy V. Vo and Marc Szafraniec and Vasil Khalidov and Pierre Fernandez and Daniel Haziza and Francisco Massa and Alaaeldin El-Nouby and Mahmoud Assran and Nicolas Ballas and Wojciech Galuba and Russell Howes and Po-Yao Huang and Shang-Wen Li and Ishan Misra and Michael Rabbat and Vasu Sharma and Gabriel Synnaeve and Hu Xu and Hervé Jégou and Julien Mairal and Patrick Labatut and Armand Joulin and Piotr Bojanowski},\n  year = {2023},\n  eprint = {2304.07193},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2304.07193}\n}\n","citationPath":"/content/papers/citations/contrastive-learning/dinov2.e904e3854892.bib"},"thumbnail":{"src":"/content/papers/assets/9c68ef105804d4462aee8950a1bfd9f0929511f494b1a29690d857bf931da892.jpg","width":1224,"height":368},"locale":"zh-hans","path":"/content/papers/zh-hans/contrastive-learning/dinov2.8a05ceeabdee.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"数据收集","text":"数据收集","depth":2},{"id":"1-准备数据池","text":"1. 准备数据池","depth":3},{"id":"2-去除重复","text":"2. 去除重复","depth":3},{"id":"3-自监督检索","text":"3. 自监督检索","depth":3},{"id":"工程规模与效率","text":"工程规模与效率","depth":3},{"id":"解决方法","text":"解决方法","depth":2},{"id":"图像层面的特征对齐","text":"图像层面的特征对齐","depth":3},{"id":"区块层面的预测任务","text":"区块层面的预测任务","depth":3},{"id":"head-设计","text":"Head 设计","depth":3},{"id":"sinkhorn-knopp-centering","text":"Sinkhorn-Knopp Centering","depth":3},{"id":"koleo-正则化","text":"KoLeo 正则化","depth":3},{"id":"高分辨率训练阶段","text":"高分辨率训练阶段","depth":3},{"id":"工程实现","text":"工程实现","depth":2},{"id":"flashattention","text":"FlashAttention","depth":3},{"id":"sequence-packing","text":"Sequence Packing","depth":3},{"id":"stochastic-depth","text":"Stochastic Depth","depth":3},{"id":"分布式训练","text":"分布式训练","depth":3},{"id":"模型蒸馏","text":"模型蒸馏","depth":3},{"id":"消融实验","text":"消融实验","depth":2},{"id":"模型训练流程","text":"模型训练流程","depth":3},{"id":"预训练数据","text":"预训练数据","depth":3},{"id":"损失组件的重要性","text":"损失组件的重要性","depth":3},{"id":"知识蒸馏的效果","text":"知识蒸馏的效果","depth":3},{"id":"高分辨率训练","text":"高分辨率训练","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"imagenet-classification","text":"ImageNet Classification","depth":3},{"id":"video-classification","text":"Video classification","depth":3},{"id":"instance-recognition","text":"Instance Recognition","depth":3},{"id":"semantic-segmentation","text":"Semantic segmentation","depth":3},{"id":"qualitative-results","text":"Qualitative Results","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"contrastive-learning/dino","relation":"background","topic":"视觉表示的自蒸馏"}]}],"text":"挑实时目标检测器时，很多人会先看 COCO 排行榜，挑一个分数漂亮的模型家族；再从 N、S、M、L 几个尺寸里，找一个在自己的 GPU 上跑得够快的；最后拿自己的数据微调。\n\n这篇论文对每一步都有意见。COCO 上的名次，换到自己的数据集未必站得住；事先切好的几个尺寸，也未必刚好对上你的硬件；至于「跑得够快」，各篇论文测延迟的方法并不一致。\n\n如果你没听过 Roboflow，先补一点背景。这是一家美国公司，运营计算机视觉的标注、训练与部署平台，用户公开分享的数据集集中在旗下的 Roboflow Universe。2025 年 3 月，他们在博客发表 RF-DETR，一个 DETR 系列的实时检测器。它吃进一张图像，直接输出每个物体的框、类别和置信度分数，中间不需要 NMS，代码以 Apache 2.0 许可开源。[Roboflow，2025-03-20](https://blog.roboflow.com/rf-detr/)\n\n论文到 2025 年 11 月才放上 arXiv，作者来自 Roboflow 与卡内基梅隆大学，后来发表在 ICLR 2026。它交代了那一串模型尺寸是怎么来的，也就是标题上的神经架构搜索（neural architecture search，NAS）。Roboflow 本身运营模型训练平台，和发行 YOLO 系列的 Ultralytics 是直接的竞争对手。\n\n## 定义问题\n\n### 在 COCO 上调得太细\n\n作者认为，近年只认固定类别的专用检测器，从架构、学习率调度到数据增强，都是对着 COCO 调出来的。换到每张图的物体数、类别数、数据量都和 COCO 不同的数据集，这些选择未必还合用。\n\n论文里的 YOLOv8 是个例子。在作者的测法下，YOLOv8 从 N 放大到 M，COCO 的 AP 从 35.2 升到 47.3；同样的尺寸搬到 RF100-VL，只从 55.0 升到 56.5，再放大到 XL 也还是 56.5。\n\nRF100-VL 是这组作者在 2025 年整理的基准，从 Roboflow Universe 挑出 100 个数据集，模型在每个数据集上各自微调、评测，再把分数平均。作者把它当成「迁移到任意新领域」的代理指标。\n\n另一条路是开放词汇的视觉语言模型，例如 GroundingDINO。这类模型拿目标数据微调后成绩很好，在 RF100-VL 上有 62.3 AP，可是每张图要 309.9 ms（它不支持 TensorRT，这是 PyTorch 的延迟）。作者也提到，微调会削弱它原本的开放词汇能力。\n\n训练配方本身也带着假设。cosine 学习率调度要事先知道总共训练几步，数据增强则预设了数据长什么样子。作者举的例子是自动驾驶汽车的行人检测器，如果训练时用了上下翻转，模型可能把水洼里的倒影也当成行人。\n\n### 一个尺寸只对一种硬件\n\n另一个问题是尺寸。现有的检测器家族，例如 D-FINE 的 N 到 X，每个尺寸都由人工设计、各自训练。目标硬件一换，只能从现成的尺寸里挑一个最接近的，或者重新设计、重新训练。\n\nNAS 本来就是用来自动找出不同的精度与延迟取舍。早期的硬件感知 NAS，每换一种硬件就得重新搜索、重新训练；2019 年的 OFA（Once-for-All）把训练和搜索拆开，让一个网络同时训练数千个共享权重的子网络，训练完再按需求挑。用在目标检测上的 NAS，多半只把骨干网络换成搜索出来的网络，检测器的其他部分维持原样。\n\n所以这篇要回答两个问题。能不能在目标数据集上只训练一次，就得到一整条精度与延迟的曲线，再按硬件挑一个点？挑出来的点，延迟又该怎么测，才能和别人的数字放在一起比？\n\n## 解决问题\n\n### 底座是 LW-DETR\n\nRF-DETR 的底座是百度在 2024 年提出的 LW-DETR。它由一个 ViT 编码器、一个 projector 和一个很浅的 DETR decoder 叠成，ViT 里交替使用窗口注意力和全局注意力来省计算。\n\n[![RF-DETR 架构图：左边是图像切成 patch、加上位置编码后送进 ViT 骨干网络，骨干网络有四个 block，每个 block 是两层窗口注意力加一层全局注意力；四个 block 的输出进入 projector，再经 Query Selection 与查询嵌入相加，送进 decoder；decoder 每层依次是自注意力、可变形交叉注意力与前馈层，后面叠着 Decoder Group 1 到 13；右上是检测头与分割头](/content/papers/assets/10f93bab733752bf97f8b3ed5c86569a2c4d85840b99b338a6443431fb506555.png)](/content/papers/assets/10f93bab733752bf97f8b3ed5c86569a2c4d85840b99b338a6443431fb506555.png)\n\n*原论文 Figure 2，取自 [**v2 PDF 第 4 页**](https://arxiv.org/pdf/2511.09554v2#page=4)，CC BY 4.0。左边是 ViT 骨干网络，中间是 decoder，右边是分割头，上方是两种输出。*\n\n从左下开始看。图像切成 patch，加上位置编码，送进 ViT 骨干网络。图上的骨干网络有四个 block，每个 block 先做两层窗口注意力，再做一层全局注意力。四个 block 的输出一起送进 projector，整理成 decoder 要用的特征图。\n\n接着是 Query Selection。projector 输出的每个位置，先各自预测一组类别分数和一个候选框，分数最高的 300 个，成为 decoder 查询的起点。这是 Deformable DETR 提出的 two-stage 做法。\n\n在 decoder 的每一层里，查询之间先做自注意力；再用可变形交叉注意力，到特征图上每个候选框附近取几个点；最后过一层前馈网络。每一层的输出都接上检测头，各自算一次损失，后面砍 decoder 层数的旋钮就靠这一点。\n\n图右边叠着 13 组 decoder，这是从 LW-DETR 沿用的 Group DETR。训练时准备 13 组查询，共用同一组 decoder 权重，每组各自和标注做一对一匹配，等于每个物体在一次迭代里拿到 13 个正样本；推理时只留一组，仍然不需要 NMS。官方代码的默认值也是 13 组。\n\n同一个架构再加一个轻量的分割头，就是 RF-DETR-Seg，这篇笔记只看检测。\n\nRF-DETR 对 LW-DETR 的改动主要有三项：\n\n- **骨干网络换成 DINOv2**。LW-DETR 原本用 CAEv2。DINOv2 是 Meta 以自监督方式预训练的 ViT，作者发现用它的权重初始化，小数据集上的检测准确率明显提升。代价是速度，DINOv2 有 12 层，CAEv2 只有 10 层，这笔延迟留给后面的 NAS 补回来。COCO 的 N 到 L 用 ViT-S，XL 和 2XL 用 ViT-B。\n- **projector 改用 LayerNorm**。这是为了让消费级 GPU 也能靠梯度累积凑出大批量。BatchNorm 的统计量只看每次实际送进去的小批量，梯度累积时会失准。\n- **训练配方变简单**。学习率从 LW-DETR 的 4e-4 降到 1e-4，不用学习率调度，也不做 warm-up。数据增强只留水平翻转和随机裁剪；多尺度缩放改成整个批次一起缩，减少填充（padding）的像素。\n\n\n> [!TIP]\n> \n> RF-DETR 的 decoder 沿用 DETR 的一对一匹配与 Deformable DETR 的可变形注意力，骨干网络则是 DINOv2，背景可以参考：\n> \n> - **[[20.05] DETR：跨领域的奠基者](/blog/papers/object-detection/detr)**\n> - **[[20.10] Deformable DETR：可变形的注意力机制](/blog/papers/object-detection/deformable-detr)**\n> - **[[23.04] DINOv2：通用特征锻造法](/blog/papers/contrastive-learning/dinov2)**\n\n\n### 五个旋钮\n\n底座定好之后，作者在上面开了五个可以转的旋钮。图上每一格都有一条箭头，一端写着较快，另一端写着较准：\n\n[![NAS 搜索空间的五个示意图：a 是 patch 大小，8×8 的小 patch 产生较多 token、较准，32×32 的大 patch 较快；b 是 decoder 层数，层数少较快、层数多较准；c 是丢掉部分查询；d 是输入分辨率；e 是窗口数，右边的方格切成四块不同颜色的窗口](/content/papers/assets/f0e8bf4f9ecad4cb2f090117a18034f54eab8bc3e901414f94864de103d3425a.png)](/content/papers/assets/f0e8bf4f9ecad4cb2f090117a18034f54eab8bc3e901414f94864de103d3425a.png)\n\n*原论文 Figure 3，取自 [**v2 PDF 第 5 页**](https://arxiv.org/pdf/2511.09554v2#page=5)，CC BY 4.0。五个旋钮分别是 patch 大小、decoder 层数、查询数、分辨率与窗口数。*\n\n- **Patch 大小**（a）。patch 越小，切出来的 token 越多，越准也越慢。训练时用 FlexiViT 的方法，把同一组 patch embedding 权重缩放到不同大小。\n- **Decoder 层数**（b）。每一层都有自己的损失，推理时可以从后面砍掉任意几层。全部砍光也行，这时只剩 Query Selection 挑出来的 300 个候选框，变成一个不需要 NMS 的单阶段检测器。\n- **查询数**（c）。查询按 Query Selection 给的分数排序，推理时直接丢掉分数最低的那些。查询数也是每张图最多能输出的物体数。\n- **分辨率**（d）。分辨率越高，小物体越好认，速度也越慢。位置编码先按「最大分辨率 ÷ 最小 patch」配好一整张表，其他组合从这张表插值。\n- **窗口数**（e）。窗口注意力只让同一个窗口里的 token 互相看。窗口切得越多，计算越省，信息也越难跨窗口流动。\n\n训练时，每一步都从网格里均匀抽一组设置，用它做一次前向和梯度更新。附录 A 的训练网格是分辨率 320 到 960、每 64 一档，patch 为 8、10、12、16、20、24、32，窗口数为 1、2、4。decoder 层数和查询数在训练时固定为 6 层、300 个，只在推理时往下砍。\n\n作者拿 dropout 的集成观点来比喻这种训练，每一步只更新其中一个子网络，数千个子网络一起学。他们也发现，随机换架构本身就有正则化的效果，所以叫它「架构增强」（architecture augmentation）。后面的消融会看到证据。\n\n\n> [!TIP]\n> \n> 同一组权重怎么适应不同的 patch 大小，可以参考 FlexiViT 的笔记：\n> \n> - **[[22.12] FlexiViT：自由的 Patch Sizes](/blog/papers/vision-transformers/flexivit)**\n\n\n### 每个尺寸看到多少 token\n\n附录的 Table 7 列出最后在 COCO 上挑出来的配置。我们算一下，每个配置实际送进 ViT 的 token 有多少。\n\nTable 7 的窗口数写 2。官方代码把这个数字当成每边切几个窗口，所以实际是 2×2 = 4 个窗口，和 Figure 3(e) 画的四块一致。\n\n```python\n# Table 7：COCO 检测的帕累托配置（分辨率、patch、每边切几个窗口）\nconfigs = {\n    \"N\": (384, 16, 2), \"S\": (512, 16, 2), \"M\": (576, 16, 2),\n    \"L\": (704, 16, 2), \"XL\": (700, 20, 1), \"2XL\": (880, 20, 2),\n}\nfor name, (res, patch, win) in configs.items():\n    side = res // patch\n    tokens = side * side\n    print(f\"{name:>3}: {res}/{patch} = {side:>2}，共 {tokens:>4} 个 token，\"\n          f\"切成 {win * win} 个窗口，每个窗口 {tokens // (win * win):>4} 个\")\n\n# 附录 L：分辨率固定 640，只换 patch，凑出相近的每边格数\nfor name, patch in [(\"N\", 27), (\"S\", 21), (\"M\", 18)]:\n    print(f\"640/{patch} = {640 / patch:.1f}（{name} 原本是 {configs[name][0] // configs[name][1]}）\")\n\n# 位置编码按「最大分辨率 ÷ 最小 patch」预先配置（附录 A 的训练网格）\nprint(\"位置编码网格：\", 960 // 8, \"×\", 960 // 8)\n# 附录 A：推理时穷举的组合数\nprint(\"组合数：\", 11 * 7 * 7 * 3 * 4)\n```\n\n```text\n  N: 384/16 = 24，共  576 个 token，切成 4 个窗口，每个窗口  144 个\n  S: 512/16 = 32，共 1024 个 token，切成 4 个窗口，每个窗口  256 个\n  M: 576/16 = 36，共 1296 个 token，切成 4 个窗口，每个窗口  324 个\n  L: 704/16 = 44，共 1936 个 token，切成 4 个窗口，每个窗口  484 个\n XL: 700/20 = 35，共 1225 个 token，切成 1 个窗口，每个窗口 1225 个\n2XL: 880/20 = 44，共 1936 个 token，切成 4 个窗口，每个窗口  484 个\n640/27 = 23.7（N 原本是 24）\n640/21 = 30.5（S 原本是 32）\n640/18 = 35.6（M 原本是 36）\n位置编码网格： 120 × 120\n组合数： 6468\n```\n\n先看前六行。在论文里，N 到 L 是同一次 DINOv2-S 训练曲线上的四个点，patch 都是 16，差别主要在分辨率，每边从 24 格长到 44 格，decoder 也从 2 层加到 4 层。所以这几个尺寸的参数量很接近，N 是 30.5M、M 是 33.7M，延迟却从 2.3 ms 变成 4.4 ms（Table 2）。RF-DETR 沿用 LW-DETR 的习惯，按延迟分尺寸，不按参数量。\n\nL 和 2XL 的 token 一样多，都是 1,936 个；2XL 换成 DINOv2-B 骨干网络，用 patch 20 配上 880 的分辨率。XL 只切 1 个窗口，等于每一层都是全局注意力。\n\n窗口也不是切越多越好。DINOv2 预训练时依赖 CLS token，RF-DETR 让每个窗口各复制一份；窗口一多，复制的份数跟着变多，速度反而受影响。附录 L 提到，挑出来的配置大多停在每边 2 个窗口，LW-DETR 则是 4 个。\n\n中间三行是附录 L 的一个实验。作者发现精度跟着「每边几格」走，单看分辨率或 patch 都说不准。于是把分辨率固定在 640，改用 patch 27、21、18 凑出接近 N、S、M 的格数，结果和原本的配置几乎一样；27 和 18 这两种 patch，训练时一次都没出现过。\n\n位置编码那一行是按附录 A 的训练网格推出来的，最大分辨率 960、最小 patch 8，所以要先准备 120×120 个位置。最后一行是推理时要穷举的组合数，11 种分辨率、7 种 patch、7 种 decoder 深度（0 到 6 层）、3 种窗口数、4 种查询数（50、100、200、300），一共 6,468 种。\n\n### 训练完再挑\n\n在目标数据集上训练完之后，作者在验证集上把这 6,468 种配置全部跑一遍，测精度和延迟，留下帕累托前沿，也就是同样延迟下最准的那些点。要部署时给定延迟上限，挑曲线上最准的那一个。RF100-VL 则先定好 N 到 2XL 各自的目标延迟，在每个数据集上找延迟落在目标 10% 以内的配置。\n\nNAS 的训练时间大约是一般单一尺寸训练的 2 到 4 倍，视数据集而定；搜索本身，作者估计要 10,000 个 GPU 小时左右（200 张 T4 跑 48 小时）。换来的是所有尺寸都出自同一次训练，非 NAS 的做法每多一个尺寸就要重训一次。\n\n挑出配置之后，可以选择再微调一次。COCO 上几乎没有帮助，各尺寸最多 +0.4 AP（Table 15）；RF100-VL 上稍微多一点，例如 N 从 57.8 升到 58.6。作者的解释是，小数据集上训练 100 个 epoch，还不够让架构增强收敛。\n\n## 讨论\n\n### 先校准测延迟的尺子\n\n比较延迟本来就麻烦。每篇新论文都会在自己的机器上重测一次前人的模型，数字却常常对不上。作者在 §4 列了几个原因：\n\n1. **YOLO 的延迟常常不含 NMS**。拿它和不需要 NMS 的端到端检测器比，并不公平。2023 年的 RT-DETR 就指出过这件事。\n2. **YOLO 的分割模型只算到 prototype**。测到的是中间产物的时间，还没组成每个物体可以直接用的掩码。\n3. **GPU 会降频**。连续推理时 GPU 过热，时钟频率被拉低，测出来的延迟跟着飘。作者的做法是每次前向之间停 200 ms。\n4. **延迟用 FP16，准确率用 FP32**。不少论文拿 FP16 的模型测速度，却拿 FP32 的模型测准确率。直接量化有时掉得很厉害，D-FINE 直接转成 FP16 只剩 0.5 AP，改用 ONNX opset 17 导出才恢复。作者主张准确率和延迟要用同一个模型文件测。\n5. **验证和推理的 NMS 可能不一样**。作者在 TensorRT 上复现不出 YOLOv8 和 YOLO11 公布的 mAP，推测是因为它们验证时用多类别 NMS，一个框可以同时保留好几个类别，实际推理却只用单类别。\n\n这套测法下，YOLO 一律接上 NMS，置信度阈值 0.01；硬件是 T4，用 TensorRT 10.4、CUDA 12.4。Table 1 把几个 M 尺寸的模型，用原论文公布的数字和这套测法并排：\n\n| 模型 | 公布的 AP | 公布的延迟 | FP32 AP | FP32 延迟 | FP16 AP | FP16 延迟 |\n| --- | ---: | ---: | ---: | ---: | ---: | ---: |\n| YOLOv8-M | 50.2 | 5.86 | 49.3 | 14.8 | 47.3 | 5.4 |\n| YOLO11-M | 51.5 | 4.7 | 49.7 | 18.7 | 48.3 | 5.2 |\n| RT-DETR-R18 | 49.0 | 4.61 | 49.0 | 12.2 | 49.0 | 4.4 |\n| LW-DETR-M | 52.5 | 5.6 | 52.6 | 26.8 | 52.6 | 4.4 |\n| D-FINE-M | 55.1 | 5.62 | 55.1 | 13.9 | 55.0 | 5.4 |\n| RF-DETR-M | – | – | 54.8 | 20.5 | 54.7 | 4.4 |\n\n*表：原论文 Table 1，延迟单位 ms。后四列都是每次前向之间停 200 ms 的测法；D-FINE 的 FP16 是修正导出之后的数字。*\n\n从 FP32 换到 FP16，两个 YOLO 各掉了 2.0 和 1.4 AP，四个 DETR 类模型最多掉 0.1。公布的数字和作者实测的 FP32 也有落差，YOLOv8-M 差 0.9，YOLO11-M 差 1.8。FP32 那一列的延迟在 12.2 到 26.8 ms 之间，是 FP16 的 2.6 到 6.1 倍。\n\n2025 年 9 月，论文还没出来，就有用户在 RF-DETR 的 GitHub 开 issue，说他们列出的 YOLO11 数字有误。第一作者回复，这些数字是用 TensorRT 融合的 NMS、FP16 和 pycocotools 实际测出来的；Ultralytics 验证时用多标签 NMS，按他们的经验会让 COCO mAP 高出 1 左右，报告的速度又是不含 NMS 的 FP16。[rf-detr #350](https://github.com/roboflow/rf-detr/issues/350) 论文的 §4 把同样的论点写成了一套测法。\n\n停那 200 ms 有多大影响？Table 20 在同一组 M 模型上比过，不停和停 200 ms 的延迟差 0 到 0.3 ms，停得更久，变化不超过 0.1 ms。作者也承认，这套测法测的是 GPU 没过热时的单张延迟，不是用来测持续吞吐量的；如果你的服务是连续推理，表上的数字比较接近 GPU 凉快时的状态。TensorRT 每次编译的结果也会差到 0.1 ms，所以论文的延迟只写到小数点后一位。\n\n测法的选择也会影响名次。作者在 TensorRT 里统一开启 CUDA graphs，让 GPU 的 kernel 预先排好队，不必由 CPU 一个个启动。这对 RT-DETR、LW-DETR 和 RF-DETR 有帮助，对 D-FINE 没有；作者自己写到，开了之后，LW-DETR 和 D-FINE 落在同一条精度与延迟的曲线上。\n\nNMS 的阈值也会改变数字。在这套测法下，YOLOv8-N 含 NMS 的总延迟是 2.1 ms，AP 35.2（Table 2）。同一个 YOLOv8-N，在 YOLOv10 论文的测法里总延迟是 6.16 ms，其中模型本身只占 1.77 ms；YOLOv10 用的是各模型验证时的 NMS 设置，留下的候选框多得多。看到「NMS 要花几毫秒」这类数字时，先找阈值设在哪里。\n\n\n> [!TIP]\n> \n> 把 NMS 算进延迟的端到端测法，以及同一个 YOLOv8-N 在不同测法下的数字，可以参考：\n> \n> - **[[23.04] RT-DETR：把 NMS 算进秒表](/blog/papers/object-detection/rt-detr)**\n> - **[[24.05] YOLOv10：NMS，再见](/blog/papers/object-detection/yolov10)**\n\n\n### COCO\n\n先看 Figure 1 的左上角：\n\n[![COCO 目标检测的精度与延迟曲线，横轴是 T4 上的延迟，从约 1.5 到 20 ms，纵轴是 AP50:95，从 35 到 60；紫色的 RF-DETR（DINOv2-S）和粉色的 RF-DETR（DINOv2-B）是连续曲线，YOLOv8、YOLO11、D-FINE、RT-DETR、LW-DETR 是以 N 到 XL 标记连起来的折线](/content/papers/assets/5d7dc32c6480e109cfe21fc73d7a8f9fbc1a7218232165cc360266eb0d5c9849.png)](/content/papers/assets/5d7dc32c6480e109cfe21fc73d7a8f9fbc1a7218232165cc360266eb0d5c9849.png)\n\n*原论文 Figure 1 左上子图，取自 [**v2 PDF 第 3 页**](https://arxiv.org/pdf/2511.09554v2#page=3)，CC BY 4.0。横轴是延迟（ms），纵轴是 COCO 的 AP50:95。*\n\n其他家族都是几个尺寸连成的折线，RF-DETR 的两条却是连续的曲线。紫色那条是 DINOv2-S 骨干网络的一次训练，粉色那条是 DINOv2-B 的一次训练，曲线上每一点都是同一份权重换一组配置。\n\n低延迟这一端，紫色线压在所有家族上面。往右到了 L 附近，棕色的 D-FINE 追上紫色线，到 XL 时高出一截；粉色的曲线要到 17 ms 左右，才越过 60。\n\n挑几行数字对照：\n\n| 模型 | 参数量 | 延迟（ms） | AP |\n| --- | ---: | ---: | ---: |\n| YOLOv8-N | 3.2M | 2.1 | 35.2 |\n| LW-DETR-T | 12.1M | 1.9 | 42.9 |\n| D-FINE-N | 3.8M | 2.1 | 42.7 |\n| RF-DETR-N | 30.5M | 2.3 | 48.0 |\n| YOLOv8-M | 25.9M | 5.4 | 47.3 |\n| LW-DETR-M | 28.2M | 4.4 | 52.6 |\n| D-FINE-M | 19.2M | 5.4 | 55.0 |\n| RF-DETR-M | 33.7M | 4.4 | 54.7 |\n| D-FINE-XL | 62M | 11.5 | 59.3 |\n| RF-DETR-XL | 126.4M | 11.5 | 58.6 |\n| RF-DETR-2XL | 126.9M | 17.2 | 60.1 |\n\n*表：整理自原论文 Table 2 与 Table 12，均为作者以同一套测法实测。*\n\n1. **N 的差距最大**。RF-DETR-N 比 D-FINE-N 高 5.3 AP，延迟多 0.2 ms；它的 48.0 也比 YOLOv8-M 的 47.3 高，延迟不到一半。\n2. **M 以上就有输有赢**。D-FINE-M 比 RF-DETR-M 高 0.3 AP，但慢 1.0 ms；到了 XL，两者同样 11.5 ms，D-FINE 反而高 0.7。\n3. **2XL 超过 60**。60.1 AP、17.2 ms，比 D-FINE-XL 高 0.8，延迟多 5.7 ms。作者说，就他们所知，这是第一个在 COCO 上超过 60 AP 的实时检测器。\n\nRF-DETR 除了 DINOv2，还在 Objects365 上预训练过；D-FINE 的 S 到 XL 也有，D-FINE-N 则没有，作者在附录自己注明了这一点。RF-DETR 的参数量也大得多，N 是 30.5M，D-FINE-N 是 3.8M，差了八倍，内存或存储空间紧张的设备要另外考虑。论文说的「实时」，指 T4 上 40 ms 以内；附录还有一个 Max 版本，61.8 AP，但要 98 ms，已经在这个范围之外。\n\nRoboflow 在 2025 年 3 月的发布文章里，就说 RF-DETR 是第一个超过 60 mAP 的实时模型，当时指的是旧版 RF-DETR-large 在 728 分辨率下的 60.5；论文里撑起这句话的，换成了 2XL 的 60.1。\n\n### RF100-VL\n\n换到 RF100-VL，同样挑几行：\n\n| 模型 | 延迟（ms） | AP | NAS 后再微调 |\n| --- | ---: | ---: | ---: |\n| YOLOv8-N | 2.6 | 55.0 | – |\n| YOLO11-M | 5.1 | 57.0 | – |\n| D-FINE-N | 2.0 | 58.2 | – |\n| RF-DETR-N | 2.5 | 57.8 | 58.6 |\n| D-FINE-M | 5.6 | 60.6 | – |\n| RF-DETR-M | 4.6 | 61.7 | 62.0 |\n| GroundingDINO-T（微调） | 309.9 | 62.3 | – |\n| RF-DETR-2XL | 15.6 | 63.3 | 63.5 |\n\n*表：整理自原论文 Table 4，100 个数据集的平均。GroundingDINO 的延迟是 PyTorch 测的，其他是 TensorRT。*\n\nYOLO 这边不管尺寸大小，都停在 55 到 57。最小的尺寸，D-FINE-N 的 58.2 反而高于没有再微调的 RF-DETR-N；到了 M，RF-DETR 领先 1.1 AP，延迟也短 1.0 ms。2XL 比微调过的 GroundingDINO 高 1.0 AP（再微调后是 1.2），延迟约是它的二十分之一，只是两边用的推理引擎不同。\n\nYOLO 和 DETR 类模型的差距，大多集中在小目标。YOLO 各尺寸的 AP_S 只有 4.7 到 7.3，DETR 类模型都在 30 以上，论文没有分析原因。作者另外提醒，YOLO 这里沿用 0.01 的置信度阈值，不一定适合每一个数据集，延迟数字可能因此不是 YOLO 的最佳状态。\n\n附录 I 还有一组实验，把 COCO 上挑好的配置直接搬到 RF100-VL，不在新数据集上重新搜索。N、S、M 分别是 57.7、60.2、61.2，在 RF100-VL 上重新搜索的配置是 57.8、60.9、61.7，差 0.1 到 0.7 AP；L 的固定配置反而高 0.2，只是延迟多了 0.6 ms。固定配置都已经高于同尺寸的 LW-DETR。\n\n### 消融：多出来的 2 AP 从哪里来\n\nTable 5 从 LW-DETR-M 出发，一步一步改成 RF-DETR-M：\n\n| 步骤 | 延迟（ms） | AP |\n| --- | ---: | ---: |\n| LW-DETR-M | 4.4 | 52.6 |\n| + 较温和的超参数 | 4.4 | 51.6 |\n| + DINOv2 骨干网络 | 4.7 | 53.6 |\n| + 更多 Objects365 预训练 | 4.7 | 54.3 |\n| + 权重共享 NAS（配置不变） | 4.7 | 54.6 |\n| 　patch 改 16、分辨率改 640 | 4.7 | 54.4 |\n| 　分辨率降到 576 | 4.0 | 53.6 |\n| 　每边窗口数 4 → 2 | 4.3 | 54.3 |\n| 　decoder 3 → 4 层 | 4.4 | 54.6 |\n\n*表：整理自原论文 Table 5，COCO。*\n\n换成较温和的超参数（较小的学习率、LayerNorm 等），AP 先掉了 1.0；作者说 LayerNorm 会伤一点准确率，但不换就没办法在消费级硬件上训练。换上 DINOv2，AP 回升 2.0，延迟多了 0.3 ms。\n\n第五步的配置是 patch 14、分辨率 560，而 patch 14 根本不在训练网格里。模型只是跟着 NAS 一起训练，同一个配置就多了 0.3 AP，这是前面说的架构增强的证据。\n\n后四步是转旋钮，把延迟拉回 4.4 ms。最后 54.6 AP，和 LW-DETR-M 同样的延迟，高了 2.0。\n\n骨干网络的比较在 Table 6。同样的设置下，DINOv2 ViT-S 是 54.3，CAEv2 是 52.3，SigLIPv2 是 50.4；SAM2 的 Hiera-S 有 53.6，但延迟是 11.2 ms，比 DINOv2 的 4.7 ms 慢了一倍多。（SigLIPv2 和 SAM2 转成 FP16 后成绩很差，这两行放的是 FP32 的准确率，算是它们的上限。）\n\n## 结论\n\nRF-DETR 把 LW-DETR 的骨干网络换成 DINOv2，再用权重共享 NAS 在目标数据集上训练一次，之后在验证集上穷举六千多种配置，按延迟挑点。论文能带走的有这几件事：\n\n1. **尺寸可以事后再挑**。一次训练就得到一整条精度与延迟的曲线，不同硬件挑不同的点。代价是训练时间变成 2 到 4 倍，搜索还要上万个 GPU 小时。\n2. **COCO 之外要再看一个基准**。YOLO 在 COCO 上随尺寸一路变好，到了 RF100-VL 几乎不动；D-FINE 和 RF-DETR 的胜负也随数据集翻转。不过 RF100-VL 是作者自己整理的基准。\n3. **测延迟要把条件写清楚**。NMS 算不算、阈值多少、FP16 还是 FP32、有没有让 GPU 冷却，任何一项不同，表上的数字就不能直接比。\n\nNAS 的代码没有开源，第一作者在 2025 年 12 月的 issue 里说，GitHub 上的代码是用来微调 NAS 找出来的固定配置；在自己的数据上跑 NAS，要通过 Roboflow 的平台。[rf-detr #483](https://github.com/roboflow/rf-detr/issues/483) 按附录 I 的数字，COCO 的固定配置用在 RF100-VL 上，和重新搜索的配置相比，不再微调时差距在 0.7 AP 以内。许可也分两种，N 到 L 的检测模型是 Apache 2.0，XL 和 2XL 的检测模型则用 Roboflow 自己的 PML 1.0，商用自部署要另外付费。[rf-detr README](https://github.com/roboflow/rf-detr)\n\n查询数只能往下砍，上限是训练时的 300 个。一张图有几百个物体的场景，第一作者的建议是把大图切成小块再送进去。[rf-detr #350](https://github.com/roboflow/rf-detr/issues/350) 另外，官方的后处理把「查询 × 类别」的分数展平后取前 300 名，同一个框可能带着两个类别出现。有用户反馈过重叠的框，第一作者说数据够多时模型应该要自己学会避开，Roboflow 的工程师则建议直接在输出后面接 NMS。[rf-detr #187](https://github.com/roboflow/rf-detr/issues/187)\n\n下次看到某个检测器说自己比 YOLO 快，可以先翻到它测延迟的那一段，看看 NMS 的阈值设多少、测速和测准的是不是同一个模型文件。想看 YOLO 那一侧怎么处理 NMS，可以接着读 Ultralytics 的 [YOLO26](/blog/papers/object-detection/yolo26)。\n","imageSizes":{"/content/papers/assets/10f93bab733752bf97f8b3ed5c86569a2c4d85840b99b338a6443431fb506555.png":{"width":1080,"height":775},"/content/papers/assets/f0e8bf4f9ecad4cb2f090117a18034f54eab8bc3e901414f94864de103d3425a.png":{"width":1005,"height":653},"/content/papers/assets/5d7dc32c6480e109cfe21fc73d7a8f9fbc1a7218232165cc360266eb0d5c9849.png":{"width":788,"height":555}}}
