Windows 11で4K4Dを試してみる
4K4D「Real-Time 4D View Synthesis at 4K Resolution」、WSL2だと上手く動かないため、素のWindowsで試してみます。
使用するPCは、GALLERIA UL9C-R49(RTX 4090 laptop 16GB)、メモリは64GB、OSはWindows 11です。
1. Windows開発環境の構築
Visual Studio Community 2022
C++のコンパイラが必要となるので、以下からダウンロード&インストールしましょう。
Python 3.10
Microsoft Storeから、Python 3.10をインストールします。
3.11や3.12をインストールしてもこの先でエラーになります。
pytorchは3.11まで、open3dは3.10までしかサポートしていないため、3.10を選択するほかありません。
2. 準備
PowerShellの立ち上げ
C++コンパイラ(cl.exe)へのパスを通しておきたいので、Windows Terminalに登録された「Developer PowerShell for VS 2022」を選択してTerminal起動します。
venv環境
3.10で、venvを作り、
python3.10 -m venv 4k4d-3.10
cd 4k4d-3.10
Scripts/Activate.ps1
git cloneして、
git clone https://github.com/zju3dv/4K4D.git
cd 4K4D
続いて、pytorchのインストール。
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
環境変数DISTUTILS_USE_SDKをセットして、
$env:DISTUTILS_USE_SDK = 1
requirements.txtにあるパッケージをinstallします。
pip3 install -r requirements.txt
pip3 install -e . --no-build-isolation --no-deps
無事にinstallが終わった後のpip listはこちら。長い。
(4k4d-3.10) PS C:\path\to\venv\4k4d-3.10\4K4D> pip list
Package Version Editable project location
------------------------- ------------------ --------------------------------
absl-py 2.0.0
addict 2.4.0
ansi2html 1.9.1
ansicon 1.89.0
antlr4-python3-runtime 4.9.3
anyio 4.2.0
argon2-cffi 23.1.0
argon2-cffi-bindings 21.2.0
arrow 1.3.0
asttokens 2.4.1
async-lru 2.0.4
attrs 23.1.0
autopep8 2.0.4
Babel 2.14.0
beautifulsoup4 4.12.2
black 23.12.1
bleach 6.1.0
blessed 1.20.0
blinker 1.7.0
cachetools 5.3.2
calmsize 0.1.3
certifi 2022.12.7
cffi 1.16.0
charset-normalizer 2.1.1
chumpy 0.70
clang-format 17.0.6
click 8.1.7
cloudpickle 3.0.0
colorama 0.4.6
comm 0.2.0
commentjson 0.9.0
ConfigArgParse 1.7
contourpy 1.2.0
cuda-python 12.3.0
cycler 0.12.1
dash 2.14.2
dash-core-components 2.0.0
dash-html-components 2.0.0
dash-table 5.0.0
debugpy 1.8.0
decorator 5.1.1
defusedxml 0.7.1
detectron2 0.6
diff-gauss 1.0.5
docstring-parser 0.15
dotmap 1.3.30
easyvolcap 0.0.0 C:\path\to\venv\4k4d-3.10\4K4D
einops 0.7.0
et-xmlfile 1.1.0
exceptiongroup 1.2.0
executing 2.0.1
fast-autocomplete 0.9.0
fastjsonschema 2.19.0
filelock 3.13.1
Flask 3.0.0
flatbuffers 23.5.26
fonttools 4.47.0
fqdn 1.5.1
fsspec 2023.4.0
func-timeout 4.3.5
fvcore 0.1.5.post20221221
gdown 4.7.1
glfw 2.6.4
google-auth 2.25.2
google-auth-oauthlib 1.2.0
gpustat 1.2.dev19+gf4cd639
grpcio 1.60.0
h5py 3.10.0
human-body-prior 2.2.2.0
hydra-core 1.3.2
idna 3.4
imageio 2.33.1
imgui-bundle 1.1.0
importlib-metadata 7.0.1
iopath 0.1.9
ipdb 0.13.13
ipykernel 6.27.1
ipython 8.19.0
ipywidgets 8.1.1
isoduration 20.11.0
itsdangerous 2.1.2
jedi 0.19.1
Jinja2 3.1.2
jinxed 1.2.1
joblib 1.3.2
json5 0.9.14
jsonpointer 2.4
jsonschema 4.20.0
jsonschema-specifications 2023.11.2
jupyter 1.0.0
jupyter_client 8.6.0
jupyter-console 6.6.3
jupyter_core 5.5.1
jupyter-events 0.9.0
jupyter-lsp 2.2.1
jupyter_server 2.12.1
jupyter_server_terminals 0.5.0
jupyterlab 4.0.9
jupyterlab_pygments 0.3.0
jupyterlab_server 2.25.2
jupyterlab-widgets 3.0.9
kiwisolver 1.4.5
kornia 0.7.0
lark-parser 0.7.8
lazy_loader 0.3
lpips 0.1.4
Markdown 3.5.1
markdown-it-py 3.0.0
MarkupSafe 2.1.3
matplotlib 3.8.2
matplotlib-inline 0.1.6
mdurl 0.1.2
mediapipe 0.10.9
memory-tempfile 2.2.3
mistune 3.0.2
mpmath 1.3.0
msgpack 1.0.7
msvc-runtime 14.34.31931
munch 4.0.0
mypy-extensions 1.0.0
nbclient 0.9.0
nbconvert 7.13.1
nbformat 5.7.0
nest-asyncio 1.5.8
networkx 3.0
ninja 1.11.1.1
notebook 7.0.6
notebook_shim 0.2.3
numpy 1.24.1
nvdiffrast 0.3.1
nvidia-ml-py 12.535.133
oauthlib 3.2.2
omegaconf 2.3.0
open3d 0.17.0
opencv-contrib-python 4.8.1.78
opencv-python 4.8.1.78
openpyxl 3.1.2
overrides 7.4.0
packaging 23.2
pandas 2.1.4
pandocfilters 1.5.0
parso 0.8.3
pathspec 0.12.1
pdbr 0.8.8
Pillow 9.3.0
pip 23.3.2
platformdirs 4.1.0
plotly 5.18.0
plyfile 1.0.2
portalocker 2.8.2
prometheus-client 0.19.0
prompt-toolkit 3.0.43
protobuf 3.20.3
psutil 5.9.7
pure-eval 0.2.2
pyasn1 0.5.1
pyasn1-modules 0.3.0
pycocotools 2.0.7
pycodestyle 2.11.1
pycparser 2.21
PyGLM 2.7.1
Pygments 2.17.2
PyMCubes 0.1.4
pymeshlab 2023.12
pyntcloud 0.3.1
PyOpenGL 3.1.7
pyparsing 3.1.1
pyperclip 1.8.2
pyreadline3 3.4.1
PySocks 1.7.1
python-dateutil 2.8.2
python-json-logger 2.0.7
pytorch-memlab 0.3.0
pytorch-msssim 1.0.0
pytorch3d 0.7.5
PyTurboJPEG 1.7.3
pytz 2023.3.post1
pywin32 306
pywinpty 2.0.12
PyYAML 6.0.1
pyzmq 25.1.2
qtconsole 5.5.1
QtPy 2.4.1
referencing 0.32.0
requests 2.31.0
requests-oauthlib 1.3.1
retrying 1.3.4
rfc3339-validator 0.1.4
rfc3986-validator 0.1.1
rich 13.7.0
rpds-py 0.15.2
rsa 4.9
ruamel.yaml 0.18.5
ruamel.yaml.clib 0.2.8
scikit-image 0.22.0
scikit-learn 1.3.2
scipy 1.11.4
Send2Trash 1.8.2
setuptools 65.5.0
shtab 1.6.5
simple-knn 0.0.0
six 1.16.0
smplx 0.1.28
sniffio 1.3.0
sounddevice 0.4.6
soupsieve 2.5
stack-data 0.6.3
sympy 1.12
tabulate 0.9.0
tenacity 8.2.3
tensorboard 2.15.1
tensorboard-data-server 0.7.2
tensorboardX 2.6.2.2
termcolor 2.4.0
terminado 0.18.0
threadpoolctl 3.2.0
tifffile 2023.12.9
timg 1.1.6
tinycss2 1.2.1
tinycudann 1.7
tomli 2.0.1
torch 2.1.2+cu121
torch-scatter 2.1.2
torch-tb-profiler 0.4.3
torchaudio 2.1.2+cu121
torchdiffeq 0.2.3
torchmcubes 0.1.0
torchvision 0.16.2+cu121
tornado 6.4
tqdm 4.66.1
traitlets 5.14.0
trimesh 4.0.8
types-python-dateutil 2.8.19.14
typing_extensions 4.4.0
tyro 0.6.1
tzdata 2023.3
ujson 5.9.0
uri-template 1.3.0
urllib3 1.26.13
wcwidth 0.2.12
webcolors 1.13
webencodings 0.5.1
websocket-client 1.7.0
Werkzeug 3.0.1
wheel 0.42.0
widgetsnbextension 4.0.9
xatlas 0.0.8
yacs 0.1.8
yapf 0.40.2
zipp 3.17.0
インストール結果の確認
以下のような感じであればインストールは大丈夫かと。
(4k4d-3.10) PS C:\path\to\venv\4k4d-3.10\4K4D> python -c "from easyvolcap.utils.console_utils import *"
(4k4d-3.10) PS C:\path\to\venv\4k4d-3.10\4K4D> python -c "import torch; print(torch.rand(3,3,device='cuda'))"
tensor([[0.9199, 0.3110, 0.2160],
[0.7967, 0.6462, 0.9344],
[0.7063, 0.4041, 0.6292]], device='cuda:0')
(4k4d-3.10) PS C:\path\to\venv\4k4d-3.10\4K4D> python -c "from pytorch3d.io import load_ply"
(4k4d-3.10) PS C:\path\to\venv\4k4d-3.10\4K4D> python -c "import tinycudann"
(4k4d-3.10) PS C:\path\to\venv\4k4d-3.10\4K4D> python -c "import open3d"
(4k4d-3.10) PS C:\path\to\venv\4k4d-3.10\4K4D>
3. モデルなどのダウンロード
事前学習モデルのダウンロード
Google Driveさんからダウンロードです。gdownパッケージを使います。Windowsですとchardetパッケージも必要となるので合わせてinstallします。
pip install gdown chardet
してからの、
mkdir data
gdown -O data --folder --remaining-ok https://drive.google.com/drive/folders/1mBMsYeXawU_sF3NFyuWC1hnfrYbSfDfi?usp=sharing
でダウンロードされます。50ファイルを超えるので、--remaining-okオプションを付けないとダウンロードできません。ですので、必要なモデルだけをダウンロードした方がよいかと思います。
最小限データセットのダウンロード
試してみる、ですので、データセットは最小限に…。
gdown -O data --folder --remaining-ok https://drive.google.com/drive/folders/1pH-SWwbt01raqZ74dvcOvYFxDbGGUcxu?usp=sharing
最小限データセットのtarball展開
適切にtar.gzファイルを展開しなさいとreadme.mdに書いています。
PowerShellで展開用のScriptを書くのが面倒だったので、WSL2上でtarballを展開。展開したファイルをコピーしてお茶を濁しました。
(注)WSL2上(bash)で動くscriptはこちらです。tarballが格納されているディレクトリに移動して流し込みください。
FILE_SUFFIX="_libx265.tar.gz"
TARBALLS=$(find data -type f -name '*.tar.gz')
for tb in ${TARBALLS}; do
OUTDIR=$(dirname ${tb})/$(basename ${tb} ${FILE_SUFFIX})
mkdir -p ${OUTDIR}
tar zxvf ${tb} -C ${OUTDIR}
done
4. 試してみよう
画像抽出 - extract_images.py
引数data_rootに指定したディレクトリ(これだとrenbody/0013_01)に格納されている動画から画像データを抽出するというコマンドのようです。
python scripts/realtime4dv/extract_images.py --data_root data/renbody/0013_01
抽出された画像をいくつか確認しましたがちゃんと出力されていました。以下はその中の一つの画像。
マスク抽出 - extract_masks.py
つづいて、マスクの抽出。
python scripts/realtime4dv/extract_masks.py --data_root data/renbody/0013_01
こちらも動画を入力にして、pngファイルを生成しています。こちらも9000ファイル作られました。
先ほど確認した抽出画像に対応するマスク画像がこちら。
とてもいい感じに。ちゃんと動いているようです。
レンダリング - easyvolcap/scripts/main.py
readme.md を見ると evc というコマンドを実行となっています。
evc -t gui -c configs/projects/realtime4dv/rendering/4k4d_0013_01.yaml,configs/specs/video.yaml
https://github.com/zju3dv/4K4D/blob/main/pyproject.toml
をみると、
[project.scripts]
evc = "easyvolcap.scripts.main:main_entrypoint"
evc-test = "easyvolcap.scripts.main:test_entrypoint"
evc-train = "easyvolcap.scripts.main:train_entrypoint"
evc-gui = "easyvolcap.scripts.wrap:gui_entrypoint"
evc-dist = "easyvolcap.scripts.wrap:dist_entrypoint"
evc-prof = "easyvolcap.scripts.wrap:prof_entrypoint"
とあるので、evc を easyvolcap/scripts/main.py に読み替えて実行・・・なのですが、Windows環境ですと regexパッケージが必要なのでインストールしておきます。
pip3 install regex
そして、満を持しての実行!
python easyvolcap/scripts/main.py -t gui -c configs/projects/realtime4dv/rendering/4k4d_0013_01.yaml,configs/specs/video.yaml
動いた!感動した!
(この動画は、5MP、150フレーム、60カメラです。)
これでやっと、何ができるのか、確認できる。。。
5. ぐるぐる回してみる : 12/25追記
4K4Dといえば、視点がぐるぐる変わりながら再生されるあのデモ動画です。
あれと同じことがこのWindowsで果たしてできるのか?試してみましょう。
EasyVolcapのメニューから Camera > Temporal を選び AutoPlay を有効にします。すると、取り込んだデータが動画として再生されます。
このときにマウスをクリックしてぐるぐる動かすとリアルタイムで視点が変わります。すげー。
その様子をキャプチャーした動画はこちら。
ただ、回転させる行列計算かで「ゼロ割り算」でよく落ちる・・・。
ZeroDivisionError: float division by zero
*** float division by zero
> c:\path\to\venv\4k4d-3.10\4k4d\easyvolcap\utils\viewer_utils.py(344)gl_ixt()
342 # fmt: off
343 gl_ixt = mat4(
--> 344 2 * self.fx / self.W, 0, 0, 0
345 2 * self.s / self.W, 2 * self.fy / self.H, 0, 0
346 1 - 2 * (self.cx / self.W), 2 * (self.cy / self.H) - 1, (self.f + self.n) / (self.n - self.f), -1
(Pdbr)
6. 参考
レンダリング中のリソース
GPUは、40GBないと厳しいかも。
OSメモリですが、pythonが27GBぐらい使用しています。