三角网格去噪-Fast Mesh Denoising With Data Driven Normal Filtering Using Deep Variational Autoenco阅读笔记ders

Fast Mesh Denoising With Data Driven Normal Filtering Using Deep Variational Autoencoders 论文阅读笔记

这篇文章提出了一个快速且鲁棒的网格去噪算法,用于工业中用扫描仪扫描的3D网格模型去噪。

去噪算法的流程基本上与当前主流的方法一致,即先对网格的法向量进行去噪,然后根据去噪后的法向量调整网格的顶点位置。对于网格的顶点位置的调整,目前已经有非常成熟的方法,所以在当前网格去噪的研究中,核心是对网格法向量的去噪。

法向量去噪的好坏,将极大的影响网格的去噪效果。先前在法向量去噪上已经有大量的传统方法,但传统的方法不可避免会高度依赖参数的选择。且由于人们对某些事物认知的局限性,故不可能在设计算法的过程中兼顾所有的因素。

本文章用当下火热的深度学习方法对网格的法向量数据进行学习,以期待得到一个端对端的法向量去噪模型。而不同于以往的基于学习的网格去噪算法,本文章在利用学习到的网格去噪模型对数据进行测试后,用传统的双边法向滤波对测试结果进一步处理,得到了SOTA的结果。

1 算法

本算法首先对三维网格进行数据预处理,然后将数据放到CVAE中进行训练得到初步去噪后的法向量,再通过双边法向滤波做最后的去噪处理。

算法框架如下:

三角网格去噪-Fast Mesh Denoising With Data Driven Normal Filtering Using Deep Variational Autoenco阅读笔记ders

1.1 数据预处理

将三维数据作为神经网络的输入,一直都是一个比较困难的问题。

不同于二维图像数据,三维网格数据具有分布不均匀的特征,以至于很难将这些作为深度神经网络的输入。 为了解决这个问题,本文对三维网格数据进行了预处理。具体处理方式如下:

  • 首先,对于网格中的每个面片 F i \mathcal{F}_i Fi​,定义其重心为 c i c_i ci​。对于每个面片 F i \mathcal{F}_i Fi​,对其重心 c i c_i ci​与其他面片 F j \mathcal{F}_j Fj​(包括 F i \mathcal{F}_i Fi​)的重心 c j c_j cj​的距离 d i j d_{ij} dij​进行从小到大排序,选出前 N N N个面的法向量构成一个数据块 P i \mathcal{P}_i Pi​。
    P i = [ n i , 1 n i , 2 ⋮ n i , N ] (3) \mathcal{P}_i=\left[ \begin{matrix} n_{i,1} \\ n_{i,2} \\ \vdots \\ n_{i,N} \end{matrix} \right] \tag{3} Pi​=⎣⎢⎢⎢⎡​ni,1​ni,2​⋮ni,N​​⎦⎥⎥⎥⎤​(3)

  • 由于训练的数据量较小,为了提高训练效率,需要对每个数据块 P i \mathcal{P}_i Pi​做旋转变换 R i R_i Ri​,让每一个数据块的法向量都一致。首先定义数据块 P i \mathcal{P}_i Pi​的法向量 n f n_f nf​为:
    n i = 1 N ∑ j ∈ P i A i n i , j n_i = \frac{1}{N}\sum_{j\in \mathcal{P}_i}A_in_{i,j} ni​=N1​j∈Pi​∑​Ai​ni,j​
    其中, A i A_i Ai​为面片 F i \mathcal{F}_i Fi​的面积。定义 n 0 = ( 0 , 1 , 0 ) n_0=(0,1,0) n0​=(0,1,0), δ i \delta_i δi​为 n 0 n_0 n0​与 n i n_i ni​的夹角。将数据块 P i \mathcal{P}_i Pi​绕着 n i × n 0 n_i\times n_0 ni​×n0​旋转 δ i \delta_i δi​后得到旋转后的数据块 P i ′ \mathcal{P}_i' Pi′​。即:
    P i ′ = R i P i \mathcal{P}_i'=R_i\mathcal{P}_i Pi′​=Ri​Pi​

