画像1枚から全身アバターを作る

ICCV2019で発表された画像1枚から3次元の人物を復元することができるPIFuというアルゴリズム、そのうち試してみようと思っていて放置していたけれど、ようやく試してみた。
PIFu: Pixel-Aligned Implicit Function for High-Resolution Clothed Human Digitization
https://shunsukesaito.github.io/PIFu/

画像1枚から人物のモデルを生成する手法はMPIの以下のグループなどが様々な手法を提案している。
REAL VIRTUAL HUMANS
https://virtualhumans.mpi-inf.mpg.de/

これまでの手法とPIFuとの違いは、従来の手法はSMPLなどのテンプレートモデルをベースに復元処理を実行するのに対して、PIFuはImplicit Function(陰関数)の表現を学習させるところにある(たぶん)。これにより、従来の手法ではスカートやダボっとした服装など裸のSMPLモデルから外れるようなケースではうまく復元できないという問題を解決している。

とりあえず、以下よりコードをクローンしてくる。
https://github.com/shunsukesaito/PIFu

その後、AnacondaでPIFu用の環境を作成し、以下のように必要なライブラリをインストールする。
pip install torch==1.5.0+cu101 torchvision==0.6.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
pip install pillow
pip install opencv-python
pip install scikit-image
pip install tqdm

また、PIFu/checkpointsフォルダを作成し、ここに学習済みのモデルをダウンロードする。ダウンロードはPIFu/scriptsにあるdownload_trained_model.shを利用するか、手動でdownload_trained_model.shに記載されているアドレスからダウンロードする。

ここまでで、利用する準備は完了。PIFuの入力はPIFu/sample_imagesにあるようにRGBの画像と人物領域のマスクのpngファイルとなっている。マスク画像の作成には、Githubのページにも書かれているようにremovebgを利用すると簡単に作成できる。

入力が準備できたら、以下のように各オプションを指定して実行することでモデルが生成される。
python ./apps/eval.py --name pifu_demo --batch_size 1 --mlp_dim 257 1024 512 256 128 1 --mlp_dim_color 513 1024 512 256 128 3 --num_stack 4 --num_hourglass 2 --resolution 256 --hg_down ave_pool --norm group --norm_color group --test_folder_path ./sample_images --load_netG_checkpoint_path ./checkpoints/net_G --load_netC_checkpoint_path ./checkpoints/net_C --gpu_id 0

生成されたモデルは以下の通り。処理時間はGeforce GTX 1080Tiで約10秒程度だった。
生成されたモデルのクオリティはそれほど高くないが、パラメータを変更することでもう少し改善はできそう。また、CVPR2020では以下の論文が発表予定となっており、より詳細なモデルが生成できるようになる模様。
PIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitizatio
https://shunsukesaito.github.io/PIFuHD/

コメント

このブログの人気の投稿

COLMAPでキャリブレーション済みのデータを使う

5点アルゴリズムによるカメラ位置・姿勢の推定

2D-3D対応からのカメラ位置・姿勢の推定