物体検出モデル「YOLO」まとめ

## はじめに
　こんにちは。まっちゃ。です。:tea:
　今回は、物体検出モデルの1つである「YOLO」についてまとめていきます。

## 目次
- YOLOとは
- モデルの遷移
- まとめ

## YOLOとは
　画像中において、物体のボックス位置とクラスを同時に推定する物体検出モデルの一つです。「画像を一度見るだけでいい」と言った意味から、「You Only Look Once」の頭文字をとって「YOLO」と名づけられています。
　YOLOは非常に高速であるため、リアルタイムの物体検出に適しています。

 ## モデルの遷移
　モデルはYOLOv1を起源として、現在までにYOLOv10が公開されています。

https://docs.ultralytics.com

　以下で、各モデルの特徴をまとめていきます。

### YOLOv1
https://arxiv.org/abs/1506.02640

　Joseph RedmonとAli Farhadiによって開発された物体検出モデルです。高精度で高速な物体検出モデルであることから、当時人気を博しました。
　YOLO以前の物体検出モデルは、物体のボックス位置とクラスの推定を別々に行っていました。一方YOLOは、画像全体から物体のボックス位置とクラスの推定を同時に行うため、高速な物体検出が可能となります。

　以下の図に、YOLOの推論時における流れを示します。画像をグリッドで分け、グリッドごとに物体のボックス位置の信頼度およびクラスの確率を推定します。その後、ボックス位置の信頼度とクラス確率を掛け合わせて、物体検出を行います。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/6427d26a-40e5-b0a6-49f9-1bf87d67fbf0.png', width=65%>

### YOLOv2
https://arxiv.org/abs/1612.08242

　Joseph RedmonとAli Farhadiによって開発された物体検出モデルです。YOLO9000と呼ばれるように、9000種類のクラスを検出できるモデルとして開発されました。
　YOLOv2はYOLOv1と比較して、以下のような特徴が追加されています。
 
- Batch Normalization
　学習を安定させ、収束を高速化しています。
</br>

- Anchor Boxes
　画像中に等間隔でアンカーと呼ばれる点を作成し、アンカーを中心としてアスペクト比が決められたアンカーボックスを作成します。その後、アンカーボックスと正解ボックスのIoUをもとにボックス位置を推定します。これにより、推定されるボックス位置の精度を向上させています。
 </br>

- Dimension Clusters
　k-meansクラスタリングを用いて、アンカーボックスにおける枠の数やスケール、アスペクト比を自動で決定しています。これにより、手動でアンカーボックスの設定値を決める必要がなくなり、ボックス位置の精度を向上させています。
 </br>

- High Resolution Classifier
　高解像度の画像で学習を行うことで、高解像度の画像を効率的に処理できるようにしています。

　以下の図に、YOLOv2とその他のモデルにおける物体検出の精度および速度を示します。他のモデルと比較して遜色ない精度をもち、高速であることが分かります。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/1dd5fde7-4eff-5b1b-e357-b8a5d0938da5.png', width=55%>

### YOLOv3
https://arxiv.org/abs/1804.02767

　Joseph RedmonとAli Farhadiによって開発された物体検出モデルです。効率的なバックボーンネットワーク、複数のアンカー、FPNを導入して、さらに性能を向上させたモデルです。
　YOLOv3は、以下のような特徴を有しています。

- feature pyramid networks (FPN)
　入力画像を3つの異なるサイズの検出カーネル（13x13, 26x26, 52x52）で処理し、各スケールでボックス位置とクラスを予測します。これにより異なるサイズ、特に小さいサイズの物体検出精度を向上させています。

　以下の図に、YOLOv3とその他のモデルにおける物体検出の精度および精度を示します。他のモデルと比較して遜色ない精度をもち、高速であることが分かります。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/82125ea6-9b13-85c2-8cbf-e333d83d972e.png', width=65%>

### YOLOv4
https://arxiv.org/abs/2004.10934

