Hanyu Chen, Ruojin Cai, Steve Marschner, Noah Snavely
ArchSym addresses 3D-grounded reflection symmetry detection from single in-the-wild RGB images, with a focus on architectural landmarks. It introduces two components: a scalable annotation pipeline that curates architectural symmetries from SfM reconstructions using image matching, and a single-view symmetry detector that localizes 3D reflection planes by predicting signed distance maps relative to scene geometry.
Create a Python environment and install the dependencies:
conda create -n archsym python=3.12
conda activate archsym
pip install -r requirements.txtThe VGGT backbone is loaded from Hugging Face the first time the model runs.
Download and extract the preprocessed ArchSym dataset:
wget http://www.cs.cornell.edu/projects/archsym/archsym_dataset.tar.gz
tar -xzf archsym_dataset.tar.gzDownload the trained ArchSym checkpoint:
mkdir -p checkpoints/archsym_checkpoint
wget http://www.cs.cornell.edu/projects/archsym/checkpoint-last.pth \
-O checkpoints/archsym_checkpoint/checkpoint-last.pthThe repository should have the following layout:
archsym_dataset/
Scene_Name/
0000.jpg
0000.exr
0000.npz
...
checkpoints/
archsym_checkpoint/
checkpoint-last.pth
archsym_dataset contains the preprocessed images, depth maps, camera parameters, and symmetry annotations used by the dataset loader. checkpoint-last.pth contains the trained ArchSym reflection head.
Run evaluation with:
bash eval.shEvaluation results are written to the checkpoint directory as a json file.
Run model inference on a folder of images with:
bash test_on_image.sh /path/to/images /path/to/outputsThe first argument is the input image directory. The second argument is the output directory for visualizations and predicted symmetry files.
Train with:
bash train.shThe default script uses 4 GPUs through torchrun. Adjust --nproc_per_node, --batch_size, and --accum_iter in train.sh for your hardware.
Training writes checkpoints to checkpoints/archsym_checkpoint/. If checkpoint-last.pth already exists there, training resumes from it.
@inproceedings{chen2026archsym,
title = {ArchSym: Detecting 3D-Grounded Architectural Symmetries in the Wild},
author = {Chen, Hanyu and Cai, Ruojin and Marschner, Steve and Snavely, Noah},
booktitle = {CVPR},
year = {2026}
}This release uses code from DUSt3R and VGGT. Thanks for these great projects!
