File size: 9,807 Bytes
f588226
 
 
 
 
 
 
 
 
 
 
 
 
 
97aa5af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f588226
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
---
language:
- en
tags:
- computer-vision
- feature-matching
- cvpr
- pytorch
- real-time
library_name: pytorch
datasets:
- YasiiKB/R3PM-Net
---

<!-- # R3PM-Net



This repository contains the official implementation of the paper:

<p align="center">
  <strong><a href="https://arxiv.org/abs/2604.05060">R3PM-Net: Real-time, Robust, Real-world Point Matching Network</a></strong><br>
  <strong>(AI4RWC@CVPRW 2026 - Oral Presentation)</strong>
</p> -->

<p align="center">

  <h1 align="center">R3PM-Net: Real-time, Robust, Real-world Point Matching Network</h1>
<p align="center"> <strong>AI4RWC@CVPRW 2026 - Oral Presentation</strong></p>
  <h3 align="center"><a href="https://arxiv.org/abs/2604.05060">Paper</a> | <a href="https://yasiikb.github.io/R3PM-Net/">Project Page</a> | <a href="https://huggingface.co/datasets/YasiiKB/R3PM-Net">Dataset</a></h3>
  <div align="center"></div>
</p>
<p align="center"> <img src="assets/r3pmnet_overview.png" width="95%"> </p>
<p align="left"><i>Figure 1. Overview of the R3PM-Net Architecture. R3PM-Net employs a global-aware feature extraction module with shared weights to learn geometric similarities across a full receptive field.</i></p>

## Introduction

R3PM-Net is a lightweight, global-aware, object-level point matching network designed to bridge the gap between approaches trained and evaluated on clean, dense, synthetic and real-world industrial point cloud data by prioritizing both generalizability and real-time efficiency.

<p align="center"> <img src="assets/teaser.png" width="40%"> </p>
<p align="left"><i>Figure 2. Examples of R3PM-Net performance on the Sioux-Cranfield dataset.</i></p>

### Datasets

We propose two datasets; **Sioux-Cranfield** and **Sioux-Scans**, to address the gap between synthetic datasets and real-world industrial data.

<p align="center">
  <table>
    <tr>
      <td align="center">
        <img src="assets/sioux_cranfield.png" height="250">
        <br>
        <sub><b>Sioux-Cranfield</b></sub>
      </td>
      <td align="center">
        <img src="assets/sioux_scans.png" height="250">
        <br>
        <sub><b>Sioux-Scans</b></sub>
      </td>
    </tr>
  </table>
</p>
<p align="left"><i>Figure 3. CAD models of the Sioux-Cranfield dataset (Left). The first six belong to the Cranfield Assembly benchmark and the rest are contributions of this paper (Sioux dataset). Sioux-Scans point cloud data (Right). Target (blue) and Source (yellow) point clouds for seven distinct objects.</i></p>

## Environment Setup

```bash
# 1. Create environment
conda env create -f environment.yml
conda activate r3pm_net

# Optionally, install the dependencies and run manually:
pip install -e .
```

