VIBEの推論性能テスト(CUDA ,ROCm(現時点で動作せず）)

動画対応人体のポーズ推論ライブラリVINEの推論環境構築時のメモとベンチマークテストです

https://github.com/mkocabas/VIBE

#環境
python環境 miniconda
Ubuntu 18.04
GPU GTX1080Ti&RadeonⅦ
GPUプラットフォーム CUDA10.2&ROCm3.0


#CUDAでの環境構築

minicondaでpython環境構築をしました
なぜかpython3.7以上を推奨されてるはずなのに3.7では動かず3.6で安定して動いた.
公式のドキュメントどおりに環境構築するとエラーが出て動かなかったので当方の環境ではたいへん苦しんだ、colabでは動いていたので環境依存の可能性が高い.

```bash
$ git clone https://github.com/mkocabas/VIBE.git
$ cd ./VIBE
```


```bash
$ conda create -n vive python=3.6 
pip install -r requirements.txt 
pip install twine
bash prepare_data.sh
```
install_pip.shやinstall_conda.shが一応用意されているが今回はブラックボックスを避けるため使用しない
マニュアルとは違うがこれで安定した.


#実行ベンチマーク
https://github.com/mkocabas/VIBE/blob/master/doc/demo.md#runtime-performance
参考は以上

##GTX1080Ti

```
python demo.py --vid_file sample_video.mp4 --output_folder output/ --sideview
```

Tracking FPS 25.27
VIBE FPS: 32.77
Total time spent: 29.52 seconds (including model loading time).
Total FPS (including model loading time): 10.16.


![Screenshot from 2020-01-21 01-08-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232732/2f5d0c9c-6a98-3027-cc36-7fca48147577.png)


#ROCm(AMD Radeon7)でのテスト

Docker(rocm pytorchを使用してテストしました）
本来ならDockerfileがスマートですがコンテナ内に入って試行錯誤した時のシェルを今回は貼ります


###Docker run

ハマリポイントがここらへんにある

```
 sudo   docker run --name pytroch_rocm -it  --privileged --rm --device=/dev/kfd --device=/dev/dri --group-add video  rocm/pytorch:rocm3.0_ubuntu16.04_py3.6_pytorch
``` 
詳細は参考URLを見ていただきたいですが```--shm-size```で共有メモリサイズを拡張しないとうまく動きません.

なので正しくは以下のコマンドでdocker runさせます


```
 sudo   docker run --name pytroch_rocm -it --shm-size=16G --privileged --rm --device=/dev/kfd --device=/dev/dri --group-add video  rocm/pytorch:rocm3.0_ubuntu16.04_py3.6_pytorch
```

rocm3.0との相性の悪さも言われているのでROCm2.10を使う場合は

```
 sudo   docker run --name pytroch_rocm -it --shm-size=16G --privileged --rm --device=/dev/kfd --device=/dev/dri --group-add video  rocm/pytorch:rocm2.10_ubuntu16.04_py3.6_pytorch
```


###コンテナ内での環境構築

```bash
$ git clone https://github.com/mkocabas/VIBE.git
$ cd VIBE
$ pip3 install -r ./requirements.txt
$ pip3 install  twine
$ apt install ffmpeg
$ apt-get install libglfw3-dev libgles2-mesa-dev
$ bash prepare_data.sh

```
###実行

```
python3.6 demo.py --vid_file sample_video.mp4 --output_folder output/ --sideview
```

###ベンチマーク結果とエラー

Tracking FPS 1.70

途中でエラーが発生してしまった

```
Running VIBE on each tracklet...
  0%|                                                                                                                                                                                        | 0/1 [00:00<?, ?it/s]Traceback (most recent call last):
  File "demo.py", line 383, in <module>
    main(args)
  File "demo.py", line 160, in main
    output = model(batch)[-1]
  File "/root/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", line 539, in __call__
    result = self.forward(*input, **kwargs)
  File "/root/VIBE/lib/models/vibe.py", line 267, in forward
    smpl_output = self.regressor(feature, J_regressor=J_regressor)
  File "/root/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", line 539, in __call__
    result = self.forward(*input, **kwargs)
  File "/root/VIBE/lib/models/spin.py", line 376, in forward
    pose2rot=False
  File "/root/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", line 539, in __call__
    result = self.forward(*input, **kwargs)
  File "/root/VIBE/lib/models/spin.py", line 485, in forward
    smpl_output = super(SMPL, self).forward(*args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/smplx/body_models.py", line 376, in forward
    self.lbs_weights, pose2rot=pose2rot, dtype=self.dtype)
  File "/usr/local/lib/python3.6/dist-packages/smplx/lbs.py", line 205, in lbs
    J_transformed, A = batch_rigid_transform(rot_mats, J, parents, dtype=dtype)
  File "/usr/local/lib/python3.6/dist-packages/smplx/lbs.py", line 347, in batch_rigid_transform
    rel_joints.view(-1, 3, 1)).view(-1, joints.shape[1], 4, 4)
RuntimeError: view size is not compatible with input tensor's size and stride (at least one dimension spans across two contiguous subspaces). Use .reshape(...) instead.
  0%|     
```



###参考
https://stackoverflow.com/questions/56297064/how-to-fix-importerror-unable-to-load-egl-library-22-the-specified-module-c
https://qiita.com/gorogoroyasu/items/e71dd3c076af145c9b44