-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于本篇论文中,渲染细节的相关问题 #15
Comments
您好! 感谢您对我们论文的关注。我们的代码是基于nerfstudio中的Splatfacto的,它与INRIA的原版3DGS在这里主要的不同就是它把render过程与densification做了解耦,viewspace_point_tensor(xys), visibility_filter(visible_mask)以及radii这三个变量不会在每次render时返回,而是在每次forward(在我们这里就是通过平均virtual sharp image 得到一张blur image,跟input image做loss)再backword之后,再调用一个after_train的callback,在这个callback里面再去根据此时的梯度去做adaptive density control。这里面它的梯度会从blur image传递到每个virtual sharp image再传到各个params(Gaussians & camera poses)。所以这里第一,每个virtual sharp image在梯度计算中都有贡献;第二,在要求Gaussians数量基本不变的前提下,我们也发现densify_grad_thresh这个超参数的设定会跟num_virtual_views有一个线性的关系(我们在补充材料C.2里也提到了,根据推导是求平均的这个操作带来的)。 |
哦哦哦,好的,非常感谢,我好像明白了,nerfstudio里面的代码是在backword之后再去获取相关信息进行adaptive density control的,不是原始的gs代码那样每次render后返回相关参数后进行adaptive density control。我去看看nerfttudio的源码,谢谢您。 |
您好,我想再问一个问题,您这篇论文是否考虑了同一运动轨迹下合成的blur-image不唯一的情况呢?比如在同一运动轨迹下,我估计的pose的采样间隔可以不是均匀的,也可以是均匀的等等,那么这样的话我average后得到的模糊图像可能得到不同的模糊图像,我记得您论文中好像用的是插值,也就是估计的timetamp的间隔都是均匀的哦? |
这里我们把CMOS上的2D image记为一个与时间 然后我们做离散化近似,从这里引入了时间上的等间隔插值: 用 |
是的,camera pose的梯度中,主要就是高斯椭球的均值对pose的Jacobian需要计算,gsplat v0.1 里面这部分是python实现的,然后最近他们正在用CUDA重构整个代码,也包括这个部分 。 从你提供的图片来看,可能就是pose的梯度中间是断的,所以pose没有被优化,你可以把pose print出来看看是不是没有在被优化 如果想继续在原版gs上开发pose优化的话,一个比较方便的选择就是把 |
哦哦哦好的,谢谢大佬,话说,nerfstudio中的Splatfacto这个框架是不是本来就比原本的GS的质量更好速度更快? |
哦对了,大佬,我看论文里面的那个Table3,是deblurring的PSNR,我记得deblur-nerf的数据集(blender数据集)模糊的图片没有对应的清晰GT,只有每间隔为8的一张清晰的GT作为测试集,您table3中的去模糊PSNR是根据什么计算的呢? |
这里有他们的一些测试结果,总体上是能看到一些提升的,他们还在持续更新,后面提升应该会更大;
其实是有的,Deblur-NeRF把合成数据集的deblurring的GT放在一个单独的文件夹 |
亲爱的作者您好!原谅我的菜,我想问一下您这篇论文中一些渲染方面的细节问题,正如您论文中所所说:在初始pose以及截止pose之间进行插值,以获得沿轨迹的每个相机pose,然后将对应的pose的image渲染出来生成一些列的虚拟清晰图像,然后将这些虚拟清晰图像进行混合得到渲染后的blur-image,最后将渲染的blur-image和GT-blur-image做损失,以联合更新并优化pose以及高斯的参数。
我比较好奇的是,原始的gaussian splatting我每次迭代渲染只渲染一张image,然后render后会返回一个bool类型的数组(记录半径大于0的椭球),以及一个记录梯度的数组(在代码中是viewspace_point_tensor, visibility_filter以及radii),这几个数据是会在后面自适应的致密化操作中使用的。但是如果按照您这篇论文的思路的话,假设我插值生成了5个pose,每个pose我渲染出一张virtual-image,那么每次渲染都会返回我上面说的那三个数据,我是要将每次render得到的这三个数据也求平均后再进行致密化吗?
我粗略的画了两张图,以便您能更好的理解我的问题:
下面这张图是您这篇论文中我假设的五个pose的情况下,一个大概的流程(主要是下面自适应操作的处理,是做五次自适应操作,还是说将对应的数据求平均后做一次自适应的操作,但是如果求平均的话感觉原理上不太合理,因为有些梯度高的和梯度低的部分的椭球可能会被平均掉,影响自适应的准确性)
这张是原始的3DGaussian splatting的流程:
The text was updated successfully, but these errors were encountered: