MeshNet 论文解读

论文:MeshNet: Mesh Neural Network for 3D Shape Representation

链接:https://arxiv.org/abs/1811.11424

申明: 文中的英文翻译是本人主观翻译,不具有权威性。

一、论文动机

       目前利用深度学习来处理3D数据的类别主要是如下几种:(1)体素(voxel-based);(2)多视角图片(view-based);(3)点云数据(point-based);(4)融合数据(Fusion), 比如从前面几种数据中提取特征再融合在一起。 而本文讨论的3D数据是基于三角网格。这类数据在实际应用中也是相当普遍的。

      所以本文给出了一种方法用于从三角网格数据中提取信息/特征。将提取的三角网格信息/特征输入到神经网络中,可以做分类/检索任务。为此,作者提出了MeshNet网络结构,该网络利用三角网格数据达到的效果超过其他格式的三维数据。

二、从三角网格数据中提取信息/特征的方法

     从三维网格模型数据中可以提取两类信息:

1.面片信息 (Face Information)

-- center : 三角面片的中心

-- Corner: 从三角面片中心指向三个顶点的矢量

-- Normal: 三角面片的单位方向矢量

2.面片邻居信息 (Neighbor Information)

-- Neighbor index: 与指定面片相接的面片索引指数 (如果相接面片数少于3个,则用自身对应的索引指数代替)

 

                                              

       上图显示了前面介绍的两种信息。对于面片中心(center),可以利用面片三个顶点的位置信息求解出来,每个面片都是一个3维矢量。而对于信息Corner,利用中心点位置和面片三个顶点位置可以计算出相应的矢量,每个矢量都是三维表示的,可以对这三个矢量按照统一的顺序进行拼接成1x9的矢量。而面片的法向是一个1x3维的单位矢量。最后对于非边界上的面片,和它邻接的面片有三个,它们都有的相应的索引指数,这些索引指数也可以构成一个1x3维的矢量,如上图最下面部分。(注:这里的索引指数在输入神经网络中是是否应该做归一化?? 我觉得应该。)

三、MeshNet网络结构 及 相应的功能模块

(1)网络整体结构      

       整个网络结构是由三种模块(spatial Descriptor, Structural Descriptor 以及 Mesh Conv)和多层感知机(MLP,即全连接层)组成。

(2)Spatial Descriptor (空间描述模块)

       按我的理解,空间描述模块主要就是提取面片的空间位置信息。所以,该模块的输入只要面片的中心位置信息,然后经过两个全连接层(每层都是64个神经元),最后那个全连接层就是该模块的输出层(注意,这里细节我不是太清楚,可能经过两个全连接层后,再另外接了一个全连接层作为输出)。总之,最后输出的64维是作为从输入面片提取的空间位置特征。

(3)Structural Descriptor (结构描述模块)

      结构特征被认为与三维物体的形状和局部结构相关。该结构描述模块又被分为两个部分,一部分为Face Rotate Convolution, 另一部分为Face kernel Correlation

       1) 对于 Face Rotate Convolution, 它实际上关注的是面片的内部结构以及面片的形状信息。这个模块的输入是三角网格的Corner信息。具体可以参考下图:

                                                                                              

对于三个corner 矢量 v1、 v2、 v3, 两两拼接,并和共享的kernel做卷积(应该是1维卷积),kernel的数目一共是K1个,三个卷积得到的值相加后做一个平均池化,然后再与全连接层相连,最后的输出是 k2 维的,下面的公式反映了这些操作:

                                                   

操作 f 实际上就是和kernel的卷积,但是文章里又说 f 是由(32,32)的全连接层实现(所以,具体细节到底是什么并不清楚)。除以3应该就相当于是取了一个平均池化。而操作 g 是由一个(64,64)的全连接实现。

      2) 对于 Face Kernel Correlation (见下面的参考文献关于KCNet), 它的目标是为了获得更靠外面的面片结构以及所要计算的面片的周围环境。它的输入是面片的单位法向矢量以及Neighbor Index。

        具体计算过程是,选择所要计算的三角面片以及它的三个邻接的面片的单位法向矢量作为source, 并且选择一组可以学习的矢量作为kernel, 然后定义的如下的相关:

                                                         

