NeurIPS 2025
3D shape completion methods typically assume scans are pre-aligned to a canonical frame. When such alignment is absent in real data, performance collapses. SIMECO is a SIM(3)-equivariant network that delivers generalizable shape completion.
You can run the demo in one of two ways:
- Google Colab (Recommended): No installation needed; get started instantly in the cloud.
- Local Linux: Set up the environment locally for GPU-accelerated inference.
To run the demo on Google Colab, simply click the badge above. Follow the instructions and execute the cells sequentially with a GPU instance. Please note that setting up the environment and installing dependencies will take about 1-2 minutes.
Note
A CUDA-enabled GPU is required for local inference.
-
Clone the repository:
git clone https://github.com/complete3d/simeco.git && cd simeco && git lfs pull
-
Create a conda environment with all dependencies (this will take approximately 5 minutes):
. install.sh -
Run the inference code and choose the desired transformation mode (e.g.,
sim3,translation,scaleorrotation). The results will be saved in thedata/resultdirectory.python inference.py evaluate.single_file_path="demo/demo_data/pc/2a05d684eeb9c1cfae2ca9bb680dd18b.npy" evaluate.aug_mode="sim3"
-
Start training using one of the two parallelization:
Distributed Data Parallel (DDP):
# Replace device IDs with your own CUDA_VISIBLE_DEVICES=0,1 ./scripts/train_ddp.shData Parallel (DP):
# Replace device IDs with your own CUDA_VISIBLE_DEVICES=0,1 ./scripts/train_dp.sh -
Monitor training progress using TensorBoard:
# Replace ${exp_name} with your experiment name (e.g., default) # Board typically available at http://localhost:6006 tensorboard --logdir './output/${exp_name}/tensorboard'
-
To evaluate a pre-trained SIMECO model using a single GPU:
# Replace device IDs with your own CUDA_VISIBLE_DEVICES=0 ./scripts/test.sh
We use the official PCN dataset. Please download the dataset from PCN and place it under the data/ directory. The expected directory structure is:
│PCN/
├──train/
│ ├── complete
│ │ ├── 02691156
│ │ │ ├── 1a04e3eab45ca15dd86060f189eb133.pcd
│ │ │ ├── .......
│ │ ├── .......
│ ├── partial
│ │ ├── 02691156
│ │ │ ├── 1a04e3eab45ca15dd86060f189eb133
│ │ │ │ ├── 00.pcd
│ │ │ │ ├── 01.pcd
│ │ │ │ ├── .......
│ │ │ │ └── 07.pcd
│ │ │ ├── .......
│ │ ├── .......
├──test/
│ ├── complete
│ │ ├── .......
│ ├── partial
│ │ ├── .......
├──val/
│ ├── complete
│ │ ├── .......
│ ├── partial
│ │ ├── .......
├──PCN.json
└──category.txt
To remove pose and scale bias, the centroid and scale are computed only from the partial input and applied to both partial and GT:
import numpy as np
from scipy.spatial.transform import Rotation
centroid = pc.mean(0, keepdims=True)
scale = 1.0 / np.max(np.linalg.norm(pc - centroid, axis=1))
R = Rotation.random().as_matrix()
pc = ((pc - centroid) * scale) @ R.T
gt = ((gt - centroid) * scale) @ R.TFor evaluation, we recover the original scale before computing metrics:
pred = pred / scale
gt = gt / scale- Code release
- Debiased evaluation protocol
- HF release
If you use SIMECO in a scientific work, please consider citing the paper:
@article{wang2025simeco,
title={Learning Generalizable Shape Completion with SIM(3) Equivariance},
author={Yuqing Wang and Zhaiyu Chen and Xiao Xiang Zhu},
journal={arXiv preprint arXiv:2509.26631},
year={2025}
}Part of our implementation is based on the PoinTr repository. We thank the authors for open-sourcing their great work.
