物体認識系技術の勉強の備忘録②

# この記事について
物体認識系技術の勉強として学んだ内容のざっくりまとめ。
多くの画像は論文(HTML版arXiv)の画像へのリンク。

# YOLO-World: Real-Time Open-Vocabulary Object Detection
オープンボキャブラリ物体検出に関する論文。
[論文](https://arxiv.org/abs/2401.17270) [プロジェクトページ](https://www.yoloworld.cc/)

## 概要情報
### 分野
物体検出 セグメンテーション

### 主な成果
- 高速なオープンボキャブラリ物体検出モデル YOLO-World を提案
    - RepVL-PAN
    - Region-Text Contrastive Loss(領域とテキストの対照損失)
    - 擬似ラベル生成による大規模事前学習
    - 推論専用の効率化戦略

### モデル概要
<img src="https://arxiv.org/html/2401.17270v3/x1.png" alt="fig1" width=30% />　<img src="https://arxiv.org/html/2401.17270v3/x3.png" alt="fig3" width=60% />

- **YOLOv8ベースの視覚情報**と**CLIPのText Encoderの言語情報**を**RepVL-PANで統合**
[YOLOv8のアーキテクチャ図](https://github.com/ultralytics/ultralytics/issues/189)
- 従来のOV物体検出モデル(Grounding DINO等)は推論時間が課題
- 精度を維持して高速化

**用語メモ**
| 用語 | 説明 |
|--|--|
| オープンボキャブラリ物体検出 | 検出対象の物体を任意のテキストで自由に指定する |
| grounding | 抽象的なモノを具体的なモノに結びつけること<br>言語情報を画像中の物体に結びつける |

※以降、オープンボキャブラリをOVと記載

## 学ぶモチベーション
**自動アノテーションでの利用を想定したポテンシャル確認**
1. YOLO-World が実用的なレベルの能力を持っているかの確認
1. 疑似ラベル関連の内容が自動アノテーションの参考になれば

**課題感と期待**
- 課題
    - アノテーションの効率化は多くのプロジェクトで課題になりがち
    - 既存モデルをアノテーションに利用する取り組みは各所でされているが、デファクトスタンダードな方法はない印象
    - GPT-4o等のLLM(VLM)はBOXの位置やサイズが不正確
      (YOLO-Worldを調べている時点で、自身でのGemini2.0検証は未実施)
- 期待
    - OVならクラス定義を自由に変更でき、可用性の高い自動アノテーションモデルとして活用できる

## 内容
### RepVL-PAN
**Re-parameterizable Vision-Language PAN**

#### PAN: Path Aggregation Network
- 役割: マルチスケール特徴を集約
    - スケール変化に強くなり、小さなオブジェクトを検出しやすくなる
- 構造: トップダウンパスとボトムアップパス
    - 高レベルな抽象的特徴を下層に伝播するトップダウンパス
    - 低レベルな特徴を上層に伝播するボトムアップパス
- 活用: YOLOシリーズなど、さまざまな物体検出モデルで活用されている

[PANet論文読み](https://qiita.com/Q_ys/items/e303c5e0121b1226cd50)

- 役割: 視覚情報と言語情報を統合する
- 構造: 
    - T-CSPLayer
        - Text-guided CSPLayer
        - 画像特徴(C3～C5)とテキスト特徴の行列積にmaxとシグモイド適用
        - テキスト特徴に類似する画像特徴が残る
    - I-Pooling Attention
        - Image-Pooling Attention
        - 各スケールの視覚特徴(T-CSPLayer由来)を結合
        - Multi-Head Attentionで視覚特徴とテキスト特徴の相関を計算
        - 画像特徴を反映したテキスト特徴が誕生

<img src="https://arxiv.org/html/2401.17270v3/x4.png" alt="構造図" width=60% />


#### 推論時の再パラメータ化
- 従来の物体検出器と一般的なOV物体検出器を混ぜたような使い勝手
    - 検出対象とするプロンプトを事前にセット(テキスト埋め込みを事前に作成)
    - T-CSPLayerとI-Pooling Attentionの簡易化

![一般的な物体検出器の推論フローとの比較図](https://arxiv.org/html/2401.17270v3/x2.png)

### 疑似ラベルの生成と学習での利用
#### 領域テキストペア(疑似ラベル)生成の流れ
以下の流れで24万枚以上をラベリング
1. 画像テキストデータセットから物体の名詞を抽出
1. GLIPによる領域テキストペアの仮提案
1. CLIPベースフィルタリング

![疑似ラベル生成フローの図](https://arxiv.org/html/2401.17270v3/x8.png)

#### 領域テキストペア(疑似ラベル)生成の流れ
**CLIPベースフィルタリング**
1. 画像テキストスコアの計算
    - CLIPで画像とキャプションの類似度を計算
1. 領域テキストスコアの計算
    - CLIPで仮提案した領域(crop画像)とテキストの類似度を計算
1. (任意)再ラベル付け
    - crop画像と全名詞中で最高類似度の名詞を割り当て(GLIPの補正)
1. 再スコアリング
    - 領域(crop画像)とテキストの類似度を信頼度とする
1. 領域レベルのフィルタリング
    - 仮提案ペアをテキストでグループ分けし、NMSと信頼度でフィルタリング
1. 画像レベルのフィルタリング
    - 保持されたペアの信頼度の平均を画像の信頼度としてフィルタリング

### 実験結果
[LVISデータセット](https://www.lvisdataset.org/)を使用してゼロショット性能を評価
参考: [LVISデータセットの概要](https://docs.ultralytics.com/ja/datasets/detect/lvis/)

**論文の Table 2 の画像**
推論速度(FPS)、精度面で既存手法と比較して強力。
ただしYOLO-Worldは推論速度がウリであるため、比較対象に各モデルの小規模なものが選出。
![論文のTable2の画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4045187/c95afc52-211f-41b4-948a-e6fdbb274b70.jpeg)


**定性評価**
![LVISでのゼロショット推論結果](https://arxiv.org/html/2401.17270v3/x5.png)

![ユーザ指定の語彙による推論結果](https://arxiv.org/html/2401.17270v3/x6.png)

![特定の対象を狙った推論結果](https://arxiv.org/html/2401.17270v3/x7.png)

## まとめ
- 高速かつ高い精度のOV物体検出器
- ゼロショット性能やファインチューニング後の性能に優れる
    - OVインスタンスセグメンテーションにも応用可能できると主張

**所感**
- 論文内の主張のみを見ると魅力的に見えるものの、実用の観点ではまだまだ精度が不十分な印象
    - 上記の印象は下記参考情報や自身の簡単な検証からの感想としては、アプリへの組み込みや自動アノテーションどちらの用途でも難しそう
        - 指定した物体を全然検出できないことや、1インスタンス程度しか検出できなかったり
- 速度はOVであることを考えると充分速い印象
- 実用したいと考えた場合には、LVIS等のデータセットによる評価力がまだまだ不足しているのかもしれない
- 速度面の制約が少ない自動アノテーション目的であればGrounding DINOの大規模モデルが良いかもしれない

**参考情報**
- YOLO-World
  - [世界を知ったYOLO YOLOWorld! 【Text2Detction 】](https://qiita.com/john-rocky/items/284cc692abe82ce6ceb4)
  - [YOLO-Worldを使って物体検知をする](https://zenn.dev/headwaters/articles/6b44458832d6c3)
  - [Super PINTO](https://x.com/PINTO03091)氏のX(Twitter)
    - [shoulder, elbow, knee](https://x.com/PINTO03091/status/1874840410297970950)
    - [head, foot, eye](https://x.com/PINTO03091/status/1874841390942937245)
    - [person, head](https://x.com/PINTO03091/status/1874841957878648938)
- GPT-4o
  - [GPT4oを使って、訓練無しで物体検出(BBox)ができるか試してみる](https://zenn.dev/mattyamonaca/articles/6dc8fd4536fd97)
  - [GPT-4o Visionに物体検出させてみる](https://qiita.com/MarkInada/items/4caa4e04b6fbab2f53b8)
  - [Dot MatrixでGPT-4oによる物体検出の精度が上がるか試してみる](https://zenn.dev/techsword/articles/2024-05-19-gpt-od-13a9894bcf7781)
- Gemini
  - [Gemini-2.0-flashにバウンディングボックス描画をさせて物体検出能力を試す](https://zenn.dev/headwaters/articles/8f9e6bd01b7f76)
  - [Gemini 2.0 Flashでの2D空間認識(物体検出)を試してみた](https://qiita.com/te_yama/items/e9c999b3d6ad8f7b0bef)
  - [Gemini のマルチモーダルの7つの例 > 物体検出](https://note.com/npaka/n/n4621c538af1a#aaf356fd-8b1d-430f-9a77-8b023f82f25b)

## 関連情報
- [GLIP: Grounded Language-Image Pre-training](https://github.com/microsoft/GLIP)
- [Grounding DINO](https://github.com/IDEA-Research/GroundingDINO)
  - [Grounded SAM](https://github.com/IDEA-Research/Grounded-Segment-Anything)
- [OWL-ViT](https://github.com/google-research/scenic/tree/main/scenic/projects/owl_vit)
- [DetCLIPv3](https://openaccess.thecvf.com/content/CVPR2024/papers/Yao_DetCLIPv3_Towards_Versatile_Generative_Open-vocabulary_Object_Detection_CVPR_2024_paper.pdf)
- [ZSD-YOLO](https://github.com/Johnathan-Xie/ZSD-YOLO)