GVCNN: Group-View Convolutional Neural Networks for 3D Shape Recognition
1、四个问题
- 要解决什么问题?
- 3D shape recognition。
- 用了什么方法解决?
- 采用多视图(multi-view)的方法。
- 在MVCNN的基础之上,提出了group-view convolutional neural network(GVCNN)。
- 主要创新之处是将不同视角下CNN提取得到的视觉描述子进行分组,将相类似的划分为一组。因为类似视角下提取到的特征也是相似的。
- 效果如何?
- 效果是SOTA的。MVCNN在modelnet40上的准确率是91%,这篇文章的GVCNN的准确率达到了93%。
- 还存在什么问题?
- 由于需要将3维模型投影到多视角下,分别用CNN提取特征,计算量比较大,所提取的特征冗余性也很强。
2、论文概述
2.1、简介
- 3D shape recognition中,虽然有基于体素的方法,还有PointNet类直接处理点云,但是目前准确率最高的还是基于多视图的方法,比如MVCNN。
- MVCNN的做法就是模拟相机从若干不同的角度拍摄三维物体,得到投影的二维图像,然后分别利用ImageNet下预训练的网络提取特征,随后通过view pooling,即全局最大池化将各视角下的特征聚合起来,再接分类网络。
- 虽然存在大量的计算冗余,但是MVCNN的做法更近似于对各个视角的图片做ensemble,在准确率上理所当然会有更好的效果。而且对于旋转也能有不错的鲁棒性。
- 但是作者认为,MVCNN并没有将多视角下特征之间的关系有效地利用起来,这也会在一定程度上限制最后的特征描述子的可区分力。
- 一方面,一些视角彼此相类似,然后有一些则差异较大。这些相似的视角对于3D物体形状的表示所起到的作用应该是同等的。
- 另一方面,有一部分视角则能提取到更有用的特征。
- 也正是为了解决上述的问题,才提出了GVCNN。
2.2、方法
2.2.1、基本网络结构
- 图1中是整个GVCNN的网络架构。
- GVCNN采用GoogLeNet作为基础网络。
- "FCN"是GoogleNet的前5个卷积层。
- 中间的"CNN"指的是也是GoogLeNet。
- "FC"是全连接层。
- GVCNN首先从若干不同视角拍摄三维模型的二维图像,每个视角的图像都被送入了第一部分的"FCN"中提取视觉描述子。随后,第二部分的CNN网络进一步提取视觉特征,group模块再根据判别力评分将不同视角的特征子进行分组。最后将各个组的视觉特征描述子通过view pooling(全局池化)聚合到一起。再接上分类网络进行分类。
2.2.2、多视角视觉特征
- 多视角图像的获取方式有两种,如上图所示。
- 一种是取8个视角,相邻两个视角之间间隔45度。
- 另一种是取12个视角,相邻两个视角之间间隔30度。
- 相比于深层CNN,浅层网络保留有更多的位置信息。在对不同视角特征进行分组时,需要用到这些信息。所以利用浅层网络提取的特征进行grouping。
- 而深层网络提取的特征,则具有更多的内容信息,能更好地表示视角下的特征。所以将深层网络提取的特征,先分组再做view pooling。
2.2.3、Grouping模块
- Grouping模块主要是为了挖掘不同视角之间的潜在关系,对其进行归类辅助多视角下特征的聚合。
-
ξ
(
I
i
)
=
sigmoid
(
log
(
abs
(
O
I
i
)
)
)
\xi\left(I_{i}\right)=\operatorname{sigmoid}\left(\log \left(\operatorname{abs}\left(O_{I_{i}}\right)\right)\right)
ξ(Ii)=sigmoid(log(abs(OIi)))
- 给定不同视角下的图像: S = { I 1 , I 2 , ⋯   , I N } S=\left\{I_{1}, I_{2}, \cdots, I_{N}\right\} S={I1,I2,⋯,IN}。
- { O I 1 , O I 2 , ⋯   , O I N } \left\{O_{I_{1}}, O_{I_{2}}, \cdots, O_{I_{N}}\right\} {OI1,OI2,⋯,OIN}是"FCN"层的输出。
- 观察到:在输入大于5或小于-5时,sigmoid函数的输出会很接近0或1。作者额外加入了abs和log函数。
- ξ ( I i ) \xi\left(I_{i}\right) ξ(Ii)是对第i个视角的判别力评分。
- 判别力评分的取值范围是 ( 0 , 1 ) (0, 1) (0,1),将其N等分。并认为,判别力评分在同一区间范围内的视角属于同一组。
- 接将总计N个视角划分为M个组: { G 1 , G 2 , ⋯   , G M } \left\{G_{1}, G_{2}, \cdots, G_{M}\right\} {G1,G2,⋯,GM},且 1 ≤ M ≤ N 1 \leq M \leq N 1≤M≤N。
- 我们不需要人为地调整视角数N和组数M,可以让算法自行灵活地调整。
- 可能也会存在某些组,其中没有任何视角属于它,但并不影响其他组的特征提取。
- grouping模块除了可以作为分组的依据,也可以作为融合时每个组的特征所对应的权重,换句话说即attention机制。
- 组
G
j
G_j
Gj的权重为:
- ξ ( G j ) = Ceil ( ξ ( I k ) × ∣ G j ∣ ) ∣ G j ∣ I k ∈ G j \xi\left(G_{j}\right)=\frac{\operatorname{Ceil}\left(\xi\left(I_{k}\right) \times\left|G_{j}\right|\right)}{\left|G_{j}\right|} \quad I_{k} \in G_{j} ξ(Gj)=∣Gj∣Ceil(ξ(Ik)×∣Gj∣)Ik∈Gj
2.2.4、组内视角池化(Intra-Group View Pooling)
-
D
(
G
j
)
=
∑
i
=
1
N
λ
i
D
I
i
∑
i
=
1
N
λ
i
λ
i
=
{
1
I
i
∈
G
j
0
I
i
∉
G
j
\begin{array}{l}{D\left(G_{j}\right)=\frac{\sum_{i=1}^{N} \lambda_{i} D_{I_{i}}}{\sum_{i=1}^{N} \lambda_{i}}} \\ {\lambda_{i}=\left\{\begin{array}{ll}{1} & {I_{i} \in G_{j}} \\ {0} & {I_{i} \notin G_{j}}\end{array}\right.}\end{array}
D(Gj)=∑i=1Nλi∑i=1NλiDIiλi={10Ii∈GjIi∈/Gj
- D I i D_{I_{i}} DIi是视角 I i I_i Ii的视觉特征描述子,而 D G j D_{G_{j}} DGj是组 G j G_{j} Gj的组视觉特征描述子,计算公式如下。
2.2.5、组间特征融合
- 类似于attention机制,对不同组之间的视觉特征进行融合。
-
D
(
S
)
=
∑
j
=
1
M
ξ
(
G
j
)
D
(
G
j
)
∑
j
=
1
M
ξ
(
G
j
)
D(S)=\frac{\sum_{j=1}^{M} \xi\left(G_{j}\right) D\left(G_{j}\right)}{\sum_{j=1}^{M} \xi\left(G_{j}\right)}
D(S)=∑j=1Mξ(Gj)∑j=1Mξ(Gj)D(Gj)
- D ( S ) D(S) D(S)是最终的3D形状描述子。
- 整个流程符合一个"view-group-shape"的结构。
2.2.5、分类和检索任务
- 分类任务:
- 给定 C C C个类,在前面的GVCNN输出特征描述子之后接上分类器(全连接层)进行分类。
- 检索任务:
- 使用GVCNN提取特征后,接上一些全连接层输出特征向量。使用深度度量学习的方法训练网络,添加上欧氏距离度量的约束。
- d ( X , Y ) = ∥ x − y ∥ 2 d(X, Y)=\|x-y\|_{2} d(X,Y)=∥x−y∥2