　Alexey Bochkovskiyらにより開発されたモデルです。YOLOv4のネック部分には、SPPとPANが用いられています。

- Spatial Pyramid Pooling (SPP) 
　以下の図に、SPPの概略を示します。特徴マップについて、マルチスケールでプーリングしたベクトルを結合します。この処理により、物体のスケール変化に対するロバスト性を向上させています。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/efbe4c8e-47a0-37d9-eee2-bd1f38e4be92.png', width=65%>
</br>

- Path Aggregation Network (PAN)
　以下の図に、PANの全体像を示します。局所的なパターンへの感度が高い下位層の情報は、ボックス位置の精度向上に寄与します。そこで、下位層の情報を効率的に伝搬するために非効率な経路（赤線）ではなく効率的な経路（緑線）を使用しています。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/19544067-d8ce-6088-1243-b12ee95573b0.png', width=75%>

　また、YOLOv4は性能を最適化させるために'bag of freebies'と'bag of specials'の手法が用いられています。
　'bag of freebies'は、推論コストを増加させることなく、学習時の精度を改善する手法です。例として、入力画像のばらつきを増やすデータ拡張があり、モデルのロバスト性を改善するために用いられています。
　'bag of specials'は、推論コストをわずかに増加させる一方、精度を劇的に改善する手法です。プラグインモジュールと後処理にて用いられています。
　以下に、YOLOv4で用いられている詳細な手法を羅列します。

- Bag of Freebies (BoF) backbone
  - CutMix
  - Mosaic data augmentation
  - DropBlock regularization
  - Class label smoothing
</br>

- Bag of Specials (BoS) backbone
  - Mish activation
  - Cross-stage partial connections (CSP)
  - Multi-input weighted residual connections (MiWRC)
</br>

- Bag of Freebies (BoF) detector:
  - CIoU-loss,
  - Cross mini-Batch Normalization (CmBN)
  - DropBlock regularization
  - Mosaic data augmentation
  - Self-adversarial-training (SAT)
  - Eliminate grid sensitivity
  - Using multiple anchors for a single ground truth
  - Cosine annealing scheduler
  - Optimal hyperparameters
  - Random training shapes
</br>

- Bag of Specials (BoS) detector:
  - Mish activation,
  - SPP-block
  - SAM-block
  - PAN path-aggregation block
  - DIoU-NMS

　以下の図に、YOLOv4とその他のモデルにおける物体検出の精度および速度を示します。他のモデルと比較して遜色ない精度をもち、高速であることが分かります。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/a1a45139-ba2f-132f-1166-ffa3e94e7b9e.png', width=50%>

### YOLOv5
　モデルの性能を向上させ、ハイパーパラメータの最適化、実験追跡の統合、一般的な出力フォーマットへの自動出力といった特徴が追加されました。
　UltralyticsによりYOLOv5のアーキテクチャをもとにしたYOLOv5uが開発されています。
　YOLOv5uは、以下の特徴を有しています。
 
- Anchor-free Split Ultralytics Head
　従来は物体の位置を推定するため、アンカーボックスに依存していました。Anchor-free Split Ultralytics Headを用いることで、より柔軟な検出モデルを提供しています。
 </br>

- 精度と速度のトレードオフの最適化
　精度を維持し、リアルタイム検出を実現します。これは、自動運転などの迅速な応答が要求されるアプリケーションにとって重要となります。
 </br>

- 多様な事前学習済みモデル
　万能な解決法を提供するだけでなく、タスクに応じてモデルを微調整することが可能です。

 ### YOLOv6
https://arxiv.org/abs/2301.05586

　Meituanによってオープンソース化された産業用の物体検出モデルです。精度と速度のバランスを備え、リアルタイムアプリケーションに最適な物体検出モデルです。
　YOLOv6は、以下の特徴を有しています。

- Bidirectional Concatenation (BiC) Module
　隣接する3つの層の特徴マップを統合し、局在化シグナルを拡張します。結果として、より正確な局在化シグナルを保持し、速度劣化を最小限に抑えて性能を向上させています。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/d78df989-c29a-cc67-198b-4914cd942bff.png', width=95%>
</br>

