TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

DETR: 検出を集合予測へ、ハンガリアンマッチングとアンカーフリー検出

ステータス:ドラフト(2026-10-13)、一部実測。 ハンガリアン・GIoUの例はノートPCのCPU上で直接実行した値です(code/08_hungarian.py、1秒以内)。論文の数値は原文を開いて条件とともに転記し、ハードウェアは等級で記載しました。 作成ルール:実測データが基本であり、測定できなかったものは「未実測」と表記します。

目次

1. 手作業で作られた部品たち

第5・6回の検出器には、人間が定めた部品が多くありました。アンカーのサイズや比率、アンカーにポジティブ・ネガティブのラベルを付与するIoUの閾値、重複を削除するNMSとその閾値です。これらの部品は適切に設定すれば動作しますが、データが変われば再設定が必要になり、間違えると静かに穴が生じます(第5回の「ポジティブ0個」、「選手Bを削除したNMS」)。

CarionらのDETR(DEtection TRansformer)は問いを変更します。検出の正解は ボックスの集合です。順序がなく、重複がありません。それならばモデルも最初から 集合を出力するように 学習すれば、アンカーもNMSも必要ないのではないでしょうか。

2. 構造:N個のクエリ用スロット

DETR: 질의 N개가 상자를 내고, 정답과 1:1 로 짝짓는다 CNN 몸통 특징 지도 트랜스포머 인코더 · 디코더 질의 슬롯 N=100개 슬롯 0: 선수 슬롯 1: 없음 슬롯 2: 공 슬롯 3: 없음 슬롯 4: 선수 슬롯 5: 없음 선수 A 선수 B 공 짝이 없는 슬롯(1·3·5)은 「물체 없음」을 배운다. 짝짓기: 비용(클래스 확률 + L1 + GIoU)의 합이 가장 작게(헝가리안). 짝이 하나뿐이라 NMS 가 필요 없다. → 학습 때만 정답과 짝짓기, 추론 때는 「없음」이 아닌 슬롯을 그대로 출력
図:CNNバックボーンとTransformerを通過したクエリ用スロットがそれぞれボックスを出力し、学習時に正解と1:1でペアリングされるDETR
  1. CNNバックボーン(ResNet-50など)が特徴マップを生成します。
  2. Transformerエンコーダーが特徴マップの位置関係を自己注意(セルフアテンション)で混合します(第7回)。
  3. Transformerデコーダーに学習する N=100個のクエリ用スロットを入力します。各スロットはエンコーダーの出力をクロスアテンションで観測し、互いをセルフアテンションで観測します。
  4. スロットごとに小さな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は明記されていない。)

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. 限界と私たちのプロジェクト

次の記事からはセグメンテーションです。ワンクリックで何でも塗りつぶすSegment Anything(SAM)です。

ティティの一言。 順に一番安いものを選ぶと3.9、ハンガリアンは1.8。先を選んだ人がすべてを奪っていく方式は、団体戦では損になります。

参考文献

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます