MLエンジニアへの道 #51 - DETR

Last Edited: 4/7/2025

このブログ記事では、コンピュータビジョンにおける検出トランスフォーマー(DETR)について紹介します。

ML

前回の記事では、バックボーンによって生成された高レベルの特徴マップを処理するためにアテンションモジュールを導入し、 性能を向上させたYOLOv11について説明しました。しかし、YOLOモデルは真のエンドtoエンドではなく、 NMSに依存しており、これは速度と性能の面で理想的ではありません。この記事では、これらの問題に対処し、 物体検出の性能と速度を向上させることを目的とした代替アプローチを紹介します。

検出トランスフォーマー

モデルからNMSを排除するためには、同じオブジェクトに対する重複予測が抑制される新しいモデルを作成する必要があります。 YOLOv11は複数のCNNベースのヘッドを使用していましたが、これらはローカルな特徴にしか注目できず、 重複予測につながる可能性があります。したがって、これらをトランスフォーマーに置き換えることを検討できます。 トランスフォーマーは特徴間のペアの相互作用をモデル化して、個々の予測ではなく予測のセットを生成するため、 重複を排除するのにより適しています。

DETR

トランスフォーマーは計算効率が良くないものの、YOLOv11の様に、 バックボーンからの解像度の小さい特徴マップに対してトランスフォーマーを使用することで、この非効率性を軽減できます。 さらに、データの入手可能性の向上、ハードウェア能力の進歩、トランスフォーマーの本質的な並列処理能力により、 帰納的バイアスの少ないトランスフォーマーを効率的に訓練・スケーリングして、他の分野で見られるような高性能を達成できることが見込まれます。 ただし、トランスフォーマーは予測のセットを出力するため、トレーニング中に適切に損失を計算し、 重複を抑制するためには、セット内の個々の予測と正解(グラウンドトゥルース)を一対一で対応付ける(二部マッチング)必要があります。

Lmatch(yi,y^σ(i))=1{ci=}p^σ(i)(ci)+1{ci=}Lbox(bi,b^σ(i))LHungarian(y,y^)=i=1Nlog(p^σ^(i)(ci))+1{ci=}Lbox(bi,b^σ^(i))Lbox(bi,b^σ(i))=λiouLiou(bi,b^σ(i))+λL1bib^σ(i) L_{\text{match}}(y_i, \hat{y}_{\sigma(i)}) = -1_{\{c_i=\varnothing\}}\hat{p}_{\sigma(i)}(c_i) + 1_{\{c_i=\varnothing\}}L_{\text{box}}(b_i, \hat{b}_{\sigma(i)}) \\ L_{\text{Hungarian}}(y, \hat{y}) = \sum_{i=1}^{N} -log(\hat{p}_{\hat{\sigma}(i)}(c_i)) + 1_{\{c_i=\varnothing\}}L_{\text{box}}(b_i, \hat{b}_{\hat{\sigma}(i)}) \\ L_{\text{box}}(b_i, \hat{b}_{\sigma(i)}) = \lambda_{\text{iou}}L_{\text{iou}}(b_i, \hat{b}_{\sigma(i)}) + \lambda_{\text{L1}}||b_i - \hat{b}_{\sigma(i)}||

ここで、\varnothingはオブジェクトクラスの不在を表し、σ(i)\sigma(i)は順列σ\sigmaにおけるii番目のグラウンドトゥルースに対応するインデックスであり、 σ^\hat{\sigma}は見つかった最適な順列です。クラスとバウンディングボックスの損失からなるマッチング損失LmatchL_{\text{match}}を最小化する方法で予測と正解をマッチングできます。 最適なマッチングはハンガリアンアルゴリズムを使用してO(n3)O(n^3)で達成できます(詳細な説明はCompSci(2016)によるThe Munkres Assignment Algorithm (Hungarian Algorithm)というタイトルの動画で見ることができます)。

予測と正解をマッチングした後、バックプロパゲーションのための損失を計算できます。 これにはハンガリアン損失LHungarianL_{\text{Hungarian}}と呼ばれる、クラスとバウンディングボックスの損失を組み合わせたものを使用できます。 バウンディングボックスの損失には、IoU損失(スケール不変)とMAE(L1)の線形結合を使用できます。 これにより、ボックスを直接予測する際のスケーリングの問題(大きなボックスは自動的に大きなMAE値になる)を回避できます。

