論文まとめ：Learning from Synthetic Animals

# はじめに
CVPR2020より以下の論文
[1] J. Mu, et. al. "Learning from Synthetic Animals" CVPR2020
のまとめ

CVF open access:
https://openaccess.thecvf.com/content_CVPR_2020/papers/Mu_Learning_From_Synthetic_Animals_CVPR_2020_paper.pdf

著者らの公式コード:
https://github.com/JitengMu/Learning-from-Synthetic-Animals

以下、興味ある点のみのメモ書き。

# 概要
- CADなどによる合成データを使って動物の骨格推定などを学習させるしくみの１つ
- consistency-constrained semi-supervised learning なるものを導入し、単一のCADデータとアノテーション無しのリアル画像から学習する仕組みを提案
- アノテーション付きのリアル画像と合成データとで学習させたモデルはアノテーション付きリアル画像のみで学習させたモデルの精度を上回った
- ドメイン変換のタスクでは合成データから学習させたモデルはリアル画像で学習したモデルの精度を上回った

# 背景

- 動物の骨格や体のパーツを推定するタスクは動物行動のモニタリング等に応用が効く
- しかし現状ではデータセットの作成が困難なため、研究が進んでいない
- そこで3D CAD で作成した動物のデータセットを使った学習方法提案する
- このような合成のデータセットは作成が簡単であるだけでなく、オクルージョンの場合など、人がアノテーションすることが困難な場面でも容易に自動で生成できるという利点がある


# 動物の骨格やセグメント系データセット

### 1. Dataset for articulated motion discovery using pairs of trajectories

現在見当たらず


### 2. Caltech-UCSD Birds 200

http://www.vision.caltech.edu/visipedia/CUB-200.html

- 200種類の鳥における約6,000枚の鳥のデータセット
- 骨格はない？

### 3. Animal-Pose Dataset

https://www.jinkuncao.com/animalpose

- dog, cat, cow, horse, sheepの５種類の動物に関する骨格データ
- 4,000の画像内に8,000頭の動物が存在

### 4. Animal Parts dataset

https://www.robots.ox.ac.uk/~vgg/data/animal_parts/

- 100種類の動物における頭・四足の先をアノテーションしたデータセット
- 15,000枚の画像

### 5.Amur Tiger Re- identification in the Wild

https://cvwc2019.github.io/challenge.html

- アムール虎の骨格をアノテーションしたデータセット
- 動物園で撮影した92個体における8,000以上のビデオ・クリップからなる

### 6. PASCAL VOC datasetの体パーツをセグメント

- PASCAL VOC datasetに対して６種類の動物の体のパーツ（頭・胴体・四足）をセグメントしたデータセット

### 7. TigDog dataset

- 馬のビデオ79本と虎のビデオ96本からなるposeのデータセット
- 目２、あご１、肩２、足１２、腰１、首１の計19キーポイント

# 関連研究
## Animal Parsing
- SMPL ・・・人のshapeモデルの１つ
- SMAL ・・・動物のshapeモデルの１つ

## Unsupervised Domain Adaptation
- pix2pix
- Cycle-GAN
- MUNIT[2]・・・マルチモーダルなドメイン変換

人の3D合成モデルを作成する際に様々なposeを作る
- W. Chenら[3]
- SURREAL[4]

omni-supervised learningに関する論文
- I. Radosavovicら[5]・・・data distillationなるものを導入。これはunlabeled dataに対して複数のtransformを施し、それを教師ありで学習したモデルに入力し、その結果を集計してその画像のラベルとする手法。

curriculum learningに関する論文

# 手法

## 全体像

以下が本手法の全体像

![learning_from_syn_animal_img01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/4f115edf-ba54-18d8-8308-5f72215c07ee.png)

まず右側全体像を概観する。

１）右から合成画像 $X\_s$ 、そのアノテーション $Y\_s$ を Training と書かれた骨格推定モデル等に入力し、学習させる。

２） それとは別に図の中央上方、リアルでかつラベルの無い画像 $X\_t$ をその右 PL-Ge と書かれた擬似ラベル生成器に入力し、擬似ラベル $\hat{Y}\_t^{(1)}$ とその確信度 $C\_t^{(1)}$ を得る。

３）合成画像とラベルの組み合わせに加えて、リアル画像と擬似ラベルとの組み合わせも骨格推定モデル等の学習に利用する。

４）学習したモデルを $f^{(1)}$ として次のステップの擬似ラベル生成器 PL-Ge で使用する。これらを繰り返す。

次に図中左の Pseudo-Label Generation を見ていく。

１）最左のように、Youtubeか何かから持ってきた馬が駆けている動画を用意する。この中の2 frame $x^{i-1}\_t$ , $x^{i}\_t$ を考える。この段階では当然ラベルがない。

２）この画像に対してその右で３種類のtransformを施す。

３）具体的には、まず色合いを変える等、ラベルに影響を与えない transformation $T\_{\beta}$ を行う。

４）またscalingや左右flipといったラベルも同時に変わる transformation $T\_{\alpha}$ も行う。

５）はたまた２つの連続するframeを利用して前のframeに時間的な変化を加える transformation $T\_{\Delta}$ も行う。

