YOLOv12: アテンション機構による高速物体検出

近年、深層学習を用いたコンピュータービジョンは目覚ましい進化を遂げ、私たちの生活やビジネスに大きな変革をもたらしています。特に物体検出技術は、自動運転、監視システム、医療画像解析など、幅広い分野で不可欠な技術となっています。

YOLO(You Only Look Once)シリーズは、高速な処理と優れた検出精度を特徴とし、リアルタイム物体検出の分野を牽引しています。本稿では、最新の物体検出モデルであるYOLOv12に着目し、そのアーキテクチャについて解説します。

これまでの物体検出

物体検出技術は、コンピュータービジョンの分野において長年重要な役割を果たしてきました。特に、リアルタイム処理が求められるアプリケーションでは、YOLOシリーズが高速性と精度のバランスに優れており、デファクトスタンダードとしての地位を確立しています。

YOLOシリーズによる物体検出

YOLOシリーズは、「You Only Look Once」(一度見るだけ)という名前の通り、画像全体を一度に処理することで高速な物体検出を実現しています。初代YOLOは、モデル設計の観点から画期的なフレームワークを確立しました。

  • YOLOv4およびYOLOv5では、CSPNet、データ拡張、マルチスケール特徴などの技術が導入され、検出性能が大幅に向上しました。
  • YOLOv6では、BiCやSimCSPSPPFモジュールをバックボーンとネックに採用し、アンカー支援トレーニングを導入しました。
  • YOLOv7では、E-ELAN(効率的な層集約ネットワーク)を導入し、勾配フローを改善するとともに、多様なbag-of-freebiesを活用しました。
  • YOLOv8では、効率的なC2fブロックを統合し、特徴抽出能力を強化しました。
  • 最新のYOLOv9では、GELANを導入してアーキテクチャを最適化し、PGIによりトレーニング手法を改善しました。
  • YOLOv10では、デュアル割り当てとNMS(Non-Maximum Suppression)フリーのトレーニングを組み合わせ、処理効率を向上させました。
  • YOLOv11では、C3K2モジュール(GELANの一種)と軽量なdepthwise separable convolutionを検出ヘッドに採用し、処理遅延を削減しつつ精度を向上させました。
図1. アーキテクチャの比較

YOLOシリーズ以外の物体検出

YOLOシリーズ以外にも、様々な物体検出手法が存在します。近年では、Transformerを用いたエンドツーエンドの物体検出手法であるDETR(Detection Transformer)が注目を集めています。RT-DETRは、効率的なエンコーダーと不確実性を抑制したクエリ選択機構により、従来のエンドツーエンド検出器をリアルタイム処理に適したものへと改良しました。さらに、RT-DETRv2はbag-of-freebiesによってその性能を向上させています。

しかし、これらの手法は計算コストやメモリ効率の面で課題が残る場合があり、リアルタイム処理が求められるアプリケーションには適さないことがありました。

本稿で紹介するYOLOv12は、アテンション機構を中心とした新たなYOLOフレームワークを構築することで、高速性と高精度の両立を実現しています。

YOLOv12の概要

YOLOv12は、アテンション機構を中心とした新しいYOLOフレームワークです。従来のYOLOシリーズがCNN(Convolutional Neural Network)ベースの改良に主眼を置いていたのに対し、YOLOv12ではアテンション機構の優れたモデリング能力を活用しつつ、CNNベースのモデルに匹敵する処理速度の実現を目指しています。

モデル改良のアプローチについて

YOLOv12では、以下の3つの主要な改良が導入されています。

  • Area Attention (A2) モジュール:
    • 計算複雑性を低減しつつ広い受容野を維持する、シンプルかつ効率的なアテンションモジュールです。
    • 特徴マップを垂直または水平に等分割することで、複雑な演算を回避し高速化を実現します。
  • Residual Efficient Layer Aggregation Networks (R-ELAN):
    • アテンション機構の導入によって生じる最適化の課題(主に大規模モデル)に対処します。
    • ELANをベースに、ブロックレベルの残差設計と再設計された特徴集約方法を導入しています。
  • アーキテクチャの改善:
    • FlashAttentionの導入によるメモリアクセスの問題の克服
    • Positional encodingなどの不要な設計の削除による高速化と簡素化
    • MLP比率の調整による計算バランスの最適化
    • 畳込み演算子の積極的な活用による計算効率の向上
    • Stacked blockの深さを調整することによる最適化の促進

Efficiency Analysis

アテンション機構は、グローバルな依存関係を捉える上で非常に有効ですが、CNNと比較して本質的に処理速度が劣ります。これは計算複雑性とメモリアクセスの効率に起因します。YOLOv12では、これらの課題に対処することで高速化を実現しています。

Area Attention

Area Attentionは、特徴マップを複数の領域に分割し、各領域内でアテンションを計算することで計算量を削減します。これにより、グローバルな依存関係を維持しつつ、高速な処理が可能になります。

図2. 局所アテンションメカニズムの比較

Residual Efficient Layer Aggregation Networks

