BaiduのRT-DETR:Vision Transformerベースのリアルタイム物体検出器#
概要#
Baiduが開発したリアルタイム検出Transformer(RT-DETR)は、高い精度を維持しながらリアルタイム性能を実現する、最先端のエンドツーエンド物体検出器です。DETR(NMSフレームワークを使用しない方式)の考え方を基盤としつつ、畳み込みベースのバックボーンと効率的なハイブリッドエンコーダーを導入することで、リアルタイムの速度を実現しています。RT-DETRは、スケール内の相互作用とスケール間の融合を分離することで、マルチスケール特徴を効率的に処理します。モデルは高い適応性を備えており、再トレーニングなしで異なるデコーダーレイヤーを使用して推論速度を柔軟に調整できます。RT-DETRは、TensorRTを使用したCUDAなどの高速化バックエンドで優れた性能を発揮し、多くのほかのリアルタイム物体検出器を上回ります。
視聴: 物体検出で Baidu の RT-DETR を使う方法 | Ultralytics による推論とベンチマーク 🚀
BaiduのRT-DETRの概要。 RT-DETRモデルのアーキテクチャ図では、バックボーンの最後の3つのステージ{S3、S4、S5}がエンコーダーへの入力として示されています。効率的なハイブリッドエンコーダーは、スケール内特徴相互作用(AIFI)とスケール間特徴融合モジュール(CCFM)を通じて、マルチスケール特徴を画像特徴のシーケンスに変換します。IoUを考慮したクエリ選択により、デコーダーの初期オブジェクトクエリとして機能する一定数の画像特徴を選択します。最後に、補助予測ヘッドを備えたデコーダーがオブジェクトクエリを反復的に最適化し、バウンディングボックスと信頼度スコアを生成します(出典)。
主な機能#
- 効率的なハイブリッドエンコーダー: BaiduのRT-DETRは、スケール内の相互作用とスケール間の融合を分離してマルチスケール特徴を処理する、効率的なハイブリッドエンコーダーを使用します。この独自のVision Transformerベースの設計により、計算コストを削減し、リアルタイムの物体検出を可能にします。
- IoUを考慮したクエリ選択: BaiduのRT-DETRは、IoUを考慮したクエリ選択を利用してオブジェクトクエリの初期化を改善します。これにより、モデルはシーン内の最も関連性の高いオブジェクトに注目し、検出精度を高めます。
- 調整可能な推論速度: BaiduのRT-DETRは、再トレーニングすることなく、異なるデコーダーレイヤーを使用して推論速度を柔軟に調整できます。この適応性により、さまざまなリアルタイム物体検出シナリオで実用的に活用できます。
- NMSを使用しないフレームワーク: DETRを基盤とするRT-DETRは、後処理の非最大抑制を不要にし、検出パイプラインを簡素化して効率を高める可能性があります。
- アンカーフリー検出: アンカーフリー検出器であるRT-DETRは、検出プロセスを簡素化し、さまざまなデータセットに対する汎化性能を向上させる可能性があります。
事前学習済みモデル#
Ultralytics Python APIでは、異なるスケールの事前学習済みPaddlePaddle RT-DETRモデルを提供しています。
- RT-DETR-L:COCO val2017でAP 53.0%、T4 GPUで114 FPS
- RT-DETR-X:COCO val2017でAP 54.8%、T4 GPUで74 FPS
さらに、Baiduは2024年7月にRTDETRv2をリリースし、性能指標を向上させて元のアーキテクチャをさらに改良しました。
使用例#
この例では、RT-DETRのトレーニングと推論の基本的な使用例を紹介します。これらのモードやほかのモードの詳細については、Predict、Train、Val、Exportのドキュメントページをご覧ください。Ultralytics Platformを通じて、クラウドGPU上でモデルをトレーニングすることもできます。
from ultralytics import RTDETR
# COCOで事前学習済みのRT-DETR-lモデルを読み込みます
model = RTDETR("rtdetr-l.pt")
# モデル情報を表示(任意)
model.info()
# COCO8サンプルデータセットでモデルを100エポック学習する
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# 'bus.jpg'画像に対してRT-DETR-lモデルで推論を実行します
results = model("path/to/bus.jpg")PyTorch 2.0以降を使用してCUDA上でRT-DETRをトレーニングする場合は、deterministic=Falseを設定してください。変形可能アテンションではF.grid_sampleを使用しますが、これは決定論的なCUDAバックワード処理に対応していないため、deterministic=Trueを設定しても実行を再現可能にはできず、トレーニングのスループットが低下する場合があります。seedは引き続き、重みの初期化、データの順序、データ拡張のサンプリングを制御します。
RT-DETRの事前学習済み重みでは、再トレーニングせずにレイテンシを削減するため、推論時に2つの設定を利用できます。
eval_idx:デコードを早期に停止します。デフォルトの6層デコーダーでは、0始まりのインデックス(0~5)を使用します。eval_idx=5では全レイヤーを使用し、eval_idx=3では4レイヤーを使用します。TensorRT v10.11を使用するT4 GPUでは、RT-DETR-Lの性能は4レイヤーの場合、8.0 ms / 52.7 mAPから7.4 ms / 52.5 mAPに向上します。num_queries:オブジェクトクエリを減らします(デフォルト:300)。同じ設定で100に減らすと、COCOで7.4 ms / 51.7 mAPを達成できます。1画像あたりのオブジェクト数が少ないデータセットでは、通常mAPの低下は小さくなりますが、値は1画像あたりに想定される最大オブジェクト数を上回るようにしてください。
どちらの設定でもmAPが低下する可能性があるため、デプロイ前にデータセットでトレードオフを検証してください。
from ultralytics import RTDETR
rtdetr = RTDETR("rtdetr-l.pt")
head = rtdetr.model.model[-1]
# 速度と精度のトレードオフを検証したうえで、いずれか一方または両方の設定を選択してください。
head.decoder.eval_idx = 3 # 6層のうち4層のデコーダーレイヤーを使用します。
head.num_queries = 100 # オブジェクトクエリの数を減らします。
results = rtdetr("path/to/image.jpg")
# エクスポートでは、TensorRTへのエクスポートを含め、同じデコーダー設定とクエリ設定が使用されます。
rtdetr.export(format="engine", device=0, quantize=16)サポート対象のタスクとモード#
この表では、モデルの種類、対応する事前学習済み重み、各モデルがサポートするタスク、およびサポート対象を✅で示した対応モード(Train、Val、Predict、Export)を紹介します。
| モデルタイプ | 事前学習済み重み | サポートされるタスク | トレーニング | 検証 | 推論 | エクスポート |
|---|---|---|---|---|---|---|
| RT-DETR Large | rtdetr-l.pt | 物体検出 | ✅ | ✅ | ✅ | ✅ |
| RT-DETR Extra-Large | rtdetr-x.pt | 物体検出 | ✅ | ✅ | ✅ | ✅ |
rtdetr-resnet50.yamlとrtdetr-resnet101.yamlは、YAMLアーキテクチャのみで提供されています。Ultralyticsが事前学習済み重みをリリースしているのは、rtdetr-lとrtdetr-xのみです。YAMLからResNetの各バリアントをインスタンス化し(例:RTDETR("rtdetr-resnet50.yaml"))、必要に応じてトレーニングまたはファインチューニングしてください。
最適なユースケース#
RT-DETRは、高い精度とリアルタイム性能の両方が求められる用途に特に適しています。
- 自動運転: 速度と精度の両方が重要となる自動運転システムで、信頼性の高い環境認識を実現します。自動運転車におけるAIについて詳しく見る。
- 高度なロボティクス: 動的な環境で正確な物体認識とインタラクションを必要とする複雑なタスクを、ロボットが実行できるようにします。ロボティクスにおけるAIの役割をご覧ください。
- 医用画像: 物体検出の精度が診断に不可欠となる医療分野の用途に適しています。医療分野におけるAIをご覧ください。
- 監視システム: 高い検出精度によるリアルタイム監視が求められるセキュリティ用途に適しています。セキュリティアラームシステムについて詳しく見る。
- 衛星画像解析: グローバルなコンテキストの理解が重要となる、高解像度画像の詳細な解析に適しています。衛星画像におけるコンピュータービジョンについて読む。
引用と謝辞#
研究または開発でBaiduのRT-DETRを使用する場合は、原著論文を引用してください。
@misc{lv2023detrs,
title={DETRs Beat YOLOs on Real-time Object Detection},
author={Wenyu Lv and Shangliang Xu and Yian Zhao and Guanzhong Wang and Jinman Wei and Cheng Cui and Yuning Du and Qingqing Dang and Yi Liu},
year={2023},
eprint={2304.08069},
archivePrefix={arXiv},
primaryClass={cs.CV}
}RTDETRv2については、2024年の論文を引用できます。
@misc{lv2024rtdetrv2,
title={RTDETRv2: All-in-One Detection Transformer Beats YOLO and DINO},
author={Wenyu Lv and Yian Zhao and Qinyao Chang and Kui Huang and Guanzhong Wang and Yi Liu},
year={2024},
eprint={2407.17140},
archivePrefix={arXiv},
primaryClass={cs.CV}
}この貴重なリソースを作成・保守しているBaiduとPaddlePaddleチームに、コンピュータービジョンコミュニティを代表して感謝します。Vision Transformerベースのリアルタイム物体検出器RT-DETRの開発を通じた、この分野への貢献に深く感謝します。
よくある質問#
BaiduのRT-DETR(リアルタイム検出Transformer)は、Vision Transformerアーキテクチャを基盤とする高度なリアルタイム物体検出器です。効率的なハイブリッドエンコーダーによってスケール内の相互作用とスケール間の融合を分離し、マルチスケール特徴を効率的に処理します。IoUを考慮したクエリ選択を採用することで、最も関連性の高いオブジェクトに注目し、検出精度を高めます。再トレーニングせずにデコーダーレイヤーを調整して推論速度を変更できるため、さまざまなリアルタイム物体検出シナリオに適しています。RT-DETRのarXiv論文で、RT-DETRの機能について詳しくご覧ください。
Ultralytics Python APIを活用して、事前学習済みのPaddlePaddle RT-DETRモデルを使用できます。たとえば、COCO val2017で事前学習されたRT-DETR-lモデルを読み込み、T4 GPUで高いFPSを達成するには、次の例を使用できます。
例from ultralytics import RTDETR # COCOで事前学習済みのRT-DETR-lモデルを読み込みます model = RTDETR("rtdetr-l.pt") # モデル情報を表示(任意) model.info() # COCO8サンプルデータセットでモデルを100エポック学習する results = model.train(data="coco8.yaml", epochs=100, imgsz=640) # 'bus.jpg'画像に対してRT-DETR-lモデルで推論を実行します results = model("path/to/bus.jpg")BaiduのRT-DETRは、効率的なハイブリッドエンコーダーとIoUを考慮したクエリ選択が特長で、計算コストを大幅に削減しながら高い精度を維持します。再トレーニングせずに異なるデコーダーレイヤーを使用して推論速度を調整できる独自の機能により、柔軟性も大きく向上します。そのため、TensorRTを使用したCUDAなどの高速化バックエンドでリアルタイム性能が求められる用途に特に適しており、多くのほかのリアルタイム物体検出器を上回ります。また、Transformerアーキテクチャにより、従来のCNNベースの検出器よりも優れたグローバルコンテキストの理解が可能です。
BaiduのRT-DETRでは、再トレーニングを必要とせず、異なるデコーダーレイヤーを使用して推論速度を柔軟に調整できます。この適応性は、さまざまなリアルタイム物体検出タスクで性能を拡張するうえで重要です。低い精度でより高速な処理が必要な場合でも、低速でもより正確な検出が必要な場合でも、RT-DETRを特定の要件に合わせて調整できます。この機能は、計算能力の異なるデバイスにモデルをデプロイする際に特に役立ちます。
いいえ。RT-DETRでは、
max_detによって推論後に返される予測数の上限を設定できますが、デコーダーが生成するオブジェクトクエリの数は増えません。UltralyticsのRT-DETR事前学習済みチェックポイントは300個のオブジェクトクエリを使用するため、max_detにそれより大きな値を設定しても、1画像あたり300件を超える検出結果は返せません。高信頼度の予測結果を少数だけ必要とする場合は、たとえば
max_det=100のようにmax_detを使用して、返される検出結果を減らしてください。データセットに1画像あたり300個を超えるオブジェクトが含まれる可能性がある場合は、モデルYAMLのデコーダークエリ数(nq)を増やしてカスタムRT-DETRモデルをトレーニングしてください。トレーニング後に事前学習済みチェックポイントのこの値を変更しても同等の結果にはならず、追加のクエリを学習するために再トレーニングが必要です。