Skip to main content

Princeton365: A Diverse Dataset with Accurate Camera Pose

Karhan Kayan* · Stamatis Alexandropoulos* · Rishabh Jain · Yiming Zuo · Erich Liang . Jia Deng

(*equal contribution, random order)

Princeton University

Website | Paper

Logo

Citation

If you use our benchmark, data, or method in your work, please cite our paper:

@misc{princeton365,
      title={Princeton365: A Diverse Dataset with Accurate Camera Pose}, 
      author={Karhan Kayan and Stamatis Alexandropoulos and Rishabh Jain and Yiming Zuo and Erich Liang and Jia Deng},
      year={2025},
      eprint={2506.09035},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2506.09035}, 
}

Downloading the Dataset

You can download our dataset from Google Drive or Huggingface. We recommend Huggingface due to lower rate limits.

  1. To download from Google Drive, please follow the instructions on our website.
  2. To download from Huggingface, please follow the instructions here.

Evaluating Your SLAM/Odometry Method

Installation

For basic functionality (submitting results):

conda create --name princeton365 python=3.10
conda activate princeton365
pip install .

For development with ground truth generation capabilities:

conda create --name princeton365 python=3.10
conda activate princeton365
pip install ".[dev]"

You can also install the package from PyPI:

pip install princeton365

or

pip install princeton365[dev]

Run Your Method

To evaluate your model on the test set, you need to submit your results to our evaluations server. Please run your model on the test set and convert the trajectories into TUM Format. This means that the resulting trajectories for each sequence should be a .txt file with timestamp tx ty tz qx qy qz qw on each line. See here for details. Put all of your estimated trajectories in the same folder. The trajectories should have exactly the same name as the corresponding video (i.e. For the video new_scanning_user_view_1.mp4 the trajectory should be named new_scanning_user_view_1.txt)

Submit Your Results

Submit your predictions to the evaluation server using the command below. Replace the placeholders:

princeton365-upload \
    --email your_email \
    --path path_to_your_submission_folder \
    --method_name your_method_name

After Submission

Upon submission, you will receive a unique submission ID, which serves as the identifier for your submission. Results are typically emailed within a few hours. Please note that each email user may upload only three submissions every seven days.

Making Your Submission Public

To make your submission public, run:

princeton365-make-public \
    --id submission_id \
    --email your_email \
    --anonymous False \
    --method_name your_method_name \
    --publication "your publication name" \
    --url_publication "https://your_publication" \
    --url_code "https://your_code" \

You may set "Anonymous" as the publication name if the work is under review. The url_publication, url_code fields are optional. If your method uses IMU data, please add --inertial flag. If your method uses stereo data, please add --stereo flag.

Evaluating Your NVS Method

The NVS benchmark is available on our website with full ground-truth, and it does not require submission. We recommend installing Nerfstudio to run your method, and we provide our ground-truth in COLMAP format as well, which is required by Nerfstudio.

Examples of training and evaluation scripts are provided in the scripts/nvs folder. For instance, to train and evaluate a NeRF model, you can run:

bash scripts/nvs/train_nerf_all.sh
bash scripts/nvs/test_all.sh

Note that the sequences in the cross-validation set of the SLAM benchmark can also be used to evaluate NVS methods since they contain the camera pose ground-truth.

Using the Ground-truth Method

Princeton365 uses a method for camera pose ground-truth that allows for easy data collection with high accuracy. In this section, we give instructions on how you can annotate your own sequences with our ground-truth method. Please see the website for our camera rig setup. You do not need an exact replica of this setup to start collecting data. For monocular camera pose, you only need a 360-camera or two cameras with fixed relative pose.

If you want to use the Induced Optical Flow metric, you will need depth information, which you can get using a stereo camera or a Lidar device. This repo is only for producing ground-truth trajectories and the optical-flow metric and not for generating the depth data.

Installation

Follow the steps below to set up the required environment:

conda create --name princeton365
conda activate princeton365
pip install ".[dev]"
sudo apt-get install python3-tk
sudo apt-get install python3-pil.imagetk

You need a different environment to run Bundle PnP. Please install the following:

conda create --name bundle_pnp 
conda activate bundle_pnp
conda install -c conda-forge ceres-solver cxx-compiler c-compiler
conda install -c conda-forge zlib
cd princeton365/optimization/bundle_pnp
mkdir build
cd build
cmake -DMETIS_LIBRARY=/path/to/libmetis.so -DMETIS_INCLUDE_DIR=/path/to/metis/include ..
make
cd ../../../..

To install Bundle Rig PnP to compute relative pose between two views, run the following commands:

