GeoTransformer中最核心的集合位置编码部分,有一个维度的问题之前一直没有搞清楚,下面举例来说明:
源点云的点特征:(B,N,256)。 源点云的几何位置编码:(B,N, N, 256)
目标点云的点特征:(B,M,256)。 目标点云的几何位置编码:(B,M, M, 256)
接下来是Attention计算步骤:
(1)首先进行特征映射。
点特征过MLP映射为 Q、K、V,维度为(B,N,256)
QKV进行4head划分,上面特征rearrange为:(B,4,N,64)
同样地,几何位置编码:(B,N, N, 256)经过MLP,然后化为4个头 :(B,4,N, N, 64)
(2)接着就是注意力矩阵
毫无疑问的是:用Q(B,4,N,64)和 K(B,4,N,64)进行einsum。
torch.einsum('bhnc,bhmc->bhnm', Q, K)
这一步能够看懂,并且理解,就是算两个点特征之间的点积相似度。
接着,用Q(B,4,N,64)和 几何位置编码(B,4,N, N, 64)进行einsum。
torch.einsum('bhnc,bhnmc->bhnm', Q, P)
这一步怎么理解呢,其实它的计算步骤可以简化为:
torch.einsum('nc,nmc->nm', Q, P)
也就可以理解为,对于N个256维度的特征中的每一个256。 都要和M个256进行比较,然后形成M个相似度分数。
最终一共有N x M个相似度分数。
从几何意义上来看,这里一边是某个点P,经过KPConv卷积出来的256维度特征,另一边呢,是这个点P和本点云上所有其他点所形成的256维的几何编码,这个编码也是通过点P和其他点连线,与,其他点的邻域连线,的夹角,来确定的。
似乎无法直观地明白这种相似性的意义,算一个 网络学的几何特征, 和 , 手工建立的这种特征,的相似性。实在令人费解。