{"notes":[{"id":"object-detection/dn-detr","category":"object-detection","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"DN-DETR","subtitle":"今日は犬、明日は猫","author":"Z. Yuan","paperDate":"2022-03-02","publishedOn":"2024-11-27","world":"external/dn-detr","paperTitle":"DN-DETR: Accelerate DETR Training by Introducing Query DeNoising","paperUrl":"https://arxiv.org/abs/2203.01305","bibliography":{"title":"DN-DETR: Accelerate DETR Training by Introducing Query DeNoising","authors":["Feng Li","Hao Zhang","Shilong Liu","Jian Guo","Lionel M. Ni","Lei Zhang"],"url":"https://arxiv.org/abs/2203.01305","pdfUrl":"https://arxiv.org/pdf/2203.01305v3","codeUrl":"https://github.com/IDEA-Research/DN-DETR","preprint":{"id":"2203.01305","submittedOn":"2022-03-02","url":"https://arxiv.org/abs/2203.01305"},"publication":{"venue":"CVPR","year":2022,"kind":"conference","url":"https://doi.org/10.1109/CVPR52688.2022.01325"},"citation":"@misc{objectdetectiondndetr2022,\n  title = {{DN-DETR: Accelerate DETR Training by Introducing Query DeNoising}},\n  author = {Feng Li and Hao Zhang and Shilong Liu and Jian Guo and Lionel M. Ni and Lei Zhang},\n  year = {2022},\n  eprint = {2203.01305},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2203.01305}\n}\n","citationPath":"/content/papers/citations/object-detection/dn-detr.a68d09a3ed54.bib"},"thumbnail":{"src":"/content/papers/assets/9bc1349cc89c66b31d56322bf37750edc42acb78407ab06b9f72c8261252ea27.png","width":1095,"height":443},"locale":"ja","path":"/content/papers/ja/object-detection/dn-detr.5780e037fb0a.md","headings":[{"id":"問題の定義","text":"問題の定義","depth":2},{"id":"毎回マッチングし直す","text":"毎回マッチングし直す","depth":3},{"id":"担当の交代を数える","text":"担当の交代を数える","depth":3},{"id":"問題の解決","text":"問題の解決","depth":2},{"id":"2組の-query-が一緒にデコーダーへ","text":"2組の query が一緒にデコーダーへ","depth":3},{"id":"1つの正解ボックスを練習問題にする","text":"1つの正解ボックスを練習問題にする","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":"dab-detr-だけではない","text":"DAB-DETR だけではない","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":"object-detection/h-detr","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":"ja","path":"/content/papers/ja/object-detection/detr.5e84d1db3678.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":{"問題の解決":"解決策","画像から物体の集合へ":"モデル構造","まず対応付け次に損失を計算":"損失設計","実験結果の検討":"討論","これでいけるまず条件を確認":"これでいいのか","どの部品が効いている":"モデル構成要素の解析","query-は何を学んだ":"モデル挙動分析"},"guide":null,"relatedReading":[{"id":"object-detection/deformable-detr","relation":"next","topic":"集合予測と Attention による検出"},{"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":"ja","path":"/content/papers/ja/object-detection/deformable-detr.357715629c52.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":"集合予測と Attention による検出"},{"id":"object-detection/h-detr","relation":"next","topic":"集合予測と Attention による検出"},{"id":"object-detection/smca-detr","relation":"comparison","topic":"Transformer 検出器の収束を速める"}]},{"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":"ja","path":"/content/papers/ja/object-detection/h-detr.10f9c0ed3f06.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-ベンチマーク","text":"COCO ベンチマーク","depth":3},{"id":"lvis-ベンチマーク","text":"LVIS ベンチマーク","depth":3},{"id":"sota-ベンチマーク","text":"SOTA ベンチマーク","depth":3},{"id":"消融実験","text":"消融実験","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{"解決方法":"解決法","メインブランチ一対一の監督":"メインブランチ一対一監督","補助ブランチ正例の枠を増やす":"補助ブランチ一対多監督","一組のクエリでも監督する時期を変えられる":"他の混合監督形式","実験結果と考察":"議論","coco正例の機会を増やすと":"coco-ベンチマーク","lvis長尾データについて言える範囲":"lvis-ベンチマーク","システム比較594-ap-の条件":"sota-ベンチマーク","三方式の-ap訓練時間推論コスト":"消融実験"},"guide":null,"relatedReading":[{"id":"object-detection/deformable-detr","relation":"background","topic":"集合予測と Attention による検出"}]}],"text":"DETR は物体検出をマッチング問題として書き直し、anchor と NMS を取り除きましたが、学習は驚くほど遅いものでした。良い成績を出すには、COCO でたいてい500 epoch の学習が必要です。オリジナルの Faster R-CNN は12 epoch しか学習しません。\n\n2022年初めには、DETR の学習を速めようとする論文がすでに数多く出ていて、その多くはアーキテクチャに手を入れるものでした。Deformable DETR は注意を参照点の周りのいくつかのサンプリング点だけに向けさせ、Conditional DETR は query を内容と位置の2つに分け、DAB-DETR は各 query をそのまま1つのボックスとして書き、デコーダーに1層ずつ修正させます。\n\nこの論文は、深圳の IDEA 研究院、香港科技大学、清華大学のチームによるものです。彼らは矛先を、DETR が答えを割り当てるのに使うハンガリアンマッチングへ向けました。学習の初期には、同じ画像の同じ query が、ある epoch では犬にマッチし、次の epoch では猫に替わるかもしれず、モデルが学ぶべき目標もそれにつれて飛び回ります。\n\n彼らは、もとの query とは別に、ノイズを加えた正解ボックスをひとまとまりデコーダーに入力し、もとのボックスとクラスに復元させました。これらの問題の答えは最初からわかっているので、マッチングは要りません。推論時には、これらの query を丸ごと取り除きます。\n\n会議版は CVPR 2022 の口頭発表です。拡張版では deformable attention をデコーダーに加え、同じ手法をオリジナルの DETR、Anchor DETR、Faster R-CNN、セグメンテーションモデルにも適用し、2024年の IEEE TPAMI に掲載されました。\n\n## 問題の定義\n\n### 毎回マッチングし直す\n\nまず、DETR がどう学習するかを思い出しておきましょう。モデルは固定数の query を持ち、各 query はクラスとボックスを1つずつ出力します。損失を計算するたびに、ハンガリアン法で予測とアノテーションを一対一にマッチングし、総コストが最も低い組み合わせを選びます。物体にマッチした query はその物体のボックスとクラスを学び、マッチしなかった query は「物体なし」を学びます。\n\n\n> [!TIP]\n> \n> DETR の全体構造、ハンガリアンマッチング、そして注意をサンプリング点だけに向ける Deformable DETR については、私たちのノートを参照してください：\n> \n> - **[[20.05] DETR：跨分野の基盤を築く者](/blog/papers/object-detection/detr)**\n> - **[[20.10] Deformable DETR：可変形な注意力メカニズム](/blog/papers/object-detection/deformable-detr)**\n\n\nこのマッチングは、iteration ごとにその時点の予測に基づいて計算し直されます。学習の初めは予測ボックスがまだばらばらで、いくつもの query が同じ物体に対してほぼ同じコストを持つため、コスト行列が少し動くだけで、マッチングの結果ががらりと入れ替わることがあります。著者らは安定結婚問題の研究を引いて、ハンガリアン法は総コストの最小化だけを目指すので、得られるマッチングは安定していないと指摘しています。\n\nそのため、個々の query から見ると、学習目標がずっと変わり続けます。ある回では犬に向けてボックスを修正するよう求められ、次の回では猫に向けて修正するよう求められます。\n\nDN-DETR は DAB-DETR の上に作られています。DAB-DETR は各 query を4D の anchor ボックス $(x, y, w, h)$ として表し、デコーダーの各層が修正量 $(\\Delta x, \\Delta y, \\Delta w, \\Delta h)$ を1組出力して、ボックスを物体へ近づけます。そこで著者らは、学習を「良い anchor を学ぶこと」と「anchor から物体までの相対的なずれを学ぶこと」の2つに分けて考えました。anchor が対応する物体がずっと入れ替わると、ずれの学習は安定しません。\n\n当時、マッチングを疑う研究はほとんどありませんでした。Sun らは TSP を提案した論文で、学習済みの DETR を教師にして生徒モデルに固定のラベル割り当てを直接与えましたが、収束が速くなったのは学習の初期だけで、最終的な成績はほぼ同じでした。そこから彼らは、ハンガリアン loss は収束の遅さの主因ではないと考えました。DN-DETR が注目したのは、まさにその学習初期です。\n\n### 担当の交代を数える\n\n著者らはこれを測るために、IS（instability）という指標を設計しました。1枚の画像について、まず第 $i$ epoch のマッチング結果を記録します：\n\n$$\nV^i_n=\\begin{cases} m, & n \\text{ 番目の予測が } m \\text{ 番目の正解物体にマッチ} \\\\ -1, & \\text{どの物体にもマッチしない} \\end{cases}\n$$\n\n隣り合う2つの epoch の間で、このベクトルのうち何個の要素が異なるかが、この画像の第 $i$ epoch における IS です：\n\n$$\nIS^i=\\sum_{n=0}^{N-1}\\mathbf{1}\\left(V^i_n\\neq V^{i-1}_n\\right)\n$$\n\nここで $N$ は予測の数で、$\\mathbf{1}(\\cdot)$ は条件が成り立つとき1になります。データセット全体では、すべての画像で平均を取ります。\n\nquery 5個、物体2個で一度試してみます：\n\n```python\nimport numpy as np\n\ndef match_vector(pairs, num_queries):\n    # n 番目の要素に、n 番目の query がマッチした物体を記録し、マッチしなければ -1\n    v = np.full(num_queries, -1)\n    for q, obj in pairs.items():\n        v[q] = obj\n    return v\n\nDOG, CAT = 0, 1\nprev = match_vector({0: DOG, 3: CAT}, 5)    # 前の epoch\nmoved = match_vector({1: DOG, 3: CAT}, 5)   # 犬の担当が query 1 に交代\nswap = match_vector({0: CAT, 3: DOG}, 5)    # 犬と猫が入れ替わる\nworst = match_vector({1: DOG, 4: CAT}, 5)   # 両方の物体が新しい query に交代\n\nprint(\"前の回:\", prev)\nfor name, cur in [(\"犬の担当交代\", moved), (\"犬猫入れ替え\", swap), (\"全員交代\", worst)]:\n    print(f\"{name}: {cur}  IS = {(cur != prev).sum()}\")\n```\n\n```text\n前の回: [ 0 -1 -1  1 -1]\n犬の担当交代: [-1  0 -1  1 -1]  IS = 2\n犬猫入れ替え: [ 1 -1 -1  0 -1]  IS = 2\n全員交代: [-1  0 -1 -1  1]  IS = 4\n```\n\n犬の担当が別の query に替わると、古い query は0から-1に、新しい query は-1から0に変わり、IS は2増えます。犬と猫が入れ替わる場合も変わるのは2要素で、物体ごとに1ずつです。つまり、担当が替わった物体1つにつき IS は最大で2増え、全員が交代すれば IS は物体数の2倍になります。\n\n著者らが測った COCO val2017 では1枚あたり平均7.36個の物体があるので、IS の最大値は 7.36 × 2 = 14.72 です。\n\n論文の Figure 2 では、DETR、DAB-DETR、DN-DETR を同じ設定で12 epoch 学習させ、epoch ごとに IS を測っています。横軸は epoch、縦軸は IS で、赤い実線が DN-DETR です：\n\n[![原論文 Figure 2：横軸は epoch 0〜11、縦軸は IS。赤い実線の DN-DETR、青い破線の DAB-DETR、緑の破線の DETR はいずれも13前後から下がっていき、赤い線は多くの epoch で最も低く、最後は約5.7。](/content/papers/assets/545670c262e59825de2002719a679b732b310a49a0ecc9d8cdfbba0304278793.png)](/content/papers/assets/545670c262e59825de2002719a679b732b310a49a0ecc9d8cdfbba0304278793.png)\n\n*原論文 Figure 2（Li ら）。[**PDF の3ページ**](https://arxiv.org/pdf/2203.01305v3#page=3)から抜粋。COCO val2017 で、隣り合う2つの epoch の間のマッチングの変化を測ったものです。図のキャプションは収録していません。*\n\n一番左の点では、3本の線はどれも13前後で、最大値からそう遠くありません。逆算すると、IS が約13ということは、1枚あたり平均で少なくとも6個あまりの物体が担当の query を替えたことになり、ほぼ全部です。\n\nDN-DETR が最も速く下がり、第2 epoch で9前後に達しますが、DAB-DETR はまだ11前後です。最後の epoch では、DN-DETR が約5.7、DAB-DETR が約6.9、オリジナルの DETR が約7.8です。途中には例外もあり、第7 epoch では DAB-DETR が一時的に DN-DETR を下回り、続く2つの epoch でまた10以上に跳ね上がります。\n\nマッチングが不安定なせいで、学習初期の目標は変わり続けます。それでも一対一マッチングは外せません。DETR が推論時に NMS をつながずに済むのは、これのおかげだからです。では、マッチングは残したまま、目標が飛び回らない宿題を別にデコーダーへ与えることはできないでしょうか？\n\n## 問題の解決\n\n### 2組の query が一緒にデコーダーへ\n\nDN-DETR のデコーダーは、2組の query を一度に受け取ります：\n\n- **マッチング部分**：DAB-DETR と同じく学習可能な anchor の集まりで、出力はハンガリアンマッチングで loss を計算します。\n- **デノイジング部分**：正解物体のボックスとクラスにノイズを加えたものを query とし、各 query は自分の出どころである物体に復元しなければなりません。マッチングは経由しません。\n\n論文の Figure 6 は、学習の流れ全体を1枚にまとめています。左の黄色と茶色は2つのデノイジンググループで、それぞれ再構成 loss を計算します。右の緑はマッチング部分で、ハンガリアン loss を計算します。一番右の正方行列は注意マスクで、後でまた戻って見ます：\n\n[![原論文 Figure 6 の一部：デコーダーの左側は2つのデノイジンググループで、入力はノイズを加えたボックスとラベル、出力は再構成 loss につながる。右側はマッチング部分で、入力は学習された anchor と unknown ラベル、出力はハンガリアン loss につながる。3本の色付きの経路はいずれも赤い×で遮られている。一番右は注意マスクの正方行列で、灰色のマスは遮断を表す。](/content/papers/assets/9bc1349cc89c66b31d56322bf37750edc42acb78407ab06b9f72c8261252ea27.png)](/content/papers/assets/9bc1349cc89c66b31d56322bf37750edc42acb78407ab06b9f72c8261252ea27.png)\n\n*原論文 Figure 6 の一部（Li ら）。[**PDF の5ページ**](https://arxiv.org/pdf/2203.01305v3#page=5)から抜粋。左側のエンコーダーと図のキャプションは収録していません。*\n\n図中の3本の色付きの経路は起こりうる情報の漏れで、赤い×はマスクで遮られていることを表します。黄色とオレンジの2本は2つのデノイジンググループをつなぎ、緑の1本はデノイジング部分からマッチング部分へ通じています。\n\n論文はこれを $\\mathbf{o}=D(\\mathbf{q},\\mathbf{Q},F\\mid A)$ と書いています。$\\mathbf{q}$ はデノイジング部分、$\\mathbf{Q}$ はマッチング部分、$F$ はエンコーダーが出力する画像特徴、$A$ は注意マスクです。全体の loss は、マッチング部分のハンガリアン loss にデノイジング部分の再構成 loss を足したものです。推論時にはデノイジング部分を丸ごと取り除き、残るモデルは DAB-DETR と同じです。\n\nデノイジングの query はボックスとクラスを同時に持たなければならないので、著者らは DAB-DETR を1か所だけ変更しました。DAB-DETR の query には、anchor ボックスのほかに内容ベクトル（decoder embedding）があります。DN-DETR はこれをクラス埋め込みに替え、その後ろに指示ビットを1つ付けます。1はデノイジング、0はマッチングを表します。マッチング部分には与えるクラスがないので、一律に「unknown」クラスの埋め込みを使います。\n\n\n> [!NOTE]\n> \n> 公式コードでは、クラス埋め込みは COCO のクラス番号に合わせて91個分あり、そこに unknown の1個を加え、それぞれ255次元です。指示ビットをつなげると、ちょうどデコーダーの256次元になります。\n\n\n### 1つの正解ボックスを練習問題にする\n\n犬1匹で一度たどってみます。その正解ボックスは、正規化座標で $(c_x, c_y, w, h) = (0.40, 0.50, 0.30, 0.40)$ と書けます。\n\nボックスのノイズには2種類あります：\n\n1. **中心のシフト**：中心に $(\\Delta x, \\Delta y)$ を加え、$|\\Delta x| < \\lambda_1 w/2$、$|\\Delta y| < \\lambda_1 h/2$ に制限します。$\\lambda_1$ は1より小さいので、新しい中心は必ずもとのボックスの中に収まります。\n2. **スケーリング**：幅を $[(1-\\lambda_2)w, (1+\\lambda_2)w]$ の範囲でランダムに取り、高さも同様にします。\n\nクラスのノイズはラベルをランダムに入れ替えるもので、その割合は $\\gamma$ で制御します。論文のデフォルトは $\\lambda_1=\\lambda_2=0.4$、$\\gamma=0.2$ です。この犬に当てはめると、中心は左右に最大0.06、上下に最大0.08動き、幅は0.18〜0.42、高さは0.24〜0.56の範囲に収まります。\n\n公式コードのやり方に従って、この犬について5組作ります：\n\n```python\nimport numpy as np\n\nCLASSES = [\"人\", \"犬\", \"猫\", \"車\", \"鳥\", \"椅子\", \"ボトル\", \"ソファ\"]\ngt_box = np.array([0.40, 0.50, 0.30, 0.40])  # (cx, cy, w, h)、画像の幅と高さで正規化\ngt_label = CLASSES.index(\"犬\")\nlam, gamma, groups = 0.4, 0.2, 5             # 論文のデフォルト λ1 = λ2 = 0.4、γ = 0.2、5組\n\nrng = np.random.default_rng(2)\nw, h = gt_box[2:]\nfor g in range(groups):\n    # 中心は最大 λ·w/2、λ·h/2 動き、幅と高さは最大 ±λ 倍スケーリングされる\n    u = rng.uniform(-1, 1, size=4)\n    box = (gt_box + u * np.array([w / 2, h / 2, w, h]) * lam).clip(0, 1)\n    # 各ラベルは確率 γ でランダムなクラスに替わる\n    label = gt_label\n    if rng.random() < gamma:\n        label = int(rng.integers(len(CLASSES)))\n    print(f\"第{g}組：ボックス {box.round(3)}、ラベル「{CLASSES[label]}」\")\n```\n\n```text\n第0組：ボックス [0.371 0.468 0.375 0.269]、ラベル「犬」\n第1組：ボックス [0.427 0.45  0.193 0.328]、ラベル「犬」\n第2組：ボックス [0.407 0.444 0.284 0.454]、ラベル「犬」\n第3組：ボックス [0.416 0.575 0.344 0.365]、ラベル「猫」\n第4組：ボックス [0.401 0.563 0.366 0.342]、ラベル「犬」\n```\n\nこの例ではクラスを8個しか入れていません。公式コードはラベルを入れ替えるとき全クラスから一様に1つ引くので、ときどきもとのクラスを引き当てます。\n\n5つのボックスを描いてみます：\n\n![犬の正解ボックスの図。中心は (0.40, 0.50) で、周りに5つの破線のノイズボックスが重なっている。5つのボックスの中心はどれも正解ボックス中央の灰色の領域に収まり、大きさはそれぞれ伸び縮みしている。第3組のラベルは猫に替わっている。](/content/papers/assets/2c5efeb85bc0301c1a5e59c516c613f75331a1f39ad94ebedcf369bae20c5dfe.png)\n\n*図：本稿で整理。黒い枠が犬の正解ボックス、破線が上のコードで生成した5つのノイズボックス、丸い点が各ボックスの中心です。*\n\n5つのボックスの中心はどれも灰色の領域に収まり、幅と高さはそれぞれ伸び縮みしていますが、どれもまだこの犬を囲んでいます。これら5つのボックスは、そのまま5つの query の anchor になり、ラベルはテーブルを引いて内容ベクトルになります。デコーダーから見れば、どれも近くに物体が確かにある良い anchor で、課題はそこから黒い枠へ修正し、「犬」と答えることです。\n\n第3組のラベルは「猫」に替わっているので、モデルはボックスの位置と画像の内容から、ここが実は犬だと判断しなければなりません。著者らによると、ラベルを入れ替えるのは、ボックスとクラスの関係をモデルに学ばせるためです。\n\n再構成 loss は DAB-DETR の組み合わせを踏襲し、ボックスには L1 と GIoU、クラスには focal loss を使います。公式コードはこの loss をデコーダーの全層で計算し、重みはマッチング部分と同じです。\n\n### 物体ごとに何組も作る\n\n1回のノイズで得られるのは1つのバージョンだけなので、著者らは物体ごとに何組も同時に作ります。1組にはこの画像のすべての正解物体が含まれ、これをデノイジンググループ（denoising group）と呼びます。$P$ 組、各組 $M$ 個の物体なら、デノイジング部分には $P \\times M$ 個の query があります。\n\nデフォルトは5組です。COCO val2017 の1枚あたり平均7.36個の物体で計算すると、デノイジング部分は平均約37個の query、マッチング部分は300個です。同じ batch の中でも画像ごとに物体数が異なるため、公式実装は各組を batch 内で物体が最も多い画像に合わせて埋めます。著者らは GitHub でこの質問に答えたときにもそう説明し、後の DINO では組数を動的に決めるよう変えたと述べています。[DN-DETR #8、2022-04-19](https://github.com/IDEA-Research/DN-DETR/issues/8)\n\n増える計算量はごくわずかです。ResNet-50 の DAB-DETR を例にとると、5組で学習時の GFLOPs は94.4から94.6に増えるだけです。推論時には余分な計算は一切ありません。\n\n### 答えの盗み見は禁止\n\n正解ボックスをそのままデコーダーに入れると、self-attention によってすべての query が互いを見られるので、マッチング部分の query は隣のデノイジング query をひと目見るだけで、物体がだいたいどこにあるかわかってしまいます。\n\n著者らは2種類の漏れを挙げています：\n\n1. マッチング部分がデノイジング部分を見ると、正解ボックスを直接手に入れたことになります。\n2. 同じ物体の異なるノイズ版が互いを見ると、同じ問題の別バージョンを盗み見たことになります。\n\n注意マスク $A=[a_{ij}]_{W\\times W}$ が、この2つの経路を塞ぎます。$W=P\\times M+N$ で、最初の $P \\times M$ 個の位置がデノイジング部分、後ろの $N$ 個がマッチング部分です。$a_{ij}=1$ は、$i$ 番目の query が $j$ 番目を見られないことを表します：\n\n$$\na_{ij}= \\begin{cases} 1, & j<P\\times M \\text{ かつ } \\lfloor i/M\\rfloor \\neq \\lfloor j/M\\rfloor \\\\ 1, & j<P\\times M \\text{ かつ } i\\geq P\\times M \\\\ 0, & \\text{その他} \\end{cases}\n$$\n\nデノイジング2組、各組2個の物体、マッチング query 3個で計算してみます：\n\n```python\nimport numpy as np\n\nP, M, N = 2, 2, 3          # デノイジング2組、各組2物体（A 犬、B 猫）、マッチング query 3個\nW = P * M + N\nnames = [\"g0A\", \"g0B\", \"g1A\", \"g1B\", \"m0\", \"m1\", \"m2\"]\n\nA = np.zeros((W, W), dtype=int)   # A[i, j] = 1：i 番目の query は j 番目を見られない\nfor i in range(W):\n    for j in range(W):\n        if j < P * M and i // M != j // M:\n            A[i, j] = 1   # 異なる組のデノイジング query は互いを見られない\n        if j < P * M and i >= P * M:\n            A[i, j] = 1   # マッチング query はどのデノイジング query も見られない\n\nprint(\"     \" + \" \".join(f\"{n:>3}\" for n in names))\nfor n, row in zip(names, A):\n    print(f\"{n:>4} \" + \" \".join(f\"{v:>3}\" for v in row))\n```\n\n```text\n     g0A g0B g1A g1B  m0  m1  m2\n g0A   0   0   1   1   0   0   0\n g0B   0   0   1   1   0   0   0\n g1A   1   1   0   0   0   0   0\n g1B   1   1   0   0   0   0   0\n  m0   1   1   1   1   0   0   0\n  m1   1   1   1   1   0   0   0\n  m2   1   1   1   1   0   0   0\n```\n\n1行ずつ読んでいきます。g0A、g0B は第0組の犬と猫で、互いは見えますが、第1組の2つのバージョンは見えません。m0〜m2 の3行は最初の4マスがすべて1で、マッチング query はどのデノイジング query も見られません。これは Figure 6 の一番右の正方行列と同じ形で、図の灰色のマスがここでの1、色付きのマスが0です。\n\n一番右の3列はすべて0なので、デノイジング query はマッチング query を見ることができます。著者らによると、これは結果に影響しません。マッチング query は学習で得られるベクトルで、もともとアノテーションの情報を何も含んでいないからです。\n\nこのマスクはデコーダーの self-attention にだけ使われます。cross-attention もマスクすべきかと GitHub で尋ねた人がいて、著者らは経験上 cross-attention は漏れの原因にならないと答えています。[DN-DETR #35、2022-07-26](https://github.com/IDEA-Research/DN-DETR/issues/35) cross-attention では、各 query は画像特徴に対してだけ注意を向けるので、query 同士の通り道はありません。\n\n論文の Table 5 のアブレーションは、ResNet-50、デノイジング1組、50 epoch の学習です。ボックスとラベルの両方にノイズを加え、マスクもあるときは43.4 AP です。同じノイズのままマスクを外すと24.0まで落ち、デノイジングをまったく行わない42.2より18.2も低くなります。\n\n論文の説明では、マスクがないとマッチング部分からノイズ入りのアノテーションが見え、正解物体を簡単に予測できてしまいます。そこから考えると、推論時にはデノイジング query がすでに取り除かれているので、マッチング query が学習時に頼っていた手がかりも一緒に消えてしまうのでしょう。\n\n## 考察\n\n### 実験設定\n\n実験はすべて COCO 2017 で、train2017 で学習し、val2017 で評価しています。主モデルの DN-DETR は DAB-DETR にデノイジング学習を加えたもので、エンコーダー6層、デコーダー6層、隠れ次元256、マッチング query 300個です。ノイズは $\\lambda_1=\\lambda_2=0.4$、$\\gamma=0.2$ で、デフォルトは5組です。オプティマイザは AdamW、学習率 $10^{-4}$、A100 8枚、batch size 16 です。50 epoch のスケジュールでは第40 epoch で、12 epoch のスケジュールでは第11 epoch で学習率を下げます。\n\n著者らは同じ学習方法を Deformable DETR にも適用しています。DN-Deformable-DETR はエンコーダーだけで deformable attention を使い、DN-Deformable-DETR++ はエンコーダーとデコーダーの両方で使います。どちらにも、対応する DAB-Deformable-DETR をベースラインとして用意しています。query を4D ボックスとして書く点は同じで、デノイジングだけを行いません。4D query の利点をデノイジングの手柄に数えないためです。\n\n### 同じ設定での向上幅\n\n最もきれいな対照は Table 1 にあります。単一スケールの特徴を使い、50 epoch 学習したもので、DAB-DETR と DN-DETR の違いはデノイジング学習の有無だけです：\n\n| Backbone | DAB-DETR | DN-DETR |\n| --- | ---: | ---: |\n| ResNet-50 | 42.2 | 44.1（+1.9） |\n| ResNet-101 | 43.5 | 45.2（+1.7） |\n| ResNet-50-DC5 | 44.5 | 46.3（+1.8） |\n| ResNet-101-DC5 | 45.8 | 47.3（+1.5） |\n\n*表：原論文 Table 1 をもとに整理、COCO val2017 の AP。両者の GFLOPs とパラメータ数は同じで、たとえば ResNet-50 ではどちらも94 GFLOPs、44M パラメータです。*\n\n4種類の backbone すべてで1.5〜1.9 AP 向上しています。学習を12 epoch に短くすると、差はさらに広がります。Table 2 では、DC5-R50 が38.0から41.7（+3.7）、DC5-R101 が40.3から42.8（+2.5）です。短いスケジュールほど向上幅が大きいことは、「問題は学習初期に集中している」という著者らの主張と一致します。\n\n### 高速化をどう数えるか\n\nタイトルは高速化をうたっていて、著者らは2種類の証拠を示しています。\n\n1つ目は収束曲線です。論文の Figure 7(a) のキャプションによると、DC5-R50 で学習率を下げる前の時点では、DN-DETR は20 epoch で40 AP に達し、DAB-DETR は40 epoch かかります。\n\n2つ目は、スケジュールを半分にして直接比べることです：\n\n| モデル | ベースライン | デノイジングを加え、epoch を半分に |\n| --- | ---: | ---: |\n| DAB-DETR-DC5-R50（50 対 25 epoch） | 44.5 | 44.4 |\n| DAB-Deformable-DETR-R50（50 対 25 epoch） | 46.9 | 46.8 |\n| DAB-Deformable-DETR-R50++（50 対 25 epoch） | 48.7 | 48.4 |\n| DETR-R50（500 対 250 epoch） | 42.0 | 42.2 |\n\n*表：原論文11ページの Table 1 をもとに整理、COCO val2017 の AP。*\n\nepoch が半分でも AP の差は0.1〜0.3だけで、オリジナルの DETR の組はむしろ0.2高くなっています。要旨にある「50% の epoch で同等の性能に達する」とは、この表のことです。\n\nepoch は半分になっても、時間はちょうど半分にはなりません。著者らは A100 8枚で ResNet-50 の実際の学習時間を測っていて、DAB-DETR は1 epoch あたり51.1分、デノイジングを加えると57.7分で、約13% 増えています。GFLOPs はほとんど変わらないのに、実際の所要時間は1割あまり増えるのです。学習コストを見積もるときは、やはり実測の時間を見る必要があります。\n\n総時間で計算すると、DAB-DETR の50 epoch の学習は2,555分、デノイジングを加えた版の25 epoch の学習は1,443分で、約44% の節約になります。この時間の表で測っているのは ResNet-50 ですが、上の25 epoch の AP の対照に使われているのは DC5-R50 で、両者は別のモデルです。\n\n要旨にある12 epoch で46.0 AP、50 epoch で49.5 AP という2つの数字は DN-Deformable-DETR++ のもので、マルチスケールの特徴を使い、エンコーダーとデコーダーの両方が deformable attention です。「+1.9 AP」のほうが、DAB-DETR での単一スケールの対照です。同じ ++ アーキテクチャのベースラインと比べると、50 epoch での差は49.5対48.7、つまり0.8 AP です。\n\n### マスク、ラベル、組数\n\nTable 5 の残りの2行は、ボックスとラベルの寄与を切り分けています。ボックスのノイズだけを加えると43.0で、デノイジングなしの42.2より0.8高く、さらにラベルの入れ替えを加えると43.4になります。\n\n組数は Table 6 で見ます：\n\n| Backbone | デノイジングなし | 1組 | 5組 |\n| --- | ---: | ---: | ---: |\n| ResNet-50 | 42.2 | 43.4 | 44.1 |\n| ResNet-50-DC5 | 44.5 | 45.6 | 46.3 |\n| ResNet-101 | 43.5 | 45.0 | 45.2 |\n| ResNet-101-DC5 | 45.8 | 46.5 | 47.3 |\n\n*表：原論文 Table 6 をもとに整理、ResNet 系列、50 epoch。*\n\nなしから1組への向上幅は、たいてい1組から5組への向上幅より大きく、逆になっているのは ResNet-101-DC5 だけです。著者らはこれをもとに、組数は多いほど良いが限界効用は逓減するとして、デフォルトを5組にしています。\n\nノイズの大きさは Figure 8 で見ます。この実験は ResNet-50、batch size 64、20 epoch の学習で学習率は下げず、一方のノイズを0.4に固定してもう一方を変えています。2本の曲線はどちらも中央が高く両端が低い形です。片方のノイズを0にすると AP は33.5〜34で、0.2〜0.4で最も高くなり、図に示されたピークは35.5と35.7です。0.8まで上げると、また34前後に戻ります。論文は、どちらのノイズも役に立つが、ノイズが大きすぎると性能を損なうと結論づけています。\n\n### DAB-DETR だけではない\n\n拡張版では、デノイジング学習をほかのモデルにも適用しています（Table 3、以下はすべて ResNet-50）：\n\n- **Anchor DETR**：query は2D の anchor 点しか持たないので、中心のシフトだけを行います。DC5、12 epoch で38.2から39.4（+1.2）。\n- **オリジナルの DETR**：query に明示的なボックスがないので、線形層1つでノイズボックスを query に埋め込みます。300 epoch で40.6から42.6（+2.0）。\n- **Faster R-CNN**：内容ベクトルがないので、ボックスのノイズだけを加え、RPN の提案ボックスと一緒に検出ヘッドへ送ります。FPN、12 epoch で37.9から38.4（+0.5）。\n\n表にはアスタリスクの付いた行もいくつかあり、その数字は DINO や Group DETR など、デノイジング学習を採用した後続論文が自分で行ったアブレーションから取られています。たとえば DINO はデノイジングを外すと46.0、戻すと47.4です。\n\n向上幅が最も小さいのは Faster R-CNN です。IoU しきい値でラベルを割り当てていて、ハンガリアンマッチングを経由しません。これは著者らの診断の方向と一致しますが、2種類の検出器の違いは多すぎて、この1行だけでは原因を切り分けられません。\n\n### 練習問題は結局、誰を助けたのか？\n\nマッチング query はデノイジング query を見られず、双方の loss も別々に計算されます。では、デノイジングはいったいどの段階でマッチングを助けたのでしょうか？ 2024年10月に GitHub でこう尋ねた人がいますが、この質問には repo 上で返答がありません。[DN-DETR #72、2024-10-14](https://github.com/IDEA-Research/DN-DETR/issues/72)\n\n2組の query は、同じ backbone、同じエンコーダー、同じデコーダー層と予測ヘッドを共有しているので、デノイジングの勾配はこれらのパラメータまで戻っていきます。論文は2つの観察で自分たちの解釈を支えています。1つは前述の IS 曲線です。もう1つは Figure 3 で、マッチング query の初期 anchor と、最終層のデコーダーでマッチした正解ボックスとの平均 L1 距離を測っています。12 epoch の間に、DAB-DETR は約0.146から約0.096に、DN-DETR は約0.110から約0.082に下がり、DN-DETR のほうが一貫して近くなっています。著者らは、デノイジングによって query が近くの物体を探すことを覚え、マッチングも飛び回りにくくなったと考えています。\n\n後の研究には、「どこで助けたのか」について異なる読み方があります：\n\n- **Group DETR**（ICCV 2023）は、デノイジンググループでは各物体に query が1つしかなく、「物体なし」に対応する query もないと指摘しています。グループ内の self-attention から見えるのはほかの物体ばかりで、重複ボックスは見えません。そのため、デノイジングは主に正例の教師信号を増やしたもので、重複予測を抑えることには直接役立っていないと考えています。DAB-DETR、12 epoch の設定では、Group DETR にデノイジングを加えるとさらに1.5 AP 伸びるので、著者らは両者が補い合うと見ています。\n- **[H-DETR](/blog/papers/object-detection/h-detr)** の補足実験は、パラメータを直接切り離しています。対比的デノイジングを使う DINO で、デノイジングのブランチに専用のデコーダーと予測ヘッドを持たせると、AP は49.1から49.0になり、エンコーダーまで切り離すと48.5に落ちます。この数字によれば、デノイジングの恩恵の大半は、エンコーダーの学習を通じてマッチング部分に伝わっています。\n- **DINO** は同じチームが5日後に arXiv に投稿した論文で、DN-DETR の穴をはっきり指摘しています。モデルは、近くに正解ボックスがある anchor から予測することは覚えたものの、近くに物体がない anchor に「物体なし」と答えることは学んでいないというのです。そこで DINO は練習問題に負サンプルを加えました。\n\nこれらの説は同時に成り立ちえます。論文の証拠では、IS の低下と収束の加速が同時に起きています。デノイジングがまずデコーダーの目標を安定させたのか、それともエンコーダーに正例の勾配を多く与えたのか、論文自体はこの2つの経路を切り分けていません。\n\n## 結論\n\nDN-DETR は、DETR の学習が遅い原因の一部を毎回計算し直されるハンガリアンマッチングに求め、IS を使って「今日は犬、明日は猫」を1本の曲線に描きました。学習時には模範解答付きの練習問題を追加し、正解のボックスとクラスにノイズを加えてデコーダーに復元させ、注意マスクでマッチング query の盗み見を防ぎます。\n\n著者らの設定では、単一スケール・50 epoch で1.5〜1.9 AP、12 epoch で2.5〜3.7 AP 向上します。半分の epoch でベースラインに追いつき、代わりに1 epoch あたりの時間が約13% 増えます。\n\n自分の DETR 系モデルにデノイジング学習を加えるなら、まずマスクを正しく書くことです。論文のアブレーションでは、マスクがないと AP が43.4から24.0に落ちています。batch 内の画像ごとに物体数が異なるので、組は埋めてそろえる必要があります。query は DAB-DETR のように明示的なボックスを持っているのが望ましく、持っていなければ、オリジナルの DETR のように別途ボックスを埋め込む必要があります。推論の部分はまったく手を入れなくて構いません。\n\nこの練習問題は、後に多くの DETR 系モデルに受け継がれました。[DINO](/blog/papers/object-detection/dino-detr) はそこに負サンプルを加え、[RT-DETR](/blog/papers/object-detection/rt-detr) も学習時に200個のデノイジング query を抱えています。\n","imageSizes":{"/content/papers/assets/545670c262e59825de2002719a679b732b310a49a0ecc9d8cdfbba0304278793.png":{"width":646,"height":344},"/content/papers/assets/9bc1349cc89c66b31d56322bf37750edc42acb78407ab06b9f72c8261252ea27.png":{"width":1095,"height":443},"/content/papers/assets/2c5efeb85bc0301c1a5e59c516c613f75331a1f39ad94ebedcf369bae20c5dfe.png":{"width":960,"height":1212}}}
