Summary: `TestICP.test_heterogeneous_inputs` has been failing intermittently for a long time. The seed was already bumped from 4 to 14 in D80625966 for the same reason, which relocated the failure rather than removing it. Root cause: the test aligned two independent random point clouds, and with `estimate_scale=True` that problem is ill-posed. ICP almost always collapses `X` onto a single point of `Y`, driving `s` to ~1e-16 and the rmse to zero. That solution fits perfectly, but the rotation of a cloud that has shrunk to a point is completely unconstrained, so the batched run and the per-cloud runs each returned an arbitrary, and different, `R`. Over 600 seeds of the old data ~45% of batch elements collapsed, and every element that exceeded the tolerance was a collapsed one, with `R` the only quantity that disagreed (`T`, `s` and `Xt` always matched). This is the same non-uniqueness that `corresponding_points_alignment` warns about with "Excessively low rank of cross-correlation". Which seeds tripped over it came down to float32 rounding: the batched path sums over the zero-weighted padding and the per-cloud path does not, so the two differ by ~1e-7, and that difference decides which arbitrary rotation comes out. It therefore moves with GPU model, BLAS version and TF32, which is why picking a seed was never a fix - forcing TF32 on makes seed 14 fail immediately. Fix: build `Y` as a rigidly moved copy of `X` plus a few extra points. The clouds still have different sizes within a batch and between `X` and `Y`, so the padding and masking path is exercised exactly as before, but the alignment now has a well-determined optimum that ICP cannot collapse. Also loosen `atol` from 1e-5 to 1e-4. That is needed independently of the collapse: the two runs sum a different number of terms and so round differently, and the legitimate deviation on `Xt` reaches 1.17e-5, above the old tolerance. That was a second latent failure waiting to happen. The test no longer emits the "Excessively low rank of cross-correlation" warning, which is the collapse disappearing. ___ Differential Revision: D117539518 fbshipit-source-id: 73e3d70a8f7547de7179b71e6a705fc37f4920c7
Introduction
PyTorch3D provides efficient, reusable components for 3D Computer Vision research with PyTorch.
Key features include:
- Data structure for storing and manipulating triangle meshes
- Efficient operations on triangle meshes (projective transformations, graph convolution, sampling, loss functions)
- A differentiable mesh renderer
- Implicitron, see its README, a framework for new-view synthesis via implicit representations. (blog post)
PyTorch3D is designed to integrate smoothly with deep learning methods for predicting and manipulating 3D data. For this reason, all operators in PyTorch3D:
- Are implemented using PyTorch tensors
- Can handle minibatches of hetereogenous data
- Can be differentiated
- Can utilize GPUs for acceleration
Within FAIR, PyTorch3D has been used to power research projects such as Mesh R-CNN.
See our blog post to see more demos and learn about PyTorch3D.
Installation
For detailed instructions refer to INSTALL.md.
License
PyTorch3D is released under the BSD License.
Tutorials
Get started with PyTorch3D by trying one of the tutorial notebooks.
![]() |
![]() |
|---|---|
| Deform a sphere mesh to dolphin | Bundle adjustment |
![]() |
![]() |
|---|---|
| Render textured meshes | Camera position optimization |
![]() |
![]() |
|---|---|
| Render textured pointclouds | Fit a mesh with texture |
![]() |
![]() |
|---|---|
| Render DensePose data | Load & Render ShapeNet data |
![]() |
![]() |
|---|---|
| Fit Textured Volume | Fit A Simple Neural Radiance Field |
![]() |
![]() |
|---|---|
| Fit Textured Volume in Implicitron | Implicitron Config System |
Documentation
Learn more about the API by reading the PyTorch3D documentation.
We also have deep dive notes on several API components:
Overview Video
We have created a short (~14 min) video tutorial providing an overview of the PyTorch3D codebase including several code examples. Click on the image below to watch the video on YouTube:
Development
We welcome new contributions to PyTorch3D and we will be actively maintaining this library! Please refer to CONTRIBUTING.md for full instructions on how to run the code, tests and linter, and submit your pull requests.
Development and Compatibility
mainbranch: actively developed, without any guarantee, Anything can be broken at any time- REMARK: this includes nightly builds which are built from
main - HINT: the commit history can help locate regressions or changes
- REMARK: this includes nightly builds which are built from
- backward-compatibility between releases: no guarantee. Best efforts to communicate breaking changes and facilitate migration of code or data (incl. models).
Contributors
PyTorch3D is written and maintained by the Facebook AI Research Computer Vision Team.
In alphabetical order:
- Amitav Baruah
- Steve Branson
- Krzysztof Chalupka
- Jiali Duan
- Luya Gao
- Georgia Gkioxari
- Taylor Gordon
- Justin Johnson
- Patrick Labatut
- Christoph Lassner
- Wan-Yen Lo
- David Novotny
- Nikhila Ravi
- Jeremy Reizenstein
- Dave Schnizlein
- Roman Shapovalov
- Olivia Wiles
Citation
If you find PyTorch3D useful in your research, please cite our tech report:
@article{ravi2020pytorch3d,
author = {Nikhila Ravi and Jeremy Reizenstein and David Novotny and Taylor Gordon
and Wan-Yen Lo and Justin Johnson and Georgia Gkioxari},
title = {Accelerating 3D Deep Learning with PyTorch3D},
journal = {arXiv:2007.08501},
year = {2020},
}
If you are using the pulsar backend for sphere-rendering (the PulsarPointRenderer or pytorch3d.renderer.points.pulsar.Renderer), please cite the tech report:
@article{lassner2020pulsar,
author = {Christoph Lassner and Michael Zollh\"ofer},
title = {Pulsar: Efficient Sphere-based Neural Rendering},
journal = {arXiv:2004.07484},
year = {2020},
}
News
Please see below for a timeline of the codebase updates in reverse chronological order. We are sharing updates on the releases as well as research projects which are built with PyTorch3D. The changelogs for the releases are available under Releases, and the builds can be installed using conda as per the instructions in INSTALL.md.
[Oct 31st 2023]: PyTorch3D v0.7.5 released.
[May 10th 2023]: PyTorch3D v0.7.4 released.
[Apr 5th 2023]: PyTorch3D v0.7.3 released.
[Dec 19th 2022]: PyTorch3D v0.7.2 released.
[Oct 23rd 2022]: PyTorch3D v0.7.1 released.
[Aug 10th 2022]: PyTorch3D v0.7.0 released with Implicitron and MeshRasterizerOpenGL.
[Apr 28th 2022]: PyTorch3D v0.6.2 released
[Dec 16th 2021]: PyTorch3D v0.6.1 released
[Oct 6th 2021]: PyTorch3D v0.6.0 released
[Aug 5th 2021]: PyTorch3D v0.5.0 released
[Feb 9th 2021]: PyTorch3D v0.4.0 released with support for implicit functions, volume rendering and a reimplementation of NeRF.
[November 2nd 2020]: PyTorch3D v0.3.0 released, integrating the pulsar backend.
[Aug 28th 2020]: PyTorch3D v0.2.5 released
[July 17th 2020]: PyTorch3D tech report published on ArXiv: https://arxiv.org/abs/2007.08501
[April 24th 2020]: PyTorch3D v0.2.0 released
[March 25th 2020]: SynSin codebase released using PyTorch3D: https://github.com/facebookresearch/synsin
[March 8th 2020]: PyTorch3D v0.1.1 bug fix release
[Jan 23rd 2020]: PyTorch3D v0.1.0 released. Mesh R-CNN codebase released: https://github.com/facebookresearch/meshrcnn