- Anchor-Aided Training (AAT) Strategy
　以下の図に、AATの概略を示します。AATは回帰と分類の両ヘッドに適用されており、学習時にアンカーフリーの損失にアンカーベースの損失を統合することで性能を向上させています。
　また、推論時はアンカーベースの損失計算を削除することで速度を低下させることなく、精度を向上させています。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/0f668400-85e2-0e3d-b165-e574e45556db.png', width=65%>
</br>

- Self-Distillation Strategy
　小さいモデルにおける学習効率を高め、精度を向上させています。学習時に教師とハードラベルにより情報が更新されるため、より効果的に学習ができます。

　以下の図に、YOLOv6とその他のモデルにおける物体検出の精度および速度を示します。他のモデルと比較して、精度および速度を高水準で達成しています。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/13b1bb7e-039d-c94d-df0c-9e2de85c96f9.png', width=85%>

### YOLOv7
https://arxiv.org/abs/2207.02696

　Chien-Yao Wangらにより開発されたモデルです。従来のリアルタイム物体検出では、アーキテクチャの最適化に着目されてきました。一方YOLOv7では、学習の最適化に着目しています。
　また、YOLOv7は推論のコストを増加することなく物体検出の精度を改善する'trainable bag-of-freebies'の概念を取り入れたモジュールと手法を含みます。
　YOLOv7は、以下の特徴を有しています。

- Model Re-parameterization
　再パラメータ化モデルは、勾配伝搬経路をもつ異なるネットワーク層において適用可能な手法です。学習時と推論時で別の構造をもつネットワークを使用します。
 </br>

- Dynamic Label Assignment
　複数の出力層をもつモデルの学習で発生する問題を解決するため、YOLOv7では、リード・ガイド・ラベル割り当てと呼ばれる新しいラベル割り当てを採用しています。
　以下の図に、YOLOv7で用いられているラベル割り当ての概要を示します。従来の方法では、Lead HeadとAux Headのラベル割り当ては独立しています。一方YOLOv7では、Lead HeadとAux Headの両方のラベル割り当てにLead Headの結果を使用しています。このようにLead Headで学習した情報をAux Headに直接学習させることで、Lead Headの学習効率を向上させています。
　また、粗-細Lead Headによるラベル割り当ては、粗いラベルと細かいラベルの2つのソフトラベルを生成します。このとき、粗いラベルの制約を緩和することで、学習能力が高くないAux Headにおいて学習すべき情報を失わないようにし、精度を向上させています。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/6a6df4be-7274-b86f-c2fa-16565841e7ca.png', width=95%>
</br>

- Extended and Compound Scaling
　パラメータと計算を効率的に利用するリアルタイム物体検出のため、複合スケーリング手法が導入されています。
　以下の図に、複合スケーリングの概略を示します。連結ベースのモデルにおいては、depthの増加に伴い、widthも増加します。そのため、入力と出力間で比率が変化し、効率低下を招きます。Yolov7で導入されている複合スケーリングでは、depthのスケーリングにより算出された変化量を用いてwidthのスケーリングを行います。結果として、最適な構造を維持することができます。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/6c689e55-4402-3366-dcce-3d487dbc8a8f.png', width=95%>

　以下の図に、YOLOv7とその他のモデルにおける物体検出の精度および速度を示します。精度および速度ともに他のモデルを上回る結果となっています。
 <img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/3857b2e0-9f1a-ae08-8aa3-f3805c85ffd8.png', width=55%>

### YOLOv8
　UltralyticsによるYOLOの最新バージョンです。検出、セグメンテーション、姿勢推定、指向性物体検出、分類といった様々なタスクに対応しています。この汎用性により、YOLOv8の機能を多様なアプリケーションやドメインで活用することができます。
　YOLOv8は、以下の特徴を有しています。
 
