SpherePHD(球形多面体)卷积和池化
为了将CNN应用到球形多面体上,需要设计满足下列标准的卷积和池化核:
- 卷积核应适用于用SpherePHD(球形多面体)表示的所有像素点
- pixel of interest应该位于卷积核的中心。卷积的输出应该无偏差地维持每个像素点的局部和相邻信息
- 卷积核的设计应该考虑相邻的三角形像素有不同的朝向
- 池化核应该将SpherePHD表示的图片(球形多面体表示)从更高的子划分降低到更低的子划分
为了满足第一个条件,卷积核应该由三角形构成,因为SpherePHD中的像素点是三角形的。卷积核应该适用于连接5个三角形的12个结点,同时适用于其它连接6个三角形的顶点。因此,卷积核的结点不能连五个以上的三角形。如果结点连接了五个以上的三角形,这些结点将无法对连接原始二十面体的12个结点卷积。(第一个卷积核每一行从上往下数,第一行有3个结点,第二行有4个结点,第三行有3个结点,第四行有2个结点,一共有12个结点)
为了满足第二个条件,被卷积的三角形像素应该位于卷积核的中间。否则,感兴趣像素的卷积输出将会被分配给其相邻像素,造成像素的位移。出现这种分配情况时,移位的方向对所有卷积的输出都是变化的,从而导致方向混乱的卷积结果。
考虑到第三个条件,由于SpherePHD中每个相邻三角形像素的朝向不同,必须设计一种能够应用到各个方向三角形的卷积核。
对于最后一个条件,池化核应该使第n个细分多面体下采样为第(n-1)个细分多面体。通过将形成细分多面体的操作逆转来实现池化核。在池化阶段,池化核与构建SpherePHD过程中三角形细分方法有关。例如,如果将一个三角形细分为n^2个小三角形,那么可以使用一个池化核,将同样的n^2个小三角形形成一个更大的三角形。为了简便,文中只将一个三角形像素细分为4个小三角形像素。
满足上述条件的池化核和卷积核如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/3c0cda07d1da0404b5172470a2242003.png)
分配内核权重
与矩形图像不同,全向图片没有清晰的参考方向,所以内核(卷积核、池化核)的方向变得模糊。通过将SpherePHD的12个结点中的2个设置为南极和北极,使用极点将所有像素的朝向定义为朝上或朝下。文中使用了两种内核形状,这两种内核对朝上和朝下的像素共享相同的权重。此外,通过配置内核权重的顺序,使两个内核彼此旋转180度。文中提出的内核可以学习180度旋转不变性,使得内核对于旋转的环境更加健壮。
卷积层
由于SpherePHD的表示形式和卷积核的形状,SpherePHD卷积层能够保持图片大小,而无需额外的padding。同时,一个池化后的层具有比前一层更少的子划分,即第n个子划分的SpherePHD经过池化层后,变为第(n-1)个子划分的SpherePHD。可以根据期望输出的维度大小来调整子划分的数量。为了使用传统的二维卷积方法实现SpherePHD中的卷积层,首先用位置索引来表示每个子划分的像素位置。通过使用给定子划分中的索引,将球形多面体图片表示成二维的张量(而不是传统图片中的三维张量)。接着将n个相邻像素的索引在另一个维度堆叠,并将对应的像素值映射到堆叠的索引上(参考matlab中的im2col函数)。这构成了一个三维的张量,其中一个维度是图片中n个相邻像素值。通过这种表示方法,可以使用卷积核为1xn的传统二维卷积来进行卷积。这有效地模拟了大小为n的卷积核在球面上进行卷积。
卷积的输出是一个与输入具有相同划分的二维张量,表示一个SpherePHD图片。
![](https://i-blog.csdnimg.cn/blog_migrate/473eb83c2982af510d62351cd06fdd1f.png)
池化层
池化层的实现与卷积层非常类似,都用了相同的方法来堆叠相邻像素。对于具有n个划分的图片,采用像素索引,索引值记录了池化的值在生成的第(n-1)个划分上的位置。然后堆叠需要池化的相邻像素的索引,并将对应的像素值映射到索引位置。之后,在堆叠的像素值上应用池化操作(例如,最大\小\池化、平均池化)。
池化的输出是一个二维张量,表示具有(n-1)个划分的球形多面体图片。