用于可微分渲染的形状优化的拉普拉斯参数化包
项目描述
几何逆向渲染中的大步
ACM Transactions on Graphics (SIGGRAPH亚洲会议论文集),2021年12月。
Baptiste Nicolet · Alec Jacobson · Wenzel Jakob
安装
此仓库包含使用我们网格顶点位置参数化的所需操作符以及我们在论文中展示的实验代码。
参数化包安装
如果您只想在现有的(基于PyTorch的)管道中使用我们的参数化,我们已通过pip
使其可用。
pip install largesteps
这将安装largesteps
模块。这仅包含作为PyTorch自定义操作符实现的参数化逻辑。请参阅教程以获取示例用法。
克隆仓库
否则,如果您想重现论文中的实验,您可以克隆此仓库并在本地安装模块。
git clone --recursive git@github.com:rgl-epfl/large-steps-pytorch.git
cd large-steps-pytorch
pip install .
此仓库中的实验依赖于PyTorch。请按照PyTorch 网站上的说明进行安装。
要安装nvdiffrast
和Botsch-Kobbelt重新采样器,这些作为子模块提供,请运行setup_dependencies.sh
脚本。
nvdiffrast
依赖于cudatoolkit-dev
软件包来在运行时编译模块。要使用Anaconda安装它,请...
conda install -c conda-forge cudatoolkit-dev
要安装运行实验所需的其它依赖项,也要运行
pip install -r requirements.txt
:warning: 在Linux上,nvdiffrast
需要使用 g++
编译一些 PyTorch 扩展,请确保这是您的默认编译器
export CC=gcc && CXX=g++
渲染图形还需要安装 blender。您可以在 scripts/constants.py
中指定您要使用的 blender 可执行文件名称
下载场景
实验场景可以从这里下载 此处。请将存档解压到本存储库的顶层。
参数化
简而言之,我们的参数化只需要几行即可获得
# Given tensors v and f containing vertex positions and faces
from largesteps.geometry import laplacian_uniform, compute_matrix
from largesteps.parameterize import to_differential, from_differential
# Compute the system matrix
M = compute_matrix(v, f, lambda_=10)
# Parameterize
u = to_differential(M, v)
compute_matrix
返回参数化矩阵 M = I + λL。此函数还接受另一个参数 alpha
,它导致矩阵的公式略有不同,但等价:M = (1-α)I + αL,其中 α ∈ [0,1[。使用此公式,无论 α 如何,矩阵 M 的尺度都有相同的大小顺序。
M = compute_matrix(L, alpha=0.9)
然后,可以通过以下方式检索顶点坐标
v = from_differential(u, M, method='Cholesky')
这实际上将执行与矩阵 M 相关的求解器的缓存查找(如果没有找到,则实例化一个)并求解线性系统 Mv = u。对具有相同矩阵的 from_differential
的进一步调用将使用缓存中存储的求解器。由于此操作实现为可微分的 PyTorch 操作,因此无需对这种参数化进行任何其他优化。
运行实验
您可以在 figures
文件夹中运行实验,其中每个子文件夹对应于论文中的一个图形,并包含两个文件
generate_data.py
:包含运行实验并将输出写入scripts/constants.py
中指定的目录的脚本figure.ipynb
:包含生成图形的脚本,假设已运行generate_data.py
并将输出写入scripts/constants.py
中指定的目录
我们提供了以下图形的脚本
- 图 1 ->
teaser
- 图 3 ->
multiscale
- 图 5 ->
remeshing
- 图 6 ->
reg_fail
- 图 7 ->
comparison
- 图 8 ->
viewpoints
- 图 9 ->
influence
:warning: 几个实验是在 Linux Ryzen 3990X 工作站上使用 TITAN RTX 显卡进行的等时间比较。为了确保可重复性,我们已冻结这些实验中每个方法的步骤数。
仓库结构
“largesteps”文件夹包含通过 pip
提供的参数化模块。它包含
geometry.py
:包含拉普拉斯矩阵的计算。optimize.py
:包含AdamUniform
优化器实现parameterize.py
:包含实际的参数化代码,作为to_differential
和from_differential
函数实现。solvers.py
:包含用于将参数化坐标转换回顶点坐标的 Cholesky 和共轭梯度求解器。
用于实验的其他函数包含在 scripts
文件夹中
blender_render.py
:用于在 blender 内部渲染网格的实用脚本constants.py
:包含不同有用文件夹的路径(场景、重新网格化等)geometry.py
:实用几何函数(法线计算、边长等)io_ply.py
:PLY 网格文件加载load_xml.py
:XML 场景文件加载main.py
:包含主优化函数preamble.py
:用于导入图形冗余模块的实用脚本render.py
:包含渲染逻辑,使用nvdiffrast
许可协议
本代码根据3条款BSD许可证提供,许可证文件可在LICENSE文件中找到。通过使用、分发或为此项目做出贡献,您同意此许可证的条款和条件。
引用
如果您将此代码用于学术研究,请使用以下BibTeX条目引用我们的方法
@article{Nicolet2021Large,
author = "Nicolet, Baptiste and Jacobson, Alec and Jakob, Wenzel",
title = "Large Steps in Inverse Rendering of Geometry",
journal = "ACM Transactions on Graphics (Proceedings of SIGGRAPH Asia)",
volume = "40",
number = "6",
year = "2021",
month = dec,
doi = "10.1145/3478513.3480501",
url = "https://rgl.epfl.ch/publications/Nicolet2021Large"
}
致谢
作者们感谢Delio Vicini就本项目进行的早期讨论,Silvia Sellán分享她的重构实现,并为图表提供帮助,以及Hsueh-Ti Derek Liu在制作图表方面的建议。此外,感谢Miguel Crespo制作此README模板。
项目详情
largesteps-0.2.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2997a62a3f9eb9e65ef87227dd1df6e6490018aa1428b743204440fbdb832a69 |
|
MD5 | 714706127e26428cfef2236bde47361a |
|
BLAKE2b-256 | f7acfcdf67417c54906a2a744386249764dedbb433ea28aea742913cf01a90d4 |