它表示的是第i个三角面片和第k个kernel之间的相关大小。Ni 表示第i个三角网格和它周边邻接的三角网格, Mk表示第k个kernel的法向矢量。这里的kernel通常选高斯kernel, 即有如下形式:

                                                                                        

公式中的sigma是一个超参数。它控制的是核(kernel)的分辨能力或者是对于source的变化的容忍度(tolerance)。

根据上面的公式,如果source 和 kernel越相似,KC(i, k) 也就越大, 它表示第i个三角面片的第k个特征,因为有M个kernel, 所以单个面片就有M个特征。在文中M=64, 而Ni 按我的理解应该是4(文中没有明确写)。

(4) Mesh Convolution (网格卷积)

       空间描述模块和结构描述模块的输出就作为Mesh Convolution(网格卷积)的输入。而网格卷积的作用是为了扩张面片的感受野,这种扩张是通过累积邻近面片的信息实现的,而这些信息实际上就是由空间描述模块和结构描述模块提供的。

       网格卷积分为两个部分(见下图):一个部分称为Combination, 它是将空间特征和结构特征组合起来;另一部分称为Aggregation, 它是将结构特征(包括相邻面片索引指数) 累加起来。

                                                                      

        对于Combination部分,直接将空间特征和结构特征拼接起来(按列拼接),然后输入到多层感知机中,最后输出的是一个新的特征(含有空间和结构特征), 见下图:

                                                                                                     

       对于Aggregation部分, 它的输入为结构描述模块的输出(n x in2)以及邻接面片索引指数(Neighbor index)。 但是按照 下图的意思,对于邻接面片,采用的是这些面片的特征,而不是索引指数,索引指数只是为了确定用哪个面片。所以这里的具体细节搞不清楚,需要查看源代码。对于这两类特征,也有三种处理方式,第一种是将中心面片分别和其他三个邻接面片的特征进行拼接(concatenation),然后将每一个拼接后的特征单独输入到多层感知机(MLP)中,最终得到三个新的特征,分别对这些输出做最大池化,然后对每一个池化结果进行拼接,最后得到的是nx3的特征。第二种和第三种方法都是对中心面片和邻接面片的特征做池化(最大池化或平均池化),每个面片池化后都得到一个特征,把4个面的特征拼接得到1x4的特征,如果考虑所有的面片,那么输出是nx4的特征。把这三种方法得到的结果输入到另一个MLP中,最后输出的维数是n x out2。在本文中,作者采用的是第一种方法(因为实验结果表面,第一种方法效果更好,其他两种方法效果略微差一些)。

                                                                        

四、实验结果

       本文将模型应用到了ModelNet40数据集上进行分类与检索(classification / retrieval)。模型的三角面片数简化到1024个面,如果面片数不够,那么就从已经存在的面片中随机抽取一些进行填充。

       对于分类(classification)问题,从模型的整体结构可以看到,作者从Global Features连接了一个MLP(512,256,40), 一共可以预测40类模型。对于检索(retrieval)问题, 计算global features之间的L2距离来作为相似度(similarity) [注,本人其实对于retrieval不了解,这里纯粹是在做翻译,如有了解的,欢迎在评论区介绍]

       下表显示了结果,可以看到本文的效果在网格数据上是最好的,其表现也超过了大部分的利用其他数据类型的模型。

                                                             

       另外需要指出的是,本文的分类精度,并不依赖于模型的面片数。面片数量少一些,甚至只有几十个面片的情况下,分类精度依然很高,仍然能保持90%以上。

                                                            

参考文献:(1) KCNet: Mining Point Cloud Local Structures by Kernel Correlation and Graph Pooling

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值