Windows 下 3D Vision 环境配置 (Gaussian Avatars)

GaussianAvatars

  • Repo
  • Installation
  • Requirements
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    tqdm
    numpy==1.22.3
    matplotlib
    scipy
    chumpy
    tensorboard
    fvcore
    iopath
    plyfile
    tyro
    dearpygui
    roma
    git+https://github.com/NVlabs/nvdiffrast
    #git+https://github.com/facebookresearch/pytorch3d.git
    submodules/diff-gaussian-rasterization
    submodules/simple-knn

项目工具安装

Ninja 是一种专注于速度和效率的构建工具,最初由 Google 工程师开发,用于加速大型项目的构建过程。它的设计哲学是通过简洁的构建规则和依赖关系描述来实现快速构建,尤其适合大规模项目和多核处理器环境。Ninja 的构建文件后缀为 .ninja,其语法简单,主要依赖其他工具(如 CMake)生成构建文件。
CMake 是一个开源、跨平台的编译、测试和打包工具,用于生成项目的构建文件。它通过简单的语法描述编译和安装过程,并输出适合不同平台的构建文件,如 Makefile 或 Ninja 文件。CMake 的核心配置文件是 CMakeLists.txt,开发者可以通过它定义项目的构建规则。

  • CMake 生成构建文件:CMake 可以生成多种格式的构建文件,其中包括 Ninja 文件。通过指定 -G Ninja,CMake 会生成 build.ninja 文件。
  • Ninja 执行构建:生成 build.ninja 文件后,Ninja 负责根据该文件执行实际的构建任务。
  • 优势互补:CMake 提供了强大的跨平台能力和灵活的构建规则描述,而 Ninja 则专注于快速执行构建任务。这种组合使得开发人员可以专注于编写简单的 CMakeLists.txt 文件,同时享受 Ninja 的高速构建能力。

CMake

Windows 平台安装 CMake 相对简单,通过官网下载地址:https://cmake.org/download/ ,选择最新的版本即可下载,安装引导程序中记得选择添加到环境变量配置即可。

CMake 安装

测试是否安装成功,以及环境变量是否配置,可以在终端检测 CMake 版本。

1
2
3
4
(base) C:\Users\User>cmake --version
cmake version 3.31.5

CMake suite maintained and supported by Kitware (kitware.com/cmake).

Ninja

Ninja 安装需要先安装 CMake 以及 Visual Studio,并配置好相应的环境变量。

Ninja 推荐的安装方式从源码编译安装,在 Windows 开始菜单中以管理员身份打开 “x64 Native Tools Command Prompt for VS 2019”,然后进入到 Ninja 文件夹目录,执行以下命令进行编译安装。

1
python configure.py --bootstrap

编译完毕后,产生的 ninja.exe 即为编译结果,可以将其置于需要的目录下,并添加到环境变量中。

编译生成的 ninja.exe

根据下图所示,添加 ninja.exe 所在目录到环境变量中,并在终端检测是否成功。
添加环境变量

1
2
> ninja.exe
ninja: no work to do.

3D Vision 环境配置

经过多次安装测试,总结经验后对该环境配置流程有比较清晰的认识,这主要用于在其他任何涉及 3D Vision 的项目中,在此基础的环境上可以快速复现项目环境。

下面是全部的安装包,主要包含依赖于 3DGS 的库以及 Pytorch3d。

Source Conda/Pip Library Version
3DGS Conda python 3.9
3DGS Conda cudatoolkit 11.3
3DGS Conda pytorch 1.12.1
3DGS Conda torchvision 0.13.1
3DGS Conda torchaudio 0.12.1
3DGS Conda plyfile ==
3DGS Conda tqdm ==
3DGS Pip opencv-python ==
3DGS Pip joblib ==
3DGS Pip submodules/diff-gaussian-rasterization ==
3DGS Pip submodules/simple-knn ==
3DGS Pip submodules/fused_ssim ==
Pytorch3d == cub 1.11.0
Pytorch3d conda fvcore ==
Pytorch3d conda iopath ==
Pytorch3d == pytorch3d 0.7.1

Step 1 创建虚拟环境

1
2
3
# env
conda create -n 3dv python=3.9
conda activate 3dv

