論文解説：RTMO: Towards High-Performance One-Stage Real-Time Multi-Person Pose Estimation

## 論文の解説
大学生です。研究の一環で、姿勢推定関連の論文を読んでいるので、その読んで理解できた内容を書いていきます。
もし、間違いを見つけてくださったり疑問点がありましたら、ご指摘いただけると大変嬉しいです。

原著論文：https://arxiv.org/abs/2312.07526
## RTMO: Towards High-Performance One-Stage Real-Time Multi-Person Pose Estimation
この論文はCVPR 2024で採択されたものになります。

Real-Time Multi-person One-stage (RTMO) はDynamic Coordinate Classfier (DCC) を導入しており、バウンディングボックスにローカライズされた動的なビン割当と学習可能なビン表現を含み、座標ヒートマップを効率的に学習するために最尤推定に基づく新しい損失関数を提案しました。
また、新しい損失関数により、サンプルごとの不確実性の学習が可能となり、タスクの難易度を自動的に調整し、より効果的で調和の取れた（easyとhard）学習を実現。

姿勢推定モデルを大別すると以下のようになります。（詳細は省きます）
1. Top-down手法：入力画像内の人物を切り抜き、切り抜いた画像に対して姿勢推定を行う
1. Bottom-up手法：入力画像からキーポイントを検出し、検出したキーポイントをつなげて姿勢推定を行う
1. Single-Stage手法：画像から特徴量を取り出し、その特徴量から直接、人物のキーポイント・姿勢推定を行う

その中でも、今回のRTMOは、Single-Stage手法にあたります。

Single-Stage方法の利点は以下になります。
1. トップダウン法に必要な前処理不要（人間検出）
2. ボトムアップ法に必要な後処理不要（キーポイントのグルーピング）
3. 画像のインスタンス数に関係なく、推論時間が一定である

しかし、従来のSingle-Stage手法はTop-downに劣る精度のイメージがありましたが、RTMOはCrowdPoseでSOTAを取り、かつリアルタイム性も有するモデルになっています。

## モデル詳細
### 入力から出力までの流れ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/db55a478-4010-bfe6-a15c-94c7d1e043c6.png)
図1. RTMOのネットワーク構造

---
1. **Backbone**: CSPDarknetを用いており、画像から特徴を抽出します
    
    入力：画像　出力：特徴マップ（複数スケール）
    
    - CSPDarknetを使用する理由
        1. **効率と性能のバランス**: 計算効率と性能のバランスが非常によく、リアルタイムのアプリケーションに富む
        2. **特徴抽出の強化**: 特徴の再利用とクロスステージの特徴融合を強化する設計を持っており、画像からより豊富な情報を抽出可能
        3. **スケーラビリティ**: 異なる深さや複雑さのモデルに容易に適応可能で、様々な要件に応じたカスタマイズが可能。特定のニーズに合わせて最適なトレードオフを選択可能
        4. **リアルタイム性能**: リアルタイム性が要求される環境での使用に適する

2. **Neck**: 複数の畳み込みブロックを使用して特徴を精錬し、特徴マップを生成。Neckはモデルの名前ではなく、バックボーンと出力をつなぐ部分の役割のアーキテクチャの総称
 
    入力：特徴マップ　出力：特徴マップ（洗練した）
    
    - Neckの役割
        1. **特徴融合**: バックボーンからの異なる解像度の特徴マップを融合し、多様なスケールの情報を統合。様々なサイズの対象を効果的に検出・認識できるようになります
        2. **中間特徴の強化**: 初期の畳み込み層で抽出された低レベルの特徴と、深層で得られる高レベルの抽象的な特徴を組み合わせ、より情報量の豊かな特徴マップを生成します
        3. **情報の最適化**: 特徴マップを最終的なタスク（物体検出、セグメンテーション、ポーズ推定など）に最適化するための前処理を行います。これには、特徴の正規化や、特定のタスクに必要な形式への変換が含まれることがあります

3. **Head**: 各グリッドセルに対してスコア、バウンディングボックス、キーポイント座標、可視性の予測を行います
    
    入力：特徴マップ
    
    出力：以下３点
    
    1. Score：各グリッドセルが特定のキーポイントを含む確率
    2. Pose&BBox：人物の位置を示すための座標。キーポイントの座標
    3. Keypoint Visibility (Kpt. Vis.)：各キーポイントが画像上に見えるかどうか
