Skip to main content

Blazing fast differentiable DRR rendering in modern PyTorch

Project description

nanodrr

tests docs pypi

A performance-oriented reimplementation of DiffDRR with the following improvements:

  • Optimized, pure PyTorch implementation (~5× faster than DiffDRR at baseline)
  • Modular design (freely swap subjects, extrinsics, and intrinsics during rendering)
  • Compatibility with torch.compile and mixed precision
  • Extensive type hints with jaxtyping
  • Standard Python package structure managed with uv

All projective geometry is implemented internally using the standard Hartley and Zisserman pinhole camera formulation.

Installation

[!NOTE]

On pytorch<2.9, torch.compile with bfloat16 is slower than eager due to a CUDA graph capture issue (see Benchmarks). Use pytorch>=2.9 (Triton ≥3.5) for best results.

To strictly install the renderer:

pip install nanodrr

To install the optional plotting or 3D visualization module:

pip install "nanodrr[plot]"   # 2D visualization (matplotlib, opencv)
pip install "nanodrr[scene]"  # 3D visualization (VTK, PyVista)
pip install "nanodrr[all]"    # All extras

Benchmarks

[!IMPORTANT]

  • ~5× faster than DiffDRR out of the box, without compilation (946 FPS vs 213 FPS)
  • ~8× faster with torch.compile and bfloat16 on pytorch>=2.9 (1,650 FPS vs 213 FPS)
  • ~2.5× less memory than DiffDRR (516 MB vs 1,344 MB peak reserved with bfloat16 + compile)
Benchmarking runtime, FPS, and memory usage.

Mean ± std. dev. of 10 runs, 100 loops each. Benchmarked by rendering 200×200 DRRs on an NVIDIA RTX 6000 Ada (48 GB) with Python 3.12. Compile represents torch.compile(mode="reduce-overhead", fullgraph=True). Full experiment at tests/benchmark/.

Docs

To test the docs locally, run

uv run --group docs jupyter nbconvert --to markdown tutorials/*.ipynb --output-dir docs/tutorials/
uv run --group docs zensical serve

Roadmap

  • Implement a fully optimized renderer
  • Port strictly necessary modules from DiffDRR (e.g., SE(3) utilities, loss functions, and 2D plotting)
  • Migrate 3D plotting functions to an optional module
  • Integrate with xvr to speed up network training and registration
  • Integrate with polypose to speed up registration
  • Release as v1.0.0 of DiffDRR!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nanodrr-0.1.5.tar.gz (24.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nanodrr-0.1.5-py3-none-any.whl (34.5 kB view details)

Uploaded Python 3

File details

Details for the file nanodrr-0.1.5.tar.gz.

File metadata

  • Download URL: nanodrr-0.1.5.tar.gz
  • Upload date:
  • Size: 24.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nanodrr-0.1.5.tar.gz
Algorithm Hash digest
SHA256 09fc63327023f9a26bd6a512bb2585be59564629e4abd1e6acc1017303b094a8
MD5 c55cb0d29280a522b0f03ad4f96f08e4
BLAKE2b-256 e2f39f060a76ffa8e2ce69f38b65dbe5c0fbf7c732383c54bc6708ad0d0cf066

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanodrr-0.1.5.tar.gz:

Publisher: publish.yml on eigenvivek/nanodrr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nanodrr-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: nanodrr-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 34.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nanodrr-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 e07e5ce60f392b9423252b3f923d3a59c3efad554055ee148e8d1a61c6e5c664
MD5 bf18bce1db1defd4c7e727d03faa3370
BLAKE2b-256 acfcc096a5ca3e51df66127e1de54f5989e860960be11403c8650d3deb262d4a

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanodrr-0.1.5-py3-none-any.whl:

Publisher: publish.yml on eigenvivek/nanodrr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page