Deep3DFaceReconstructionで1枚の顔画像(2D)から、顔の3Dモデルを生成できるようなので試してみる
やってみた
試すのはgithubのDeep3DFaceReconstruction
Paper: Accurate 3D Face Reconstruction with Weakly-Supervised Learning: From Single Image to Image Set
変換元の顔画像(pngファイル)
変換後(objファイル)
できた!
耳や歯、髪の毛は対象外のようだが、1枚の画像から3Dのobjファイルを生成できた
やりかた(使い方)
readme.mdのUsageに沿ってやれば基本はOK
ただバージョン関連などでエラーが出ることはあった(後述)
実行環境
- Linux Ubuntu 18.04 LTS (Windows10 (1903)+ WSL)
- NVIDIA CUDA
$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2017 NVIDIA Corporation Built on Fri_Nov__3_21:07:56_CDT_2017 Cuda compilation tools, release 9.1, V9.1.85
WSLからだとGPU使ってない模様…
python環境を構築
pythonは3.6でやってみる
以降はこのpython仮想環境(activateした状態)で作業
$ virtualenv -p python3.6 venv36 $ source venv36/bin/activate (venv36)$
必要なもろもろをインストール
readmeにはtensorflow>=1.4とあるので、特に指定せず最新でやってみる
$ pip install tensorflow-gpu
$ pip install opencv-python
$ pip install pillow
$ pip install scipy
インストールしたものを確認(抜粋)
tensorflowはv2になった
$ python --version Python 3.6.8
$ pip freeze tensorflow-gpu==2.0.0 opencv-python==4.1.1.26 Pillow==6.2.1 scipy==1.3.2
Deep3DFaceReconstructionの準備
githubからDeep3DFaceReconstructionをclone
$ git clone https://github.com/Microsoft/Deep3DFaceReconstruction $ cd Deep3DFaceReconstruction
モデルの準備
下記のデータが必要なので、それぞれ利用規約に同意してダウンロードする(商用利用NGなので注意!)
- Basel Face Model 2009 (BFM09)
- Expression Basis
- trained model
Basel Face Model 2009 (BFM09)
readme.mdの「Prerequisite」のリンク
Basel Face Model 2009 (BFM09)
→「Basel Face Model」
→ページ一番下の「Download the Basel Face Model data.」から
Expression Basis
readme.mdの「Prerequisite」のリンク
「Expression Basis (transferred from Facewarehouse by Guo et al.)」
→「Introduction」の一行目の「CoarseData」から
trained model
readme.mdの「Usage」のリンク
→Download the trained model at 「GoogleDrive」から
ファイルの配置
ダウンロードしたデータをそれぞれ解凍し、中身の3ファイルを下記のように配置する(元から存在するファイルは省略)
Deep3DFaceReconstruction/ BFM/ 01_MorphableModel.mat Exp_Pca.bin network/ FaceReconModel.pb
実行してみる(エラーあり)
実行するにはDeep3DFaceReconstructionディレクトリの直下で
$ python demo.py
エラー:AttributeError: module ‘tensorflow’ has no attribute ‘placeholder’
実行したら、下記のエラーが出た
$ python demo.py Traceback (most recent call last): File "demo.py", line 76, in <module> ~中略~ images = tf.placeholder(name = 'input_imgs', shape = [None,224,224,3], dtype = tf.float32) AttributeError: module 'tensorflow' has no attribute 'placeholder'
tensorflowのv1とv2の互換性の問題のようなので、demo.pyの1行目の
import tensorflow as tf
を下記に書き換える
import tensorflow.compat.v1 as tf tf.disable_v2_behavior()
エラー:FileNotFoundError: [Errno 2] No such file or directory: ‘output/input/vd005.mat’
あらためて実行したら、下記のエラーが出た
$ python demo.py Traceback (most recent call last): File "demo.py", line 77, in <module> ~中略~ FileNotFoundError: [Errno 2] No such file or directory: 'output/input/vd005.mat'
パスの区切り文字の問題(実行環境はLinux)のようなので、demo.pyの73行目あたりの
savemat(os.path.join(save_path,file.split('\\')~ save_obj(os.path.join(save_path,file.split('\\')~
を下記のように、’\\’を’/’に書き換える
savemat(os.path.join(save_path,file.split('/')~ save_obj(os.path.join(save_path,file.split('/')~
実行(成功)
将来の互換性についてのWarningがいろいろ出るが、数秒で実行完了
$ python demo.py WARNING:tensorflow:From ~中略~ 1 2 3 4 5 6 7 8 9 10 $
outputの配下に.matと.objファイルが出力されている
Deep3DFaceReconstruction/ output/ vd005.mat vd005_mesh.obj vd006.mat vd006_mesh.obj ...
環境構築の際は諸々のバージョンに気を付ける必要があるが、とりあえず動いたのでよしとしよう
自前の画像で試すのは別途
解散!