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