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 3D visualization module:

pip install "nanodrr[scene]"

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.3.tar.gz (22.0 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.3-py3-none-any.whl (32.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for nanodrr-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f05ad3e398a38f0ef33cd6ecde3982b8bfffb066806864c936505b57c55b9407
MD5 100fa34aa54bd8149d8fbea86f0d2221
BLAKE2b-256 7975d2c039c92429c6691dcffba76930066e95c676ba96b43e51d24d9ef35290

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanodrr-0.1.3.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.3-py3-none-any.whl.

File metadata

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

File hashes

Hashes for nanodrr-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9c15b28a4477edbdf3791bc853a0a2dc0a0e9d7268b0ca9bf57c91fd4d9443af
MD5 3f82748b6c48a06c9ef65b9c2dc9c516
BLAKE2b-256 810bdf2a65125c58f67df0ce8e6d7113d50fc8e09a721efc72a15a94bfb1510f

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanodrr-0.1.3-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