【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects

文章目录

  • 1. 之前的方法存在什么问题?这篇论文做了件什么事?
  • 2. Previous Work
    • 可移动部件的分割和分析
    • 用于铰接物体重建的一些隐式表达
  • 3. 问题描述
  • 4. 方法
    • 复合神经辐射场
    • loss
  • 5. 实验
    • 实验数据集
    • Baseline
    • 评估指标
    • 实验结果
  • 6. 总结
    • Limitation
    • Conclusion
  • 7. 其他补充
    • 四元数
    • NeRF
      • NeRF原理
      • Positional Encoding in NeRF
      • NeRF网络结构
      • NeRF中的Volume Rendering
      • NeRF中的Hierarchical Sampling分层采样
    • PSNR,SSIM

1. 之前的方法存在什么问题?这篇论文做了件什么事?

作者认为之前的铰接物体重建存在两个问题:
问题1:之前做铰接物体重建和理解的方法大多是supervised的,supervised众所周知的缺点就是需要大量的数据来进行学习,这些数据的搜集和整理是费时费力的。
问题2:之前大部分的铰接物体重建都是在已知类别上进行重建的,不同类别的物体会有不同的模型进行拟合,这就导致不同类别的物体需要使用不同类别的数据进行训练。我们更希望得到一个跨类别可用的网络。之前CVPR2022的论文Ditto就是一个跨类别的网络,但是Ditto的缺陷在于难以泛化到没有见过的物体类别,同时没有进行外观的重建。

论文为了解决问题1,便想要通过紧密联系的几何运动结构来避免显式的3D数据和运动参数的监督。作者认为,了解完整的几何有利于运动参数的预测;反之,了解物体在不同状态下具体的运动参数会给几何的重建提供更好的信号。
论文针对解决问题2,想要提出的方法是通过一个模型,对动态和静态的part进行重建,并进行运动参数的预测。part的表示使用neural fields来进行表示,并通过预测出来的运动参数将分离的(static part & motion part)neural fields连接在一起。

本文的输入输出如下:
输入:两组静态铰接状态下的铰接物体多视角图像
输出:分解出可移动部件、重建几何和外观、进行运动参数预测
特点:PARIS设计了一种自监督的(无需任何3D监督、运动及语义上的注释)、端到端的架构,在part-level上学习shape和appearance并优化运动参数

2. Previous Work

可移动部件的分割和分析

随着铰接物体有了越来越丰富的3D数据和注释,大部分工作喜欢通过一种数据驱动的方式来进行部件运动性求解:
ScrewNet通过递归神经网络处理一组深度图以获得部件运动性
胡老师等人的工作则是通过度量学习,将点云映射到一类运动序列上来估计部件运动型

目前已有的一些3D数据分割的工作无法直接用在运动分割上,针对于这个gap,还有一些工作尝试去做运动部件分割和分析:
Shape2Motion和Li等人的工作以监督的方式学习了category-level的运动部件分割
但是category-level的方法终究有其限制

进一步有人尝试跨类别的方法:
闫博的工作,以及Abdul-Rashid等人设计了跨类别的网络,对点云进行部件分割,进行运动层次预测
耿欣师兄等人的工作通过半监督的方式,从过分割的3D扫描中学习了部件运动参数的预测
Chu等人提出了方法,使得铰接物体可以变化成用户指令所期待的那样

上述的所有工作都是在理解3D点云的铰接和结构。本篇论文的输入是两组RGB图像,比较类似的工作是CVPR 2022的Ditto和CVPR 2023的CARTO。但本篇论文的方法与Ditto和CARTO又有以下不同:

  1. Ditto的输入是交互前后的3D点云,CARTO是双目图像,本篇论文是一组多视角的RGB图像
  2. Ditto和CARTO都只focus geometry的建立,都没有注重对于外观的表达,本篇论文在保有geometry的基础上还进行了外观的表达
  3. Ditto和CARTO在训练过程中都需要使用到3D监督和铰接注释,本篇论文无需任何监督和注释

用于铰接物体重建的一些隐式表达

隐式表达凭借其连续及拓扑自由的方式变得很火。
较早的工作在铰接物体重建上的代表性工作是NASA和A-SDF,NASA是针对于人体铰接的重建,A-SDF是针对于物体铰接的重建,他们都需要使用3D监督来实现。