Step 2 安装 CUDA Toolkit

首先安装显卡驱动,一般通过 NVIDIA 应用程序进行安装。通过命令 nvidia-smi 可以查看显卡驱动版本以及最高可支持的 CUDA 版本。

显卡驱动与CUDA最大版本

选择的 CUDA 版本需要与 Pytorch 版本对应,可以在 CUDA Toolkit Archive 查询到对应版本并下载。

在这里我们选择的是 CUDA 11.3 的,下载选择的命令如下图所示:
CUDA Toolkit 11.3 Downloads

下载完成后,按照提示进行安装,等待安装完成后,其会自动添加环境变量。

在命令行输入 nvcc --version 可以查看 CUDA 版本。成功安装后,将会显示如下图的版本信息:
CUDA版本

多版本CUDA的切换

当我们同时在 Windows 上安装了多个 CUDA 版本,并且希望能够通过指定环境变量进行切换。

  • Step 1: 修改系统环境变量 CUDA_PATH,将其改为目标 CUDA 版本对应的路径;CUDA_PATH设置
  • Step 2: 修改 Path 中对应的 CUDA bin 和 libnvvp 两个路径,使得目标 CUDA 的这两个路径在所有 CUDA 版本的最上方。CUDA 路径配置

Step 3 安装 Pytorch

最好的安装方式就是对照 CUDA 版本,直接从 Pytorch 官网 INSTALLING PREVIOUS VERSIONS OF PYTORCH 中选择对应的安装命令进行安装。

1
2
# torch
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch

这里的 cudatoolkit=11.3 虽然能够在虚拟环境中作为一个安装包安装上(如下图所示),但是其不等于 CUDA Toolkit,仍需要 Step 2 中安装 CUDA Toolkit并配置好环境变量。
cudatoolkit安装包

Step 4 安装 3DGS 的子模块

一般在用到这些子模块的项目中,首先通过递归式地克隆项目仓库以使得包含对应的子模块,然后在项目环境中直接安装即可。

对虚拟环境的要求仅仅是 CUDA 版本和 Pytorch 版本对应起来,并且需要确保 CUDA Toolkit 也已经正确安装。

1
2
3
# submodules
pip install submodules/diff-gaussian-rasterization
pip install submodules/simple-knn

Step 5 安装 NVIDIA CUB

NVIDIA CUB 根据 cuda 版本对应以下表格下载对应的 cub 版本(本机选择cub-1.11.0),解压并设置环境变量 CUB_HOME。

CUB Release Included In
2.0.1 CUDA Toolkit 12.0
2.0.0 TBD
1.17.2 TBD
1.17.1 TBD
1.17.0 TBD
1.16.0 TBD
1.15.0 NVIDIA HPC SDK 22.1 & CUDA Toolkit 11.6
1.14.0 NVIDIA HPC SDK 21.9
1.13.1 CUDA Toolkit 11.5
1.13.0 NVIDIA HPC SDK 21.7
1.12.1 CUDA Toolkit 11.4
1.12.0 NVIDIA HPC SDK 21.3
1.11.0 CUDA Toolkit 11.3
1.10.0 NVIDIA HPC SDK 20.9 & CUDA Toolkit 11.2
1.9.10-1 NVIDIA HPC SDK 20.7 & CUDA Toolkit 10.2
配置环境变量

Step 6 安装 Pytorch3d 依赖项

根据 Pytorch3d 官方文档,需要安装依赖项如下:

1
2
3
4
conda install -c fvcore -c iopath -c conda-forge fvcore iopath
conda install jupyter
pip install scikit-image matplotlib imageio plotly opencv-python
pip install black usort flake8 flake8-bugbear flake8-comprehensions

Step 7 安装 Pytorch3d

推荐的做法是通过源码编译安装,按照 Pytorch3d Installation 说明,从 Pytorch3d Release 中根据 Pytorch 的版本选择合适的 Pytorch3d 版本,并且尽量使得 Pytorch 版本处于 Pytorch3d 支持的版本范围中间。

Pytorch3d 版本选择

选择下载 pytorch3d-0.7.2,解压后进入编译安装环节。