4. **Dynamic Coordinate Classifier (DCC)**: ポーズ特徴を用いて、水平及び垂直軸に沿った1-Dヒートマップのペアを生成。バウンディングボックスの1.25倍の領域をカバー
    
    入力：人物を囲うバウンディングボックスの座標、特徴マップ
    
    出力：各キーポイントの座標位置の最も高い確率のビンの位置情報
    
    - DCCの詳細
        1. **ビンの動的割り当て**: 
            
            画像内の各人物に対して、バウンディングボックスに基づいてビンを動的に割り当てます。広い範囲にわたるビンではなく、実際にキーポイントが存在する可能性のある局所的な範囲に焦点を当てることができます
            
            ここでは、BBoxの大きさや形に基づいて便の数や大きさを動的に調整する。
            
            - Bins
                ビン（Bins）は画像全体または特定の領域を分割し、それぞれの区間を独立したクラスとして扱うための概念
                
        2. **位置エンコーディングの適用**: 各ビンには位置エンコーディングが割り当てられ、このエンコーディングはそのビンの位置情報を表します。位置エンコーディングは、DCCがキーポイントの正確な位置を特定するために重要な役割を果たします
        3. **キーポイントの特徴抽出**: 特定のキーポイントに関連する特徴を特徴マップから抽出し、 モデルは各キーポイントに対して、どのビンが最も高い確率かを分類します。これにより、キーポイントの精確な座標位置が推定されます
        4. **座標分類**: 抽出された特徴と位置エンコーディングを組み合わせて、各キーポイントの最も可能性の高い座標をクラスとして分類します

    - DCC内での処理の流れ
        1. **バウンディングボックスの受け取り**
        拡張されたバウンディングボックスの左上角 (*xl*,*yt*) と右下角(*xr*,*yb*) の座標を受け取る。
        1. **ビンの動的割り当て**
画像またはバウンディングボックス内を複数のビンで分割する。キーポイントが存在する可能性のある各領域が明確に定義される。
        1. **SPE (Sine positional Encording)**
各Binの位置情報をモデルが効率的に解釈できるようにエンコードすることが目的。SPEは各ビンの位置を三角関数を使ってエンコードする方法。具体的には、各ビンの位置に関する数値をサインコサイン関数に入力し、出力された値を特徴ベクトルとして使用する。
        1. **FC（畳み込み）**
3より出力されたPE (Positional Encording) を畳み込み、各Binの位置情報を畳み込む
        1. **キーポイント座標の推定**
4で出力された位置情報と画像の特徴を合わせてキーポイントの存在する確率を算出する。画像の特徴を抽出するために以下の処理を行う。
        
            1. **PoseFeat**：ポーズの特徴。画像内の全体的なポーズ情報が含まれている。つまり、画像内の全ての人間の視覚的な情報の特徴マップ。
            2. **FC**：PoseFeat.から得た特徴マップを畳み込み、一次元のベクトルに変換する（各キーポイントに対する関係性を抽出するための抽象的な表現を学習するため）
            3. Reshape：次ステップのGAUに使用できるように適切な形状にデータ変換を行う。
            4. GAU (Gated Attention Unit) ：抽出された特徴に対してAttention機構を適用し、キーポイントの位置を正確に特定する。異なる特徴間での相互作用を制御し、重要な情報を強調しながら不要な情報を抑制する。
            5. Kpt. Feat. ：各キーポイントに対応する具体的な特徴
            以上で得られた各キーポイントに対応する具体的な特徴と、位置情報を組み合わせる。（行列乗算”Matrix Multiplication”を計算している）
            6. ヒートマップへの変換と座標の抽出
            選択されたビンからキーポイントの座標を抽出するために、位置情報をヒートマップに変換。画像内の具体的なピクセル位置がキーポイントとしてマッピングされ、最終的なポーズ推定の出力を生成。
        
5. **Heatmaps**: 各キーポイントに対して、精確な座標を抽出するためのヒートマップが生成されます。

まだよく分かっていない部分もあるので、随時更新します。