{"notes":[{"id":"object-detection/deim","category":"object-detection","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"DEIM","subtitle":"拼贴出来的正样本","author":"Z. Yuan","paperDate":"2024-12-05","publishedOn":"2026-06-26","world":"external/deim","paperTitle":"DEIM: DETR with Improved Matching for Fast Convergence","paperUrl":"https://arxiv.org/abs/2412.04234","bibliography":{"title":"DEIM: DETR with Improved Matching for Fast Convergence","authors":["Shihua Huang","Zhichao Lu","Xiaodong Cun","Yongjun Yu","Xiao Zhou","Xi Shen"],"url":"https://arxiv.org/abs/2412.04234","pdfUrl":"https://arxiv.org/pdf/2412.04234v3","codeUrl":"https://github.com/Intellindust-AI-Lab/DEIM","preprint":{"id":"2412.04234","submittedOn":"2024-12-05","url":"https://arxiv.org/abs/2412.04234"},"publication":{"venue":"CVPR","year":2025,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2025/html/Huang_DEIM_DETR_with_Improved_Matching_for_Fast_Convergence_CVPR_2025_paper.html"},"citation":"@misc{objectdetectiondeim2024,\n  title = {{DEIM: DETR with Improved Matching for Fast Convergence}},\n  author = {Shihua Huang and Zhichao Lu and Xiaodong Cun and Yongjun Yu and Xiao Zhou and Xi Shen},\n  year = {2024},\n  eprint = {2412.04234},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2412.04234}\n}\n","citationPath":"/content/papers/citations/object-detection/deim.6126444ef2d4.bib"},"thumbnail":{"src":"/content/papers/assets/728ebf51d648559c31fbbb0d0dafd4107b254df8b6016972cd881c555eb051ae.png","width":1280,"height":1720},"locale":"zh-hans","path":"/content/papers/zh-hans/object-detection/deim.aaf00fa2cbe4.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"正样本只有物体那么多","text":"正样本只有物体那么多","depth":3},{"id":"配上了却配歪了","text":"配上了，却配歪了","depth":3},{"id":"前人的补法","text":"前人的补法","depth":3},{"id":"解决问题","text":"解决问题","depth":2},{"id":"dense-o2o一张图多放几个物体","text":"Dense O2O：一张图多放几个物体","depth":3},{"id":"mal正样本变多配歪的也变多","text":"MAL：正样本变多，配歪的也变多","depth":3},{"id":"训练调度先预热再拼贴最后收手","text":"训练调度：先预热，再拼贴，最后收手","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"实验设置","text":"实验设置","depth":3},{"id":"和-d-fineyolo-比","text":"和 D-FINE、YOLO 比","depth":3},{"id":"消融dense-o2o-和-mal-各占多少","text":"消融：Dense O2O 和 MAL 各占多少","depth":3},{"id":"物体很挤的时候","text":"物体很挤的时候","depth":3},{"id":"复现反馈","text":"复现反馈","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"object-detection/h-detr","relation":"referenced","topic":""},{"id":"object-detection/dino-detr","relation":"referenced","topic":""},{"id":"object-detection/rt-detr","relation":"referenced","topic":""}]},{"id":"object-detection/h-detr","category":"object-detection","legacyPath":"object-detection/2207-h-detr","legacySlug":"2207-h-detr","legacyPaths":[],"title":"H-DETR","subtitle":"静默查询的反叛","author":"Z. Yuan","paperDate":"2022-07-26","publishedOn":"2025-07-06","paperTitle":"DETRs with Hybrid Matching","paperUrl":"https://arxiv.org/abs/2207.13080","bibliography":{"title":"DETRs with Hybrid Matching","authors":["Ding Jia","Yuhui Yuan","Haodi He","Xiaopei Wu","Haojun Yu","Weihong Lin","Lei Sun","Chao Zhang","Han Hu"],"url":"https://arxiv.org/abs/2207.13080","pdfUrl":"https://openaccess.thecvf.com/content/CVPR2023/papers/Jia_DETRs_With_Hybrid_Matching_CVPR_2023_paper.pdf","codeUrl":"https://github.com/HDETR/H-Deformable-DETR","preprint":{"id":"2207.13080","submittedOn":"2022-07-26","url":"https://arxiv.org/abs/2207.13080"},"publication":{"venue":"CVPR","year":2023,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2023/html/Jia_DETRs_With_Hybrid_Matching_CVPR_2023_paper.html"},"citation":"@misc{objectdetectionhdetr2022,\n  title = {{DETRs with Hybrid Matching}},\n  author = {Ding Jia and Yuhui Yuan and Haodi He and Xiaopei Wu and Haojun Yu and Weihong Lin and Lei Sun and Chao Zhang and Han Hu},\n  year = {2022},\n  eprint = {2207.13080},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2207.13080}\n}\n","citationPath":"/content/papers/citations/object-detection/h-detr.822184101757.bib"},"thumbnail":{"src":"/content/papers/assets/63f1bc60b92f58d360457c0e3bbef0a3d4b3bd2a07377983b2dc5f5591ce28c2.jpg","width":1784,"height":350},"locale":"zh-hans","path":"/content/papers/zh-hans/object-detection/h-detr.a4dc10ce4de4.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":"coco-benchmark","text":"COCO Benchmark","depth":3},{"id":"lvis-benchmark","text":"LVIS Benchmark","depth":3},{"id":"sota-benchmark","text":"SOTA Benchmark","depth":3},{"id":"消融实验","text":"消融实验","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"object-detection/deformable-detr","relation":"background","topic":"集合预测与注意力检测器"}]},{"id":"object-detection/dino-detr","category":"object-detection","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"DINO","subtitle":"靠近，但不够近","author":"Z. Yuan","paperDate":"2022-03-07","publishedOn":"2024-12-19","world":"external/dino-detector","paperTitle":"DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection","paperUrl":"https://arxiv.org/abs/2203.03605","bibliography":{"title":"DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection","authors":["Hao Zhang","Feng Li","Shilong Liu","Lei Zhang","Hang Su","Jun Zhu","Lionel M. Ni","Heung-Yeung Shum"],"url":"https://arxiv.org/abs/2203.03605","pdfUrl":"https://arxiv.org/pdf/2203.03605v4","codeUrl":"https://github.com/IDEA-Research/DINO","preprint":{"id":"2203.03605","submittedOn":"2022-03-07","url":"https://arxiv.org/abs/2203.03605"},"publication":{"venue":"ICLR","year":2023,"kind":"conference","url":"https://iclr.cc/virtual/2023/poster/11884"},"citation":"@misc{objectdetectiondinodetr2022,\n  title = {{DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection}},\n  author = {Hao Zhang and Feng Li and Shilong Liu and Lei Zhang and Hang Su and Jun Zhu and Lionel M. Ni and Heung-Yeung Shum},\n  year = {2022},\n  eprint = {2203.03605},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2203.03605}\n}\n","citationPath":"/content/papers/citations/object-detection/dino-detr.d8c8af775089.bib"},"thumbnail":{"src":"/content/papers/assets/6c328e7125d4762c3a4346a1c537cb4e917d47a640869bbf212de53f74ba64fc.png","width":942,"height":319},"locale":"zh-hans","path":"/content/papers/zh-hans/object-detection/dino-detr.cceb2ba57eac.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"整体流程","text":"整体流程","depth":3},{"id":"对比式去噪","text":"对比式去噪","depth":3},{"id":"混合查询选择","text":"混合查询选择","depth":3},{"id":"look-forward-twice","text":"Look forward twice","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"12-个-epoch","text":"12 个 epoch","depth":3},{"id":"练久一点","text":"练久一点","depth":3},{"id":"排行榜上的那一格","text":"排行榜上的那一格","depth":3},{"id":"消融494-是怎么叠出来的","text":"消融：49.4 是怎么叠出来的","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"contrastive-learning/dino","relation":"referenced","topic":""},{"id":"object-detection/detr","relation":"referenced","topic":""},{"id":"object-detection/deformable-detr","relation":"referenced","topic":""}]},{"id":"object-detection/rt-detr","category":"object-detection","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"RT-DETR","subtitle":"把 NMS 算进秒表","author":"Z. Yuan","paperDate":"2023-04-17","publishedOn":"2025-01-29","world":"external/rt-detr","paperTitle":"DETRs Beat YOLOs on Real-time Object Detection","paperUrl":"https://arxiv.org/abs/2304.08069","bibliography":{"title":"DETRs Beat YOLOs on Real-time Object Detection","authors":["Yian Zhao","Wenyu Lv","Shangliang Xu","Jinman Wei","Guanzhong Wang","Qingqing Dang","Yi Liu","Jie Chen"],"url":"https://arxiv.org/abs/2304.08069","pdfUrl":"https://arxiv.org/pdf/2304.08069v3","codeUrl":"https://github.com/lyuwenyu/RT-DETR","preprint":{"id":"2304.08069","submittedOn":"2023-04-17","url":"https://arxiv.org/abs/2304.08069"},"publication":{"venue":"CVPR","year":2024,"kind":"conference","url":"https://openaccess.thecvf.com/content/CVPR2024/html/Zhao_DETRs_Beat_YOLOs_on_Real-time_Object_Detection_CVPR_2024_paper.html"},"citation":"@misc{objectdetectionrtdetr2023,\n  title = {{DETRs Beat YOLOs on Real-time Object Detection}},\n  author = {Yian Zhao and Wenyu Lv and Shangliang Xu and Jinman Wei and Guanzhong Wang and Qingqing Dang and Yi Liu and Jie Chen},\n  year = {2023},\n  eprint = {2304.08069},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2304.08069}\n}\n","citationPath":"/content/papers/citations/object-detection/rt-detr.cbe42f7a5b6c.bib"},"thumbnail":{"src":"/content/papers/assets/7e2de3c38daff439f51d86ec04a7bd391c3f708b817ae539f3c4df7c5546f4d6.png","width":1360,"height":332},"locale":"zh-hans","path":"/content/papers/zh-hans/object-detection/rt-detr.694145ddec22.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"nms-要花多少时间","text":"NMS 要花多少时间？","depth":3},{"id":"端到端的秒表","text":"端到端的秒表","depth":3},{"id":"detr-慢在哪里","text":"DETR 慢在哪里？","depth":3},{"id":"解决问题","text":"解决问题","depth":2},{"id":"先看全貌","text":"先看全貌","depth":3},{"id":"encoder-的账","text":"Encoder 的账","depth":3},{"id":"aifi只在-s5-做自注意力","text":"AIFI：只在 S5 做自注意力","depth":3},{"id":"ccff跨尺度的融合交给卷积","text":"CCFF：跨尺度的融合交给卷积","depth":3},{"id":"挑出-300-个查询","text":"挑出 300 个查询","depth":3},{"id":"decoder去掉后面几层","text":"Decoder：去掉后面几层","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"和-yolodino-比","text":"和 YOLO、DINO 比","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/detr","relation":"referenced","topic":""},{"id":"object-detection/deformable-detr","relation":"referenced","topic":""},{"id":"feature-fusion/panet","relation":"referenced","topic":""}]}],"text":"一张照片标了 3 个物体，RT-DETR 准备了 300 个 query。一对一匹配完，只有 3 个 query 学得到框该画在哪里，剩下 297 个的训练目标都是「没有物体」。\n\nYOLO 没有这个烦恼。它用一对多的标签分配，一个物体同时认领附近好几个预测，监督密得多；代价是推理时同一个物体会冒出好几个框，得靠 NMS 收拾。\n\nDETR 这边想把正样本补回来，这几年的做法多半是在模型旁边加东西。[H-DETR](/blog/papers/object-detection/h-detr) 另开一组一对多的 query，Group DETR 多开几组 query 各自匹配，[DINO](/blog/papers/object-detection/dino-detr) 加上一批去噪的练习题。这些额外的监督推理时都会拿掉，训练时却得多算一份。\n\n2024 年 12 月，Intellindust AI Lab 与香港城市大学等单位的作者提出 DEIM，改从数据下手。匹配规则不动，模型也不动，只让一张训练图里多几个物体，一对一匹配自然就多出几个正样本。它借用 YOLO 系列早就在用的 Mosaic 和 Mixup 两种数据增强。论文后来发表在 CVPR 2025。\n\n## 定义问题\n\n### 正样本只有物体那么多\n\n先把两种分配写成同一条式子。一张图有 $N$ 个标注物体，第 $i$ 个物体匹配到 $M_i$ 个预测，训练时把每一组匹配的损失 $f$ 加起来：\n\n$$\n\\text{loss} = \\sum_{i=1}^{N} \\sum_{j=1}^{M_i} f(\\hat{y}_{ij}, y_i)\n$$\n\n一对多的检测器让 $M_i > 1$。DETR 用匈牙利算法做一对一匹配，等于规定每个 $M_i = 1$，这时一张图的正样本数就是 $N$，照片里标了几个物体就有几个。query 开到 300 个也一样。\n\n作者训练 RT-DETRv2（ResNet-50）时，在一个 COCO epoch 里统计每张图匹配出几个正样本，一边用匈牙利算法，一边用 YOLOX 的 SimOTA（论文 Figure 3）。RT-DETRv2 是百度在 2024 年 7 月推出的 [RT-DETR](/blog/papers/object-detection/rt-detr) 改进版；SimOTA 是一种一对多分配，先按每个物体附近预测框的 IoU 估出要匹配几个，记为 $k$，再取匹配成本最低的 $k$ 个预测当正样本。\n\n一对一的分布在每张图不到 10 个正样本处挤成一个尖峰。SimOTA 的分布摊得很开，有些照片一张就超过 80 个正样本。把两边相除，比例最常落在 7 倍左右，极端情况约 10 倍。\n\nFigure 3 只数匹配本身产生的正样本。RT-DETRv2 训练时还带着一批 [DN-DETR](/blog/papers/object-detection/dn-detr) 式的去噪 query，DEIM 也保留了它们，那是另一份额外监督。\n\n### 配上了，却配歪了\n\n作者认为 DETR 收敛慢还有第二个原因，叫低质量匹配（low-quality match）。\n\nYOLO 这类检测器在特征图上密密排了上千个预测位置（论文说密集的 anchor 通常超过 8,000 个），每个物体附近总有几个位置靠得够近。DETR 只有 100 或 300 个 query，一开始和物体的位置没有对齐。DINO、RT-DETR 后来改从 encoder 的输出挑分数最高的位置来初始化 query，query 确实离物体近了，却容易挤在几个显眼的物体旁边。\n\n不起眼的物体附近没有 query，一对一匹配又规定每个物体都得匹配到一个。最后匹配给它的 query，框和物体的 IoU 可能很低，置信度却很高。\n\n### 前人的补法\n\nDEIM 之前，补正样本的方法都在增加每个物体的正样本数。Group DETR 训练时开 K 组 query，各组独立做一对一匹配，每个物体就有 K 个正样本；H-DETR 的混合匹配做法类似。Co-DETR 则在 encoder 后面接上 Faster R-CNN、FCOS 这类一对多的辅助头。\n\n作者对这些方法有两点意见。一是要多跑几组 decoder 或辅助头，训练成本变高；二是一对多的监督多了，模型可能又学会对同一个物体输出好几个高分的框，回到传统检测器的老问题。\n\n\n> [!TIP]\n> \n> H-DETR 的混合匹配，以及两组 query 怎么用掩码隔开，可以参考我们的笔记：\n> \n> - **[[22.07] H-DETR：静默查询的反叛](/blog/papers/object-detection/h-detr)**\n\n\n那么，能不能不加 query、不加辅助头，也不碰一对一匹配，就让正样本变多？正样本变多以后，那些配歪的匹配又该怎么处理？\n\n## 解决问题\n\nDEIM 的两个组件分别回答这两个问题。Dense O2O 负责把正样本变多，Matchability-Aware Loss（MAL）负责处理变多以后的低质量匹配。两者都只改训练，推理时的模型、query 数和输出流程都和原本一样。\n\n### Dense O2O：一张图多放几个物体\n\n回到前面那条式子。一对多增加 $M_i$；Dense O2O 让 $M_i$ 保持为 1，改成增加 $N$。\n\n论文 §3.2 用一个例子说明。把一张只有一只狗的照片缩小、复制成 2×2 的四格，拼回原本的尺寸，一只狗就变成四只，一对一匹配也就匹配出 4 个正样本，和一对多为原本那只狗匹配出的 4 个正样本一样多。\n\n实际训练没有把同一张照片复制四次。作者改用两个 YOLO 系列常见的数据增强，官方代码里的设置如下：\n\n- **Mosaic**：每张训练图以 0.5 的概率触发。拿当前这张，再从数据集随机抽 3 张，各自缩到短边 320 像素，贴进 2×2 的四格，整张做一次随机仿射（旋转 ±10°、平移 10%、缩放 0.5 到 1.5 倍），最后缩成 640×640。\n- **Mixup**：每个 batch 以 0.5 的概率触发。batch 里每张图和前一张图以 0.45 到 0.55 的比例叠在一起，两张图的标注框全部留下。\n\n这样下来，每张训练图平均的物体数从约 10 个变成约 25 个（附录 Table 12）。作者也试过把平均数推到约 50 个，训练 24 个 epoch 的 AP 反而从 52.5 掉到 52.2；他们归因于正负样本比例失衡，以及物体太多造成的数据分布偏移。\n\n有读者在 GitHub 上问过，论文图上的四倍关系是不是写在匹配的代码里。第一作者回复，那只是举例，实际比例不会固定是 4。负样本数则是 query 数减掉正样本数，例如 300 个 query、5 个物体时，负样本是 295 个；Dense O2O 把物体变成 20 个时，负样本是 280 个。[DEIM #126](https://github.com/Intellindust-AI-Lab/DEIM/issues/126)\n\n\n> [!TIP]\n> \n> 论文引用的 Mosaic 出自 YOLOv4，四张图拼成一张的样子，可以参考我们的笔记：\n> \n> - **[[20.04] YOLOv4：模型设计顾问](/blog/papers/object-detection/yolov4)**\n\n\n成本呢？匹配方式和模型都没变，GPU 上的计算量也就没变。在单张 RTX 4090 上，RT-DETRv2-R50 跑一个 epoch 要 1.181 GPU 小时，加上 DEIM 是 1.183（Table 7）。多出来的工作落在数据加载，拼图和叠图都在 CPU 上做；官方代码库后来为 Mosaic 加了缓存，README 说数据加载因此快了将近 30%。\n\n### MAL：正样本变多，配歪的也变多\n\n作者指出，物体一多，显眼和不显眼的物体差距更大，匹配总数虽然增加，低质量匹配也跟着增加。Mosaic 还把每张照片缩到大约一半的边长，小目标也多了。\n\n这些匹配要靠分类损失处理。RT-DETR 和 D-FINE 原本用 VariFocal Loss（VFL）。设 $p$ 是预测的置信度分数，$q$ 是预测框和所匹配物体的 IoU：\n\n$$\n\\text{VFL}(p, q) =\n\\begin{cases}\n-q\\,\\big(q \\log p + (1-q) \\log(1-p)\\big) & q > 0 \\\\\n-\\alpha\\, p^{\\gamma} \\log(1-p) & q = 0\n\\end{cases}\n$$\n\n上面一行是正样本。它把分类的目标分数设成 IoU，让置信度分数学着反映框画得准不准；整项再乘上 $q$，框越准的正样本分到越大的权重。下面一行是负样本，和 Focal Loss 一样用 $p^\\gamma$ 压低大量简单负样本的分量，$\\alpha$ 用来平衡正负样本。RT-DETRv2 的设置是 $\\gamma = 2$、$\\alpha = 0.75$。\n\n麻烦出在那个乘上去的 $q$。IoU 只有 0.05 的匹配，整项损失先被乘上 0.05，置信度分数再高，损失也很小。在 DETR 里，query 少、匹配又是硬性规定，作者认为这类匹配比传统检测器常见，VFL 却几乎不管它们。另外，VFL 用 IoU 是否大于 0 来分正负样本，匹配上了但框完全没碰到物体的 query，会被当成负样本处理。\n\nMAL 把式子改成这样：\n\n$$\n\\text{MAL}(p, q, y) =\n\\begin{cases}\n-q^{\\gamma} \\log p - (1-q^{\\gamma}) \\log(1-p) & y = 1 \\\\\n-p^{\\gamma} \\log(1-p) & y = 0\n\\end{cases}\n$$\n\n- 正负样本改用 $y$ 来分，也就是这个 query 有没有匹配到物体。\n- 正样本的目标分数从 $q$ 改成 $q^\\gamma$，前面不再乘 $q$。\n- 负样本拿掉 $\\alpha$。\n- 两行用同一个 $\\gamma$，论文取 1.5。\n\n我们拿两个匹配算算看。一个是 IoU 0.05 的低质量匹配，一个是 IoU 0.95 的好匹配，置信度分数从 0.1 扫到 0.9，只看正样本那一行：\n\n```python\nimport math\n\ndef vfl_pos(p, q):\n    # Eq. 3 的正样本：目标分数是 q，整项再乘上 q\n    return -q * (q * math.log(p) + (1 - q) * math.log(1 - p))\n\ndef mal_pos(p, q, gamma=1.5):\n    # Eq. 4 的正样本：目标分数改成 q^γ，权重固定为 1\n    t = q ** gamma\n    return -(t * math.log(p) + (1 - t) * math.log(1 - p))\n\nfor q in (0.05, 0.95):\n    print(f\"IoU = {q}，MAL 的目标分数 q^1.5 = {q ** 1.5:.3f}\")\n    for p in (0.1, 0.3, 0.5, 0.7, 0.9):\n        print(f\"  置信度 {p}：VFL {vfl_pos(p, q):.3f}　MAL {mal_pos(p, q):.3f}\")\n```\n\n```text\nIoU = 0.05，MAL 的目标分数 q^1.5 = 0.011\n  置信度 0.1：VFL 0.011　MAL 0.130\n  置信度 0.3：VFL 0.020　MAL 0.366\n  置信度 0.5：VFL 0.035　MAL 0.693\n  置信度 0.7：VFL 0.058　MAL 1.194\n  置信度 0.9：VFL 0.110　MAL 2.278\nIoU = 0.95，MAL 的目标分数 q^1.5 = 0.926\n  置信度 0.1：VFL 2.083　MAL 2.140\n  置信度 0.3：VFL 1.104　MAL 1.141\n  置信度 0.5：VFL 0.658　MAL 0.693\n  置信度 0.7：VFL 0.379　MAL 0.419\n  置信度 0.9：VFL 0.204　MAL 0.268\n```\n\n先看 IoU 0.05 那一组。MAL 的目标分数是 0.011，意思是模型应该对这个框几乎没有把握。置信度从 0.1 升到 0.9，MAL 从 0.130 涨到 2.278；VFL 只从 0.011 涨到 0.110。IoU 0.95 那一组，两者差不多。\n\n把置信度分数从 0.01 扫到 0.99，同样两个 IoU 画成曲线，看上半张的蓝线，和下半张两条线之间的距离：\n\n![折线图，分上下两张，横轴是置信度分数 p，从 0 到 1，纵轴是正样本损失，从 0 到 5。上半张是 IoU 0.05 的低质量匹配，蓝色的 VFL 几乎贴着 0，到 p 接近 1 才略升到 0.2 左右；橙色的 MAL 随置信度一路上升，到右端超过 4.5，p = 0.8 处标出 MAL 1.59、VFL 0.08。下半张是 IoU 0.95 的好匹配，两条线几乎重叠，从左端约 4.2 一路降到右端约 0.3。](/content/papers/assets/519db308052ba8cc49129730fcdcd66447bb9b0f0a45a3a2bce0453cfe82bb27.png)\n\n*图：本文整理。按论文 Eq. 3、Eq. 4 的正样本项计算，γ = 1.5；原论文采用 CC BY-NC-SA 4.0 许可，这里不转载原图。*\n\n上半张的 VFL 几乎贴在 0 上，置信度再高也一样；MAL 跟着置信度一路往上，在 p = 0.8 时是 1.59，VFL 只有 0.08。下半张两条线几乎重叠，置信度越低损失越大，两种损失对好匹配的要求差不多。\n\n再看梯度。两种损失对 logit 求导，形式都是「权重 ×（置信度 − 目标分数）」，我们把刚才的两个情况各挑一点：\n\n```python\n# 接着上一段。对 logit 求导，两种损失都是「权重 ×（置信度 − 目标分数）」\ndef grad_vfl(p, q):\n    return q * (p - q)\n\ndef grad_mal(p, q, gamma=1.5):\n    return p - q ** gamma\n\nfor q, p in ((0.05, 0.8), (0.95, 0.5)):\n    print(f\"IoU {q}、置信度 {p}：VFL {grad_vfl(p, q):+.3f}，MAL {grad_mal(p, q):+.3f}\")\n```\n\n```text\nIoU 0.05、置信度 0.8：VFL +0.038，MAL +0.789\nIoU 0.95、置信度 0.5：VFL -0.427，MAL -0.426\n```\n\nIoU 0.05、置信度 0.8 的框，MAL 给的梯度约是 VFL 的 21 倍，方向是把置信度往下压。IoU 0.95、置信度 0.5 的框，两者都约 −0.43，同样把置信度往上推。MAL 只在低质量匹配上加重力度，好匹配的待遇照旧。\n\n框画歪的 query 被教成没什么把握，框画准的 query 置信度照样拉高。评测时 AP 按置信度分数排序，准的框排到前面，高 IoU 阈值下的成绩会比较好看。这是本文的解读；作者把加上 MAL 之后的增益归功于框的质量变好。后面 Table 6 的数字也是这个方向，加上 MAL 之后 AP75 进步了，AP50 几乎没动。\n\n至于 $\\gamma$，作者在 RT-DETRv2-R50 上训练 24 个 epoch 扫过四个值（Table 5），1.3、1.5、1.8、2.0 分别是 52.2、52.4、52.1、51.9 AP，最后取 1.5。\n\n### 训练调度：先预热，再拼贴，最后收手\n\nDense O2O 没有从头开到尾。作者另外设计了一套数据增强的调度，搭配 RTMDet 用过的 FlatCosine 学习率，先持平，再用 cosine 降到一半。以 RT-DETRv2-R50 训练 60 个 epoch 的官方设置为例（论文附录 Figure 5、Table 10）：\n\n| Epoch | 数据增强 | 学习率 |\n| --- | --- | --- |\n| 0–4 | 只有翻转和缩放（DataAug Warmup） | 前 2,000 个 iteration 预热，之后持平在 2e-4 |\n| 4–34 | Dense O2O：Mosaic、Mixup，加上 RT-DETR 原本的增强 | 持平 2e-4 |\n| 34–58 | 回到 RT-DETR 原本的增强（色彩扰动、zoom out、IoU 裁剪、翻转） | cosine 从 2e-4 降到 1e-4 |\n| 58–60 | 又只剩翻转和缩放 | 1e-4 |\n\n*表：本文整理自官方配置文件 `deim_r50vd_60e_coco.yml` 与附录 Figure 5。*\n\n前 4 个 epoch 刻意不开进阶的数据增强。按附录的说明，DETR 的注意力没有卷积那种归纳偏置，得从零学起，先给它简单的图比较好学。接着 Dense O2O 开 30 个 epoch，刚好是总长的一半。按作者在 GitHub 上的说明，总长 $E$ 个 epoch 时，前 4 个预热，接下来 $E/2$ 个开 Dense O2O，学习率也持平到第 $4 + E/2$ 个 epoch 才开始下降。[DEIM #9](https://github.com/Intellindust-AI-Lab/DEIM/issues/9)\n\n为什么开到一半就关？论文只说在一半的 epoch 后停掉 Dense O2O 结果比较好，没有附上对照表。拼过的图物体又多又小，和验证时看到的照片不一样；后半段回到正常照片，或许是让模型重新适应真实的分布。Table 12 里物体塞太多反而退步，作者也归因于分布偏移。这段是本文的推测。\n\n以 D-FINE 为基础的设置还多一段。D-FINE 本身在训练最后多跑 8 个关掉进阶增强的 epoch，用来搜索 EMA 的衰减值，DEIM 沿用了这个做法。所以论文 Table 1 写的 50 个 epoch，官方设置实际跑 58 个；同一张表里 D-FINE 写的 72 个 epoch，它自己的设置也是跑 80 个。[DEIM #56](https://github.com/Intellindust-AI-Lab/DEIM/issues/56)\n\n这套调度也让验证曲线看起来有点怪。有用户在自己的单类别数据集上比较 D-FINE 和 DEIM-D-FINE，发现 DEIM 的验证 AP 前期一直落后。第一作者回了两点。Dense O2O 是更强的数据增强，开着的时候验证成绩本来就会比较低，论文说的收敛快，是指用更少的 epoch 达到相同或更好的成绩。另外，学习率预热的 2,000 个 iteration 是按 COCO 设的，那份数据集小，预热拖到第 100 个 epoch 左右才结束。用户把预热改成 500 个 iteration 之后，DEIM 的最佳 AP 是 0.773，D-FINE 是 0.768。[DEIM #5](https://github.com/Intellindust-AI-Lab/DEIM/issues/5)\n\n## 讨论\n\n### 实验设置\n\n主要实验都在 COCO 上，train2017 训练、val2017 评测，输入 640×640。backbone 先在 ImageNet-1k 上预训练，除了 Table 8 的 Objects365 微调，没有用额外数据。延迟沿用 D-FINE 在 T4 GPU、TensorRT FP16 下测的端到端数字；DEIM 不改架构，同一个模型加不加 DEIM，延迟相同。\n\nDEIM 套在两个基础模型上。一个是前面提过的 RT-DETRv2，另一个是 [D-FINE](https://arxiv.org/abs/2410.13842v1)。D-FINE 是中国科学技术大学在 2024 年 10 月提出的实时 DETR，以 RT-DETR 的架构为基础，把框的回归从直接预测四个坐标，改成逐层修正每条边位置的概率分布。\n\n### 和 D-FINE、YOLO 比\n\n| 模型 | Epoch | AP | AP<sub>S</sub> | 延迟（T4） |\n| --- | ---: | ---: | ---: | ---: |\n| D-FINE-L | 72 | 54.0 | 36.5 | 8.07 ms |\n| DEIM-D-FINE-L | 50 | 54.7 | 36.9 | 8.07 ms |\n| D-FINE-X | 72 | 55.8 | 37.3 | 12.89 ms |\n| DEIM-D-FINE-X | 50 | 56.5 | 38.8 | 12.89 ms |\n| YOLO11-X | 500 | 54.1 | 37.0 | 10.52 ms |\n| YOLOv9-E | 500 | 55.6 | 40.2 | 20.53 ms |\n\n*表：原论文 Table 1 节选，COCO val2017。按表注，YOLO11-X 的 NMS 以 0.01 的置信度阈值调过。*\n\n同样的延迟，DEIM 让 D-FINE-L 和 D-FINE-X 各多了 0.7 AP，表上的 epoch 数从 72 降到 50，少了约 30%，论文正文也是这么写的。算上两边各自的 8 个 EMA epoch（58 对 80），约少 28%。摘要里「训练时间减半」的说法，对应后面 RT-DETRv2 那组 36 对 72 个 epoch 的比较。\n\n和 YOLO 比，DEIM-D-FINE-L 以 54.7 AP、8.07 ms，胜过 YOLO11-X 的 54.1 AP、10.52 ms。小目标仍是 DETR 这边的弱项，DEIM-D-FINE-X 的 AP<sub>S</sub> 是 38.8，YOLOv9-E 是 40.2，作者在正文也承认这个差距。epoch 数则只适合在同一个家族里比，DEIM 的 backbone 已经在 ImageNet 上预训练过。\n\n作者还写到，YOLOv10 用了一对多加一对一的混合分配，DEIM 的模型仍然全面胜过它，这证明 Dense O2O 有效。这个推论跳得有点远。两边的架构、预训练和训练长度都不同，表上的差距没办法单独归功于 Dense O2O，也没办法拿来评价 YOLOv10 的双头设计。要看 Dense O2O 本身的作用，得看下面的消融。\n\n\n> [!TIP]\n> \n> YOLOv10 让一对多的头陪练、推理只用一对一的头，可以参考我们的笔记：\n> \n> - **[[24.05] YOLOv10：NMS，再见](/blog/papers/object-detection/yolov10)**\n\n\n### 消融：Dense O2O 和 MAL 各占多少\n\n| 基础模型 | Epoch | Dense O2O | MAL | AP | AP<sub>50</sub> | AP<sub>75</sub> |\n| --- | ---: | :---: | :---: | ---: | ---: | ---: |\n| RT-DETRv2-R50 | 72 | | | 53.4 | 71.6 | 57.4 |\n| RT-DETRv2-R50 | 36 | ✓ | | 53.6 | 71.9 | 58.2 |\n| RT-DETRv2-R50 | 36 | ✓ | ✓ | 53.9 | 71.7 | 58.6 |\n| D-FINE-L | 72 | | | 54.0 | 71.6 | 58.4 |\n| D-FINE-L | 36 | ✓ | | 54.2 | 72.1 | 58.9 |\n| D-FINE-L | 36 | ✓ | ✓ | 54.6 | 72.2 | 59.5 |\n\n*表：原论文 Table 6。*\n\n只开 Dense O2O，36 个 epoch 就追上、略微超过基准模型 72 个 epoch 的成绩；再加上 MAL，两个基础模型又各多 0.3 和 0.4 AP。换成 GPU 小时（Table 7），RT-DETRv2-R50 原版 72 个 epoch 约 85 小时拿到 53.4，DEIM 跑 60 个 epoch 约 71 小时拿到 54.3。\n\n这张表拿 36 个 epoch 的 DEIM 比 72 个 epoch 的原版，没有同样 36 个 epoch、不开 Dense O2O 的对照。按附录与官方配置文件，DEIM 的实验也都换上了作者整套训练配方，包括新的学习率与数据增强调度、解冻 backbone 的 BN、decoder 改用 SiLU；按官方配置文件，RT-DETRv2 的基础学习率也从 1e-4 提高到 2e-4。\n\n附录里，作者在 D-FINE 上单独测过那些小改动，训练 36 个 epoch 时，D-FINE-L 没有变化，D-FINE-X 从 55.4 到 55.5。顺带一提，D-FINE-X 只训练 36 个 epoch 就有 55.4，离 72 个 epoch 的 55.8 不远。\n\n同样 epoch 数的对照在 Table 4。RT-DETRv2-R50 分别训练 12 和 24 个 epoch，只改 Mosaic 和 Mixup 的概率：\n\n| Mosaic | Mixup | AP（12 ep） | AP（24 ep） | AP<sub>S</sub>（24 ep） |\n| ---: | ---: | ---: | ---: | ---: |\n| 0 | 0 | 49.6 | 51.7 | 32.8 |\n| 0.5 | 0 | 50.4 | 51.9 | 34.9 |\n| 0 | 0.5 | 50.1 | 51.5 | 33.2 |\n| 0.5 | 0.5 | 50.4 | 52.5 | 34.9 |\n\n*表：原论文 Table 4 节选。*\n\n两个都开，12 和 24 个 epoch 各多 0.8 AP，24 个 epoch 时小目标的 AP 多了 2.1。只开 Mixup 在 24 个 epoch 时反而略低。这是同条件下 Dense O2O 本身的增益，比 Table 6 的跨 epoch 比较干净。\n\n附录 Table 13 还比了训练集上的 AP。DEIM 在训练集略低（64.8 对 65.1），验证集较高（54.3 对 53.4），作者解读为比较不容易过拟合训练数据。\n\n### 物体很挤的时候\n\nCrowdHuman 是拥挤人群的数据集。作者按 D-FINE 的设置，两边都训练 120 个 epoch（Table 3），这次 DEIM 没有省 epoch：\n\n| 方法 | AP | AP<sub>75</sub> | AP<sub>S</sub> |\n| --- | ---: | ---: | ---: |\n| D-FINE-L | 56.0 | 59.4 | 29.0 |\n| DEIM-D-FINE-L | 57.5 | 62.9 | 33.2 |\n\n*表：原论文 Table 3 节选。*\n\nAP 多 1.5，其中 AP<sub>75</sub> 多 3.5、AP<sub>S</sub> 多 4.2，进步集中在框要画得准、物体又小的情况。\n\n附录的定性例子也和重复框有关。D-FINE-L 对同一个风筝输出四个高度重叠、置信度都很高的框，DEIM 训练的版本只留一个。这只是一张图的例子，没有统计数字。\n\n另外，从 D-FINE 在 Objects365 上预训练的权重出发再微调 COCO，D-FINE-X 微调 32 个 epoch 是 59.3 AP，加上 DEIM 微调 24 个 epoch 是 59.5（Table 8）。\n\n### 复现反馈\n\nGitHub 上有用户按官方设置，在 8 张 A100 上训练 DEIM-D-FINE-X。第 50 个 epoch 是 55.8 AP，跑完 58 个 epoch 是 56.16，比论文的 56.5 低 0.3；用户自己也怀疑批大小和学习率没有对齐。第一作者回复，要严格按官方设置的 50 加 8 个 epoch，同设置下的波动约 ±0.1 AP。2026 年 3 月，同一个讨论帖里另一位用户说 DEIM-D-FINE-L 他多半只到 54.4，没有附上记录。[DEIM #112](https://github.com/Intellindust-AI-Lab/DEIM/issues/112)\n\n## 结论\n\nDEIM 把 DETR 收敛慢的两个原因拆开处理。正样本太少，就让一张训练图多几个物体，一对一匹配自然多出正样本，GPU 的计算量不变。多出来的低质量匹配，就用 MAL 把它们的置信度压下去，好匹配维持原样。训练调度把 Dense O2O 夹在中间，前面先预热，后半段回到正常照片。\n\n在 COCO 上，RT-DETRv2-R50 用 36 个 epoch 拿到 53.9 AP，原版 72 个 epoch 是 53.4；D-FINE-L 和 D-FINE-X 在相同延迟下各多 0.7 AP。这些比较同时换了整套训练配方，同样 epoch 数下 Dense O2O 本身的增益，要看 Table 4 的 0.8 AP。\n\n如果你要拿 RT-DETR 或 D-FINE 训练自己的数据，DEIM 的改动都在训练端，模型和推理流程不用动。调度的参数则是按 COCO 的长度设的，预热的 2,000 个 iteration、Dense O2O 的区间，都得按自己的数据量重算。GitHub 上也有用户反馈，在几千到一万张图的自有数据上，DEIM 的成绩不如 YOLO（[#61](https://github.com/Intellindust-AI-Lab/DEIM/issues/61)、[#106](https://github.com/Intellindust-AI-Lab/DEIM/issues/106)），这些讨论还没有结论。\n\n后来 DEIM 的作者在 2025 年 9 月推出 DEIMv2，S 以上的版本改用 DINOv3 的特征。YOLO 那边也在做类似的事，[YOLO26](/blog/papers/object-detection/yolo26) 训练时把一对多的损失权重逐步让给一对一的头，额外的监督同样集中在训练的前段。\n","imageSizes":{"/content/papers/assets/519db308052ba8cc49129730fcdcd66447bb9b0f0a45a3a2bce0453cfe82bb27.png":{"width":1280,"height":1720}}}
