定义:Neural Omnidirectional Distance Fields,a new shape representation encodes geometry by storing the depth to the object’s surface from any 3D position in any viewing direction.
一种通用的3D表达方式,可以生成mesh,点云,深度图
SDF/UDF是带有表面法向约束的ODF,ODF是可以用来表示SDF、UDF的,如下图所示
总体架构:
总体架构和deepsdf很相似,输入与nerf的相同(
),输出(光沿发射角度的距离
,
:是否占用(0或1)),训练过程中会像deepsdf一样每一个instance 训练一个latent code,网络总共8层,前两层输出
,最后一层输出
,这是为了把参数空间留给更复杂的深度估计,仿照deepsdf,同一类物体可以共享一个网络参数,inference的时候只需要优化latent code的参数即可,latent code默认是一个高斯分布。(NeuralODF can be used for both overfitting a single shape and generalizing to a category of shapes. )
Loss:
第一个就是预测depth和gt depth的均方差,第二个就是一个二分类的cross-entropy loss,第三个是因为latent code是一个高斯分布,取最小化负对数似然以后就是这个公式
数据增强:
这个部分应该没什么解释的,基本是一些常规操作,就不贴文字了
Recursive inference:
算法2 ,其实就类似于TSDF,加了一个深度限制,在算法3的recursive inference过程中,为了避免学到的噪声带来的影响,沿着梯度下降的方向多次迭代得到一个较好的结果(如10~17行所示)。
Jumping cube 算法:
空间按照一定的分辨率划分之后,譬如,右图1.红色的栅格沿着z方向,位置和角度输入网络inference,一旦这个栅格沿着z方向上对应的深度是占用的,那么当前栅格到占用栅格之间的栅格推理的信息就可以直接按照线性比例输出了,不需要都inference一遍了,节省计算资源。
生成三角面片的时候,根据cube的边(12条)与物体表面的相交情况来生成面片,正常应该是种情况,考虑旋转以后,就简化为218种情况。