前言
又是一篇新文章,最近完全没有动力搞下去,不知道是因为要放假了还是想退学,anyway,有了一点点新的idea想基于这篇文章验证一下
Code
文件neuralangelo-main/projects/neuralangelo/utils/modules.py
有求导部分
eps = self.normal_eps / np.sqrt(3)
k1 = torch.tensor([1, -1, -1], dtype=x.dtype, device=x.device) # [3]
k2 = torch.tensor([-1, -1, 1], dtype=x.dtype, device=x.device) # [3]
k3 = torch.tensor([-1, 1, -1], dtype=x.dtype, device=x.device) # [3]
k4 = torch.tensor([1, 1, 1], dtype=x.dtype, device=x.device) # [3]
sdf1 = self.sdf(x + k1 * eps) # [...,1]
sdf2 = self.sdf(x + k2 * eps) # [...,1]
sdf3 = self.sdf(x + k3 * eps) # [...,1]
sdf4 = self.sdf(x + k4 * eps) # [...,1]
gradient = (k1*sdf1 + k2*sdf2 + k3*sdf3 + k4*sdf4) / (4.0 * eps)
if training:
hessian_xx = ((sdf1 + sdf2 + sdf3 + sdf4) / 2.0 - 2 * sdf) / eps ** 2 # [N,1]
hessian = torch.cat([hessian_xx, hessian_xx, hessian_xx], dim=-1) / 3.0
这里我更关心eps的值,同样是这个文件,可以看到每种网格分辨率下的eps,网格分辨率
for lv in range(0, num_levels):
size = np.floor(r_min * self.growth_rate ** lv).astype(int) + 1
self.resolutions.append(size)
# resolution 16
[33, 43, 56, 74, 98, 128, 169, 223, 295, 389, 512, 676, 892, 1177, 1553, 2048]
# epsilon
[0.0303, 0.02326, 0.01786, 0.01351, 0.0102, 0.00781, 0.00592, 0.00448, 0.00339, 0.00257, 0.00195, 0.00148, 0.00112, 0.00085, 0.00064, 0.00049]
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# fd 此时已经接近level14的epsilon
setp = 0.001
# dfd
step_x = 0.0031~0.0036--->0.0082~0.0077 # level 9 但是会随着距离产生变化,物体相机距离越大,setp_x越大,但即使再大,也是在这个范围内,那么过大的epsilon会产生问题吗?
step_z = 0.0098 --> 0.0011 # 随迭代次数减小 # level 5 会随迭代此时减小
关于mlp解码器部分在neuralangelo-main/projects/neuralangelo/utils/mlp.py
有关于SDF MLP的部分:
超参——