cd princeton365/optimization/rig_bundle_pnp
mkdir build
cd build
cmake -DMETIS_LIBRARY=/path/to/libmetis.so -DMETIS_INCLUDE_DIR=/path/to/metis/include ..
make
cd ../../../..

Handling GCC Compiler Errors

If you encounter issues with the GCC compiler, add the following aliases to your ~/.bashrc file:

alias gcc="$CONDA_PREFIX/bin/x86_64-conda-linux-gnu-gcc"
alias g++="$CONDA_PREFIX/bin/x86_64-conda-linux-gnu-g++"

Then, reload the .bashrc file:

source ~/.bashrc

File Structure

  • Benchmark Videos (pvl-slam/Benchmark):
    • Contains Benchmark videos (scanning, indoor, outdoors)
    • Each folder includes the following three subdirectories:
      • gt_view:Ground truth (GT) view videos, the corresponding user_view video of which will be used in evaluations.
      • pose_graph_extra_frames: GT view videos used for close-up filming and pose graph construction
      • user_view: User-perspective videos that correspond to the GT view videos.

Generating Calibration Boards

To generate the calibration boards (either grid or ChArUco), use the following command:

conda activate princeton365
princeton365-board-generator --config princeton365/configs/board_configs.yaml --board_type '<type>'

Replace with the desired board type, such as 'grid' or 'charuco'. You can customize the board parameters by editing the princeton365/configs/board_configs.yaml file to suit your needs.

Print these boards and place them completely flat on a surface. The local 3D board coordinates assume that the markers are on a flat plane. This can be ensured cheaply by gluing the paper boards on a flat cardboard. Higher precision techniques such as printing on ceramic or aluminum surfaces can also be used.

Generating Ground Truth (GT) Trajectories

The ground truth trajectory is generated in two main steps:

  1. Generate the Pose Graph from a Close-Up Video:

Run the following command on a close-up video of the calibration board to generate a pose graph and initial trajectory:

conda activate princeton365
princeton365-generate-gt \
    --video <close_up_video> \
    --intrinsics <intrinsics_folder> \
    --board_type <'grid' or 'charuco'>

where:

  • <close_up_video>: Path to the close-up video capturing the calibration board
  • <intrinsics_folder>: Directory containing camera intrinsics
  • <'grid' or 'charuco'>: Type of calibration board used
  1. Generate the GT Trajectory for the Main View: Use the pose graph from the close-up video to generate the trajectory for the main GT view:
conda activate princeton365
princeton365-generate-gt \
    --video <gt_view_video> \
    --intrinsics <intrinsics_folder> \
    --board_type <'grid' or 'charuco'> \
    --use_pose_graph <pose_graph_file> \
    --bundle_pnp

where

  • <gt_view_video>: Path to the GT view video
  • <pose_graph_file>: Pose graph file generated from the close-up video
  • <intrinsics_folder> and --board_type should match the setup used in Step 1
  1. Relative Pose Generator

This utility script finds the relative pose between two views (e.g., ground-truth and user views) using detected 2D points, camera intrinsics, and a ground-truth trajectory. It uses Bundle Rig PnP.

conda activate princeton365
princeton365-relative-pose \
    --gt_trajectory <path_to_gt_trajectory_txt> \
    --gt_detected_points <path_to_gt_detected_points_json> \
    --user_detected_points <path_to_user_detected_points_json> \
    --gt_intrinsics <path_to_gt_intrinsics_folder> \
    --user_intrinsics <path_to_user_intrinsics_folder> \
    --pose_graph <path_to_pose_graph_pickle>

Metadata

Release files for princeton365 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for princeton365 0.4.0
File Size Uploaded
princeton365-0.4.0.tar.gz 6.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for princeton365 0.4.0
File Interpreter ABI Platform
princeton365-0.4.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 6.9 MB

Release files / princeton365-0.4.0.tar.gz

Download URL princeton365-0.4.0.tar.gz
Size 6.7 MB
Tags Source
SHA-256 checksum
How to use checksums
3213add071754bc73ccfdebf3d50ce2b3cf6ad37042334b5f2a1a0fc480418a2
BLAKE2b-256 checksum
How to use checksums
d33bf325c388d7f6855d5f2c4cc4db67dfadb929310425192e33eb4e4dc5d4f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.13

Release files / princeton365-0.4.0-py2.py3-none-any.whl

Download URL princeton365-0.4.0-py2.py3-none-any.whl
Size 208.3 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
b34230a780a597025188e774b5218776770703abb26f464bd21a4a0a43e6a610
BLAKE2b-256 checksum
How to use checksums
509900cfac3c635030189a050e4673f983e468df88d7c0d1c680bb2a3d9f7e07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.13

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page