上記の図は、CNNバックボーンの上に従来のエンコーダ-デコーダトランスフォーマーをヘッドとして使用する検出トランスフォーマー(DETR)のアーキテクチャを示しており、 前述のマッチングと損失を使用します。しかし、自然言語タスクに使用される従来のトランスフォーマーとは異なり、 DETRデコーダは学習可能なデータに依存しないオブジェクトクエリをデコーダ埋め込み(ゼロに初期化)に付加して並列に処理します。 出力シーケンスは、対応するフィードフォワードニューラルネットワークによってバウンディングボックスとクラス予測のための埋め込みのペアに分割されます(ペアは独立的に処理されます)。

結果と影響

原論文(記事の最後に引用)では、DETRはカスタムコンポーネントを持たないにもかかわらず、最適化されたFaster R-CNNと競争力のある結果をCOCOデータセットで達成していることが観察できます。 原論文におけるエンコーダーのセルフアテンションの可視化は、重なり合うものも含め、個々のオブジェクトに対して別々のヘッドでアテンションを向ける能力を示しています。 原論文では、エンドtoエンドのDETRを、同じクラスの異なるオブジェクトインスタンスを区別しながらピクセル単位の分類を行う、 パノプティックセグメンテーションタスクに自然に拡張することについても議論しています。

Faster R-CNNにマスクヘッドを追加してMask R-CNNを作成したように、デコードされたシーケンスを処理し、 マスクされたロジットを生成し、ピクセル単位のargmaxを取り、元の画像サイズに投影するためのマスクヘッドをDETRに追加することができます(パノプティックセグメンテーションについては将来的に詳しく取り上げるかもしれません)。 しかし、DETRは大きなオブジェクトと比較して小さなオブジェクトの検出性能が低く、YOLOモデルと比較して全体的な性能が劣ることが観察されています。 この性能の低下は、セルフアテンションの計算コストを軽減するために、YOLOとは異なり、最も解像度の低い特徴マップのみを使用するDETRのシンプルさに起因すると考えられます。 さらに、DETRは視覚データに対する帰納的バイアスが低いため、収束が遅いという特徴があります。

Deformable DETR

セルフアテンション機構を分析すると、モデルが少数の重要な特徴だけに注目すれば良いことが多いことがわかります。 しかし、初期化時にはすべての特徴に均等に注目し、モデルは異なる重みですべての特徴に注目し続けるため、 収束が遅くなり計算コストが高くなるという問題がDETRに存在します。この問題に対処するために、 変形可能なアテンション機構(deformable attention)を導入し、 限られた数の重要な特徴に柔軟に注目する効率的なアテンション機構を実現できます(変形可能畳み込みからインスパイアされたものです)。

Deformable Attention

上記は概念的にマルチヘッド変形可能アテンション機構の計算を説明しています。クエリは線形層に渡され、 事前定義された参照点へのオフセットとアテンションの重みを予測します。 これらのオフセットと重みの次元は、3のような小さな数値に事前設定され、各ヘッドに対して生成されます。 同時に、特徴マップが線形層によって生成されます。次に、オフセットを参照点に適用して、 特徴マップ上のそれらの位置での値を取得します。最後に、アテンションの重みと値のドット積を計算し、 別の線形層で次元を調整して出力を生成します。

Bilinear Interpolation

浮動小数点のオフセットを持つ値のサンプリングには、バイリニア補間を使用します。 これは、点間の距離に基づいて最も近い4つのサンプルの重み付き和を取ります。 これは点間の領域を考慮することで実現できます。上記は、この例で使用されるバイリニア補間操作を示しています。 通常、バイリニア補間は画像の微分可能なアップスケーリングの方法として使用されます(PyTorchには、バイリニア補間やその他の方法によるアップスケーリングをサポートするinterpolate関数があります)。 ソースコード実装では、埋め込みの並列かつ高速なバイリニア補間のためにCUDA C++(将来取り上げるかもしれません)を使用しています。

Deformable DETR

