ステータス:ドラフト(2026-10-13)、一部実測。 ハンガリアン・GIoUの例はノートPCのCPU上で直接実行した値です(
code/08_hungarian.py、1秒以内)。論文の数値は原文を開いて条件とともに転記し、ハードウェアは等級で記載しました。 作成ルール:実測データが基本であり、測定できなかったものは「未実測」と表記します。
目次
- 1. 手作業で作られた部品たち
- 2. 構造:N個のクエリ用スロット
- 3. 学習:1:1のペアリング
- 4. 実際に動かしてみる:ハンガリアンアルゴリズム
- 5. 論文の数値
- 6. 後続研究:弱点を減らす
- 7. 限界と私たちのプロジェクト
- 参考文献
1. 手作業で作られた部品たち
第5・6回の検出器には、人間が定めた部品が多くありました。アンカーのサイズや比率、アンカーにポジティブ・ネガティブのラベルを付与するIoUの閾値、重複を削除するNMSとその閾値です。これらの部品は適切に設定すれば動作しますが、データが変われば再設定が必要になり、間違えると静かに穴が生じます(第5回の「ポジティブ0個」、「選手Bを削除したNMS」)。
CarionらのDETR(DEtection TRansformer)は問いを変更します。検出の正解は ボックスの集合です。順序がなく、重複がありません。それならばモデルも最初から 集合を出力するように 学習すれば、アンカーもNMSも必要ないのではないでしょうか。
2. 構造:N個のクエリ用スロット
- CNNバックボーン(ResNet-50など)が特徴マップを生成します。
- Transformerエンコーダーが特徴マップの位置関係を自己注意(セルフアテンション)で混合します(第7回)。
- Transformerデコーダーに学習する N=100個のクエリ用スロットを入力します。各スロットはエンコーダーの出力をクロスアテンションで観測し、互いをセルフアテンションで観測します。
- スロットごとに小さなMLPが クラス(「物体なし」を含む)と1つのボックスを出力します。
スロット同士が互いを観測する点が重要です。「あの物体は隣のスロットが担当したから私は別のを担当しよう」をネットワーク内部で学習できるため、重複を削除するNMSが不要になります。実際に論文では、最後の層の出力にNMSを適用するとAPがかえって少し低下すると報告しています。
3. 学習:1:1のペアリング
出力は100個、正解は通常数個です。どの出力をどの正解と比較して損失を計算すればよいでしょうか。DETRは コストが最も小さい1:1のペアを探します。
짝 비용(정답 i, 슬롯 j) = −p_j(정답 i 의 클래스) + 5 · L1(상자) + 2 · (1 − GIoU(상자))
(重み λ_L1 = 5、λ_iou = 2 は論文の値。)ペアが決定すると、ペアリングされたスロットは正解のクラスとボックスを学び、ペアのないスロットは「物体なし」を学びます。「物体なし」は大部分のスロットに該当するため、その損失を10分の1に削減します(第4回のfocal lossのような不均衡問題)。デコーダーのすべての層の出力に同じペアリング損失を適用する補助損失も配置します。
このペアリングは古典的な問題である 割り当て問題であり、1955年のKuhnによる ハンガリアンアルゴリズムで解きます。
GIoU:重なっていなくても距離を教えてくれる
IoUは2つのボックスが重なっていない場合、どれほど離れていても0になります。損失として使用すると勾配がありません。 GIoU(Generalized IoU)は2つのボックスを囲む最小のボックスCを使用し、「C内の空き空間」の分だけ差し引きます。
GIoU = IoU − |C 에서 두 상자의 합집합을 뺀 넓이| / |C| (−1 ~ 1)
手動で計算すると次のようになります(実測)。
| 正解 (0,0,10,10) 対 | IoU | GIoU |
|---|---|---|
| (0,0,10,10) 一致 | 1.000 | +1.000 |
| (5,0,15,10) 半分重なり | 0.333 | +0.333 |
| (12,0,22,10) 2マス離れ | 0.000 | −0.091 |
| (30,0,40,10) 20マス離れ | 0.000 | −0.500 |
IoUはどちらも0ですが、GIoUは離れているほど小さくなります。ボックスを正解の方向に引き寄せる勾配が発生します。
4. 実際に動かしてみる:ハンガリアンアルゴリズム
貪欲法ではダメな理由
2人の選手が重なり合って立っているシーンにおける3つのスロットのコストです。スロット0は2人の選手にまたがっており、両者にそこそこ適合し、スロット1は選手Aにのみ、スロット2は選手Bによく適合しています。
슬롯 0 슬롯 1 슬롯 2
선수 A 0.9 1.0 6.0
선수 B 0.8 6.0 3.0
「正解ごとに残りのスロットから最もコストの低いものを順に」選ぶと、Aがスロット0(0.9)を先に取得し、Bがスロット2(3.0)を受け取って総コストは 3.9 になります。ハンガリアンはA–スロット1、B–スロット0という総コスト 1.8 を見つけます(実測)。先に選んだ側が得をする方式は、全体としては損になる可能性があります。貪欲なペアを学習に使用すると、スロット2が誤って選手Bを学習し、スロット1は「物体なし」を学習することになります。
実装と検証
ポテンシャル(双対変数)を用いるO(n²m)版をnumpyで直接コーディングしました(正解数 n ≤ スロット数 m)。核心は「行ごとに1つずつペアを増やしていき、これまでのペアを変更するより安価な経路(増加道)が存在する場合、その経路に沿ってペアを反転させる」ことです。
| 確認 | 結果(実測) |
|---|---|
| ランダムな4×7問題200個において順列の全探索と総コストが一致 | 200/200 |
| 正解 10 × スロット 100 | 0.2ms |
| 正解 50 × スロット 100 | 1.4ms |
| 正解 100 × スロット 100 | 8.1ms |
| 正解 300 × スロット 300 | 67.6ms |
順列で全てを確認する場合、正解10×スロット100だけでも組み合わせの数は6.3×10¹⁹になります。ハンガリアン系のアルゴリズムは多項式時間(n³の形)で解きます。DETRの画像1枚(正解数十個×スロット100)はミリ秒単位であるため、学習のボトルネックにはなりません。実務ではSciPyの linear_sum_assignment(改良されたJonker–Volgenantアルゴリズム)がよく使われます。
DETR式のコスト(クラス確率 + 5·L1 + 2·(1−GIoU))を用いて3つの正解(選手2人、ボール)と6つのスロットをペアリングしてみると、各正解が最ももっともらしいスロットに結びつき、残りの3つのスロットは「物体なし」に割り当てられます(code/08_hungarian.out.txt).
5. 論文の数値
| モデル(COCO検証) | AP | 小さな物体 AP_S | 大きな物体 AP_L | パラメータ | GFLOPs | FPS |
|---|---|---|---|---|---|---|
| Faster R-CNN-FPN+(R50) | 42.0 | 26.6 | 53.4 | 4,200万 | 180 | 26 |
| DETR(R50) | 42.0 | 20.5 | 61.1 | 4,100万 | 86 | 28 |
(論文の表1。Faster R-CNN側はGIoU損失・ランダムクロップ拡張・約109エポックの強化版。速度はTorchScriptモデルで測定され、GPUは明記されていない。)
- 大きな物体は+7.8、小さな物体は−5.5。 エンコーダーのグローバルアテンションが画像全体を見るため大きな物体に強く、特徴マップが単一の解像度(1/32)のみであるため小さな物体に弱いです。第5回のFPNのような多重解像度がありません。
- 学習が長い。 比較モデルは500エポック、アブレーション実験用は300エポックであり、300エポックにデータセンター用GPU16枚で3日がかかりました。学習の序盤にはスロットと正解のペアがステップごとに変わり、各スロットが何を担当するかが定まらないため、収束が遅くなります。
6. 後続研究:弱点を減らす
| モデル | 変更点 | 数値(論文、COCO) |
|---|---|---|
| Deformable DETR(2021) | 全体を見るアテンションの代わりに、基準点周辺の 少数のサンプリング点(K=4) のみを見るアテンション。複数の解像度を使用 | 50エポック 43.8 AP、AP_S 26.4(DETR 500エポック 20.5)。学習GPU時間 325 対 2,000 |
| DN-DETR(2022) | 正解ボックスにノイズを混ぜてデコーダーに入力し、元のボックスを復元させる ノイズ除去学習 — 不安定なペアリングを迂回 | 同等の設定で +1.9 AP、半分のエポックで同等の精度 |
| DINO(2023) | ノイズ除去学習の強化 + クエリ初期化の改善 | ResNet-50 12エポック 49.4 AP、24エポック 51.3 AP。Swin-L + Objects365事前学習で test-dev 63.3 AP |
| RT-DETR(2024) | リアルタイム用ハイブリッドエンコーダー | R50 53.1 AP、108fps(推論用データセンターGPU、TensorRT FP16、640×640)。Apache-2.0 |
DETRの「集合予測 + 1:1ペアリング」は、以降の検出の標準ツールとなりました。第6回のYolov10がNMSをなくした方法(one-to-one head)も、第11回のSAM 3の検出器(DETR系)もこの考え方に基づいています。
7. 限界と私たちのプロジェクト
- 小さな物体は依然として困難です。後続モデルが大幅に軽減したものの、直径数ピクセルの卓球ボールをボックスの集合として探すのは、ヒートマップ方式(第3回)よりも不利です。
- ペアリングが学習を決定する。 コストの重み(クラス 1、L1 5、GIoU 2)が「何を同じ物体とみなすか」を決定します。この値を変更すると、モデルが学習する内容が変わります。
- 私たちのプロジェクトでは、 まだDETR系を直接使用していません。ただし、卓球台を文字として探す候補だったSAM 3の検出器がDETR系であり(第11回)、今後人やラケットのボックスが必要になったときにNMSなしでデプロイできるRT-DETR(Apache-2.0)は、第6回のAGPL問題を回避する候補です(未実測)。
次の記事からはセグメンテーションです。ワンクリックで何でも塗りつぶすSegment Anything(SAM)です。
ティティの一言。 順に一番安いものを選ぶと3.9、ハンガリアンは1.8。先を選んだ人がすべてを奪っていく方式は、団体戦では損になります。
参考文献
- Carion, N., Massa, F., Synnaeve, G., Usunier, N., Kirillov, A., Zagoruyko, S. (2020). End-to-End Object Detection with Transformers. ECCV 2020. https://arxiv.org/abs/2005.12872
- Kuhn, H. W. (1955). The Hungarian method for the assignment problem. Naval Research Logistics Quarterly, 2(1–2), 83–97. https://doi.org/10.1002/nav.3800020109
- Rezatofighi, H. et al. (2019). Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression. CVPR 2019. https://arxiv.org/abs/1902.09630
- Zhu, X. et al. (2021). Deformable DETR: Deformable Transformers for End-to-End Object Detection. ICLR 2021. https://arxiv.org/abs/2010.04159
- Li, F. et al. (2022). DN-DETR: Accelerate DETR Training by Introducing Query DeNoising. CVPR 2022. https://arxiv.org/abs/2203.01305
- Zhang, H. et al. (2023). DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection. ICLR 2023. https://arxiv.org/abs/2203.03605
- Zhao, Y. et al. (2024). DETRs Beat YOLOs on Real-time Object Detection. CVPR 2024. https://arxiv.org/abs/2304.08069
- SciPy
linear_sum_assignment: https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linear_sum_assignment.html - ハンガリー王国のアルゴリズムの時間計算量のまとめ: https://en.wikipedia.org/wiki/Hungarian_algorithm
- サンプルコードと出力: このフォルダの
code/08_hungarian.py,code/08_hungarian.out.txt