随着可微渲染技术的进展,可以从多视角的RGB图像中进一步学习物体的shape和appearance,这驱动了静态场景、刚性可移动部件、动态变化场景的重建。
针对于能够对appearance进行学习的情况,Fangyin Wei等人提出一个category-level的方法来表示铰接物体的shape和appearance,这篇工作主要是利用了articulation latent code、shape latent code和appearance latent code来进行表达,网络可以生成没有见过的articulation states通过在latent space中做内插或者外插。

类似的,还有CLA-Nerf利用监督学习,通过逆渲染来输出2D分割和估计的part pose

还有一些工作是通过RGB Video来进行铰接物体的一些预测和重建等,作者提到,他们的multi-view RGB输入相对于这些输入来说更加稀疏,且可能会出现对static part的遮挡等情况(如下图所示),所以他们的工作更具有挑战性:
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第1张图片

3. 问题描述

输入:开始状态 t = 0 t=0 t=0和结束状态 t = 1 t=1 t=1,在每一个状态 t t t中,给定一组多视角RGB图像 I t I^t It及对应的相机参数。
假设:开始状态和结束状态之间,只有一个部件发生了移动。这里称移动的部件为movable part,静止的部件为static part。
目标1:分离movable part和static part的geometry和appearance。有了这些part-level的geometry和appearance,可以通过控制joint的state,来渲染新状态下任意视角的图像。
目标2:铰接运动估计(motion estimation)。假设可移动部件仅占旋转/平移中的一个属性。一旦知道了运动类型,就根据运动的类型进行不同的参数化:

  • 如果motion type是revolute joint,则将这个motion type参数化为一个轴点pivot point p ∈ R 3 p∈R^3 pR3,以及一个单位四元数用来表示旋转 q ∈ R 4 , ∣ ∣ q ∣ ∣ = 1 q∈R^4,||q||=1 qR4∣∣q∣∣=1
  • 如果motion type是prismatic joint,则这个motion type参数化为一个单位向量 a ∈ R 3 , ∣ ∣ a ∣ ∣ = 1 a∈R^3,||a||=1 aR3∣∣a∣∣=1,以及一个沿着轴发生的移动距离 d d d

综上,旋转函数 f p , q f_{p,q} fp,q和平移函数 f a , d f_{a,d} fa,d分别作为运动的函数,具体使用哪个取决于motion type。这个transformation函数会被会被聚集到训练的pipeline中来共同优化运动参数。

4. 方法

【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第2张图片

本文提出的方法,是以一种自监督的方式来学习part-level的表示和articulation估计。
以运动为线索,进行静态部件和移动部件的分离。由于运动考虑了两个状态之间的不一致性,通过配准输入状态 t t t到canonical状态 t ∗ t^* t来优化运动参数。配准过程中,符合变换的component被提取为移动部件,而剩余的一个静止部分被提取为静态部件。

复合神经辐射场

静态部件和动态部件在训练过程中通过组合进行学习,静态和动态部件共享基于Instant-NGP的神经网络结构(这并不是说他们共享相同的网络参数,只是说网络结构)。在这里没有像一些动态场景建模方法一样对连续动力学进行建模(因为输入状态过于离散,不足以对连续动力学进行建模),而是学习显式的变换函数来建立两个状态之间的运动关系,进而将canonical state映射到两个输入状态/在canonical state和两个input state之间实现mapping。canonical state采用的是 t ∗ = 0.5 t^*=0.5 t=0.5

在canonical state下,static field使用 F S F^S FS进行表示,mobile field使用 F M F^M FM进行表示。

形式上,static field和mobile field的表示如下:
F S ( x t , d t ) = σ S ( x t ) , c S ( x t , d t ) , F M ( x t ∗ , d t ∗ ) = σ M ( x t ∗ ) , c M ( x t ∗ , d t ∗ ) F^S(x_t,d_t)=\sigma^S(x_t),c^S(x_t,d_t),F^M(x_{t^*},d_{t^*})=\sigma^M(x_{t^*}),c^M(x_{t*},d_{t*}) FS(xt,dt)=σS(xt),cS(xt,dt)FM(xt,dt)=σM(xt),cM(xt,dt)
其中, x t ∈ R 3 x_t∈R^3 xtR3表示在state t t t时刻,沿着光线 d t ∈ R 3 d_t∈R^3 dtR3进行的点采样; σ ( x ) ∈ R \sigma(x)∈R σ(x)R是点 x x x处的密度值(就是Nerf中的density value); c ( x , d ) c(x,d) c(x,d)是从视角方向 d d d出发,看到点 x x x上的RGB值(Nerf中的color)。
对于输入状态 t ∈ { 0 , 1 } t∈\{0,1\} t{0,1},通过变换函数 T T T,将点 x t x_t xt变换到 x t ∗ x_{t^*} xt,视角方向从 d t d_t dt变换到 d t ∗ d_{t^*} dt以查询 F M F^M FM。学习精确的铰接和分割进一步建立从状态 t t t t ∗ t^* t的对应关系。
对这段话我的理解是,static part在state发生改变的时候,是不会变的,所以我们只需要在state发生改变之前获取这个static part即可;而movable part在state发生改变的时候位置是会改变的,且这个movable part发生的变换是刚性的,所以如果我们将视角方向通过变换函数 T T T进行一个刚性变换(也就是建模了所谓的运动),进一步找到在新的状态 t ∗ t^* t下的movable part,这个新state下的movable part和原本state发生改变前的movable part之间建立了对应关系。

