ArchSym: Detecting 3D-Grounded Architectural Symmetries in the Wild
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.
Installation
Create a Python environment and install the dependencies:
conda create -n archsym python=3.12 conda activate archsym pip install -r requirements.txt
The VGGT backbone is loaded from Hugging Face the first time the model runs.
Data and Checkpoints
Download and extract the preprocessed ArchSym dataset:
wget http://www.cs.cornell.edu/projects/archsym/archsym_dataset.tar.gz tar -xzf archsym_dataset.tar.gz
Download 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.pth
The 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.
Evaluation
Run evaluation with:
bash eval.sh
Evaluation results are written to the checkpoint directory as a json file.
Inference
Run model inference on a folder of images with:
bash test_on_image.sh /path/to/images /path/to/outputs
The first argument is the input image directory. The second argument is the output directory for visualizations and predicted symmetry files.
Training
Train with:
bash train.sh
The 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.
Citation
@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} }
Acknowledgements
This release uses code from DUSt3R and VGGT. Thanks for these great projects!
