Prioritize differentiable rendering
**Final API change for `DiffDRR`**
`DRR` objects now act _purely as a differentiable renderer._ That means `DRR` objects take in `rotations` and `translations` parameters to specify (batched) camera poses, and render X-rays from those poses.
The pose parameters are **not** stored as `nn.Parameters` of the module. This introduced too many annoyances with the `DRR` module, such as gradients not flowing backwards past the pose parameters, or only being able to render a specific batch size.
2D-to-3D registration is still possible with `DiffDRR`. This is done by creating a lightweight wrapper module that stores `rotations` and `translations` as `nn.Parameters`, and calls a `DRR` object in its forward call. An example is available in the [updated documentation](notebooks/experiments/sprite.ipynb).
Small changes:
- DRR generation can now be performed patch-wise (i.e., generate a 600^2 DRR as four 300^2 in series). This means `DiffDRR` can generate insanely large DRRs since computation memory is no longer a constraint. See an example in the updated [timing notebook](https://vivekg.dev/DiffDRR/tutorials/timing.html).
What's Changed
* Differentiable rendering and large DRRs by eigenvivek in https://github.com/eigenvivek/DiffDRR/pull/139
**Full Changelog**: https://github.com/eigenvivek/DiffDRR/compare/v0.3.2...v0.3.3