これらを n - 1 の段階で学習したモデルに入力し、推定した結果をunsambleして、予測ラベル $\hat{Y}\_t^{(n)}$ とconfidence $C_t^{(n)}$ を出力させる。

## consistency
先に挙げた３つのtransformationを行っても維持されるconsistencyを考える。

### Invariance consistency
色変化やノイズ付加を行ってもラベルは変わらないだろう。

```math
f[T_{\beta}(X)] = f(X)
```

### Equivariance consistency
scalingや左右flipなどを行うと、ラベルも同様に移動するだろう。よって、この種の変換を施した画像をPL-geに入力し、得られたラベルを逆変換したものは、変換しない画像をPL-geに入力し、得られたラベルと一致するだろう。

```math
f(X) = T_{\alpha}^{-1} [f[T_{\alpha}(X)]]
```

### temporal consistency
例えば、2D 骨格推定の場合、optical flow で２frame間の移動を表せるだろう。

```math
f[T_{\Delta} (X)] = f(X) + \Delta
```

## confidenceの活用
ここはよくわかってないのであくまで想定。<font color="blue">間違ってたら連絡ください。</font>

### temporal consistencyにおけるconfidenceの活用

1. まずpose estimationの場合、各関節に対してheatmapが出力されるだろう。これを各関節のconfidenceと解釈（？）する。n iterateにおける i-1 frameから出力されるconfidenceを $C\_t^{(n),i-1}$ とする。

2. confidenceのピークを拾う等々行い、keypointのピクセルを決定する。

3. 決定したkeypointのピクセルにおける次フレームのconfidence $C\_t^{(n),i}$ を前フレームの値と比較する。

```math 
\frac{C_t^{(n),i}}{C_t^{(n),i-1}} < \lambda_{decay}
```

左辺が小さいということは、keypointが移動した可能性が高い。なので閾値を下回った場合はkeypointの位置を $\Delta$ 移動させる。

左辺が右辺を下回らない場合はkeypointの位置はそのまま。 

### 使用する学習データ決定時におけるconfidenceの活用
<font color="blue">書きかけ</font>

## loss
lossはmean square error。１）合成画像とそのラベルのセットを用いる場合、２）リアル画像とその擬似ラベルとのセットを用いる場合、の両方に対して計算する。

```math
L^{(n)} = \sum_i L_{MSE} (f^{(n)} (X_s^i), y^i_s) + \gamma \sum_j L_{MSE} (f^{(n)} (X_t^j), \hat{Y}^{(n-1),j}_t)
```

$\gamma$ は掛け率。

## 学習方法

以下の手順で学習を行う

- 合成画像とそのラベルとのセットのみで学習し、モデル $f^{(0)} = f\_s$ を得る。
- 次にリアル画像を入れて繰り返し学習するが、各iterationの冒頭でPL-geを用いて擬似ラベル $\hat{Y}^{(n-1),j}\_t$ を生成する。
- そのリアル画像＋擬似ラベルのセット、及び合成画像＋ラベルのセットの双方を用いてモデルを学習させる
- その際に合成画像＋ラベルのセットを含む割合は徐々に増やしていく


## 合成画像の作成方法

- １０種類以上の動物を用意
- 各動物に対してUnreal Engineを用いて光やテクスチャ、視点、動物の姿勢等を変えながら複数のシーンとそのアノテーションを生成

# その他

- ネットワークのアーキテクチャ：Stacked hourglass
- 最適化：RMSProp
- 入力画像のサイズ：256x256

# 実験と結果

## 2D pose estimation

以下の２パターンで2d pose estimationにおける精度を他のモデルと比較。

- リアル画像のアノテーションが無い場合・・・つまり合成画像とそのアノテーション＋アノテーションなしリアル画像で学習させた場合
- リアル画像のアノテーションがある場合・・・つまり合成画像とそのアノテーション＋リアル画像とそのアノテーションで学習させた場合

![CC_SSL_img00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/ab6a1cf0-63a0-95e5-44bb-3486dbf0a3cc.png)

まず下段のリアル画像のアノテーションが無い場合では、他の同条件下の手法を大きく上回っている。

一方、リアル画像のアノテーションがある場合では、リアル画像のみで学習させた場合と比較して、平均のaccuracyで２〜３％上回っている。

## Generalization
Visual Domain Adaptation Challenge dataset (VisDA2019)のsketch、painting、clipartを使って実験した。

![CC_SSL_img03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/3074922d-986e-67fc-6c96-23d3512d73fa.png)

Visible kepts accuracyは見えてるキーポイントのみ考慮した場合で、full kepts accuracyはオクルージョンしたキーポイントも考慮した場合。

CC-SSL（アノテーション無しtargetdomainの画像＋アノテーション付きsource画像の）とReal（アノテーション付きtarget画像）を比較した場合、hourseではいずれのtarget domainでも上回ったが、Tigerではpaintingのtarget domain時に下回った。




# reference
[2] X. Huang, et. al."Multimodal Unsupervised Image-to-Image Translation". ECCV2018.
[3] W. Chen, et. al. "Synthesizing Training Images for Boosting Human 3D Pose Estimation". 3DIMPVT 2016.
[4] G. V. Inria, et. al."Learning from Synthetic Humans". CVPR 2017.
[5] I. Radosavovic, et. al. "Data Distillation: Towards Omni-Supervised Learning" CVPR218