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

Teaser

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
  1. Installation
  2. Pre-trained Checkpoints
  3. Camera Conventions
  4. Datasets
  5. Running the Code
  6. Acknowledgements
  7. Citation

Installation

  1. Clone NAS3R.
git clone --recurse-submodules git@github.com:ranrhuang/NAS3R.git
cd NAS3R
  1. 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 VGGTRandom224x224RE10K2
re10k_nas3r_multiview.ckpt VGGTRandom224x224RE10K2-10
NAS3R can also use pretrained weights for initialization while remaining self-supervised with no 3D labels.
re10k_nas3r_pretrained.ckpt VGGTVGGT224x224RE10K2
re10k_nas3r_pretrained_multiview.ckpt VGGTVGGT224x224RE10K2-10
When camera intrinsics are available, models ending in -I can take them as an additional input.
re10k_nas3r_pretrained-I.ckpt VGGTVGGT224x224RE10K2Intrinsics
NAS3R is architecture-flexible and also supports a Multi-view MASt3R-style variant, denoted by nas3r-m.
re10k_nas3r-m.ckpt MASt3RRandom256x256RE10K2
re10k_nas3r-m_pretrained.ckpt MASt3RMASt3R256x256RE10K2
re10k_nas3r-m_pretrained-I.ckpt MASt3RMASt3R256x256RE10K2Intrinsics

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}
}