1.2 CVAE

条件变分自编码器是一种带标签的变分自编码器,而变分自编码器是一种常见的生成模型。之所以在变分自编码器的基础上加上标签,是为了让编码器的输出是我们想要的某个类别。至于条件变分自编码器的原理以及其发展历程,可以参考这篇文章

具体框架如下:

三角网格去噪-Fast Mesh Denoising With Data Driven Normal Filtering Using Deep Variational Autoenco阅读笔记ders

首先对数据按照1.1的步骤进行预处理,得到 P i ′ \mathcal{P}_i' Pi′​。为了能够对每个数据块进行分类(作为CVAE的输入),需要对数据块 P i ′ \mathcal{P}_i' Pi′​中的每一个法向量进行处理如下处理:
n i , j ′ = ( n i , j + 1 )   /   2 n_{i,j}'=(n_{i,j}+1)\ /\ 2 ni,j′​=(ni,j​+1) / 2
即将三维网格的面片法向量转化为不严格的normal map。为什么说不严格呢?因为我们之前已经对数据块做了旋转变换,所以相同特征(高曲率、底曲率、平整、尖锐等)的数据块会具有相同的颜色特征。而对于严格意义的normal,在相同特性下不一定会有相同的颜色特征。

三角网格去噪-Fast Mesh Denoising With Data Driven Normal Filtering Using Deep Variational Autoenco阅读笔记ders

如图所示,对于平整的区域,都表现为黄色,这是因为对齐后的 n i ′ n_i' ni′​几乎等于(0,1,0),故表现为黄色。

对于数据块的分类,可以采用K-means,经过分类后,就得到了标签Y。

对数据进行处理完后,就可以愉快地交给计算机去计算了。

在本问题中,CVAE的网络结构较为简单。其包含高斯编码器和伯努利解码器。

对于高斯编码器,其输入为标签 Y Y Y和网格噪声数据 X X X构成的数据 X i n X_{in} Xin​。接下来通过两个全连接层(每个全连接层后伴随着leaky relu层以及dropout层),最后经过一个全连接层得到隐空间。
X in  = [ Y ∣ X ] Y E H 1 = max ⁡ ( 0 , X in  W E H 1 + B E H 1 ) Y E H 2 = max ⁡ ( 0 , Y E H 1 W E H 2 + B E H 2 ) Y = max ⁡ ( 0 , Y E H 2 W E H 3 + B E H 3 ) μ = [ y 1 y 2 ] , σ = [ y 3 y 4 ] Z = μ + σ ⋅ N ( 0 , 1 ) \begin{aligned} \mathbf{X}_{\text {in }} &=\left[\mathbf{Y}| \mathbf{X}\right] \\ \mathbf{Y}_{E_{H_{1}}} &=\max \left(0, \mathbf{X}_{\text {in }} \mathbf{W}_{E_{H_{1}}}+\mathbf{B}_{E_{H_{1}}}\right) \\ \mathbf{Y}_{E_{H_{2}}} &=\max \left(0, \mathbf{Y}_{E_{H_{1}}} \mathbf{W}_{E_{H_{2}}}+\mathbf{B}_{E_{H_{2}}}\right) \\ \mathbf{Y} &=\max \left(0, \mathbf{Y}_{E_{H_{2}}} \mathbf{W}_{E_{H_{3}}}+\mathbf{B}_{E_{H_{3}}}\right) \\ \boldsymbol{\mu} &=\left[\mathbf{y}_{1} \mathbf{y}_{2}\right], \boldsymbol{\sigma}=\left[\mathbf{y}_{3} \mathbf{y}_{4}\right] \\ \mathbf{Z} &=\mu+\sigma \cdot \mathcal{N}(0,1) \end{aligned} Xin ​YEH1​​​YEH2​​​YμZ​=[Y∣X]=max(0,Xin ​WEH1​​​+BEH1​​​)=max(0,YEH1​​​WEH2​​​+BEH2​​​)=max(0,YEH2​​​WEH3​​​+BEH3​​​)=[y1​y2​],σ=[y3​y4​]=μ+σ⋅N(0,1)​
对于伯努利解码器,先从隐空间中根据标签Y进行采样得到 Z Z Z,让后伴随着两个全连接层(每个全连接层后伴随着leaky relu层以及dropout层),最后经过一个全连接层以及sigmoid得到去噪结果 X o u t X_{out} Xout​。
Z = [ Y ∣ Z ] Y D H 1 = max ⁡ ( 0 , Z W D H 1 + B D H 1 ) Y D H 2 = max ⁡ ( 0 , Y D H 1 W D H 2 + B D H 2 ) X out  = σ ( Y D H 1 W D H 2 + B D H 2 ) \begin{aligned} \mathbf{Z} &=\left[\mathbf{Y}| \mathbf{Z}\right] \\ \mathbf{Y}_{D_{H_{1}}} &=\max \left(0, \mathbf{Z} \mathbf{W}_{D_{H_{1}}}+\mathbf{B}_{D_{H_{1}}}\right) \\ \mathbf{Y}_{D_{H_{2}}} &=\max \left(0, \mathbf{Y}_{D_{H_{1}}} \mathbf{W}_{D_{H_{2}}}+\mathbf{B}_{D_{H_{2}}}\right) \\ \mathbf{X}_{\text {out }} &=\sigma\left(\mathbf{Y}_{D_{H_{1}}} \mathbf{W}_{D_{H_{2}}}+\mathbf{B}_{D_{H_{2}}}\right) \end{aligned} ZYDH1​​​YDH2​​​Xout ​​=[Y∣Z]=max(0,ZWDH1​​​+BDH1​​​)=max(0,YDH1​​​WDH2​​​+BDH2​​​)=σ(YDH1​​​WDH2​​​+BDH2​​​)​
得到最终的 X o u t X_{out} Xout​后,需要做一个旋转变换 R − 1 R^{-1} R−1。