训练过程中采用了和原始NeRF相似的pipeline,只是扩展了光线追踪和体渲染过程以组成这两个场。在每一次训练迭代过程中,为每一个输入状态 t ∈ { 0 , 1 } t∈\{0,1\} t{0,1}采样点,并进行渲染,分别使用输入的图像来进行监督。

以下介绍组合两个field进行渲染的公式和方法:
在对每个状态 t t t进行光线追踪时,首先沿着光线对场 F S F^S FS进行均匀地采样点 x t x_t xt,接着将 x t x_t xt通过 T T T变换到 x t ∗ x_{t^*} xt来查询场 F M F^M FM。则输出的场的密度和应为: σ s u m = σ S ( x t ) + σ M ( x t ∗ ) \sigma_{sum}=\sigma^S(x_t)+\sigma^M(x_{t*}) σsum=σS(xt)+σM(xt)。利用这个密度和来构造概率密度函数以指导第二轮光线追踪的分层采样(Hierarchical Sampling),分层采样可以见其他补充中的NeRF分层采样,这是NeRF中为了提升效果的一个改进方式。

使用 x ( h ) = o + h d x(h)=o+hd x(h)=o+hd来表示一个从中心点 o o o出发,以 d d d为方向的一条射线 r = o + h d r=o+hd r=o+hd上采样的点,同时最近和最远边界为 [ h n , h f ] [h_n,h_f] [hn,hf],组合两个field并计算光线 r r r上颜色 C ^ ( r ) \hat{C}(r) C^(r)的公式为(该公式通过权重来聚集每个点的两个颜色):
C ^ ( r ) = ∫ h n h f ( w S ( h ) ⋅ c S ( h ) + w M ( h ) ⋅ c M ( h ) ) d h ,这里 c ( h ) ≡ c ( x ( h ) , d ) \hat{C}(r)=\int^{h_f}_{h_n}(w^S(h)·c^S(h)+w^M(h)·c^M(h))dh,这里c(h)\equiv c(x(h),d) C^(r)=hnhf(wS(h)cS(h)+wM(h)cM(h))dh,这里c(h)c(x(h),d)
首先每个field的颜色还是由点的位置和视角方向共同决定的,然后总的表现颜色相当于两个field以权重之和展示出来的颜色,类似于加权平均的做法。这里权重被定义为 w S ( h ) = T ( h ) ⋅ α S ( h ) w^S(h)=T(h)·\alpha^S(h) wS(h)=T(h)αS(h),这个权重是由不透光率乘以采样点间距逐渐进行累加的。也就是说在表面的点更能够表现出颜色,越往后的点越不表现颜色。
类似于NeRF, T ( h ) T(h) T(h)是点 x ( h ) x(h) x(h)处的累积了static和movable field density σ s u m ( s ) \sigma_{sum}(s) σsum(s)的不透光率,类似于NeRF,只是把这个density换成了density的和,所以定义为: T ( h ) = e x p ( − ∫ h n h σ s u m ( s ) ⋅ δ s ) d s T(h)=exp(-\int^h_{h_n}\sigma_{sum}(s)·\delta_s)ds T(h)=exp(hnhσsum(s)δs)ds
这里的 δ s = h s + 1 − h s \delta_s=h_{s+1}-h_s δs=hs+1hs,表示的是相邻采样点的距离。这种方式的intuition是,任何一个具有高密度值的场中的采样点都可以终止颜色的传播。也就是光打到了这个复合density的点上,后面的点就不再表现出颜色了。这个策略同样在场景NeRF工作STaR和D²NeRF中被采用了。

loss