To run the evaluations, please refer to each method's repo to set up the environment:
[Predator](https://github.com/prs-eth/OverlapPredator),
[GeoTransformer](https://github.com/qinzheng93/geotransformer),
[LoGDesc](https://github.com/karim416/LoGDesc), and 
[RegTR](https://github.com/yewzijian/regtr).

Everything must be installed into the **same** conda enviromnet.

## Data Preparation

### ModelNet40

Download the dataset from [ModelNet40](http://modelnet.cs.princeton.edu/ModelNet40.zip) and extract it to:

```
data/ModelNet40
```

To save time, download the downsampled ModelNet40 test set from [ModelNet40_Downsampled](https://huggingface.co/datasets/YasiiKB/R3PM-Net/blob/main/down_sampled_modelnet40.zip) and put it in:

```
data/down_sampled_modelnet40
```

### Sioux-Cranfield

Download the dataset from [Sioux_Cranfiled](https://huggingface.co/datasets/YasiiKB/R3PM-Net/blob/main/sioux_cranfield.zip) and put it in:

```
data/sioux_cranfield
```

### Sioux-Scans

Download the dataset from [Sioux_Scans](https://huggingface.co/datasets/YasiiKB/R3PM-Net/blob/main/sioux_scans.zip) and put it in:

```
data/sioux_scans
```

### Fine-tune 

Download the pickle files (.pkl) from [here](https://huggingface.co/datasets/YasiiKB/R3PM-Net/blob/main/simulators.zip) and put them in:

```
data/simulators
```
These pickle files are created from a subset of the Sioux-Cranfield containing the "teeth", "cube", "lime" and "lego" CAD models. There are 320 point cloud pairs, with 80-20 train-test split. 

Optionally, to create your own datasets, use the scripts in `dataloader`, refering to the README file in that directory.

## Pre-trained Models

Please download the pretrained model of each method from their repo (links provided above) and follow their instructions as to where to put them.

We use RPMNet's pre-trained model (*clean-trained*) for our Zero-shot version. Download it from [here](https://github.com/vinits5/learning3d/tree/master/pretrained/exp_rpmnet/models) and put it in:

```
checkpoints/
```

*Note:* You need to fine-tune the model yourself (see bleow) to get the fine-tuned weights which then you can put in the same directory. 

## Folder Structure

```text
r3pm_net/
β”œβ”€β”€ assets/                     
β”œβ”€β”€ config/
β”‚   β”œβ”€β”€ default.yaml            # Training defaults
β”‚   └── eval.yaml               # Paths for evaluation scripts
β”œβ”€β”€ checkpoints/                # Pre-trained models' weights     
β”œβ”€β”€ data/                       
β”‚   β”œβ”€β”€ down_sampled_modelnet40/
β”‚   β”œβ”€β”€ ModelNet40/
β”‚   β”œβ”€β”€ sioux_cranfield/
β”‚   └── sioux_scans/
β”œβ”€β”€ dataloader/                 # Dataset dict generation & loaders
β”œβ”€β”€ logs/                       # Experiment logs
β”œβ”€β”€ r3pm_net/                   # Core package (model, feature extractor, config)
β”œβ”€β”€ scripts/                    # SLURM/Bash and evaluation scripts
β”‚   β”œβ”€β”€ eval_modelnet40.py
β”‚   β”œβ”€β”€ eval_sioux_cranfield.py
β”‚   β”œβ”€β”€ eval_sioux_scans.py
β”‚   β”œβ”€β”€ modelnet40.sh
β”‚   β”œβ”€β”€ sioux_cranfield.sh
β”‚   └── sioux_scans.sh
β”œβ”€β”€ src/
β”‚   └── train.py                # Training 
β”œβ”€β”€ thirdparty/learning3d/      # learning3d (RPMNet, losses, ops, …)
β”œβ”€β”€ tools/                      # Registration eval, metrics, visualization
β”œβ”€β”€ environment.yml 
β”œβ”€β”€ pyproject.toml
└── README.md
```

## Train 

To train the model using `data/simulators` or your own dataset run:
```bash
python src/train.py
```

## Evaluation

Scripts are provided in `scripts/` to reproduce results.

**ModelNet40**

```bash
bash scripts/modelnet40.sh
```

**Sioux-Cranfield**

```bash
bash scripts/sioux_cranfield.sh
```

**Sioux-Scans**
This evaluates the proposed hybrid Coarse-to-Fine Registration approach.

```bash
bash scripts/sioux_scans.sh
```

### Manual Execution

For example for evaluation on `Sioux-Cranfield`, run:

```bash
python scripts/eval_sioux_cranfield.py
```

## Results
*IMPORTANT NOTE: Unfortunately, we cannot release the feature-extraction model and the fine-tuned weights. Therefore, to re-poduce these results you need to implement the feature extractor (based on the paper) and fine-tune it with the provided data.*

### ModelNet40


| Method              | RRE [Β°] ↓         | RTE [cm] ↓        | CD [cm] ↓         | Fitness ↑         | In. RMSE [cm] ↓ | Time [s] ↓        |
| ------------------- | ----------------- | ----------------- | ----------------- | ----------------- | ------------------ | ----------------- |
| RPMNet              | 30.898    | **0.002** | 0.153     | *0.998* | 0.094      | *0.021* |
| Predator            | 7.262      | 0.028 | *0.045* | **1.000** | *0.026*  | 0.071      |
| GeoTransformer      | 50.357 | 0.215 | 0.255 | 0.921 | 0.101 | 0.065 |
| RegTR               | **1.712** | *0.007* | **0.017** | **1.000** | **0.009**  | 0.045     |
| LoGDesc             | 42.762 | 0.158 | 0.183 | 0.978 | 0.097 | 0.075     |
| **R3PM-Net (ours)** | *5.198* | 0.010   | 0.052     | **1.000** | 0.029      | **0.007** |


> **Notes:** **Best** results are in bold; *Second-best* results are underlined.

### Sioux-Cranfield


| Method              | RRE [Β°] ↓         | RTE [cm] ↓        | CD [cm] ↓         | Fitness ↑         | In. RMSE [cm] ↓ | Time [s] ↓        |
| ------------------- | ----------------- | ----------------- | ----------------- | ----------------- | ------------------ | ----------------- |
| RPMNet              | 32.217    | **0.002** | 0.160   | *0.997* | 0.098 | 0.021  |
| Predator            | 16.448    | 0.044     | 0.072   | **1.000** | 0.042      | 0.071     |
| GeoTrans.           | 45.582    | 0.183     | 0.297   | 0.906     | 0.111       | 0.065     |
| RegTR               | **1.311** | *0.004* | **0.023** | **1.000** | **0.012**  | 0.045   |
| LoGDesc             | 121.224 | 0.773    | 0.692   | 0.718     | 0.224 | 0.075     |
| **R3PM-Net (ours)** | *5.451* | 0.006 | *0.054* | **1.000** | *0.030*  | **0.006** |


### Sioux-Scans
<p align="center"> <img src="assets/success_cases.png" width="85%"> </p>

<p align="left"><i>Figure 4. Qualitative registration results of R3PM-Net on real-world event-camera data. It successfully aligns the "teeth" and "cube" models. The fine-tuned version also solves the "lime" and "house".</i></p>

## Acknowledgement

We adapted some codes from some awesome repositories including [Learning3D](https://github.com/vinits5/learning3d) and [RPMNet](https://github.com/yewzijian/RPMNet). Thanks for making the codes publicly available.

## Citation

If you find this repository useful, please consider citing:

```bibtex
@misc{kashefbahrami2026r3pmnetrealtimerobustrealworld,
      title={R3PM-Net: Real-time, Robust, Real-world Point Matching Network}, 
      author={Yasaman Kashefbahrami and Erkut Akdag and Panagiotis Meletis and Evgeniya Balmashnova and Dip Goswami and Egor Bondarau},
      year={2026},
      eprint={2604.05060},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2604.05060}, 
}
```