Fast Mesh Denoising With Data Driven Normal Filtering Using Deep Variational Autoencoders 论文阅读笔记
这篇文章提出了一个快速且鲁棒的网格去噪算法,用于工业中用扫描仪扫描的3D网格模型去噪。
去噪算法的流程基本上与当前主流的方法一致,即先对网格的法向量进行去噪,然后根据去噪后的法向量调整网格的顶点位置。对于网格的顶点位置的调整,目前已经有非常成熟的方法,所以在当前网格去噪的研究中,核心是对网格法向量的去噪。
法向量去噪的好坏,将极大的影响网格的去噪效果。先前在法向量去噪上已经有大量的传统方法,但传统的方法不可避免会高度依赖参数的选择。且由于人们对某些事物认知的局限性,故不可能在设计算法的过程中兼顾所有的因素。
本文章用当下火热的深度学习方法对网格的法向量数据进行学习,以期待得到一个端对端的法向量去噪模型。而不同于以往的基于学习的网格去噪算法,本文章在利用学习到的网格去噪模型对数据进行测试后,用传统的双边法向滤波对测试结果进一步处理,得到了SOTA的结果。
1 算法
本算法首先对三维网格进行数据预处理,然后将数据放到CVAE中进行训练得到初步去噪后的法向量,再通过双边法向滤波做最后的去噪处理。
算法框架如下:
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,1ni,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=N1j∈Pi∑Aini,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′=RiPi
1.2 CVAE
条件变分自编码器是一种带标签的变分自编码器,而变分自编码器是一种常见的生成模型。之所以在变分自编码器的基础上加上标签,是为了让编码器的输出是我们想要的某个类别。至于条件变分自编码器的原理以及其发展历程,可以参考这篇文章。
具体框架如下:
首先对数据按照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,在相同特性下不一定会有相同的颜色特征。
如图所示,对于平整的区域,都表现为黄色,这是因为对齐后的 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 YEH1YEH2YμZ=[Y∣X]=max(0,Xin WEH1+BEH1)=max(0,YEH1WEH2+BEH2)=max(0,YEH2WEH3+BEH3)=[y1y2],σ=[y3y4]=μ+σ⋅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}
ZYDH1YDH2Xout =[Y∣Z]=max(0,ZWDH1+BDH1)=max(0,YDH1WDH2+BDH2)=σ(YDH1WDH2+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和去噪后的模型的平均法向夹角来评估去噪效果的好坏。
可以看出,本文提出的方法最优。
2.2 速度
本算法不仅去噪效果好,而且去噪的时间也比目前的好的方法要快。结果如下表所示:
2.3 工业界的使用效果
在工业中,对一些物体进行扫描不可避免会含有噪声。对于物体缺陷的检测,如果噪声过多,就会影响检测结果。本文的去噪方法可以很好的解决这个问题。
如图,对去噪后的模型进行缺陷检测,基本和Ground truth一致。
3.优点与不足
3.1 优点
- 将去噪问题转化为分类问题,有助于更好地进行网格去噪。
- 算法可以用于工业界的一些任务中。
3.2 缺点
文章并没有对为什么用CVAE做解释,也没有说明为什么在训练后,要跟一个双边法向滤波。 可解释性较差。不过,对于CVAE的网络结构,仍有很大的改进空间。