TexformerをWindows10で動かしてみた
はじめに
ICCV2021に投稿されたTexformerがGithubに公開されていたので、さっそく自宅のWindowsPCで動かしてみました。
この記事では、環境構築からdemoスクリプトをWindows上で実行するところまでの手順を備忘録として記載します。
最後にオマケとして、少しdemoスクリプトを編集してREADMEにあるような生成3Dの回転gif作成についても記載します。
Texformerのarxivはこちら
本家のGithubはこちら
実行環境
- Windows10 64bit Home
- Anaconda3
- RTX2080Ti
- CUDA 10.1
環境構築
基本的には、TexformerのGithubで用意していただいている手順をなぞります。
本家は(恐らく)Ubuntuでの環境構築方法なので、少し弄って自分のPCで動くようにしています。
コードのクローン
(base)$git clone https://github.com/xuxy09/Texformer.git
(base)$cd Texformer
仮想環境の作成
(base)$conda create -n texformer python=3.7
(base)$conda activate texformer
ライブラリのインストール その1
本家の要求ライブラリは
- pytorch==1.4.0
- cudatoolkit=9.2
となっていますが、私のPCのCUDAが10.1であるためcudatoolkitのバージョンを変更してインストールします。
Pytorchの過去バージョンのインストール方法はこちらから確認できます。
(texformer)$conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch
ライブラリのインストール その2
READMEにはPytorch-neural-renderer
をインストールするように記載されています。こちらのリポジトリを参考にしてpipでインストールしようとしたのですが、CUDA関連のエラーでできませんでした。
調べてみたところ、このようなWindowsへのインストールに関してのIssueがありました。
今回はこのissueの回答にある neural_renderer_pytorch-win10
をインストールすることにしました。(具体的な解決策についてはREADMEに記載されています)
インストールは以下のような手順で行いました。
(texformer)$git clone https://github.com/lstcutong/neural_renderer_pytorch-win10.git
(texformer)$cd neural_renderer_pytorch-win10
(texformer)$python setup.py install
(texformer)$cd ../
ライブラリのインストール その3
READMEには記載はありませんが、足らない分のライブラリを追加でインストールします。
$pip install imageio easydict smplx==0.1.13 scikit-image
$pip install scipy==1.5.2
学習済みモデルなどのダウンロード
READMEに記載のある meta data
と pretrained model
をダウンロードします。
- meta.zipはTexformer配下に解凍
- texformer_ep500.ptは、Texformer配下にpretrainedディレクトリを作成して格納
実行
demo.pyを実行する
(texformer)$python demo.py --img_path demo_imgs/img.png
上記コマンドを実行すると、画面上に以下が表示されるかと思います!
リポジトリのサンプル画像以外を使ってみると以下のような感じになりました。
(写真素材はぱくたそ様の素材を使用しています)
さすがに着物なんかは学習素材に含まれていないのでうまく3D生成できないですね、、、
おわりに
今回は、ICCV2021に投稿されたTexformerのサンプルをWindows上で動かしてみました。
READMEには特にWindows環境について記載はありませんでしたが、割と簡単に試すことができました。
かなり簡単に一枚の画像から人の3Dを生成できて、非常に面白い研究だと思いました。少し前に出てたPIFuのように、3Dオブジェクト生成の研究が進んで色々公開されると個人的にうれしいです!
おまけ
回転Gif生成について、、、
demo.pyのrun_demo
関数の末尾に以下コードを追加する。
if args.save:
plt.savefig('demo_imgs/output.png')
else:
plt.show()
# ここから追加
import os
import glob
from skimage.io import imsave
tmp_dir = "./tmp"
# 一時保存ディレクトリを作成
if not os.path.exists(tmp_dir):
os.makedirs(tmp_dir)
def make_gif():
"""連番画像からGIFを生成する"""
with imageio.get_writer("output.gif", mode='I') as writer:
for filename in sorted(glob.glob(os.path.join(tmp_dir, '_tmp_*.png'))):
writer.append_data(imageio.imread(filename))
os.remove(filename)
writer.close()
for i in range(0, 360, 4):
# 0~360度回転させながら画像を保存する.
rendered_img, _, _ = self.renderer.render(self.pred_vertices, self.pred_cam_t, uvmap, euler=[0, i, 0])
rendered_img = rendered_img[0].cpu().permute(1, 2, 0).numpy()
imsave(os.path.join(tmp_dir, '_tmp_%04d.png') % i, rendered_img)
make_gif()
これでdemo.pyを実行すると、以下のようなGIFファイルが出力されるようになります!
Discussion