[論文読み] V2V-PoseNet ：デプスマップから人体のkey-point三次元位置推定を行うネットワーク

# V2V-PoseNet: Voxel-to-Voxel Prediction Network for Accurate 3D Hand and Human Pose Estimation from a Single Depth Map(CVPR2018)

###### description: 論文読んだまとめ記事
###### url: https://arxiv.org/abs/1711.07399
自分なりに解釈したメモになります。
ミスがあったら優しく教えてください。

---

- Title  
V2V-PoseNet: Voxel-to-Voxel Prediction Network for Accurate 3D Hand and Human Pose Estimation from a Single Depth Map
- Conference  
CVPR2018
- Authors  
Moon, Gyeongsik, Ju Yong Chang, and Kyoung Mu Lee

---

## どんなもの?

**3次元のDepthマップから3次元の手や人体の関節の三次元位置推定(以下、key-point推定)を行うためにパワフルなネットワークであるV2V-PoseNetを提案した。[^b]**

V2V-PoseNetは２次元のDepthマップをボクセル化したものを入力として、V2V-PoseNetによってkey-pointを推定する。
V2V-PoseNetは3Dのデータを3Dのままに扱うことにより従来手法の欠点を克服している。

この研究の価値は**2D(Depthマップ)から3D(Voxel)を推定していた従来の傾向に対して、3Dから3Dを推定することの有用性を示した点**にあるのではないだろうか。

リアルタイムに実行可能(35FPS)と言っているがマルチGPUによる力押しらしい。