基本loss
最基本的Loss为 L = L r g b + λ m a s k L m a s k L=L_{rgb}+\lambda_{mask}L_{mask} L=Lrgb+λmaskLmask
一个NeRF中的RGB监督loss: L r g b = ∣ ∣ C ^ ( r ) − C ( r ) ∣ ∣ 2 2 L_{rgb}=||\hat{C}(r)-C(r)||^2_2 Lrgb=∣∣C^(r)C(r)22,渲染图像的颜色减去GT图像中的颜色
一个Mask loss,我理解是监督一下density: L m a s k = B C E ( O ( r ) , M ( r ) ) L_{mask}=BCE(O(r),M(r)) Lmask=BCE(O(r),M(r)) M ( r ) M(r) M(r)是GT图像中的mask, O ( r ) O(r) O(r)的计算方式为: O ( r ) = ∫ h n h f w ( h ) d h O(r)=\int_{h_n}^{h_f}w(h)dh O(r)=hnhfw(h)dh,感觉就是从光线到物体直到光线离开这段路程上,不透光率的权重之和。

其他loss
根据经验,只使用这些最基本的loss很容易导致在mobile field和static field重叠的地方累积噪声。尤其是当static field的体积很大的时候。
在组合渲染的时候,静态部件隐藏了其内部的噪声。当我们使用体渲染来渲染表面后的点时,我们对这些看不见的点缺乏监督,从而导致噪声的累积。为了减轻这个问题提出了新的loss L p r o b L_{prob} Lprob。作者认为,应当鼓励每条光线展示出的颜色尽可能来自同一个field而不是多个field。
作者认为,应当将光线上mobile field的贡献定义为:
P M ( r ) = O M ( r ) O M ( r ) + O S ( r ) P_M(r)=\frac{O^M(r)}{O^M(r)+O^S(r)} PM(r)=OM(r)+OS(r)OM(r)
接着定义每条光线的该比率正则化项定义为:
L p r o b = H ( P M ( r ) ) , H ( x ) = x ⋅ l o g ( x ) + ( 1 − x ) ⋅ l o g ( 1 − x ) L_{prob}=H(P_M(r)),H(x)=x·log(x)+(1-x)·log(1-x) Lprob=H(PM(r))H(x)=xlog(x)+(1x)log(1x)
通过在每一轮迭代中最小化这个 L p r o b L_{prob} Lprob,我们强制 L p r o b L_{prob} Lprob要么为 0 0 0要么为 1 1 1,则通过这样的定义,每个位置的密度被鼓励来自单个field而不是两个field。

5. 实验

实验数据集

合成数据集:PartNet-Mobility。选择了其中的10个类别,每个物体在上半球模仿真实世界相机视角采64-100张图片
真实数据集:MultiScan dataset。这个数据集扫描了不同场景下多个状态的铰接物体

Baseline

A-SDF: category-level model,使用给定的GT SDF Samples重建object的mesh。A-SDF与本文不同之处在于A-SDF只是重建了mesh,并不能够做part-level的mesh,也不能够估计运动参数
Ditto: 从交互前后的点云中来重建part-level的geometry,估计运动参数。
Ours-ICP: 因为上述的两个方法不能够产生物体的外观,或者是从任意视角下渲染物体的外观,所以此处文章补充了一个naive的baseline。从给定的两组多视角图像中学习神经隐式表面 F 0 F_0 F0 F 1 F_1 F1。神经网络的backbone是NeuS和Instant-NGP。额外还在两个神经SDFs之间使用Constructive Solid Geometry(CSG)算法并提取part-level的网格。static field和movable field的相交区域可以被视作static part。通过场之间的相减,可以获得movable part的对应。可以使用全局配准和ICP配准算法来进一步计算movable part之间的变换。
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第3张图片

评估指标

part-level geometry的评估
使用Chamfer Distance作为评估,CD-S为static part,CS-M为movable part

运动估计
使用angular error来评估两种类型的joints,这个指标计算了预测的axis方向和GT axis方向之间的差异。
使用position error来评估revolute joints,这个指标考虑了pivot point位置,进一步计算旋转轴之间的差异。
使用geodesic distance(角度为单位)来评估joints state,用于两种类型的joints。

新视角合成
对于新视角合成结果,使用Peak Signal-to-noise Ratio(PSNR峰值信噪比)和Structural Similarity Index(SSIM)用于评估新视角下的结果。
这是两种图像评价指标。

实验结果