- Anchor-free Split Ultralytics Head
　アンカーベースのモデルと比較して、精度が高く効率的な検出プロセスをもたらします。
</br>

- 精度と速度のトレードオフの最適化
　精度と速度を両立させ、様々な応用分野におけるリアルタイム検出に適しています。
 </br>

- 多様な事前学習済みモデル
　様々なタスクや要求性能に対応する事前学習済みモデルを提供しており、特定のケースに適したモデルを容易に選択することができます。

### YOLOv9
https://arxiv.org/abs/2402.13616

　Chien-Yao Wangらによって開発されたモデルです。Ultralytics YOLOv5によって提供された堅牢なコードベースに基づいて構築されています。
　PGIとGELANを統合することで、学習能力を向上させるだけでなく、検出プロセスを通して重要な情報を保持します。それにより、卓越した精度と性能を達成します。
　学習した情報はネットワーク層を通過するにつれて、消失する可能性が増加します。情報消失への対応は、軽量モデルにとって重要です。YOLOv9のアーキテクチャーでは、PGIと可逆関数により必要不可欠な情報を保持します。
　YOLOv9は、以下の特徴を有しています。

- Programmable gradient information (PGI)
　以下の図に、PGIの概要を示します。PGIはmain branch、auxiliary reversible branch、multi-level auxiliary informationの3要素で構成されます。PGIにおけるauxiliary reversible branchにより信頼性の高い勾配を取得できます。また、multi-level auxiliary informationによりマルチスケールの画像における物体の位置情報を損なうことなく、効率的に学習することができます。結果として、深いネットワーク層を通して必要不可欠な情報を保持することが可能となり、全体的な検出性能を向上させています。
　また、推論過程ではmain branchのみ使用するため、コストを増加することなく推論を行うことができます。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/f0165f4c-da76-1ed6-72b6-5832109a8774.png', width=85%>
 </br>

- Generalized Efficient Layer Aggregation Network (GELAN)
　以下の図に、GELANの概要を示します。従来の畳み込み演算のみを使用して、各層からの情報を効率的に集約することで、計算コストを削減しながら性能を向上させます。様々な計算ブロックに柔軟に統合できるため、精度や速度を犠牲にすることなく、幅広いアプリケーションに応用することができます。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/910a6cb2-74c3-7d24-2c51-2d913b87e448.png', width=85%>
　また、以下の図に、GELANにより出力された特徴マップを示します。他のモデルと比較して、情報の損失が抑制されていることが分かります。これは、信頼性の高い勾配情報が取得可能であることを示します。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/e97d0ec7-94f7-5f19-c572-6708c6df5b09.png', width=95%>

　以下の図に、YOLOv9とその他のモデルにおける物体検出の精度および速度を示します。精度および速度ともに他のモデルを上回る結果となっています。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/5d94d32c-5e9d-f584-f9c8-129db05b5830.png', width=50%>

 ### YOLOv10
https://arxiv.org/abs/2405.14458

　清華大学の研究者たちによって作成されたモデルです。NMSを排除するEnd-to-Endヘッドを導入して計算コストを削減することで、リアルタイムの物体検出へ寄与しています。
　従来のYOLOシリーズにおいては、NMSの依存とアーキテクチャの非効率性が性能を妨げてきました。YOLOv10ではNMSを使用しない学習と全体的な効率および精度を重視したモデル設計戦略を導入することで、さらなる性能向上を実現しています。
　YOLOv10は、以下の特徴を有しています。

- Dual label assignments
　以下の図に、二重ラベル割り当ての概要を示します。二重ラベル割り当てでは、'One-to-many Head'と'One-to-one Head'が用いられます。
  - One-to-many Head
　学習時においてオブジェクトごとに複数の予測を生成し、豊富な信号をもたらすとともに学習精度を向上します。
  - One-to-one Head
　予測時においてオブジェクトごとに最適な1つの予測を生成するため、NMSが不要となります。そのため、レイテンシを抑制し、効率が改善します。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/5173cf10-ad17-9957-9d3e-1dbae7d47ec1.png', width=85%>
</br>

