ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-01-22 23:00:09  阅读:241  来源: 互联网

标签:Filtering mathbf Normal Denoising 网格 right max mathcal left


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,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

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

具体框架如下:

在这里插入图片描述

首先对数据按照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 ​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和去噪后的模型的平均法向夹角来评估去噪效果的好坏。

在这里插入图片描述
可以看出,本文提出的方法最优。

2.2 速度

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

在这里插入图片描述

2.3 工业界的使用效果

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

在这里插入图片描述

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

3.优点与不足

3.1 优点

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

3.2 缺点

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

标签:Filtering,mathbf,Normal,Denoising,网格,right,max,mathcal,left
来源: https://blog.csdn.net/weixin_43894075/article/details/113006205

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有