重建与部件分割结果
A-SDF本身就是通过一个函数来进行拟合的,所以不具备分part那么好的效果,所以个人认为这里的比较稍微有点不公平,不过由于A-SDF使用一个函数进行拟合,所以它本身表达出来的效果就不会太好。
在活动椅子上,Ditto的表现非常差,对于部件的预测,在下面三个例子中Ditto的part-level预测都并不是那么准确。

指标上来看,PARIS在大部分指标上的效果超越了Ditto,少部分逊色于Ditto
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第4张图片

运动估计
运动估计上的准确程度应该是PARIS的一大显著优势
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第5张图片

新视角合成和铰接生成
看起来表示的都挺准确的,中间状态应该是通过改变transformation function,在初始状态或结尾状态基础上变形获得的
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第6张图片

消融实验
进一步证明了那个其他loss,也就是那个regularization loss的有效性

Real-World数据集上的结果
感觉Real-World数据集上的表现从数值上来看,Ditto的表现好像和PARIS不分伯仲,不知道是不是虚拟和现实之间的GAP导致的,但是感觉也不应该差别很大才对。不过在part-level上的几何重建好像原本在虚拟数据集上,Ditto和PARIS就是难分伯仲,PARIS厉害在它的运动估计相对更加准确一些。

【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第7张图片

6. 总结

Limitation

【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第8张图片
从这张图中理解limitation,作者提出limitation在于:

  1. 第一行fridge的例子:在视角变化之后,大部分的静态部分被遮挡,会导致无法正确估计revolute joints的参数
  2. 第二行椅子的例子:如果movable part的在几何上前后非常相似,会导致椅子的旋转方向出现问题

这两点很大程度上是因为3D correspondence学的不好。

Conclusion

PARIS做的事情是通过两组RGB图像,进行了铰接物体的part-level的几何重建,并估计了joints及motion parameters。
作者提到,他们的工作是第一个从两组RGB图像出发,处理两组任意状态铰接物体多视角RGB图像的方法。同时实验证明,他们的方法在shape、motion parameters、appearance相较之前的工作来说都有其优势。
但是文章的缺陷在于遇到较大程度的遮挡的时候,可能就会导致failure case的出现,同时文章的方法只能够处理两个parts的物体(一个static,一个movable,如果有多个movable的部件,多个movable部件间无法独立控制)。
未来有意思的方向就是研究多个movable部件下的part-level geometry reconstruction和motion parameters predict。
文章还有一个强假设是物体在世界坐标系下是对齐的,作者提到这个assumption在之前的工作中同样被采用了(这个确实是,大部分都是align好的。如果处理现实世界的物体,不知道可不可以通过什么方法将现实世界的物体先做一个对齐)。

7. 其他补充

四元数

参考四元数,其中有一个很关键的定义句子是:四元数可以表达物体绕任意向量轴的旋转,并且和欧拉角度旋转与旋转矩阵的方法相比,其效率更高,操作也更灵活。
文中revolute joint的定义是通过一个轴点pivot point p ∈ R 3 p∈R^3 pR3和一个单位四元数表示旋转 q ∈ R 4 , ∣ ∣ q ∣ ∣ = 1 q∈R^4,||q||=1 qR4∣∣q∣∣=1。这pivot point给定了revolute joint所在的位置,单位四元数表示轴的指向和旋转。

NeRF

这个视频把原理讲的很清楚:十分钟带你快速入门NeRF原理
在这里写一下我印象深刻的点:

NeRF原理

NeRF的输入是相机所在坐标,以及相机的方位角和俯仰角(但是在代码实现的时候好像是用三维坐标作为指向,而不是方位角&俯仰角)
NeRF的输出是从当前相机坐标和俯仰角、方位角(就是一个三维的极坐标表示吧,下面是一个三维极坐标的概念图,实际上代码里是使用一个三维向量来表示的相机方向,而不是俯仰角和方位角)出发,看向模型时,对应的采样点的RGB和不透明度 σ \sigma σ,不透明度是视角无关的。
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第9张图片

【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第10张图片
以往我们显式地进行三维建模,是将模型表达成点云、网格、体素等显式的三维形式。而NeRF是一种隐式的三维建模方法,这里的“隐式”的体现从上图中就可以看出来:模型的信息隐式地存储在网络F中,我们通过输入相机位置及相机的俯仰角,进而查询在该视角下看到的模型的RGB& σ \sigma σ。我们并不能够显式地看到模型,模型被隐式地蕴含在网络F中。
所以,在最原始的NeRF上,一个网络仅能表达一个物体/场景,当我们需要使用一个网络去表达其他物体/场景时候,就需要重新训练。
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第11张图片
由NeRF最常见的这张图可以看出来,实际上训练资料是一个像素点对应的射线和相机位置。在一条射线上均匀地进行点的采样,在代码中,near表示第一次到达物体表面的位置,far表示最后一次与物体表面接触的位置。在near和far之间可以得到射线上每一个点的RGB值和不透明度 σ \sigma σ,然后通过将RGB值和不透明度通过积分计算得到最终的表面颜色。