概念は比較的理解しやすいですが、マルチヘッド変形可能アテンション機構の実装はかなり複雑です。 これは、異なる解像度を持つ複数の特徴マップを、位置エンコーディングとレベルエンコーディングを持つ埋め込みのシーケンスに変換する必要があるためです。 つまり、異なるスケールを持つすべての特徴マップから変形された参照点をサンプリングし、埋め込みのシーケンスのどの部分が各特徴マップを表しているか、 および各特徴マップのパディングの比率を追跡して、適切なサンプルを選択する必要があります。

上記は、マルチヘッド変形可能アテンション機構モジュールの詳細を限定的に示しています。 (ヘッドの数とオフセットは変数であり、埋め込みの次元は特徴マップのサイズと線形層に依存します。) 各特徴マップから使用される値の数が一定であるため複雑さは線形になりましたが(HWHWより小さい)、 Deformable DETRは速度の極端な向上にはつながりませんでした。 これは、複数の特徴マップの使用と実装における複雑な計算が原因と考えられます。 また、意外なことに性能の大幅な向上にもつながりませんでしたが、速度と性能の両方を向上させる一定の成功を収めたため、 最先端のDETRモデルでは変形可能アテンション機構モジュールの使用が続いています。

DAB DETR

Deformable DETRは主にトランスフォーマーエンコーダの改良に焦点を当ており、 私たちはデコーダの埋め込みと学習可能なオブジェクトクエリをあまり気にせず使用してきました。 暗黙の前提としては、デコーダの埋め込みは画像の内容に関する一般的な情報を含み、 オブジェクトクエリはバウンディングボックスの位置をエンコードし、それがデコーダのクロスアテンション中にエンコーダからの信号によって洗練されるというものでした。 しかし、エンコーダのみの構造が収束を速めることが経験的に観察され、クロスアテンションが遅い収束の要因となっていることがわかりました。 クロスアテンションの自己アテンションとの唯一の違いはデコーダの埋め込みとオブジェクトクエリの使用にあります。 したがって、これらを分析して改善点を見つけることができます。

DETR Positional Attention Maps

そこで、エンコーダ出力からのキーに適用される位置埋め込みがオブジェクトクエリと干渉して位置的アテンションを生成する様子を観察できます。 研究者たちは、DETRのアテンションマップが上記のように不明瞭であることを発見しました。より良い位置的アテンションマップを生成するために、 彼らはオブジェクトクエリに使用される普通の埋め込みの代わりに、学習可能なアンカー(x,y,w,h)(x, y, w, h)に対してxxyyの正弦位置エンコーディングを使用することを提案しました。 これにより、位置埋め込みとのより良い干渉が可能になりました(Conditional DETRで使用されているアプローチ)。

DAB DETR

この位置変調は干渉を通じて、ガウスカーネルのような形の優れた位置的アテンションマップ、わずかに速い収束、そしてパフォーマンスの向上をもたらしました。 しかし、これらのカーネルのサイズは固定されていました。これに対処するために、xxyyの位置エンコーディングにそれぞれ学習可能な重み(wow\frac{w_o}{w}hoh\frac{h_o}{h})を掛けることで、 モデルが位置的アテンションを制御しカーネルサイズを操作できるようにすることができます。デコーダ層の出力は、 最終的な予測セットが作成されるまでアンカーボックスを反復的に洗練するために使用でき、 同時にスキップ接続を使用して勾配を初期の学習可能なアンカーボックスに直接渡すことができます。 このDAB DETR (Dynamic Anchor Boxes)のサイズ変調されたクロスアテンションの導入により、DETRとDeformable DETRの両方の収束とパフォーマンスが向上しました。

結論

この記事では、NMSを排除するために二部マッチングを導入した検出トランスフォーマーDETR、 エンコーダアテンションを改良したDeformable DETR、そしてデコーダ内のより良い位置的アテンションのためにオブジェクトクエリを改良したDAB DETRについて議論しました。 これらのエンコーダとデコーダの改良により、DETRの収束、推論速度、パフォーマンスが向上しましたが、DAB Deformable DETRはまだYOLOv8を上回るパフォーマンスを示していません。 次の記事では、DETRの競争力のあるパフォーマンスにつながったさらなる改良について紹介します。

リソース