Initialized by pretrained VGGT weights and incorporate GT intrinsics for better performance and stability.
June 30, 2026 · View on GitHub
From None to All:
Self-Supervised 3D Reconstruction via Novel View Synthesis
Ranran Huang · Weixun Luo · Ye Mao · Krystian Mikolajczyk
Paper | Project Page
NAS3R is a self-supervised feed-forward framework that jointly learns explicit 3D geometry and camera parameters with no ground-truth annotations and no pretrained priors.
Table of Contents
Installation
- Clone NAS3R.
git clone --recurse-submodules git@github.com:ranrhuang/NAS3R.git
cd NAS3R
- Create the environment, here we show an example using conda.
conda create -n nas3r python=3.11 -y
conda activate nas3r
pip install torch==2.5.1 torchvision==0.20.1 --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt --no-build-isolation
pip install -e submodules/diff-gaussian-rasterization --no-build-isolation
Pre-trained Checkpoints
Our models are hosted on Hugging Face 🤗
| Model | Arch. | Init. | Resolution | Data | Views | Labels |
|---|---|---|---|---|---|---|
| NAS3R supports fully self-supervised training from random initialization, without any 3D labels. | ||||||
| re10k_nas3r.ckpt | VGGT | Random | 224x224 | RE10K | 2 | ✗ |
| re10k_nas3r_multiview.ckpt | VGGT | Random | 224x224 | RE10K | 2-10 | ✗ |
| NAS3R can also use pretrained weights for initialization while remaining self-supervised with no 3D labels. | ||||||
| re10k_nas3r_pretrained.ckpt | VGGT | VGGT | 224x224 | RE10K | 2 | ✗ |
| re10k_nas3r_pretrained_multiview.ckpt | VGGT | VGGT | 224x224 | RE10K | 2-10 | ✗ |
When camera intrinsics are available, models ending in -I can take them as an additional input. | ||||||
| re10k_nas3r_pretrained-I.ckpt | VGGT | VGGT | 224x224 | RE10K | 2 | Intrinsics |
NAS3R is architecture-flexible and also supports a Multi-view MASt3R-style variant, denoted by nas3r-m. | ||||||
| re10k_nas3r-m.ckpt | MASt3R | Random | 256x256 | RE10K | 2 | ✗ |
| re10k_nas3r-m_pretrained.ckpt | MASt3R | MASt3R | 256x256 | RE10K | 2 | ✗ |
| re10k_nas3r-m_pretrained-I.ckpt | MASt3R | MASt3R | 256x256 | RE10K | 2 | Intrinsics |
We assume the downloaded weights are located in the checkpoints directory.
Datasets
Please refer to DATASETS.md for dataset preparation.
Running the Code
Training
# 2 view on NAS3R (VGGT-based architecture), for multi-view training, modify view_sampler.num_context_views
python -m src.main +experiment=nas3r/random/re10k wandb.mode=online wandb.name=nas3r_re10k
# Initialized by pretrained VGGT weights for better performance and stability.
python -m src.main +experiment=nas3r/pretrained/re10k wandb.mode=online wandb.name=nas3r_re10k_pretrained
# Initialized by pretrained VGGT weights and incorporate GT intrinsics for better performance and stability.
python -m src.main +experiment=nas3r/pretrained/re10k-I wandb.mode=online wandb.name=nas3r_re10k_pretrained-I
Evaluation
Novel View Synthesis and Pose Estimation on NAS3R (VGGT-based architecture)
# RealEstate10K on NAS3R
python -m src.main +experiment=nas3r/random/re10k mode=test wandb.name=re10k \
dataset/view_sampler@dataset.re10k.view_sampler=evaluation \
dataset.re10k.view_sampler.index_path=assets/evaluation_index_re10k.json \
checkpointing.load=./checkpoints/re10k_nas3r.ckpt
# RealEstate10K on NAS3R, 10 view
python -m src.main +experiment=nas3r/random/re10k mode=test wandb.name=re10k \
dataset/view_sampler@dataset.re10k.view_sampler=evaluation \
dataset.re10k.view_sampler.index_path=assets/evaluation_index_re10k.json \
dataset.re10k.view_sampler.num_context_views=10 \
checkpointing.load=./checkpoints/re10k_nas3r_multiview.ckpt
# RealEstate10K on NAS3R pretrained from VGGT
python -m src.main +experiment=nas3r/random/re10k mode=test wandb.name=re10k \
dataset/view_sampler@dataset.re10k.view_sampler=evaluation \
dataset.re10k.view_sampler.index_path=assets/evaluation_index_re10k.json \
checkpointing.load=./checkpoints/re10k_nas3r_pretrained.ckpt
# RealEstate10K on NAS3R pretrained from VGGT, 10view
python -m src.main +experiment=nas3r/random/re10k mode=test wandb.name=re10k \
dataset/view_sampler@dataset.re10k.view_sampler=evaluation \
dataset.re10k.view_sampler.index_path=assets/evaluation_index_re10k.json \
dataset.re10k.view_sampler.num_context_views=10 \
checkpointing.load=./checkpoints/re10k_nas3r_pretrained_multiview.ckpt
# RealEstate10K on NAS3R pretrained from VGGT, incorporate GT intrinsics
python -m src.main +experiment=nas3r/random/re10k-I mode=test wandb.name=re10k \
dataset/view_sampler@dataset.re10k.view_sampler=evaluation \
dataset.re10k.view_sampler.index_path=assets/evaluation_index_re10k.json \
checkpointing.load=./checkpoints/re10k_nas3r_pretrained-I.ckpt
Camera Conventions
We follow the pixelSplat camera system. The camera intrinsic matrices are normalized (the first row is divided by image width, and the second row is divided by image height). The camera extrinsic matrices are OpenCV-style camera-to-world matrices ( +X right, +Y down, +Z camera looks into the screen).
Acknowledgements
NAS3R evolves from and extends our previous works, SPFSplatV2 and SPFSplat. It also builds upon the excellent open-source projects NoPoSplat, pixelSplat, DUSt3R, and CroCo. We sincerely thank their authors for making their work publicly available.
Citation
@InProceedings{huang2026nas3r,
author = {Huang, Ranran and Luo, Weixun and Mao, Ye and Mikolajczyk, Krystian},
title = {From None to All: Self-Supervised 3D Reconstruction via Novel View Synthesis},
booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
month = {June},
year = {2026},
pages = {37358-37369}
}