DETR の概要 - パート 1
DETR (Detection Transformer) は、物体検出の新しいアプローチとして最初に提案された深層学習アーキテクチャです。これは、検出パイプラインの中心的な構成要素として変圧器を統合することに成功した最初の物体検出フレームワークです。
DETR は、以前の物体検出システムと比較してアーキテクチャを完全に変更します。この記事では、物体検出に対する画期的なアプローチである Detection Transformer (DETR) の概念を詳しく説明します。
物体検出とは何ですか?
Wikipedia によると、オブジェクト検出は、デジタル画像やビデオ内の特定のクラスの意味オブジェクト (人間、建物、車など) のインスタンスを検出する、コンピューター ビジョンと画像処理に関連するコンピューター テクノロジです。
これは自動運転車で車線、他の車両、歩行者を検出するために使用されます。物体検出はビデオ監視や画像検索にも役立ちます。物体検出アルゴリズムは、機械学習と深層学習を使用して物体を検出します。これらは、コンピューターが多数のサンプル画像やビデオを見て独自に学習する高度な方法です。
物体検出の仕組み
オブジェクト検出は、画像またはビデオ内のオブジェクトを識別して位置を特定することによって機能します。このプロセスには次の手順が含まれます。
- 特徴抽出: 特徴の抽出は、物体検出の最初のステップです。これには通常、畳み込みニューラル ネットワーク (CNN) をトレーニングして画像パターンを認識することが含まれます。
- オブジェクト提案の生成: 特徴を取得したら、次はオブジェクト提案 (オブジェクトを含む可能性のある画像内の領域) を生成します。選択的検索は、多くの潜在的なオブジェクトの提案を引き出すために一般的に使用されます。
- オブジェクトの分類: 次のステップでは、オブジェクトの提案を、対象のオブジェクトが含まれているかどうかを分類することです。これは通常、サポート ベクター マシン (SVM) などの機械学習アルゴリズムを使用して行われます。
- 境界ボックス回帰: 提案が分類されたら、対象オブジェクトの周囲の境界ボックスを調整して、オブジェクトの位置とサイズを確定する必要があります。その境界ボックス回帰により、ターゲット オブジェクトを包み込むようにボックスが調整されます。
DETR: 変圧器ベースの革命
DETR (Detection Transformer) は、物体検出とパノプティック セグメンテーションへの新しいアプローチとして提案された深層学習アーキテクチャです。 DETR は、いくつかの独自の機能を備えた物体検出への画期的なアプローチです。
エンドツーエンドの深層学習ソリューション
DETR は、transformer ブロックを利用した物体検出のためのエンドツーエンドのトレーニング可能な深層学習アーキテクチャです。モデルは画像を入力し、各オブジェクト クエリの境界ボックスとクラス ラベルのセットを出力します。これは、手作業で設計された部品の乱雑なパイプラインを単一のエンドツーエンドのニューラル ネットワークに置き換えます。これにより、プロセス全体がより簡単になり、理解しやすくなります。
合理化された検出パイプライン
DETR (検出トランス) が特別であるのは、 主にアンカー ボックスや非最大抑制 (NMS) など、 従来の検出器の標準コンポーネントを使用せずにトランスに徹底的に依存しているためです。
YOLO や Faster R-CNN などの従来の物体検出モデルでは、アンカー ボックスが極めて重要な役割を果たします。これらのモデルでは、画像内でオブジェクトが持つ可能性のあるさまざまな形状やスケールを表す一連のアンカー ボックスを事前に定義する必要があります。次に、モデルはこれらのアンカーを実際のオブジェクトの境界ボックスに一致するように調整することを学習します。
これらのアンカー ボックスを利用すると、特に小規模なオブジェクトの検出において、モデルの精度が大幅に向上します。ただし、ここでの重要な注意点は、これらのボックスのサイズとスケールを手動で微調整する必要があり、多少ヒューリスティックなプロセスになるため、改善の可能性があることです。
同様にNMS も、YOLO と Faster R-CNN で使用される手作業で設計されたコンポーネントです。これは、 弱い重複検出を排除することで、 各オブジェクトが 1 回だけ検出されるようにするための後処理ステップです。単一のオブジェクトの周囲にある複数の境界ボックスを予測するため、これらのモデルではこれが必要ですが、いくつかの問題が発生する可能性もあります。 NMS のしきい値の選択は簡単ではなく、最終的な検出パフォーマンスに影響を与える可能性があります。従来の物体検出プロセスは、以下の画像で視覚化できます。
一方、DETR ではアンカー ボックスの必要性がなくなり、セットベースのグローバル損失でオブジェクトを直接検出できます。すべてのオブジェクトが並行して検出されるため、学習と推論のプロセスが簡素化されます。このアプローチにより、タスク固有のエンジニアリングの必要性が減り、検出パイプラインの複雑さが軽減されます。
NMS に依存して複数の検出をプルーニングするのではなく、トランスフォーマーを使用して固定数の検出を並行して予測します。設定された予測損失を適用して、各オブジェクトが 1 回だけ検出されるようにします。このアプローチにより、NMS の必要性が効果的に抑制されます。以下の画像でプロセスを視覚化できます。
アンカー ボックスがないことでモデルは簡素化されますが、特定のスケールや比率に焦点を当てることができないため、小さなオブジェクトを検出する能力も低下する可能性があります。それにもかかわらず、NMS を削除すると、不適切なしきい値によって発生する可能性のある潜在的な事故を防ぐことができます。また、DETR をエンドツーエンドで簡単にトレーニングできるようになり、効率が向上します。
斬新なアーキテクチャと潜在的なアプリケーション
DETR の特徴の 1 つは、アテンション メカニズムを備えたその構造により、モデルがより理解しやすくなっているということです。予測を行うときに、画像のどの部分に焦点を当てているかを簡単に確認できます。これは精度を高めるだけでなく、これらのコンピューター ビジョン モデルの基礎となるメカニズムを理解するのにも役立ちます。
この理解は、モデルを改善し、潜在的なバイアスを特定するために重要です。 DETR は、変圧器を NLP からビジョンの世界に取り込むという新境地を開拓しました。その解釈可能な予測は、注目のアプローチから得られる素晴らしいボーナスです。 DETR のユニークな構造には、有益であることが証明されている現実世界のアプリケーションがいくつかあります。
- 自動運転車: DETR のエンドツーエンド設計は、手動エンジニアリングを大幅に減らしてトレーニングできることを意味し、これは自動運転車業界にとって大きな恩恵となります。画像内のオブジェクトの関係を本質的にモデル化するトランスフォーマー エンコーダー/デコーダー アーキテクチャを使用します。これにより、歩行者、他の車両、標識などの物体のリアルタイムの検出と識別が向上し、自動運転車のシーンでは非常に重要になります。
- 小売業界: DETR は、リアルタイムの在庫管理と監視に効果的に利用できます。セットベースの損失予測は、固定サイズで順序のない予測セットを提供できるため、オブジェクトの数が変化する可能性がある小売環境に適しています。
- 医用画像: DETR は画像内の変数インスタンスを識別できるため、異常や病気を検出するための医用画像処理に役立ちます。従来のモデルは、アンカーリングと境界ボックスのアプローチにより、同じ画像内の同じ異常またはわずかに異なる異常の複数のインスタンスを検出するのに苦労することがよくあります。一方、DETR はこれらのシナリオに効果的に対処できます。
- 家庭用ロボット: 環境を理解し、環境と対話するために家庭用ロボットに効果的に使用できます。家庭環境の予測不可能な性質を考慮すると、任意の数の物体を識別する DETR の機能により、これらのロボットの効率が向上します。
正確かつ信頼性の高い物体検出のための DETR のセットベースの損失
DETR は、DETR の特徴的な側面である 二部マッチングを通じて独自の予測を強制するセットベースの全体的な損失関数を利用します。 DETR のこの独自の機能は、モデルが正確で信頼性の高い予測を生成することを保証します。セットベースの合計損失は、予測された境界ボックスとグラウンド トゥルース ボックスを一致させます。この損失関数により、予測された各境界ボックスが 1 つのグラウンド トゥルース境界ボックスのみと一致することが保証され、またその逆も同様になります。
この図は、セットベースの損失を計算するプロセスを表しています。
上の図を読み始めると、 まず予測オブジェクトとグラウンド トゥルース オブジェクトがシステムに入力される魅力的な入力ステージに遭遇します。その仕組みをさらに深く進めていくと、 私たちの注意はコスト行列の計算を伴う計算プロセスに向けられます。
ハンガリーのアルゴリズムは、予測されたオブジェクトと真実のオブジェクトの間の最適なマッチングを調整するために適時に登場しました。アルゴリズムは、各一致ペアの分類と境界ボックスの損失を考慮します。
対応する予測を見つけることができなかった予測には、それぞれの分類損失が評価されて「オブジェクトなし」ラベルが渡されます。これらすべての損失が集計されてセットベースの合計損失が計算され、出力されてプロセスの終了が示されます。
この一意のマッチングにより、モデルはオブジェクトごとに個別の予測を行うようになります。完全な予測セットをまとめてグラウンド トゥルースと比較して評価するというグローバルな性質により、ネットワークは画像全体にわたって一貫した検出を行うようになります。したがって、特別なペアリング損失により、予測セット全体のレベルで監視が提供され、堅牢で一貫したオブジェクト位置特定が保証されます。
物体検出のための DETR アーキテクチャの概要
以下の DETR アーキテクチャの図を見てみましょう。一方の側で画像をエンコードし、もう一方の側の Transformer デコーダに渡します。クレイジーな機能エンジニアリングやマニュアルはもう必要ありません。すべてはニューラル ネットワークによってデータから自動的に学習されます。
ソース
図に示すように、DETR のアーキテクチャは次のコンポーネントで構成されています。
- 畳み込みバックボーン: 畳み込みバックボーンは、入力画像から特徴を抽出するために使用される標準 CNN です。次に、特徴はトランスフォーマーエンコーダーに渡されます。
- トランスフォーマー エンコーダー: トランスフォーマー エンコーダーは、畳み込みバックボーンによって抽出された特徴を処理し、一連の特徴マップを生成します。トランスフォーマー エンコーダーはセルフ アテンションを使用して、画像内のオブジェクト間の関係をキャプチャします。
- Transformer Decoder: Transformer Decoder は、オブジェクト クエリと呼ばれる、いくつかの学習済み位置埋め込みセットを入力として取得します。エンコーダ出力にも注目します。デコーダから共有フィードフォワード ネットワーク (FFN) に各出力を埋め込み、検出 (クラスと境界ボックス) または「オブジェクトなし」クラスのいずれかを予測します。
- オブジェクト クエリ: オブジェクト クエリは、トランスフォーマー デコーダーがエンコーダー出力に対応するために使用する、学習された位置埋め込みです。オブジェクト クエリはトレーニング中に学習され、最終的な検出を予測するために使用されます。
- 検出ヘッド: 検出ヘッドは、トランス デコーダーの出力を受け取り、最終的な検出セットを生成するフィードフォワード ニューラル ネットワークです。検出ヘッドは、各オブジェクト クエリのクラスと境界ボックスを予測します。
DETR が採用した Transformers アーキテクチャを以下の図に示します。
ソース
DETR は、物体検出にいくつかの新しい概念をもたらします。 Transformer のセルフアテンション メカニズムの一部として、オブジェクトのクエリ、キー、および値を使用します。
通常、オブジェクト クエリの数は事前に設定されており、画像内に実際に存在するオブジェクトの数に基づいて変更されることはありません。キーと値は、CNN を使用して画像をエンコードすることによって取得されます。キーは画像内のさまざまなスポットの場所を示し、値は特徴に関する情報を保持します。これらのキーと値はセルフアテンションに使用されるため、モデルは画像のどの部分が最も重要であるかを判断できます。
DETR の真の革新は、複数の頭による自己注意の使用にあります。これにより、DETR は画像内のさまざまなオブジェクト間の複雑な関係やつながりを理解できるようになります。各アテンションヘッドは、画像のさまざまな部分に同時に焦点を合わせることができます。
DETR モデルを使用したハグ顔トランスフォーマーによる物体検出
facebook/detr-resnet-50 モデルは、DETR モデルの実装です。その中核には、トランス アーキテクチャが搭載されています。
具体的には、このモデルはエンコーダ/デコーダ変換器とバックボーン ResNet-50 畳み込みニューラル ネットワークを使用します。これは、画像を分析し、画像内のさまざまなオブジェクトを検出し、それらのオブジェクトが何であるかを識別できることを意味します。
研究者らは、人、動物、車などのラベル付けされた日常画像が大量に含まれる COCO と呼ばれる膨大なデータセットでこのモデルをトレーニングしました。このようにして、モデルはプロのように日常的な現実世界のオブジェクトを検出する方法を学習しました。提供されたコードは、物体検出のための DETR モデルの使用法を示しています。
from transformers import DetrImageProcessor, DetrForObjectDetection
import torch
from PIL import Image
import requests
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
you can specify the revision tag if you don't want the timm dependency
processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50", revision="no_timm")
model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50", revision="no_timm")
inputs = processor(images=image, return_tensors="pt")
outputs = model(__inputs)
convert outputs (bounding boxes and class logits) to COCO APIlet's only keep detections with score > 0.9
target_sizes = torch.tensor([image.size[::-1]])
results = processor.post_process_object_detection(outputs, target_sizes=target_sizes, threshold=0.9)[0]
for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
box = [round(i, 2) for i in box.tolist()]
print(
f"Detected {model.config.id2label[label.item()]} with confidence "
f"{round(score.item(), 3)} at location {box}"
)
出力:
- 上記のコードはオブジェクト検出処理を行っています。まず、Hugging Face トランスフォーマーや、トーチ、PIL、リクエストなどのその他の標準的なトランスフォーマーなど、必要なライブラリを取得します。
- 次に、リクエストを使用して URL から画像を読み込みます。
DetrImageProcessor
を使用した何らかの処理を通じて画像を送信し、モデル用に準備します。 from_pretrained
メソッドを使用して、「facebook/detr-resnet-50」からDetrForObjectDetection
モデルをインスタンス化します。時間依存性が望ましくない場合は、revision="no_timm"
パラメータでリビジョン タグを指定します。- 画像とモデルを準備したら、画像をモデルに入力し、シームレスなオブジェクト検出を実現します。
プロセッサ
は入力用の画像を準備し、モデル
はオブジェクト検出タスクを実行します。 - 境界ボックス、クラス ロジット、画像内で検出されたオブジェクトに関するその他の関連情報を含むモデルからの出力は、
processor.post_process_object_detection
メソッドを使用して後処理され、最終的な検出結果が得られます。 。 - 次に、コードは結果を反復処理して、検出されたオブジェクト、その信頼スコア、および画像内のそれらの位置を出力します。
結論
DETR は、Transformer アーキテクチャを活用した物体検出のための深層学習モデルです。これは当初、オブジェクト検出の問題に独自かつ非常に効果的に対処するための主要コンポーネントとして自然言語処理 (NLP) タスク用に設計されました。
DETR は、Faster R-CNN や YOLO などの従来の物体検出システムとは異なる方法で物体検出の問題を扱います。空間アンカーや非最大抑制などの事前知識をエンコードする複数の手動設計コンポーネントを削除することで、検出パイプラインを簡素化します。
これは、オブジェクトをペアで照合することにより、各オブジェクトに対して一意の予測を生成するようにモデルに強制する設定されたグローバル損失関数を使用します。このトリックは、DETR が信頼できる適切な予測を行うのに役立ちます。