- Model architecture
![](https://i.imgur.com/dvdIDtx.png)

- Input format discussion

## 先行研究と比べて何がすごい？
### ■従来研究
従来の研究は3Dのデータを2DのdepthマップとしてCNNにかけるなどの方法が取られていた。

### ■従来研究の欠点
2Dデプスマップから3D座標を出す方法には２つ欠点がある。

1つ目は、従来手法はdepthマップを２次元画像として扱っているため、2次元への射影時にdistorionが生じるという点だ。
~~本来3Dのデータを2Dにすることによるdepthマップの歪みがあることである。
これにより、ネットワークは歪んだ見え方に対して不変的な推定を行うようになる。~~

2つ目は、2Dイメージから3D座標を推定することは非線形(mapping)であり学習が難しいということだ。

### ■改善方法
V2V-PoseNetは3Dのデータを3Dのままに扱うことでこれらの欠点を克服している。
具体的には、それぞれのVoxelがkey-pointらしさを持っており、そのVoxelを3Dの畳込みで処理していく。

![input_exp](https://i.imgur.com/z6d25B6.png) 

![Table1](https://i.imgur.com/0ImKLTr.png)

上記の表のように、**表現方法の改善によってパラメータ数を抑えつつも精度の向上が見込める**。

## 技術の手法や肝は？
V2V-PoseNetは3Dのデータを3Dのままに扱い、ボクセル毎に各key-pointsらしさ(尤度)を求める。
具体的には、それぞれのVoxelにkey-pointらしさをもたせ、そのVoxelを3Dの畳込みで処理していく。
入力は2DのDepthマップを3DのVoxel表現に変換してから、全体の点群から推定したい点群を切り抜いて与える。
V2V-PoseNetでは、この前処理にシンプルなCNN[^29]を使っている。

![architecture](https://i.imgur.com/dvdIDtx.png)


- 前処理(Refining target object localization)  
全体の点群から取り扱いたい点群を切り出す三次元的な箱をcudicという。
入力点群の重心が中央に来るようにcudicを決定したりする手法がある。
しかしその手法の場合、例えば物体を掴んでいる時などには適切に動作しない。
そのため、以下の図に示すシンプルなCNN(他論文で提案されたネットワーク[^29])を使って正しいReferencePointとのオフセットを得る。

![input_](https://i.imgur.com/mM5k02x.png)

![Table2 refining ](https://i.imgur.com/vHhL8ld.png)

- 入力
**2Dデプスマップを3DVoxel(88×88×88)に変換する。
前処理で求めた参照点(the reference point)からcubic boxを切り抜く。**
(voxelサイズに沿って離散化されることになる)
入力が88x88x88であるため、ほぼ$O(10^6)$でリアルタイムに実行できるということなのだろうか。

- 出力
Voxelごとに各key-pointの尤度を求める。
つまり、key-pointごとのヒートマップを求めることと等しい。
    - 確率密度関数  
    grand-truth$(i,j,k)$でピークになるようにガウス分布を設計する。
    $n$：key-point
    $i_n,j_n,k_n$：key-point nの正しい座標
$$
    H^*_n(i,j,k) = exp\left(-\frac{(i-i_n)^2+(j-j_n)^2+(k-k_n)^2}{2\sigma^2}\right)
$$
    - 損失関数  
$$
    L = \sum^N_{n=1}\sum_{i,j,k}||H^*_n(i,j,k)-H_n(i,j,k)||
$$

### ネットワーク構造
- volumetric basic block  
(7x7x7)  
VolumetricBatchNormalization  
ReLU
hour-glass model[^28]ベース
- volumetric residual block  
ある論文[^17]の2D residual blockを拡張したもの。(3x3x3)
- volumetric downsampling block  
三次元のMaxPoolingLyer(2×2×2 stride 2)
- volumetric upsampling block  
三次元の逆畳み込み(2×2×2 stride 2)
VolumetricBatchNormalization
ReLU
- encoder decoder  
下図に示す。
図中での@32は32channelを示す。
特徴的な構造だがどこの論文を参考にしたとかは書かれていない。
三次元のデータへのencoder-decoderはこの形が一般的なのか？  

![enc_dec](https://i.imgur.com/yMDsHKW.png)

- 出力層の近く  
encoder-decoderの出力に対して1×1×1のvolumetric basic blocksと1×1×1のvolumetric convolutional layerでvoxelごとの尤度予測を行う。

## データ拡張
すごくベーシック

- **回転**  
    [-40, 40] degrees
- **拡大・縮小**  
    [0.8, 1.2]
- **並進移動**  
    [-8, 8] voxels

## どうやって有効だと検証したか[^c]
直接key pointの座標を求める手法と比べ、ボクセル毎の確立を求めることで精度が向上した。具体的には、正解値との誤差、mAPの2つの尺度において従来手法よりも数値的に向上したことを確認した。[^a]

- HANDS2017 frame-based 3D hand pose estimation Challenge Results

![Challenge_result](https://raw.githubusercontent.com/mks0601/V2V-PoseNet_RELEASE/master//figs/Challenge_result.png)

k- Comparison with the previous state-of-the-art methods

![Paper_result_hand_graph](https://raw.githubusercontent.com/mks0601/V2V-PoseNet_RELEASE/master//figs/Paper_result_hand_graph.png)

![Paper_result_hand_table](https://raw.githubusercontent.com/mks0601/V2V-PoseNet_RELEASE/master//figs/Paper_result_hand_table.png)

![Paper_result_human_table](https://raw.githubusercontent.com/mks0601/V2V-PoseNet_RELEASE/master//figs/Paper_result_human_table.png)


## 参考文献
[^a]: https://cvpaperchallenge.github.io/CVPR2018_Survey/#/ID_V2V-PoseNet_Voxel-to-Voxel_Prediction_Network_for_Accurate_3D_Hand_and_Human_Pose_Estimation_from_a_Single_Depth_Map
[^b]: https://github.com/mks0601/V2V-PoseNet_RELEASE
[^c]: http://icvl.ee.ic.ac.uk/hands17/

[^17]: K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In IEEE Conference on Computer Vision and Pattern Recognition , pages 770–778, 2016.
[^28]: A. Newell, K. Yang, and J. Deng. Stacked hourglass net-works for human pose estimation. InEuropean Conference on Computer Vision, pages 483–499. Springer, 2016.
[^29]: M. Oberweger and V. Lepetit. Deepprior++: Improving fast and accurate 3d hand pose estimation. In IEEE InternationalConference on Computer Vision Workshop, Oct 2017.