OCFNet -- Overlap-guided Coarse-to-fine Correspondence Prediction

Weights for the spconv port of OCFNet, trained on 3DMatch for 150 epochs. Code: https://github.com/gfmei/OCFNet

Model

Coarse-to-fine registration over stride-8 super-points and their disjoint Voronoi patches, with log-domain Sinkhorn at both levels. This checkpoint adds, over the published model:

  • three rounds of interleaved self/cross attention at the coarse level (the published port used one), with a 3D rotary position embedding on the super-point voxel indices;
  • an overlap-aware circle loss on the super-point features, alongside the transport loss.

Uniform transport marginals with the dustbin on at both levels; the overlap head is trained with the coarse and fine overlap losses but does not drive the marginals.

10.11 M parameters.

Results

3DMatch and 3DLoMatch, 1000 sampled correspondences, correspondence-based RANSAC. RR is registration recall, IR the inlier ratio, FMR the feature match recall (percentages); RRE is the mean median rotation error in degrees, RTE the mean median translation error in metres.

benchmark RR IR FMR RRE RTE
3DMatch 89.1 69.8 96.4 2.25 0.071
3DLoMatch 58.6 35.1 78.0 3.31 0.098

For reference, the published numbers are 90.2 / 58.7 / 98.5 on 3DMatch and 66.7 / 29.5 / 84.0 on 3DLoMatch. Inlier ratio here is well above the published model on both benchmarks; 3DLoMatch registration recall is below it. Two reasons, neither hidden: the backbone is spconv rather than MinkowskiEngine and the two engines build sparse-convolution kernel maps and handle submanifold layers differently, so this is not the same function even at identical weights; and 21% of 3DLoMatch pairs fail at coarse patch selection, producing almost no correct correspondences (coarse inlier ratio 0.008 against 0.477 for the rest). Substituting ground-truth patch pairs takes that fraction to 0 and registration recall to 78.9%, so the limit is coarse selection rather than the fine features. The repository documents this and the interventions that did not move it.

Usage

import torch
state = torch.load('ocfnet_3dmatch.pth', map_location='cpu', weights_only=False)
model.load_state_dict(state['state_dict'])   # 166 tensors, epoch 149

Or point a test config at it and run the repository's evaluation:

# configs/test/ocfnet_geo.yaml, field  misc.pretrain
BENCH=3DLoMatch sbatch scripts/slurm_eval_sweep.sh configs/test/ocfnet_geo.yaml

config.yaml is the training configuration this checkpoint was produced with.

Citation

@inproceedings{mei2022overlap,
  title     = {Overlap-guided Coarse-to-fine Correspondence Prediction for Point Cloud Registration},
  author    = {Mei, Guofeng and Huang, Xiaoshui and Zhang, Juan and Wu, Qiang},
  booktitle = {IEEE International Conference on Multimedia and Expo (ICME)},
  year      = {2022}
}
Downloads last month
8
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support