最后将旋转后的法向量放入双边法向滤波中进行去噪。

1.3 loss

本网络采用的loss是变分下界误差(ELBL)。
L = H ( X G T , X o u t ) + D K L ( μ ∥ σ ) \mathcal{L}=H\left(\mathbf{X}_{\mathrm{GT}}, \mathbf{X}_{\mathrm{out}}\right)+D_{K L}(\boldsymbol{\mu} \| \boldsymbol{\sigma}) L=H(XGT​,Xout​)+DKL​(μ∥σ)
H ( ∗ ) H(*) H(∗)为交叉熵, D K L D_{KL} DKL​为KL散度。

2.结果

2.1.评估

采用Ground truth和去噪后的模型的平均法向夹角来评估去噪效果的好坏。

三角网格去噪-Fast Mesh Denoising With Data Driven Normal Filtering Using Deep Variational Autoenco阅读笔记ders
可以看出,本文提出的方法最优。

2.2 速度

本算法不仅去噪效果好,而且去噪的时间也比目前的好的方法要快。结果如下表所示:

三角网格去噪-Fast Mesh Denoising With Data Driven Normal Filtering Using Deep Variational Autoenco阅读笔记ders

2.3 工业界的使用效果

在工业中,对一些物体进行扫描不可避免会含有噪声。对于物体缺陷的检测,如果噪声过多,就会影响检测结果。本文的去噪方法可以很好的解决这个问题。

三角网格去噪-Fast Mesh Denoising With Data Driven Normal Filtering Using Deep Variational Autoenco阅读笔记ders

如图,对去噪后的模型进行缺陷检测,基本和Ground truth一致。

3.优点与不足

3.1 优点

  • 将去噪问题转化为分类问题,有助于更好地进行网格去噪。
  • 算法可以用于工业界的一些任务中。

3.2 缺点

文章并没有对为什么用CVAE做解释,也没有说明为什么在训练后,要跟一个双边法向滤波。 可解释性较差。不过,对于CVAE的网络结构,仍有很大的改进空间。

上一篇:线性代数学习笔记


下一篇:【论文精炼】 | NeRF in the Wild: Neural Radiance Fields for Unconstrained Photo Collections | NeRF in the