Open 1400013531 opened 2 months ago
你好,相机偏移量较大时渲染novel view质量较低是基于gaussian的街景重建方法普遍存在的问题。我们的方法比较依赖点云初始化的质量,对gaussian_model.py中的create_from_pcd函数进行如下改动,去掉近处的随机初始化点云,只保留远景的随机初始化点云会得到更加稳健的重建效果。
def create_from_pcd(self, pcd: BasicPointCloud, spatial_lr_scale: float):
self.spatial_lr_scale = spatial_lr_scale
fused_point_cloud = torch.tensor(np.asarray(pcd.points)).float().cuda()
fused_color = RGB2SH(torch.tensor(np.asarray(pcd.colors)).float().cuda())
features = torch.zeros((fused_color.shape[0], 3, self.get_max_sh_channels)).float().cuda()
features[:, :3, 0] = fused_color
features[:, 3:, 1:] = 0.0
## random up and far
r_max = 100000
r_min = 15 ## around 150m for far point init
num_sph = self.random_init_point
theta = 2*torch.pi*torch.rand(num_sph)
phi = (torch.pi/2*0.99*torch.rand(num_sph))**1.5 # x**a decay
s = torch.rand(num_sph)
r_1 = s*1/r_min+(1-s)*1/r_max
r = 1/r_1
pts_sph = torch.stack([r*torch.cos(theta)*torch.cos(phi), r*torch.sin(theta)*torch.cos(phi), r*torch.sin(phi)],dim=-1).cuda()
# r_rec = r_min
# num_rec = self.random_init_point
# pts_rec = torch.stack([r_rec*(torch.rand(num_rec)-0.5),r_rec*(torch.rand(num_rec)-0.5),
# r_rec*(torch.rand(num_rec))],dim=-1).cuda()
# pts_sph = torch.cat([pts_rec, pts_sph], dim=0)
pts_sph[:,2] = -pts_sph[:,2]+1
fused_point_cloud = torch.cat([fused_point_cloud, pts_sph], dim=0)
features = torch.cat([features,
torch.zeros([pts_sph.size(0), features.size(1), features.size(2)]).float().cuda()],
dim=0)
您好,感谢您严谨且优异的工作成果和分享! 我按照readme的说明做了waymo场景的训练和重建,使用的是预处理好的waymo数据集的0145050场景,在本地复现得到了略好于论文中提到的效果。
但在我进一步想要略微移动相机视角和推进时间后,得到的重建结果是比较模糊的,下图是相机的y方向移动了0.03m后得到的重建结果
在另一方向例如z方向移动了0.3m,可能会出现更多的重影
推进时间0.5s后也得到了类似的图像
我所做的修改有两处,一处是在相机类加入了一个update方法,它会根据更新的R和T矩阵重新计算世界到视角的变换矩阵和全投影矩阵,计算的方法和camera类的初始化类似。
一处是在evaluate.py的图像渲染以前,略微改动相机的视角,并调用update方法
我使用的系统是ubuntu20.04,显卡RTX 3090,具体的环境配置如下 requirements.txt
不知道是否还需要修改其他参数才能在略微移动镜头或推进时间的情况下得到较理想的重建结果?