-  Lightweight classification head
　回帰と分類を比較したとき、性能にとっては回帰が重要となります。そのため、分類ヘッドのオーバーヘッドを性能を損なうことなく減らすことができ、結果として軽量にすることが可能です。
</br>

- Spatial-channel decoupled downsampling
　計算コストを下げる一方、ダウンサンプリングにおける情報を保持し、レイテンシ削減に寄与します。
</br>

- Rank-guided block design
　あるモデルのステージについて、最初のステージをcompact inverted block (CIB) に置換し性能を比較します。性能劣化がなければ次のステージの置換を進め、劣化があれば処理を中止します。この手順を繰り返すことで、適切な設計を実装することができ、性能を損なうことなく高効率を達成することができます。
</br>

- Large-kernel convolution
　受容野を拡大し、モデルの性能を向上させるために効果的な手法です。YOLOv10では、深度方向の畳み込みをCIBの深層ステージで活用します。
　モデルサイズが大きい場合は、自然に受容野が拡大するため、小さいモデルに対してLarge-kernel convolutionが採用されています。
</br>

- Partial self-attention
　様々なコンピュータビジョンタスクに利用されている手法です。YOLOV10では効率的なモジュール設計が提案され、低い計算コストで大域的な表現を組み込むことができます。結果として、モデルの性能改善をもたらします。

　以下の図に、YOLOv10とその他のモデルにおける物体検出の精度および速度を示します。精度および速度ともに他のモデルを上回る結果となっています。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/370b44d8-d268-423a-a806-d12086f9e211.png', width=75%>

### YOLO11

　GELANの1種であるC3K2モジュールと軽量なdepthwise separable畳み込みを検出ヘッドに取り入れました。結果としてレイテンシを削減し、正答率を上げています。

### YOLO12
https://www.arxiv.org/abs/2502.12524

　Attentionの考え方を取り入れたモデルです。YOLO11まではCNNベースで構成されています。
　Attention機構は計算の複雑さやメモリ利用の非効率性により、CNNより遅いといった問題がありました。YOLO12では上記の課題を解決し、より早く正確な画像認識モデルを達成しています。
　YOLO12は、以下のような特徴を有しています。
- 領域アテンション機構\
　ウィンドウ分割を水平または垂直方向に等間隔で行うことにより、受容野を大きくしながら計算コストを削減し速度を向上
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/75bdc704-7e99-4771-8085-403e5d10babf.png", width=90%>

- R-ELAN (Residual Efficient Layer Aggregation Networks)\
　特徴量の抽出を分割せずに一貫して行うことで計算コストとメモリ量を削減
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/b8cc66e9-a8a8-4c16-ae5b-8025937ac14d.png", width=90%>

- 改良されたアーキテクチャ
　位置エンコーディングを取り除き、分離可能な畳み込みを導入することにより領域アテンションで位置を認識

　以下の図に、YOLO12とその他のモデルにおける物体検出の精度および速度を示します。他のモデルと比較してより正確で高速なモデルとなっています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673789/cc4eab42-ed41-4418-ba96-6dc0b376f3cd.png", width=90%>

## まとめ
　今回は、物体検出モデルの1つであるYOLOについてまとめました。最新のモデルにおいて、精度と速度を両立させるために、様々な特徴が加えられていることが分かりました。特にYOLOv7から学習効率を重視して情報損失を抑えるための手法を導入していることが印象的でした。
　YOLOのようなリアルタイムの物体検出は、自動運転だけでなく多くの分野で必須の技術となるため、今後もキャッチアップしていきます。

#### 参考
本記事は、以下の記事を参考にして執筆しています。

https://qiita.com/tfukumori/items/519d84bf3feb8d246924

https://qiita.com/kindamu24005/items/6374b17cb6a3effa80c6

https://dev.classmethod.jp/articles/yolov7-architecture-overall/

https://note.com/mim_2020/n/n4e202870d597