在 Windows 开始菜单中以管理员身份打开 x64 Native Tools Command Prompt for VS 2019,然后进入 pytorch3d 解压后的文件夹目录,配置 Visual Studio 环境变量。

1
2
set DISTUTILS_USE_SDK=1
set PYTORCH3D_NO_NINJA=1

最后切换到 Anaconda 环境,进入 pytorch3d 文件夹的目录,在虚拟环境 Pytorch3d 下执行以下命令编译安装。

1
python setup.py install

最后直接执行命令,测试 Pytorch3d 是否安装成功。

1
2
3
>>> import pytorch3d
>>> pytorch3d.__version__
'0.7.2'

配置的环境依赖

environment.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
name: pytorch3d
channels:
- pytorch
- iopath
- conda-forge
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- defaults
dependencies:
- anyio=4.6.2=py39haa95532_0
- argon2-cffi=21.3.0=pyhd3eb1b0_0
- argon2-cffi-bindings=21.2.0=py39h827c3e9_1
- asttokens=2.0.5=pyhd3eb1b0_0
- async-lru=2.0.4=py39haa95532_0
- attrs=24.3.0=py39haa95532_0
- babel=2.16.0=py39haa95532_0
- backcall=0.2.0=pyhd3eb1b0_0
- beautifulsoup4=4.12.3=py39haa95532_0
- blas=1.0=mkl
- bleach=6.2.0=py39haa95532_0
- brotli-python=1.0.9=py39h5da7b33_9
- ca-certificates=2025.1.31=h56e8100_0
- certifi=2025.1.31=py39haa95532_0
- cffi=1.17.1=py39h827c3e9_1
- charset-normalizer=3.3.2=pyhd3eb1b0_0
- colorama=0.4.6=pyhd8ed1ab_1
- comm=0.2.1=py39haa95532_0
- cudatoolkit=11.3.1=h59b6b97_2
- debugpy=1.8.11=py39h5da7b33_0
- decorator=5.1.1=pyhd3eb1b0_0
- defusedxml=0.7.1=pyhd3eb1b0_0
- exceptiongroup=1.2.0=py39haa95532_0
- executing=0.8.3=pyhd3eb1b0_0
- freetype=2.4.10=0
- fvcore=0.1.5.post20221221=pyhd8ed1ab_0
- h11=0.14.0=py39haa95532_0
- httpcore=1.0.2=py39haa95532_0
- httpx=0.27.0=py39haa95532_0
- icu=73.1=h6c2663c_0
- idna=3.7=py39haa95532_0
- importlib-metadata=8.5.0=py39haa95532_0
- importlib_metadata=8.5.0=hd3eb1b0_0
- intel-openmp=2023.1.0=h59b6b97_46320
- iopath=0.1.9=py39
- ipykernel=6.29.5=py39haa95532_1
- ipython=8.15.0=py39haa95532_0
- ipywidgets=8.1.5=py39haa95532_0
- jedi=0.19.2=py39haa95532_0
- jinja2=3.1.5=py39haa95532_0
- jpeg=9e=h827c3e9_3
- json5=0.9.25=py39haa95532_0
- jsonschema=4.23.0=py39haa95532_0
- jsonschema-specifications=2023.7.1=py39haa95532_0
- jupyter=1.1.1=py39haa95532_0
- jupyter-lsp=2.2.0=py39haa95532_0
- jupyter_client=8.6.3=py39haa95532_0
- jupyter_console=6.6.3=py39haa95532_0
- jupyter_core=5.7.2=py39haa95532_0
- jupyter_events=0.10.0=py39haa95532_0
- jupyter_server=2.14.1=py39haa95532_0
- jupyter_server_terminals=0.4.4=py39haa95532_1
- jupyterlab=4.3.4=py39haa95532_0
- jupyterlab_pygments=0.1.2=py_0
- jupyterlab_server=2.27.3=py39haa95532_0
- jupyterlab_widgets=3.0.13=py39haa95532_0
- krb5=1.20.1=h5b6d351_0
- lerc=4.0.0=h5da7b33_0
- libclang13=14.0.6=default_h8e68704_2
- libdeflate=1.22=h5bf469e_0
- libpng=1.6.39=h8cc25b3_0
- libpq=17.2=h70ee33d_0
- libsodium=1.0.18=h62dcd97_0
- libtiff=4.5.1=h44ae7cf_1
- libuv=1.48.0=h827c3e9_0
- libwebp=1.2.4=h2bbff1b_0
- libwebp-base=1.2.4=h2bbff1b_1
- lz4-c=1.9.4=h2bbff1b_1
- markupsafe=3.0.2=py39h827c3e9_0
- matplotlib-inline=0.1.6=py39haa95532_0
- mistune=2.0.4=py39haa95532_0
- mkl=2023.1.0=h6b88ed4_46358
- mkl-service=2.4.0=py39h827c3e9_2
- mkl_fft=1.3.11=py39h827c3e9_0
- mkl_random=1.2.8=py39hc64d2fc_0
- nbclient=0.8.0=py39haa95532_0
- nbconvert=7.16.4=py39haa95532_0
- nbformat=5.10.4=py39haa95532_0
- nest-asyncio=1.6.0=py39haa95532_0
- notebook=7.3.2=py39haa95532_0
- notebook-shim=0.2.3=py39haa95532_0
- openssl=3.4.1=ha4e3fda_0
- overrides=7.4.0=py39haa95532_0
- packaging=24.2=py39haa95532_0
- pandocfilters=1.5.0=pyhd3eb1b0_0
- parso=0.8.4=py39haa95532_0
- pickleshare=0.7.5=pyhd3eb1b0_1003
- pip=25.0=py39haa95532_0
- platformdirs=3.10.0=py39haa95532_0
- ply=3.11=py39haa95532_0
- portalocker=3.0.0=py39hcbf5309_0
- prometheus_client=0.21.0=py39haa95532_0
- prompt-toolkit=3.0.43=py39haa95532_0
- prompt_toolkit=3.0.43=hd3eb1b0_0
- psutil=5.9.0=py39h827c3e9_1
- pure_eval=0.2.2=pyhd3eb1b0_0
- pycparser=2.21=pyhd3eb1b0_0
- pygments=2.15.1=py39haa95532_1
- pyqt=5.15.10=py39h5da7b33_1
- pyqt5-sip=12.13.0=py39h827c3e9_1
- pysocks=1.7.1=py39haa95532_0
- python=3.9.21=h8205438_1
- python-dateutil=2.9.0post0=py39haa95532_2
- python-fastjsonschema=2.20.0=py39haa95532_0
- python-json-logger=3.2.1=py39haa95532_0
- python_abi=3.9=2_cp39
- pytorch=1.12.1=py3.9_cuda11.3_cudnn8_0
- pytorch-mutex=1.0=cuda
- pywin32=307=py39ha51f57c_3
- pywinpty=2.0.14=py39h72d21ff_0
- pyyaml=6.0.2=py39hf73967f_2
- pyzmq=26.2.0=py39h5da7b33_0
- qt-main=5.15.2=h19c9488_12
- qtconsole=5.6.1=py39haa95532_0
- qtpy=2.4.1=py39haa95532_0
- referencing=0.30.2=py39haa95532_0
- requests=2.32.3=py39haa95532_1
- rfc3339-validator=0.1.4=py39haa95532_0
- rfc3986-validator=0.1.1=py39haa95532_0
- rpds-py=0.22.3=py39h636fa0f_0
- send2trash=1.8.2=py39haa95532_1
- setuptools=75.8.0=py39haa95532_0
- sip=6.7.12=py39h5da7b33_1
- six=1.16.0=pyhd3eb1b0_1
- sniffio=1.3.0=py39haa95532_0
- soupsieve=2.5=py39haa95532_0
- sqlite=3.45.3=h2bbff1b_0
- stack_data=0.2.0=pyhd3eb1b0_0
- tabulate=0.9.0=pyhd8ed1ab_2
- tbb=2021.8.0=h59b6b97_0
- termcolor=2.5.0=pyhd8ed1ab_1
- terminado=0.17.1=py39haa95532_0
- tinycss2=1.4.0=py39haa95532_0
- tk=8.6.14=h0416ee5_0
- tomli=2.0.1=py39haa95532_0
- torchaudio=0.12.1=py39_cu113
- torchvision=0.13.1=py39_cu113
- tornado=6.4.2=py39h827c3e9_0
- tqdm=4.67.1=pyhd8ed1ab_1
- traitlets=5.14.3=py39haa95532_0
- typing-extensions=4.12.2=py39haa95532_0
- typing_extensions=4.12.2=py39haa95532_0
- tzdata=2025a=h04d1e81_0
- ucrt=10.0.22621.0=h57928b3_1
- urllib3=2.3.0=py39haa95532_0
- vc=14.42=haa95532_4
- vc14_runtime=14.42.34433=h6356254_24
- vs2015_runtime=14.42.34433=hfef2bbc_24
- wcwidth=0.2.5=pyhd3eb1b0_0
- webencodings=0.5.1=py39haa95532_1
- websocket-client=1.8.0=py39haa95532_0
- wheel=0.45.1=py39haa95532_0
- widgetsnbextension=4.0.13=py39haa95532_0
- win_inet_pton=1.1.0=py39haa95532_0
- winpty=0.4.3=4
- xz=5.6.4=h4754444_1
- yacs=0.1.8=pyh29332c3_2
- yaml=0.2.5=h8ffe710_2
- zeromq=4.3.5=hd77b12b_0
- zipp=3.21.0=py39haa95532_0
- zlib=1.2.13=h8cc25b3_1
- zstd=1.5.6=h8880b57_0
- pip:
- absl-py==2.1.0
- astunparse==1.6.3
- backgroundmattingv2==1.0
- black==25.1.0
- cachetools==5.5.1
- contourpy==1.2.1
- cython==3.0.12
- dearpygui==2.0.0
- diff-gaussian-rasterization==0.0.0
- dlib==19.24.6
- docstring-parser==0.16
- eval-type-backport==0.2.2
- face-detection-tflite==0.6.0
- ffmpeg-python==0.2.0
- flake8==7.1.2
- flake8-bugbear==24.12.12
- flake8-comprehensions==3.16.0
- flatbuffers==25.2.10
- future==1.0.0
- gast==0.4.0
- gdown==5.2.0
- google-auth==2.38.0
- google-auth-oauthlib==1.0.0
- google-pasta==0.2.0
- h5py==3.12.1
- imgaug==0.4.0
- jax==0.4.30
- jaxlib==0.4.30
- keras==2.12.0
- libclang==18.1.1
- libcst==1.6.0
- lxml==5.3.1
- matplotlib==3.8.0
- mccabe==0.7.0
- ml-dtypes==0.5.1
- moreorless==0.4.0
- mypy-extensions==1.0.0
- narwhals==1.26.0
- numpy==1.22.3
- nvdiffrast==0.3.3
- oauthlib==3.2.2
- opt-einsum==3.4.0
- pandas==2.0.3
- pathspec==0.12.1
- pillow==9.5.0
- plotly==6.0.0
- plyfile==1.1
- protobuf==4.25.6
- pyasn1==0.6.1
- pyasn1-modules==0.4.1
- pycodestyle==2.12.1
- pyflakes==3.2.0
- python-gflags==3.1.2
- pytorch3d==0.7.2
- requests-oauthlib==2.0.0
- roma==1.5.1
- rsa==4.9
- scikit-image==0.22.0
- scipy==1.11.4
- shapely==2.0.7
- shtab==1.7.1
- simple-knn==0.0.0
- star==0.1.0
- stdlibs==2024.12.3
- tensorboard==2.12.3
- tensorflow==2.12.0
- tensorflow-estimator==2.12.0
- tensorflow-intel==2.12.0
- tensorflow-io-gcs-filesystem==0.31.0
- terminaltables==3.1.10
- toml==0.10.2
- trailrunner==1.4.0
- typeguard==4.4.2
- tyro==0.9.14
- usort==1.0.8.post1
- vhap==0.0.2
- wrapt==1.14.1
prefix: D:\00MyWorkplace\01anaconda\envs\pytorch3d

Windows 下 3D Vision 环境配置 (Gaussian Avatars)

https://lzhms.github.io/blog/3DVEnvConfig/

Author

Zhihao Li

Posted on

2025-02-18

Updated on

2025-03-09

Licensed under


Comments