はじめに
FacebookResearchからPIFuHDが公開されていました!以前PIFuを試して遊んでいた延長でPIFuHDも試してみようと思いました。
この記事では、環境構築から用意していただいているサンプルをWindows上で実行するところまでの手順を記載します。
偉大なPIFuHDのリポジトリはこちら
実行環境
- Windows10 64bit Home
- Anaconda3
- RTX2080Ti
- CUDA 10.1
環境構築
仮想環境の作成
(base)$conda create -n pifu python=3.7.0
(base)$conda activate pifu
ライブラリのインストール(pip使ってしまったので、これを参考にconda installで入れていただければ...)
(pifu)$conda install pytorch torchvision cudatoolkit=10.1 -c pytorch
(pifu)$pip install pillow==6.0.0 scikit-image tqdm opencv-python trimesh
(pifu)$conda install pyopengl
WindowsにGLUTをインストールする
今回は本家のGLUTではなく、FreeGLUTをインストールしました。
こちらから「freeglut-MSVC-3.0.0-2.mp.zip」をダウンロード→解凍し、freeglut\bin\x64\にあるfreeglut.dllをC:\Windows\System32の中にコピーしました。
こちらの記事を参考にさせていただきました。(ありがとうございます!)
ffmpegのインストール
こちらの記事の手順をそのまま使わせていただきました。(ありがとうございます!)
実行手順
コードのダウンロード
(pifu)$git clone https://github.com/facebookresearch/pifuhd.git
(pifu)$cd pifuhd
モデルのダウンロード
(pifu)$mkdir checkpoints
(pifu)$cd checkpoints
(pifu)$wget "https://dl.fbaipublicfiles.com/pifuhd/checkpoints/pifuhd.pt" -O pifuhd.pt
(pifu)$cd ..
wgetがない場合は、ここからpifuhd.ptを直接ダウンロードして、checkpoints配下に格納してください。
コードを修正
私の環境だとOpenGLを使うときにエラーが出たので、lib/render/gl/render.pyを以下のように修正しました。
[render.py]
class Render:
def __init__(self, width=1600, height=1200, name='GL Renderer',
program_files=['simple.fs', 'simple.vs'], color_size=1, ms_rate=1):
self.width = width
self.height = height
self.name = name
self.display_mode = GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH
self.use_inverse_depth = False
global _glut_window
if _glut_window is None:
glutInit()
glutInitDisplayMode(self.display_mode)
glutInitWindowSize(self.width, self.height)
glutInitWindowPosition(0, 0)
# ここを修正
# _glut_window = glutCreateWindow("My Render.")
_glut_window = glutCreateWindow(b"My Render.")
demo.shのコマンドを実行する
(pifu)$python -m apps.simple_test
(pifu)$python -m apps.render_turntable -f ./results/pifuhd_final/recon -ww 512 -hh 512
上記コマンドを実行すると、画面上に以下のようなアニメーションが流れるかと思います!
加えて、results/pifuhd_final/recon配下に「result_test_512.mp4」も出力されていると思います。
おわりに
今回はFacebookResearchから公開されたPIFuHDのサンプルをWindowsで動かしてみました。
基本的にはREADME.mdを確認すれば簡単に試すことができるかと思います。
今後は、用意されたサンプルではなく自分の画像などで試してみようかと思います。
PIFuはSementic-Segmentationする必要がありましたが、PIFuHDではPose-Estimationで得られるキーポイントの情報でよいみたいです。公式ではOpenPoseを使った試し方が公開されていましたが、別にPose-Estimationアルゴリズムで出力形式を合わせられればなんでもよいと思います。