Positional Encoding in NeRF

这里使用Positional Encoding的方式是,相机空间坐标使用20维表示位置编码;相机方向使用8维来表示位置编码。
位置编码的存在可以保有图像中高质量的细节,使得这些细节不会被平滑掉。
位置编码是通过concat的方式来和原始坐标进行结合的。

NeRF网络结构

【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第12张图片
前面提到,NeRF的做法是将相机位置和位置编码以concat的方式结合起来作为网络的输入,在第5个MLP中再次加入了这个输入,是一个残差的结构以解决梯度消失和梯度爆炸的问题。在这之后的第三个MLP,输出了不透明度 σ \sigma σ,前面说过不透明度是相机方向无关的,所以无需相机方向作为输入就可以获得这个density。在后边加上了相机的方向,以获得对应的RGB颜色值。

NeRF中的Volume Rendering

对于每个batch中的64个sample points,通过Volume Rendering的方式进行渲染。如下图©所示,纵坐标表示的是不透明度。对于Ray2,第一次波峰,也就是第一次不透明度较高的时候,说明第一次碰到了物体,第二次波峰,第二次不透明度较高的时候说明光线离开了物体。
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第13张图片
在实际渲染的时候,第一个不透明度较高的所显示出来的颜色肯定会阻挡第二个不透明度较高所显示出来的颜色,也就是说第一个波峰作为物体的正面,我们会看到物体正面的颜色;第二个波峰作为物体的背面,我们可能看到这个颜色就更少一些。所以通过一种特定的积分方式来求得实际显示的颜色
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第14张图片
这里可以理解一下这个渲染的公式。其中 C ( r ) C(r) C(r) C ^ ( r ) \hat{C}(r) C^(r)分别表示理想状态下和近似状态下的颜色值。
t t t:表示采样点离原点 o o o的距离
σ \sigma σ:不透明度
δ \delta δ:采样点间距
d d d:观测方向的单位向量
r ( t ) r(t) r(t):采样点的位置 r ( t ) = o + t d r(t)=o+td r(t)=o+td
c ( r ( t ) , d ) c(r(t),d) c(r(t),d):颜色值与采样点位置和观测角度有关
σ ( r ( t ) ) \sigma(r(t)) σ(r(t)):不透明度仅与位置有关,与观测角度无关
T ( t ) T(t) T(t):理解为不透光率,从积分可以看出,实际上 T ( t ) T(t) T(t)是将采样点的密度值 σ \sigma σ和影响范围 δ \delta δ进行累加,越向后叠不透光率越高,对于这个不透光率的理解如下:
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第15张图片
理想状态下,我们希望通过积分来得到这个颜色值,但是我们没办法做积分,因为我们的采样值是离散的,所以只能通过一种近似的方式,通过求和来近似积分:
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第16张图片

NeRF中的Hierarchical Sampling分层采样

如果在射线上通过均匀的点采样,可能会导致近似不够精确,如下粗网络是均匀地采样64个点
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第17张图片
这会导致的一个问题是近似上可能会出现问题,没有办法近似这个波峰:
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第18张图片
为了解决这个问题并改进效果,NeRF里进一步提出了一个精细网络,基于粗网络采样计算得到的结果,来计算权重,权重高的位置在精细网络中尽可能地多采样点,空气部分较为稀疏的地方,或者是不透光率较高的地方可以少采样一些点,进而获得更好的效果。
【计算机图形学】PARIS: Part-level Reconstruction and Motion Analysis for Articulated Objects_第19张图片

PSNR,SSIM

参考了图像质量指标:PSNR、SSIM、MSE
只摘取了数值大小表示结果好坏的部分:
PSNR 在图像处理上主要用于量化受有损压缩影响的图像和视频的重建质量。如果两个输入图像的相似,PSNR 返回一个浮点数在30和50之间,(数值越高,相符程度越高).
SSIM 返回图像的结构相似度指标。这是一个在0-1之间的浮点数(越接近1,相符程度越高)
两个指标都是需要输入两张图像来进行计算的。

你可能感兴趣的:(计算机图形学,3d)