R-ELANは、特徴集約を改善するために設計されたネットワークです。スキップコネクションを導入することで勾配消失を防ぎ、安定した学習を可能にします。また、新しい集約方法を採用することで、計算コストとパラメータ数を削減します。

Architectural Improvements

YOLOv12では、様々なアーキテクチャの改善が行われています。Positional encodingの削除やMLP比率の調整により、高速化と性能向上を両立しています。

性能確認の実験結果について

YOLOv12は、5つのモデルスケール(YOLOv12-N, S, M, L, X)で開発され、標準的な物体検出ベンチマークで広範な実験が行われています。その結果、速度と精度のバランスにおいて、既存のリアルタイム物体検出器を大きく上回る性能を示しています。

例えば、YOLOv12-Nは40.6% mAPを達成し、YOLOv10-Nを2.1% mAP上回り、YOLOv11-Nと同等の速度で1.2% mAP上回ります。また、YOLOv12-Sは、RT-DETR-R18およびRT-DETRv2-R18よりも優れた性能を発揮しつつ、42%高速に動作し、計算量とパラメータ数を大幅に削減しています。

図3. ベンチマークの比較

YOLOv12を使ってみる

YOLOv12のコードはGitHubで公開されているため、これを使用します。なお、動作環境はLinuxで、Python 3.11系が必要となります。インストールの前に、venvなどを使用してLinux環境上にPython 3.11の実行環境を構築してください。その後、以下のインストール手順に進んでください。

# リポジトリのクローン
$ git clone https://github.com/sunsmarterjie/yolov12
$ cd yolov12

# YOLOv12 で使用されるバージョンの FlashAttention を事前にダウンロード
# この後の、requirements.txt を使用したパッケージのインストールで利用される。
$ wget https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.3/flash_attn-2.7.3+cu11torch2.2cxx11abiFALSE-cp311-cp311-linux_x86_64.whl

# 依存パッケージのインストール
$ pip install -r requirements.txt

# YOLOv12 本体をインストール
$ pip install -e .

続いて、サンプルコードを実行するために、学習済みモデルをダウンロードします。使用可能な学習済みモデルは以下の通りです。

Modelsize
(pixels)
mAPval
50-95
Speed
T4 TensorRT10
params
(M)
FLOPs
(G)
YOLO12n64040.61.642.66.5
YOLO12s64048.02.619.321.4
YOLO12m64052.54.8620.267.5
YOLO12l64053.76.7726.488.9
YOLO12x64055.211.7959.1199.0

以下に、モデルの評価を行うためのサンプルコードを示します。

from ultralytics import YOLO

# 学習済みモデルの読み込み
model = YOLO('yolov12n.pt')
# model = YOLO('yolov12s.pt')
# model = YOLO('yolov12m.pt')
# model = YOLO('yolov12l.pt')
# model = YOLO('yolov12x.pt')

# モデルの検証
# 'coco.yaml' は https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml のものを利用します。
# なお、初回実行時は30GB以上のデータのダウンロードとzipファイルの解凍が走るので、動作環境によっては時間がかかります。
model.val(data='coco.yaml', save_json=True)

最後に、モデルの学習に関するサンプルコードを説明します。

ファインチューニングのサンプルコード(How to Train a YOLOv12 Object Detection Model on a Custom Dataset)も公開されているので、こちらも参考にしてください。

from ultralytics import YOLO

# 事前学習済のモデルを利用することもできます。
# 事前学習済のものを利用しない場合は、YAMLファイルを指定します。
# このYAMLファイルは手元になくても、クラス内部で自動的に処理されるので問題ありません。
model = YOLO('yolov12n.yaml')

# ファインチューニングでは、250エポック以上が推奨らしい
results = model.train(
  data='coco.yaml',
  epochs=600, 
  batch=256, 
  imgsz=640,
  scale=0.5,  # S:0.9; M:0.9; L:0.9; X:0.9
  mosaic=1.0,
  mixup=0.0,  # S:0.05; M:0.15; L:0.15; X:0.2
  copy_paste=0.1,  # S:0.15; M:0.4; L:0.5; X:0.6
  device="0,1,2,3",
)

# モデルの保存
model.export(format="engine", half=True)  # or format="onnx"

# 画像を利用した動作確認
results = model("path/to/image.jpg")
results[0].show()
図4. YOLOv12nの実行結果(サンプル)

おわりに

本稿では、最新の物体検出AIであるYOLOv12に焦点を当て、その革新的な技術と性能について解説しました。YOLOv12は、アテンション機構を中心とした新たな設計により、高速性と高精度を両立し、リアルタイム物体検出の分野に新たな可能性をもたらしました。

今後の展望

YOLOv12には、さらなる性能向上の可能性が秘められています。

  • モデルの最適化:量子化や枝刈りなどのモデル圧縮技術を適用することで、さらなる処理速度の向上が期待できます。
  • 新しいアテンション機構の導入:Area Attention以外の新しいアテンション機構を導入することで、検出性能の向上が見込まれます。
  • 様々なタスクへの応用:物体検出に加え、セグメンテーションや姿勢推定など、幅広いタスクへの応用が期待できます。

More Information