3D Shape Retrieval using Volumetric and Image CNNs: A Meta Algorithmic Approach阅读笔记
1,该论文的网络组成:
一个网络用来处理二维多视图得到的图片,另外两个网络用来处理体素表示的三维物体
2,3D物体的分类和识别的作用
- 三维物体生成(3D object creation)
- 3D打印(3D printing)
- 数字制造(3D digital manufacturing)
举例子:对于我们要用到的物体,第一步可以把它扫描成3D点云(point cloud),然后比它转换成CAD模型,然后再从设计精细的模型中寻找最像的用来我们特定的用途。如下图所示:
(图片来自于论文)
3,实现3D物体分类的两个策略
①,手工特征(manually crafted features)
所谓手工特征就是人工按照一定的人为制定的规则给原始的点云添加特征,又称为形状描述符。一般不同的描述符有不同的特征参数设置。
形状描述符按照作用域分为:
- 全局描述符(global descriptors)
- 局部描述符(local descriptors)
具体特征类型:
- 法向(normal)
- 曲率(curvature)
- 光场(Light Field Descriptor)
- 傅里叶描述子(Fourier descriptor)
- 热核特征(Heat Kernel Signature(HKS))
- 尺度不变热核特征(Scale Invariant Heat Kernel Signature (SI-HKS))
- etc.
接下来,利用这些手工特征可以用传统的机器学习(比如主成分分析法(PCA),支持向量机(SVM)等)方法来进行分类任务。
缺点:鲁棒性不够,不能适应复杂的真实世界中的3D物体。
②,自学习特征(computer learned features)
所谓自学习特征就是电脑以一定的方式从原始数据中自动抽取到的特征。
2D图像的CNN已经算是比较成熟了,所以把2D-CNN应用到处理三维上面来是很自然的事情,但是从3D到2D转化的过程中要保留充足的信息。
为了克服手工特征不能详尽描述现实世界物体的特征的缺陷,我们希望有自动提取特征的方式,应用神经网络来处理就是很好的选择。DeepSD方法率先用(HKS)对输入的形状进行预处理,然后把它们送进网络得到深层次的形状描述,具体流程如下图所示:
(图片来自于论文)
MV-CNN(Multi-view Convolution Neural Network)是当下用的比较多的方式,大致原理就是对于每个3D物体都生成很多的2D或者2.5D(代表RGB-D类型数据)投影,这样一个3D的物体就转化成了多视图下的图片类型数据,然后就可以利用传统的2D-CNN进行特征提取,后续再进行分类检索等任务,具体架构如下图所示:
(图片来自于论文)
4,本篇论文的主要贡献
- 数据增强(Data augmentation)-如何在低分辨率和2D投影的情况下保留足够多的信息。
对于体素表示方法,尽管高分辨率会保留很多细节信息,但是会消耗巨大的计算机运算和内存资源。所以这里采用30*30*30的体素分辨率。
对于多视图投影方法,随机均匀球面采样得到一定数量的观察点(viewpoints),他们的中心点是网格的中心。观察点的数量可以自己决定,一般选取30,60,90,120和360。如下图所示:
图中观察点选取为360个(图片来自于论文)
- 在分类和检索任务中提供了可变的视图数量-这和工业应用更近了一步
- 多数投票机制(Majority vote)
这个文章受FusionNet的启发,FusionNet也是采用类似的数据表示和网络设计,也尝试结合三个不同的网络来提供分类准确度。但是FusionNet的缺点是网络一旦训练好,那么视图的数量也就随之确定了。在实践当中,有可能视图的数量收到限制,提供不了那么多;也有可能需要更多的视图来更好的识别物体。对于3D数字制造应用来说,不能直接应用FusionNet,所以本篇文章采用了投票机制,而不是最大池化(maxpooling)。具体来说就是对于每个视图来说,我们都有他的视图和对应的体素表示,然后使用CNN来处理它们。在网络融合之后使用投票机制,也就是说投票并不是对于三个网络的输出结果来投票,而是三个网络融合之后得到一个确切的类别信息,然后由于是有多个视图,这些视图中最多的那个类别将会作为最终的判定结果。通过这种方法,所需要的视图的数量就不是固定的了,只需要某个类别信息的票数最多就可以成为最终的“赢家”。另外需要训练的超参数的数量也减少了(在池化层,需要大量的计算,消耗了计算资源)
投票机制的实验结果举例:120视图的分类任务,没有使用投票机制准确度是81.15%,使用投票机制之后就是93.03%。
5,数据集介绍(Dataset)
- Princeton ModelNet dataset:包含127915个CAD模型,662个物体类别。以下是它的子集。
- ModelNet10:3991个训练数据,908个测试数据,一共10个物体类别。
- ModelNet40:9843个训练数据,2468个测试数据,40个物体类别。
ModelNet数据集是多边形网格格式的,包含了坐标系,所有的网格中的所有顶点和组成多边形需要的标识信息。
对于ModelNet10和ModelNet40,对于每个类别选取100个测试数据。
数据表示(Data Representation)
- 图片表示(Image representation):以一个固定的光源投影到投影到预定的观察点。
- 体素表示(Volumetric representation):用二元体素(binary voxels)表示,也就是1代表这个体素可用,0表示这个体素是空的。可以想象一下,这样就可以一定分辨率下准确度的描述整个物体。不同大小的多边形网络数据将会有不同大小的体素分辨率。
(图片来源于论文) 在上图中,(a)是图片表示,分辨率为244*244,(b)是体素表示,分辨率为30*30*30
6,三个网络的介绍
图像CNN
本文使用的是AlexNet网络,修改一下使其更适于处理数据集。
因为CAD模型没有颜色信息,所以投影也是灰度图。
光源的位置相对于观察点是固定的。
Network 1: VCNNI
这个体素的卷积神经网络模仿X激光扫描的工作方式,所以说这和传统的3D卷积是不同的,卷积核的大小是K*K*Length,其中K的选取和输入的体素大小有关系,一般K取1,3或者5,length应该就是体积的边长了,扫描的方向是固定的。这被作者称为“各向异性”卷积层( ‘anisotropy’ convolution layers)。这个网络中有三个“各向异性层”,后面是两个全连接层,最后一个层用来分类,所以大小和训练集中的类别数目一样。
Network 2: VCNNII
类似于FusionNet 的VCNNII,这个网络受到GoogleLeNet的启发。它把不同大小的核的输出连接起来,所以不同尺度的关键特征就可以保存下来(但是为什么呢?)。这个网络包含2个inception模块,分别位于卷积层和两个全连接层。
三个网络的整体结构图如下:
(图片来源于论文)
其中(a)代表基于图像的CNN,用来获取形状信息;(b)代表处理体素的CNNI,用来模仿X光扫描,获得3D物体的密度信息;(c)代表处理体素的CNNII,应用了inception模型,用不同大小的卷积核来实现尺度不变性。
7,实验结果
实验用的是ModelNet10数据集
参数设置:
从120个视角来生成2D图像和对应的体素表示
以下是实验结果:
#of viewing points | Algorithm |
ModelNet10 classification (accuracy) |
120 |
Meta-NN (proposed method) |
93.03% |
N/A | Panorama--NN | 91.1% |
N/A | 3DShapeNets | 83.5% |
20Images & 60 voxels | FusionNet | 93.11% |
可以看出网络的效果比Panorama--NN和3DShapeNets要好,和FusionNet类似。FusionNet使用了20张图像,60个voxels,而且需要人工的对齐到预定的姿态。
下面是具体的类别的混淆矩阵:
(图片来源于论文)
可以看到对table和desk的区分不好,实际上对一个英文不太好的人(我)来说,我也不知道这两者的区别,然后我用谷歌图片搜了一下,可以看看对比:
这是table
(图片来源于网络)
这是desk
(图片来源于网络)
差别不是太大,貌似只是desk比table多了抽屉而已。所以分类效果不好是可以谅解的,毕竟人有时候可能也分不清。
然后...dresser和night stand的区分也不太好,我又谷歌了一下,第一眼根本区别不了。仔细对比了一下,发现是night stand一般是每层有一个抽屉,而dresser一般每层有两个或者多个抽屉,整体也长一些。
对于ModelNet数据集,作者实验了不同数量的观察点(viewpoints)的组合方式(组合是对于训练和测试来说的)对分类准确度的影响。最后发现测试和训练都采用120个观察点效果最好。如果要处理的数据集比较精细的化可以采用更多的观察点,这样可以捕捉更多的结构信息。
下面是具体组合的结果:
# of viewpoints |
Test | |||
36 | 120 | 360 | ||
Train | 36 | 91.59% | 87.61% | 87.61% |
120 | 91.92% | 93.03% | 92.37% | |
360 | 90.93% | 91.92% | 91.84% |
更进一步的,作者实验了在3维形状检索上的表现。对浴缸(bathtub)的检索精度是87.13%。
8,总结和展望
总结:
越来越多的方法直接处理3D数据,本文提出的方法突破了对视图数量的约束(通过投票机制实现的),也不需要对三维物体的手动对齐(应该是和x光扫描的方式还有网络融合有关)。
展望:
- 采用其他类型的自网络来处理2D图像或者3D物体。
- 假如得到的数据只是物体的一部分怎么处理?
- 处理不同分辨率下体素表示的三维物体。
欢迎指正!