漢なら単一 RGB 画像から DensePose で三次元ポーズ推定, 三次元ボディ形状推定したいですね!
やりましょう!
できました.
ねんがんの DensePose での三次元形状推定にせいこうしたぞ!!!!! ㊗️㊗️㊗️㊗️㊗️🎉🎉🎉🎉🎉✨✨✨✨✨🎉🎉🎉🎉🎉✨✨✨✨✨💪💪💪✌️✌️✌️✌️😍😍😍😍💪💪💪💪💪😆😆😆😆 pic.twitter.com/8kz7z4n00y
— Syoyo Fujita (@syoyo) July 15, 2018
環境
2018 年 7 月時点の構成です.
- Ubuntu 16.04
- miniconda
- GTX 1080 Ti
- CUDA 9.0(8.0 が安定しているようです. 9.1 はたぶん動きません)
- NCCL2
- cuDNN 7.1.4(7.0 など, 古いと caffe2 prebuilt とバージョンが合わずに実行時にエラーが出ます)
セットアップとビルド
注意点
DensePose(detectron, caffe2 も?)は python2 で記述されているので, python2 環境で動かす必要があります(cPickle など, python2 でしか使っていないライブラリを使っているため)
caffe2 detectron op は GPU のみ のサポートになります. したがって CPU で動かすのができませんので注意です.
(CPU 版 caffe2 だと, 実行時に detectron op が見つからないなどのエラーが出ます)
detectron は DensePose
に付属の, DensePose 用に修正されたものを使います
(ビルドは DensePose
内で make
)
すでに Detectron
git repo https://github.com/facebookresearch/Detectron などをインストールしていると, 実行時に Non-existent config key: BODY_UV_RCNN
エラーになるので注意です!
Docker 環境に慣れているひとは, Dockerfile があるのでそちらを利用するのが都合がよいかもしれません.
ライブラリのインストール
を参考にします.
anaconda/miniconda で python 2.7 環境を作っているものとします.
$ conda create -n py27 python=2.7
python 2.7 環境にします.
$ source activate py27
caffe2 + CUDA 9.0 + cuDNN7 の prebuild binary をインストールします.
$ conda install -c caffe2 caffe2-cuda9.0-cudnn7
cocoapi は, 推論だけならインストールいらないかもしれませんので省きます.
DensePose の依存パッケージをインストールします.
$ pip install -r $DENSEPOSE/requirements.txt
make します. これにより DensePose 用にカスタマイズされた detectron
モジュールもビルドされます.
$ cd $DENSEPOSE
$ make
データを取得します.
$ cd $DENSEPOSE/DensePoseData
$ bash get_densepose_uv.sh
$ bash get_eval_data.sh
これで準備できました!
推論する.
を参考に, infer_simple.py
を実行します.
$ python2 tools/infer_simple.py \
--cfg configs/DensePose_ResNet101_FPN_s1x-e2e.yaml \
--output-dir DensePoseData/infer_out/ \
--image-ext jpg \
--wts https://s3.amazonaws.com/densepose/DensePose_ResNet101_FPN_s1x-e2e.pkl \
DensePoseData/demo_data/demo_im.jpg
一番最初に学習済みモデル(500MB くらい)のダウンロードが始まります.
DensePoseData/infer_out
に結果が出力されます(レンダー?された 3D 形状. UV によって色分けされています).
1080 Ti(130W に powerlimit) で, 推論の処理は 1 ~ 2 秒くらいでした. なかなか早いですね!
関連項目
単一画像からの最新ディープラーニング顔アルゴリズムを試す(2017 年 7 月 14 日時点)
https://qiita.com/syoyo/items/5277906d29b2dd49e3a2
PRNet を C++11 で動くようにして単一画像からの 3D 顔復元を行う.
https://qiita.com/syoyo/items/34be69a4b3bfe9174eeb
TODO
- 推論されたボディ形状とテクスチャを .obj でエクスポートする
- モバイルでうごかしたい(pytorch 1.0 に期待?).
- zozosuit で三次元ポーズ形状推定したい.
- Tik Tok ダンス動画からポーズ推定したい.
- DensePose により, 優秀な三次元ポーズ形状若人が, 人類史上最速で育成なされるスキームを確立する旅に出たい.