YOLOv10: 高度なリアルタイムのエンドツーエンドの物体検出
導入
リアルタイムの物体検出は、自動運転車や監視システムから拡張現実やロボット工学に至るまで、あらゆる分野で最新の応用が見出されています。リアルタイムの物体検出の本質は、画像またはビデオ フレーム内の複数の物体を数分の 1 秒で正確に識別し、分類することにあります。
長年にわたり、リアルタイムの物体検出の効率と精度を高めるために多数のアルゴリズムが開発されてきました。 「You Only Look Once」(YOLO)シリーズは、そのスピードとパフォーマンスにより、顕著なアプローチとして浮上しました。 YOLO アルゴリズムは、物体検出を単一の回帰問題として枠組み化し、1 回の評価で完全な画像から直接境界ボックスとクラス確率を予測することにより、物体検出に革命をもたらしました。この合理化されたアプローチにより、YOLO はリアルタイム検出機能の代名詞となりました。
研究者は最近、リアルタイム検出のための CNN ベースの物体検出器に焦点を当てており、パフォーマンスと効率のバランスが取れている YOLO モデルの人気が高まっています。 YOLO 検出パイプラインには、モデルの前処理と非最大抑制 (NMS) の後処理が含まれていますが、どちらにも限界があり、精度と遅延のトレードオフが最適化されていません。
この YOLO シリーズに最近追加されたのは YOLOv10-N/S/M/B/L/X です。YOLOv10 は、前任者をベースに構築されており、高度な技術を統合して、さまざまな環境における検出精度、速度、堅牢性を向上させています。 YOLOv10 の機能強化により、YOLOv10 は即時かつ信頼性の高いオブジェクト認識を必要とするアプリケーションにとって強力なツールとなり、リアルタイム検出で達成可能な限界を押し広げます。実験の結果、YOLOv10 は、さまざまなモデル スケールにわたる計算精度のトレードオフに関して、以前の最先端モデルよりも大幅に優れていることが示されています。
前提条件
- 深層学習の概念の基本的な理解。
- CNN (畳み込みニューラル ネットワーク) に関する知識。
- Python および PyTorch/TensorFlow の経験。
- トレーニング用の GPU セットアップ (NVIDIA CUDA 環境など)。
- オブジェクト検出原理 (バウンディング ボックス、IoU など) に関する知識。
YOLOv10とは何ですか?
YOLO モデルは通常、トレーニング中に 1 対多のラベル割り当て戦略を使用します。これは、1 つのグラウンド トゥルース オブジェクトが複数の陽性サンプルに対応することを意味します。これによりパフォーマンスは向上しますが、最適な予測を選択するには推論中の非最大値抑制 (NMS) が必要となるため、推論が遅くなり、パフォーマンスが NMS ハイパーパラメータの影響を受けやすくなります。これにより、YOLO モデルが最適なエンドツーエンド展開を達成できなくなります。
YOLOv10 研究論文で説明されているように、考えられる解決策の 1 つは、リアルタイム アプリケーションに効率的なエンコーダとクエリ選択技術を導入する RT-DETR のようなエンドツーエンド DETR アーキテクチャを採用することです。ただし、DETR の複雑さにより、精度と速度のバランスが妨げられる場合があります。もう 1 つのアプローチは、冗長な予測を減らすために 1 対 1 の割り当て戦略を使用した CNN ベースの検出器のエンドツーエンド検出を検討していますが、推論のオーバーヘッドが追加されたり、パフォーマンスが低下したりすることがよくあります。
研究者は、特徴抽出と融合を強化するために、さまざまなバックボーン ユニット (DarkNet、CSPNet、EfficientRep、ELAN) とネック コンポーネント (PAN、BiC、GD、RepGFPN) を実験してきました。さらに、モデルのスケーリングと再パラメータ化の手法も調査されています。これらの努力にもかかわらず、YOLO モデルは依然として計算の冗長性と非効率性に直面しており、精度を向上させる余地が残されています。
最近の研究論文では、後処理とモデル アーキテクチャを強化することでこれらの課題に対処しています。 NMS フリーの YOLO に対する一貫した二重割り当て戦略を提案し、推論中の NMS の必要性を排除し、効率を向上させます。この研究には、効率を重視した精度主導のモデル設計戦略も含まれており、軽量分類ヘッド、空間チャネル分離ダウンサンプリング、冗長性を削減するためのランクガイド型ブロック設計が組み込まれています。正確性を高めるために、この論文ではラージカーネル畳み込みと効果的な部分セルフアテンション モジュールについて検討します。 YOLOV10 は、デュアルラベル割り当てと一貫したマッチングメトリクスを使用した YOLO モデル用の NMS フリートレーニング戦略を導入し、高効率と競争力のあるパフォーマンスの達成に役立ちます。
YOLOv10 の進歩
YOLOv10 (N/S/M/B/L/X) は、COCO ベンチマークで大幅なパフォーマンスの向上に成功しました。 YOLOv10-S と X は、それぞれ RT-DETR-R18 と R101 よりも著しく高速であり、同様のパフォーマンスを備えています。 YOLOv10-B は、YOLOv9-C と比較してレイテンシーを 46% 削減し、同じパフォーマンスを維持します。 YOLOv10-L および X は、パラメータが少ないにもかかわらず YOLOv8-L および X よりもパフォーマンスが高く、YOLOv10-M はパラメータが少ないにもかかわらず YOLOv9-M/MS のパフォーマンスに匹敵します。
YOLOv10 モデルの 6 つのサイズ:
YOLOv10 の 6 つの異なるサイズ (出典)
一貫したデュアル割り当てによる NMS フリーのトレーニングにより、YOLOv10-S のエンドツーエンド レイテンシーが 4.63 ミリ秒短縮され、平均精度または AP が 44.3% という強力なパフォーマンスが維持されます。
- 効率重視のモデル設計により、1,180 万個のパラメータと 20.8 ギガ浮動小数点演算/秒 (GFLOPS) が削減され、YOLOv10-M の遅延が 0.65 ミリ秒減少します。
- また、精度重視のモデル設計により、AP が YOLOv10-S で 1.8、YOLOv10-M で 0.7 向上し、待ち時間の増加はわずか 0.18 ミリ秒と 0.17 ミリ秒で、その有効性が証明されました。
YOLOv10 のデュアルラベル割り当てとは何ですか?
YOLO モデルの 1 対 1 マッチングでは、各グランド トゥルースに 1 つの予測が割り当てられるため、NMS の後処理が不要になりますが、その結果、監視が弱くなり、精度が低下します。これに対処するために、1 対多と 1 対 1 の戦略を組み合わせたデュアル ラベル割り当てが使用されます。追加の 1 対 1 ヘッドが導入され、構造と最適化が 1 対多ブランチと同一であり、トレーニング中に共同で最適化されます。
これにより、モデルは効率的なエンドツーエンド推論のために 1 対 1 ヘッドを使用しながら、1 対多割り当ての豊富な監視の恩恵を受けることができます。 1 対 1 のマッチングではトップ 1 選択が使用され、より少ないトレーニング時間でハンガリーのパフォーマンスをマッチングします。
一貫した一致指標とは何ですか?
予測をグラウンド トゥルース インスタンスに割り当てる際、1 対 1 アプローチと 1 対多アプローチの両方でメトリックを使用して、予測がインスタンスにどの程度一致するかを測定します。このメトリックは、分類スコア、境界ボックスのオーバーラップ (IoU)、および予測のアンカー ポイントがインスタンス内にあるかどうかを組み合わせたものです。
一貫したマッチング メトリックにより、1 対 1 と 1 対多の両方のマッチング プロセスが向上し、両方のブランチが同じ目標に向かって最適化されるようになります。この二重アプローチにより、1 対 1 ブランチからの効率的な推論を維持しながら、1 対多ブランチからのより豊富な監視信号が可能になります。
一貫した一致メトリクスにより、最良の陽性サンプル (インスタンスに最もよく一致する予測) が 1 対 1 分岐と 1 対多分岐の両方で同じであることが保証されます。これは、分類タスクと位置特定タスクの間のバランスを制御するパラメータ (α と β) を 2 つのブランチ間で比例させることで実現されます。
メトリックの式
- ( p ) は分類スコアです
- (ベータとベータハット) は、予測された境界ボックスとグラウンド トゥルース境界ボックスです。
- ( s ) は空間事前分布です
- ( alpha ) と ( beta ) は、分類とローカリゼーションのバランスを取るためのハイパーパラメータです。
1 対 1 のパラメータを 1 対多のパラメータに比例して設定することによって
そして
マッチング メトリックは、両方のブランチを調整して、同じ最良の陽性サンプルを特定します。この調整により、監視ギャップが減少し、パフォーマンスが向上します。
この一貫したマッチング メトリックにより、1 対 1 分岐によって選択された予測が 1 対多分岐の上位予測と高度に一致することが保証され、その結果、より効果的な最適化が実現します。したがって、このメトリクスは、監視が改善され、モデルのパフォーマンスが向上していることを示しています。
モデルのアーキテクチャ
YOLOv10 は以下のコンポーネントで構成されています。これらはモデル設計の重要な要素であり、効率と精度の達成に役立ちます。
YOLOv10 の公式論文からの YOLOv10 モデルのデザイン。
- 軽量分類ヘッド: 軽量分類ヘッド アーキテクチャは、深さ方向に分離可能な 2 つの畳み込み (3×3) と、その後に続く 1×1 畳み込みで構成されます。これにより、計算需要が軽減され、モデルがより高速かつ効率的になり、特にリアルタイム アプリケーションやリソースが限られたデバイスへの展開に有益です。
- 空間チャネル分離ダウンサンプリング: YOLO モデルでは、通常、ダウンサンプリング (チャネル数を増やしながら画像のサイズを縮小すること) は、ストライド 2 の 3x3 標準畳み込みを使用して実行されます。このプロセスは次のとおりです。計算コストが高く、多くのパラメータが必要です。
このプロセスをより効率的にするために、空間チャネル分離ダウンサンプリングが提案されており、これには次の 2 つのステップが含まれます。
1.ポイントごとの畳み込み: このステップでは、画像サイズを変更せずにチャネル数を調整します。 2.深さ方向の畳み込み: このステップでは、計算やパラメータの数を大幅に増やすことなく、画像サイズを縮小します (ダウンサンプリング)。
これらの操作を分離すると、計算コストと必要なパラメーターの数が大幅に削減されます。このアプローチでは、ダウンサンプリング中により多くの情報が保持されるため、待ち時間が短くなり、パフォーマンスが向上します。
- ランクに基づいたブロック設計: ランクに基づいたブロック割り当て戦略により、パフォーマンスを維持しながら効率を最適化します。ステージは固有のランクによってソートされ、最も冗長なステージの基本ブロックが CIB に置き換えられます。このプロセスは、パフォーマンスの低下が検出されるまで継続されます。この適応型アプローチにより、ステージやモデル スケール全体で効率的なブロック設計が保証され、パフォーマンスを損なうことなく高い効率が達成されます。アルゴリズムの詳細については付録に記載されています。
- 大規模カーネルの畳み込み: このアプローチでは、大規模カーネルの深さ方向の畳み込みをより深い段階で選択的に利用して、浅い機能の汚染と遅延の増加による問題を回避しながらモデルの機能を強化します。構造の再パラメータ化を使用すると、推論の効率に影響を与えることなく、トレーニング中の最適化が向上します。さらに、大規模なカーネルの畳み込みがモデルのサイズに基づいて適応され、パフォーマンスと効率が最適化されます。
- 部分的自己注意 (PSA): 部分的自己注意 (PSA) モジュールは、自己注意を YOLO モデルに効率的に統合します。 PSA は、セルフ アテンションを特徴マップの一部のみに選択的に適用し、アテンション メカニズムを最適化することにより、最小限の計算コストでモデルのグローバル表現学習を強化します。このアプローチにより、完全なセルフアテンション メカニズムに典型的な過剰なオーバーヘッドを発生させることなく、パフォーマンスが向上します。
SOTAモデルとの比較
YOLOv10 は、さまざまなモデル規模にわたって、最先端のパフォーマンスとエンドツーエンドのレイテンシを実現します。ベースラインの YOLOv8 モデルと比較して、YOLOv10 は平均精度 (AP) と効率を大幅に向上させます。具体的には、YOLOv10 バリアント (N/S/M/L/X) は 1.2% ~ 1.4% の AP 改善を達成し、パラメータが 28% ~ 57% 減少し、計算が 23% ~ 38% 減少し、レイテンシが 37% ~ 70% 減少しました。
他の YOLO モデルと比較すると、YOLOv10 は精度と計算コストの間で優れたトレードオフを示しています。 YOLOv10-N と S は、パラメーターと計算が大幅に少なく、YOLOv6-3.0-N と S よりもそれぞれ 1.5 AP と 2.0 AP 優れています。 YOLOv10-B および M は、パフォーマンスを維持または向上させながら、YOLOv9-C および YOLO-MS と比較して、遅延をそれぞれ 46% および 62% 削減します。 YOLOv10-L は Gold-YOLO-L を上回り、パラメーターが 68% 減少し、レイテンシーが 32% 減少し、AP が 1.4% 向上しました。
さらに、YOLOv10 は、パフォーマンスと遅延の両方で RT-DETR よりも大幅に優れています。 YOLOv10-S と X は、RT-DETR-R18 と R101 よりそれぞれ 1.8 倍と 1.3 倍高速で、同様のパフォーマンスを備えています。
これらの結果は、リアルタイムのエンドツーエンド検出器としての YOLOv10 の優位性を強調し、さまざまなモデル スケールにわたって最先端のパフォーマンスと効率性を実証しています。この有効性は、元の 1 対多のトレーニング アプローチを使用するとさらに検証され、アーキテクチャ設計の影響が確認されます。
モデルの比較
レイテンシと精度 (左) およびサイズと精度 (右) のトレードオフに関する他のモデルとの比較。 (ソース)
デモ
YOLOv10 を実行するには、まずリポジトリのクローンを作成し、必要なパッケージをインストールします。
!pip install -q git+https://github.com/THU-MIG/yolov10.git
現在、YOLOv10 には独自の PyPI パッケージがありません。したがって、ソースからコードをインストールする必要があります。
ただし、始める前に、使用している GPU を確認しましょう。
!nvidia-smi
次に、必要なライブラリをインストールします。
!pip install -r requirements.txt
!pip install -e .
これらのインストールは、モデルが正しく機能するために必要なすべてのツールとライブラリを確実に備えていることを確認するために必要です。
!wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
このコマンドを実行すると、wget
は指定された URL にアクセスし、YOLOv10 小規模モデル yolov10s.pt
の事前トレーニングされた重みをダウンロードして、現在のディレクトリに保存します。
完了したら、app.py ファイルを実行して URL を生成します。
python app.py
0:00
/0:18
1×
YOLOv10 を使用したオブジェクト検出タスク
画像の推論
YOLOv10 は、COCO データセットで事前トレーニングされたさまざまなサイズの重みファイルを提供します。まずウェイトをダウンロードします。
!mkdir -p {HOME}/weights
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10n.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10m.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10b.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10x.pt
!wget -P {HOME}/weights -q https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10l.pt
!ls -lh {HOME}/weights
コードの次の行では、YOLO モデルを使用して入力画像 dog.jpeg
を処理し、モデルのトレーニングに基づいて画像内のオブジェクトを検出し、検出されたオブジェクトが強調表示された出力画像を保存します。結果は指定されたディレクトリに保存されます。
%cd {HOME}
!yolo task=detect mode=predict conf=0.25 save=True \
model={HOME}/weights/yolov10n.pt \
source={HOME}/data/dog.jpeg
import cv2
import supervision as sv
from ultralytics import YOLOv10
model = YOLOv10(f'{HOME}/weights/yolov10n.pt')
image = cv2.imread(f'{HOME}/data/dog.jpeg')
results = model(image)[0]
detections = sv.Detections.from_ultralytics(results)
bounding_box_annotator = sv.BoundingBoxAnnotator()
label_annotator = sv.LabelAnnotator()
annotated_image = bounding_box_annotator.annotate(
scene=image, detections=detections)
annotated_image = label_annotator.annotate(
scene=annotated_image, detections=detections)
sv.plot_image(annotated_image)
0: 640x384 1人、1匹、8.3ms 速度: 形状 (1、3、640、384) で画像ごとに前処理 1.8 ミリ秒、推論 8.3 ミリ秒、後処理 0.9 ミリ秒
このセルは、入力画像に対して YOLOv10 モデルを使用して推論を実行し、結果を処理して検出を抽出し、監視ライブラリを使用して画像に境界ボックスとラベルの注釈を付けて結果を表示します。
結論
このブログでは、YOLO シリーズの新しいメンバーである YOLOv10 について説明しました。 YOLOv10 は、物体検出のための YOLO の後処理とモデル アーキテクチャの両方の進歩を適応させています。主なアプローチには、より効率的な検出のための一貫した二重割り当てによる NMS フリーのトレーニングが含まれます。これらの改善により、パフォーマンスと遅延の両方で他の高度な検出器よりも優れたリアルタイム オブジェクト検出器 YOLOv10 が実現しました。
記事をお楽しみいただければ幸いです。ブログのパート 2 にご注目ください。そこでは、YOLOv10 を他の YOLO モデルと比較します。
参考文献
- オリジナルの研究論文
- Github リポジトリ