見出し画像

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をインストールします。

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起動します。

Windows 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

抽出された画像をいくつか確認しましたがちゃんと出力されていました。以下はその中の一つの画像。

data\renbody\0013_01\images_libx265\00\000001.png

マスク抽出 - extract_masks.py

つづいて、マスクの抽出。

python scripts/realtime4dv/extract_masks.py --data_root data/renbody/0013_01

こちらも動画を入力にして、pngファイルを生成しています。こちらも9000ファイル作られました。
先ほど確認した抽出画像に対応するマスク画像がこちら。

data\renbody\0013_01\masks_libx265\00\000001.png

とてもいい感じに。ちゃんと動いているようです。

レンダリング - 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カメラです。)

EasyVolcap、黒い窓ではない
EasyVolcapのオプションをいろいろ弄る

これでやっと、何ができるのか、確認できる。。。

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ぐらい使用しています。

タスクマネージャーのプロセスより

関連

この記事が気に入ったらサポートをしてみませんか?