核心思想:借鉴pointnet的方式将局部邻域信息融入匹配
整体pipeline:
一共分为三部分:1>是pointCN模块,将无序匹配对转换成有序不变矩阵
2>DiffPool和DiffUnpool
3>Order-Aware Filtering block(这里边的是MLP多层感知机)
网络的整体输入是匹配对坐标(x1,y1,x2,y2), 输出的是匹配的置信度(可以设置阈值,小于某个置信度的即为outlier)
1> pointcnn 模块
该模块是直接使用的pointCN网络,输入是,表示两张图上的匹配对,
然后构成一个无序的N*4的矩阵,通过学习置换不变形矩阵(其实就是聚类然后使用残差将原始数据转换到local坐标下然后进行sofmax分类)将年N*4矩阵转换成N*M的类别矩阵(N行可以理解为是N个样本,M列可以理解为M个类别,比如(0,0,0,0,0,1,…….)),对每个样本分类之后其实即可解决分类顺序问题。
本文采用了500个类别,类别中心可以随机采取或者使用别的方法(具体需要看code)
2> Diff pooling layer
然后输入到Diff pooling layer, 其实就是将,可以看到这一步其实是浓缩特征,生成的是M*D高纬度的特征,并且这个特征
融合了不通类别之间的邻域信息,(可以试着推算一下M*D的每个元素是经过哪些数据得到)
通过:,其中P理解为置换不变形矩阵,可以看到P可消除,因此S变换也是置换不变的。
3>order-aware filtering block
之后就是这个模块,其实是使用类似gnn的思想融合不同邻域之间的关系(完全cover pointcnn论文),得到高纬度的feature
4>diff unspooling layer
由于我们的任务是需要为每个匹配样本生成匹配置信度,因此需要上采样,为了保证顺序一致性,这里使用,为了保证和原始样本的1-1关系,这里不需要重新计算s变换矩阵,直接使用2>中
得到的即可,至此完成了对每个匹配对的置信度的评估。
5>loss
其中第一项是交叉熵损失,0/1分布,正确匹配是1,错误匹配是0.
第二项是几何loss,