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

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,2ni,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=N1jPiAini,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=[YX]=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 =[YZ]=max(0,ZWDH1+BDH1)=max(0,YDH1WDH2+BDH2)=σ(YDH1WDH2+BDH2)
得到最终的 X o u t X_{out} Xout后,需要做一个旋转变换 R − 1 R^{-1} R1

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

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的网络结构,仍有很大的改进空间。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值