論文調査　Crowd3D: Towards Hundreds of People Reconstruction from a Single Image

## はじめに
まとめているのは初学者です．誤っている部分があるかもしれません．
著者がミスに気付き次第、修正・加筆していますが、もし間違いなど合ったら教えていただけると幸いです．

原著論文：https://arxiv.org/abs/2301.09376
コード：https://github.com/1020244018/Crowd3D

## 概要
大規模シーンの画像から数百人の3Dポーズ、形状、および位置を一貫性を持って再構築します．
Adaptive Human-centric Cropping（適応型人物中心クロッピング）スキームを使用して、異なるスケールの人々の適切なスケール比率を確保します．
Human-scene Virtual Interaction Point (HVIP)の概念を導入し、2Dピクセル位置を利用して3D位置を推定します．

### タスクの課題
一枚の画像から人物の姿勢・形状を推定することは奥行きの曖昧さによって困難．
1. 人物が比較的小さい、カメラ方向に動いてくる人は2Dスケールが非常に変化する
1. 単一ビューからの深度の曖昧さによって、絶対的な3D姿勢と位置を推定することが難しい
1. 人の身長に一貫性がない（子供の背が低い、遠くにいる人の背が低い）
1. 大きな画像内に数百人の群衆がいるようなデータセットがない

### 既存手法
焦点距離を一定と仮定して、人体メッシュや3D姿勢を再構成する．
しかし、画像サイズに比べて人のスケールが小さいと、大域的な画像から人物を回帰することは困難。
画像を切り抜く手法を用いた場合、切り出した画像を独立に推論することになるので、グローバルに一貫した再構成を得ることはできない．

### 論文解説

#### 3.1. Adaptive Human-centric Cropping
大規模シーンから人物を適切に切り抜くための手法
異なるスケールの人物を一貫性を持って処理することができる
目的：異なるスケールの人を適切にクロップし、再構築の精度向上させる
手法：階層的な高さの変化にも基づき、一貫性のあるスケール比率を保ちながら、クロップ処理する．
詳細：
データセット的に、カメラの上部にいる人物は小さく、下部にいる人物は大きく写っている．そのため、上部下部にいる人によって人物の高さを設定し、クロップする領域のサイズを定義する．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/3c9db39d-6366-9e9f-2c3c-c944de3ed0b1.png)

#### 3.2. Camera and Ground Plane Estimation
目的：地面平面の推定、人物が正しく地面に立っていることを保証する
詳細：
- 人物の足首と肩の位置情報を用いて、人物が地面に垂直にいると仮定して、歩いている人物と立っている人物を選定する．
- 足首の位置は地面に、肩の位置は地面から一定の高さにあると仮定する．
- これらのプロセスによって、人物が正しく地面に立っていることを確保できる．

#### 3.3. Crowd3DNet
クロップされた画像から人物の3Dメッシュを大規模シーンから一貫して再構成するための多段階ネットワーク．
複数のヘッドを持つ1段階ネットワークでマルチヘッド、出力は4つ．
1. a body center heatmap：人物の体の中心位置を予測するヒートマップ
各ピクセルが人物の中心である確率を示す．
1.  a torso center offset map：身体中心ヒートマップから胴体中心へのオフセットを予測するマップ
1. a 2D HVIPマップ：Human-scene Virtual Interaction Point (HVIP) の2Dプロジェクションを予測するマップ
人物の3D位置を推定するための中間ステップ
1. a SMPL parameters map：SMPLモデルのパラメータ（ポーズと形状）を予測するためのマップ、3Dメッシュを生成

---
#### 各損失項の詳細

損失関数
```math
L = \lambda_{center} L_{center} + \lambda_{mesh} L_{mesh} + \lambda_{hvip} L_{hvip} + \lambda_{tc} L_{tc} + \lambda_{root} L_{root} + \lambda_{gn} L_{gn} + \lambda_{out} L_{out}
```

1. $L_{center} (2D focal loss)$:
   - **目的**: ボディセンターヒートマップの精度を上げるため．
   - **定義**: 2D焦点損失は、ボディセンターヒートマップの各ピクセルが人物のボディセンターである確率を示して、予測の精度を向上させる．

2. $L_{mesh} (SMPL関連のL2 loss)$:
   - **目的**: SMPLモデルのパラメータの精度を上げるため．
   - **構成**:
     - $L_{pose}$: ポーズパラメータのL2損失．
     - $L_{shape}$: 形状パラメータのL2損失．
     - $L_{j2D}$: 2Dジョイント投影のL2損失．
     - $L_{j3D}$: 3DジョイントのL2損失．
     - $L_{paj3D}$: プロクルースト整列後の3DジョイントのL2損失．
     - $L_{gm}$: メッシュのL2損失．

3. $L_{hvip} (2D HVIP projection loss)$:
   - **目的**: 2D HVIPマップの予測精度を上げるため．
   - **定義**: HVIPの2D投影点の予測精度を評価し、向上させるためのL2損失．

4. $L_{tc} (2D torso center loss)$:
   - **目的**: トルソーセンターオフセットマップの精度を上げるため．
   - **定義**: ボディセンターからトルソーセンターへのオフセットの予測精度を評価し、向上させるためのL2損失．

5. $L_{root} (absolute root position loss)$:
   - **目的**: 絶対ルート位置（地面における足首の位置）の精度を上げるため．
   - **定義**: 足首の絶対位置の予測精度を評価し、向上させるためのL2損失．

6. $L_{gn} (ground normal regularization)$:
   - **目的**: 地面法線の一貫性を上げるため．
   - **定義**: 地面の法線ベクトルと肩と足首の方向ベクトルのコサイン距離を最小化して、地面と人物の一貫性を保つための正則化項．

7. $L_{out} (out-of-bound loss)$:
   - **目的**: 人物が地面を貫通しないようにするため．
   - **定義**: 人物メッシュの最も深刻な地面貫通点に対してL1損失を適用し、地面貫通を防止する．

#### 評価指標（詳細は省きます）
1. PPDS (Pair-wise Percentual Distance Similarity)
推定された人物間の距離がGTの人物間の距離とどれだけ類似しているか測定．
1. PA-PPDS (Procrustes-Aligned PPDS)
推定された群衆とGTの群衆をProcrustes整列を用いてスケールと回転の影響を排除した後のPPDS．
1. OKS (Object Keypoint Similarity)
COCOデータセットで使用される評価指標であり、各キーポイントの位置が真の位置にどれだけ近いかを測定する．
1. PCOD (Percentage of Correct Ordinal Depth)
画像内の人物ペア間の深度関係（どちらが前にいるか）の正確性を評価する．

以上です．評価指標については別の記事でまとめて書きます．