【GeoTransformer系列】——粗配准
在模型部分有了初步了解之后, 接下来我们对后续的粗配准、精配准等部分依次进行解读. 本篇主要来看粗配准部分, 代码是在GeoTransformer/experiments/geotransformer.kitti.stage5.gse.k3.max.oacl.stage2.sinkhorn/下面的model.py. 这里再次结合个人理解以及model.py中类GeoTransformer的forward函数, 大概梳理了一下前向传播的WorkFlow, 大家可以参考理解. 每个步骤以单独的颜色表示, 箭头代表输入输出.
1.coarse_matching
1.1 概要
类GeoTransformer中的coarse_matching实际上是一个SuperPointMatching类的实例(参见下文摘出的代码), 它的超参主要是cfg中的coarse_matching.num_correspondences和coarse_matching.dual_normalization.
这个类中是没有可学习的网络参数的.
self.coarse_matching = SuperPointMatching(
cfg.coarse_matching.num_correspondences, cfg.coarse_matching.dual_normalization
)
在论文中提到, dual_normalization操作, 是特意设计来抑制掉一些不准确匹配,以提高配准性能的, 因此默认是True.
1.2 功能
对transformer模块提取的ref 特征和 src特征,首先应用mask、移除掉一些空的patch, 然后对计算pair_wise距离, 将该距离转化为matching_scores得分, 输出topk——即前num_correspondences个对应的src点和ref点的索引。
1.3 超参
num_correspondences
1.4 input
ref_feats: 参考点云中superpoints的特征.
src_feats: 待配准点云中superpoints的特征.
ref_masks: 参考点云中superpoints的mask.
src_masks: 待配准点云中superpoints的mask.
1.5 output
ref_node_corr_indices: 参考点云中,被选中为corresponding superpoints的 indices.
src_node_corr_indices: 待配准点云中,被选中为corresponding superpoints的 indices.
node_corr_scores: corresponding superpoints的score . 对应点的匹配得分
def forward(self, ref_feats, src_feats, ref_masks=None, src_masks=None):
r"""Extract superpoint correspondences.
Args:
ref_feats (Tensor): features of the superpoints in reference point cloud.
src_feats (Tensor): features of the superpoints in source point cloud.
ref_masks (BoolTensor=None): masks of the superpoints in reference point cloud (False if empty).
src_masks (BoolTensor=None): masks of the superpoints in source point cloud (False if empty).
Returns:
ref_corr_indices (LongTensor): indices of the corresponding superpoints in reference point cloud.
src_corr_indices (LongTensor): indices of the corresponding superpoints in so