文章目录
- SinNerf 解决的问题
- 方法和结构
- 自己训练的效果
SinNerf 解决的问题
该方法主要解决的问题是: 现有都使用多张照片来进行nerf 表示的学习,这篇文章的话,主要是想使用一张单视角的照片来Nerf表示的学习。通过从单张照片中得到的伪标签以半监督的形式来约束学习到的nerf表示。
方法和结构
具体的,该方式使用了两种伪标签,通过image wraping的方式重投影reference view 和 unseen view之间深度。这样做可以用来约束辐射场的几何连续性。第二个伪标签就是主要关注不可见views的语义质量。这里对看不见的views的约束是非常重要的。因为如果没有多视角的话,Nerf是没有能力学习潜在的几何形状的。
这篇文章讲的是将可见的这一个view propagates到 看不见的view上。具体什么意思? 我的理解是就是,假设有50个相机对着一个物体,这些相机的位姿,内外参都是知道的,只是只有一个相机是有图像,其他的相机都没有图像。有图像的这一个相机就是reference view, 没有图像的就是unseen views。因为相机和相机的关系是知道的,可以通过image wraping,根据现有的reference view 和相机之间关系,去推算那些unseen view的深度。这些深度就作为unseen views的一个几何伪标签。本文还是用inverse deoth smoothness loss 去regularize那些因为occlusion而导致的预估深度不准确的情况。这个可以理解成是像素值在x位置的拉普拉斯。类似的还将unseen view 重新投影会reference views 来促进几何连续性。
除了几何约束之外,还有一个语义约束。 这个语义约束由两部分组成,第一分部是叫local texture guidence,第二部分是global texture gudiance。 local texture guidence就是使用一个类似gan-based拟念。Nerf出来的照片当做是假的照片,并将reference images 变成小Patch, 然后把这些看成是real images。对于所谓的 global texture gudiance,直接是使用DINO-ViT 来提取reference view和unseen view的features,然后最小化他们之间的L2 distance。
自己训练的效果
因为笔者本地是只有RTX 4070, 所以按照它github上的指示调小了patch size 以及将precision 调整到了16。这些都会影响最终的效果。