Summary:
Currently, it is not possible to access a sub-transform using an indexer for all 3d transforms inheriting the `Transforms3d` class.
For instance:
```python
from pytorch3d import transforms
N = 10
r = transforms.random_rotations(N)
T = transforms.Transform3d().rotate(R=r)
R = transforms.Rotate(r)
x = T[0] # ok
x = R[0] # TypeError: __init__() got an unexpected keyword argument 'matrix'
```
This is because all these classes (namely `Rotate`, `Translate`, `Scale`, `RotateAxisAngle`) inherit the `__getitem__()` method from `Transform3d` which has the [following code on line 201](https://github.com/facebookresearch/pytorch3d/blob/main/pytorch3d/transforms/transform3d.py#L201):
```python
return self.__class__(matrix=self.get_matrix()[index])
```
The four classes inheriting `Transform3d` are not initialized through a matrix argument, hence they error.
I propose to modify the `__getitem__()` method of the `Transform3d` class to fix this behavior. The least invasive way to do it I can think of consists of creating an empty instance of the current class, then setting the `_matrix` attribute manually. Thus, instead of
```python
return self.__class__(matrix=self.get_matrix()[index])
```
I propose to do:
```python
instance = self.__class__.__new__(self.__class__)
instance._matrix = self.get_matrix()[index]
return instance
```
As far as I can tell, this modification occurs no modification whatsoever for the user, except for the ability to index all 3d transforms.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1801
Reviewed By: MichaelRamamonjisoa
Differential Revision: D58410389
Pulled By: bottler
fbshipit-source-id: f371e4c63d2ae4c927a7ad48c2de8862761078de
Summary: Undoes the pytorch3d changes in D57294278 because they break builds for for PyTorch<2.1 .
Reviewed By: MichaelRamamonjisoa
Differential Revision: D57379779
fbshipit-source-id: 47a12511abcec4c3f4e2f62eff5ba99deb2fab4c
Summary:
Currently, it checks that the `2`th dimension of `p2` is the same size as the `2`th dimension of `p2` instead of `p1`.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1815
Reviewed By: MichaelRamamonjisoa
Differential Revision: D58586966
Pulled By: bottler
fbshipit-source-id: d4f723fa264f90fe368c10825c1acdfdc4c406dc
Summary: We can now move ray bundle to float dtype (e.g. from fp16 like types).
Reviewed By: bottler
Differential Revision: D57493109
fbshipit-source-id: 4e18a427e968b646fe5feafbff653811cd007981
Summary: `c10::optional` was switched to be `std::optional` after PyTorch moved to C++17. Let's eliminate `c10::optional`, if we can.
Reviewed By: albanD
Differential Revision: D57294278
fbshipit-source-id: f6f26133c43f8d92a4588f59df7d689e7909a0cd
Summary:
This diff removes a variable that was set, but which was not used.
LLVM-15 has a warning `-Wunused-but-set-variable` which we treat as an error because it's so often diagnostic of a code issue. Unused but set variables often indicate a programming mistake, but can also just be unnecessary cruft that harms readability and performance.
Removing this variable will not change how your code works, but the unused variable may indicate your code isn't working the way you thought it was. I've gone through each of these by hand, but mistakes may have slipped through. If you feel the diff needs changes before landing, **please commandeer** and make appropriate changes: there are hundreds of these and responding to them individually is challenging.
For questions/comments, contact r-barnes.
- If you approve of this diff, please use the "Accept & Ship" button :-)
Reviewed By: bottler
Differential Revision: D56886956
fbshipit-source-id: 0c515ed98b812b1c106a59e19ec90751ce32e8c0
Summary:
For larger N and Mi value (e.g. N=154, Mi=238) I notice list_to_packed() has become a bottleneck for my application. By removing the for loop and running on GPU, i see a 10-20 x speedup.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1737
Reviewed By: MichaelRamamonjisoa
Differential Revision: D54187993
Pulled By: bottler
fbshipit-source-id: 16399a24cb63b48c30460c7d960abef603b115d0
Summary:
adjusted sample_nums to match the number of columns in the image grid. It originally produced image grid with 5 axes but only 3 images and after this fix, the block would work as intended.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1768
Reviewed By: MichaelRamamonjisoa
Differential Revision: D55632872
Pulled By: bottler
fbshipit-source-id: 44d633a8068076889e49d49b8a7910dba0db37a7
Summary:
### Generalise tutorials' pip searching:
## Required Information:
This diff contains changes to several PyTorch3D tutorials.
**Purpose of this diff:**
Replace the current installation code with a more streamlined approach that tries to install the wheel first and falls back to installing from source if the wheel is not found.
**Why this diff is required:**
This diff makes it easier to cope with new PyTorch releases and reduce the need for manual intervention, as the current process involves checking the version of PyTorch in Colab and building a new wheel if it doesn't match the expected version, which generates additional work each time there is a a new PyTorch version in Colab.
**Changes:**
Before:
```
if torch.__version__.startswith("2.1.") and sys.platform.startswith("linux"):
# We try to install PyTorch3D via a released wheel.
pyt_version_str=torch.__version__.split("+")[0].replace(".", "")
version_str="".join([
f"py3{sys.version_info.minor}_cu",
torch.version.cuda.replace(".",""),
f"_pyt{pyt_version_str}"
])
!pip install fvcore iopath
!pip install --no-index --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/{version_str}/download.html
else:
# We try to install PyTorch3D from source.
!pip install 'git+https://github.com/facebookresearch/pytorch3d.git@stable'
```
After:
```
pyt_version_str=torch.__version__.split("+")[0].replace(".", "")
version_str="".join([
f"py3{sys.version_info.minor}_cu",
torch.version.cuda.replace(".",""),
f"_pyt{pyt_version_str}"
])
!pip install fvcore iopath
if sys.platform.startswith("linux"):
# We try to install PyTorch3D via a released wheel.
!pip install --no-index --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/{version_str}/download.html
pip_list = !pip freeze
need_pytorch3d = not any(i.startswith("pytorch3d==") for i in pip_list)
if need_pytorch3d:
# We try to install PyTorch3D from source.
!pip install 'git+https://github.com/facebookresearch/pytorch3d.git@stable'
```
Reviewed By: bottler
Differential Revision: D55431832
fbshipit-source-id: a8de9162470698320241ae8401427dcb1ce17c37
Summary:
Fix an inclusive vs exclusive scan mix-up that was accidentally introduced when removing the Thrust dependency (`Thrust::exclusive_scan`) and reimplementing it using `at::cumsum` (which does an inclusive scan).
This fixes two Github reported issues:
* https://github.com/facebookresearch/pytorch3d/issues/1731
* https://github.com/facebookresearch/pytorch3d/issues/1751
Reviewed By: bottler
Differential Revision: D54605545
fbshipit-source-id: da9e92f3f8a9a35f7b7191428d0b9a9ca03e0d4d
Summary: The diff support colors in cubify for align = "center"
Reviewed By: bottler
Differential Revision: D53777011
fbshipit-source-id: ccb2bd1e3d89be3d1ac943eff08f40e50b0540d9
Summary: Add an option to run tests without the OpenGL Renderer.
Reviewed By: patricklabatut
Differential Revision: D53573400
fbshipit-source-id: 54a14e7b2f156d24e0c561fdb279f4a9af01b793
Summary:
Fixes https://github.com/facebookresearch/pytorch3d/issues/1641. The bug was caused by the mistaken downcasting of an int64_t into int, causing issues only on inputs large enough to have hashes that escaped the bounds of an int32.
Also added a test case for this issue.
Reviewed By: bottler
Differential Revision: D53505370
fbshipit-source-id: 0fdd0efc6d259cc3b0263e7ff3a4ab2c648ec521
Summary: This change updates the type of p2_idx from size_t to int64_t to address compiler warnings related to signed/unsigned comparison.
Reviewed By: bottler
Differential Revision: D52879393
fbshipit-source-id: de5484d78a907fccdaae3ce036b5e4a1a0a4de70
Summary: Fixed `get_rgbd_point_cloud` to take any number of image input channels.
Reviewed By: bottler
Differential Revision: D52796276
fbshipit-source-id: 3ddc0d1e337a6cc53fc86c40a6ddb136f036f9bc
Summary:
An OSS user has pointed out in https://github.com/facebookresearch/pytorch3d/issues/1703 that the output of matrix_to_quaternion (in that file) can be non standardized.
This diff solves the issue by adding a line of standardize at the end of the function
Reviewed By: bottler
Differential Revision: D52368721
fbshipit-source-id: c8d0426307fcdb7fd165e032572382d5ae360cde
Summary: Implement `submeshes` for TexturesUV. Fix what Meshes.submeshes passes to the texture's submeshes function to make this possible.
Reviewed By: bottler
Differential Revision: D52192060
fbshipit-source-id: 526734962e3376aaf75654200164cdcebfff6997
Summary: Performance improvement: Use torch.lerp to map uv coordinates to the range needed for grid_sample (i.e. map [0, 1] to [-1, 1] and invert the y-axis)
Reviewed By: bottler
Differential Revision: D51961728
fbshipit-source-id: db19a5e3f482e9af7b96b20f88a1e5d0076dac43
Summary: User confusion (https://github.com/facebookresearch/pytorch3d/issues/1579) about how zbuf is used for alpha compositing. Added small description and reference to paper to help give some context.
Reviewed By: bottler
Differential Revision: D51374933
fbshipit-source-id: 8c489a5b5d0a81f0d936c1348b9ade6787c39c9a
Summary: Fixes lint in test_render_points in the PyTorch3D library.
Differential Revision: D51289841
fbshipit-source-id: 1eae621eb8e87b0fe5979f35acd878944f574a6a
Summary:
When the ply format looks as follows:
```
comment TextureFile ***.png
element vertex 892
property double x
property double y
property double z
property double nx
property double ny
property double nz
property double texture_u
property double texture_v
```
`MeshPlyFormat` class will read uv from the ply file and read the uv map as commented as TextureFile.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1100
Reviewed By: MichaelRamamonjisoa
Differential Revision: D50885176
Pulled By: bottler
fbshipit-source-id: be75b1ec9a17a1ed87dbcf846a9072ea967aec37
Summary: Remove unused argument `mask_points` from `get_rgbd_point_cloud` and fix `get_implicitron_sequence_pointcloud`, which assumed it was used.
Reviewed By: MichaelRamamonjisoa
Differential Revision: D50885848
fbshipit-source-id: c0b834764ad5ef560107bd8eab04952d000489b8
Summary: I think we include more thrust than needed, and maybe removing it will help things like https://github.com/facebookresearch/pytorch3d/issues/1610 with DebugSyncStream errors on Windows.
Reviewed By: shapovalov
Differential Revision: D48949888
fbshipit-source-id: add889c0acf730a039dc9ffd6bbcc24ded20ef27
Summary: Python3 makes the use of `(object)` in class inheritance unnecessary. Let's modernize our code by eliminating this.
Reviewed By: itamaro
Differential Revision: D48673863
fbshipit-source-id: 032d6028371f0350252e6b731c74f0f5933c83cd
Summary:
The `chamfer_distance` function currently allows `"sum"` or `"mean"` reduction, but does not support returning unreduced (per-point) loss terms. Unreduced losses could be useful if the user wishes to inspect individual losses, or perform additional modifications to loss terms before reduction. One example would be implementing a robust kernel over the loss.
This PR adds a `None` option to the `point_reduction` parameter, similar to `batch_reduction`. In case of bi-directional chamfer loss, both the forward and backward distances are returned (a tuple of Tensors of shape `[D, N]` is returned). If normals are provided, similar logic applies to normals as well.
This PR addresses issue https://github.com/facebookresearch/pytorch3d/issues/622.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1605
Reviewed By: jcjohnson
Differential Revision: D48313857
Pulled By: bottler
fbshipit-source-id: 35c824827a143649b04166c4817449e1341b7fd9
Summary:
Something's wrong with recommonmark/CommonMark/six, let's see if this fixes it.
https://readthedocs.org/projects/pytorch3d/builds/21292632/
```
File "/home/docs/checkouts/readthedocs.org/user_builds/pytorch3d/envs/latest/lib/python3.11/site-packages/sphinx/config.py", line 368, in eval_config_file
execfile_(filename, namespace)
File "/home/docs/checkouts/readthedocs.org/user_builds/pytorch3d/envs/latest/lib/python3.11/site-packages/sphinx/util/pycompat.py", line 150, in execfile_
exec_(code, _globals)
File "/home/docs/checkouts/readthedocs.org/user_builds/pytorch3d/checkouts/latest/docs/conf.py", line 25, in <module>
from recommonmark.parser import CommonMarkParser
File "/home/docs/checkouts/readthedocs.org/user_builds/pytorch3d/envs/latest/lib/python3.11/site-packages/recommonmark/parser.py", line 6, in <module>
from CommonMark import DocParser, HTMLRenderer
File "/home/docs/checkouts/readthedocs.org/user_builds/pytorch3d/envs/latest/lib/python3.11/site-packages/CommonMark/__init__.py", line 3, in <module>
from CommonMark.CommonMark import HTMLRenderer
File "/home/docs/checkouts/readthedocs.org/user_builds/pytorch3d/envs/latest/lib/python3.11/site-packages/CommonMark/CommonMark.py", line 18, in <module>
HTMLunescape = html.parser.HTMLParser().unescape
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'HTMLParser' object has no attribute 'unescape'
```
Reviewed By: shapovalov
Differential Revision: D47471545
fbshipit-source-id: 48e121e20da535b3cc46b6bd2393d28869067b8b
Summary: New versions of cuda etc. I haven't committed recent changes to this for a while
Reviewed By: shapovalov
Differential Revision: D47396136
fbshipit-source-id: d6c27f5056fa8f4a74a628fa1d831159000acf55
Summary: This is needed from september 2023. As a side effect, implicitron docs should build better because typing.get_args exists etc.
Reviewed By: shapovalov
Differential Revision: D47363855
fbshipit-source-id: a954c5b81b1e5a4435fca146a11aea0d2ca96f45
Summary:
Blender uses OpenEXR to dump depth maps, so we have to support it.
OpenCV requires to explicitly accepth the vulnerabilities by setting the env var before exporting.
We can set it but I think it should be user’s responsibility.
OpenCV error reporting is adequate, so I don’t handle the error on our side.
Reviewed By: bottler
Differential Revision: D47403884
fbshipit-source-id: 2fcadd1df9d0efa0aea563bcfb2e3180b3c4d1d7
Summary:
For fg-masking depth, we assumed np.array but passed a Tensor; for defining the default depth_mask, vice versa.
Note that we change the intended behaviour for the latter, assuming that 0s are areas with empty depth. When loading depth masks, we replace NaNs with zeros, so it is sensible. It is not a BC change as that branch would crash if executed. Since there was no reports, I assume no one cared.
Reviewed By: bottler
Differential Revision: D47403588
fbshipit-source-id: 1094104176d7d767a5657b5bbc9f5a0cc9da0ede
Summary:
Convert ImplicitronRayBundle to a "classic" class instead of a dataclass. This change is introduced as a way to preserve the ImplicitronRayBundle interface while allowing two outcomes:
- init lengths arguments is now a Optional[torch.Tensor] instead of torch.Tensor
- lengths is now a property which returns a `torch.Tensor`. The lengths property will either recompute lengths from bins or return the stored _lengths. `_lenghts` is None if bins is set. It saves us a bit of memory.
Reviewed By: shapovalov
Differential Revision: D46686094
fbshipit-source-id: 3c75c0947216476ebff542b6f552d311024a679b
Summary:
## Context
Bins are used in mipnerf to allow to manipulate easily intervals. For example, by doing the following, `bins[..., :-1]` you will obtain all the left coordinates of your intervals, while doing `bins[..., 1:]` is equals to the right coordinates of your intervals.
We introduce here the support of bins like in MipNerf implementation.
## RayPointRefiner
Small changes have been made to modify RayPointRefiner.
- If bins is None
```
mids = torch.lerp(ray_bundle.lengths[..., 1:], ray_bundle.lengths[…, :-1], 0.5)
z_samples = sample_pdf(
mids, # [..., npt]
weights[..., 1:-1], # [..., npt - 1]
….
)
```
- If bins is not None
In the MipNerf implementation the sampling is done on all the bins. It allows us to use the full weights tensor without slashing it.
```
z_samples = sample_pdf(
ray_bundle.bins, # [..., npt + 1]
weights, # [..., npt]
...
)
```
## RayMarcher
Add a ray_deltas optional argument. If None, keep the same deltas computation from ray_lengths.
Reviewed By: shapovalov
Differential Revision: D46389092
fbshipit-source-id: d4f1963310065bd31c1c7fac1adfe11cbeaba606
Summary:
Add blurpool has defined in [MIP-NeRF](https://arxiv.org/abs/2103.13415).
It has been added has an option for RayPointRefiner.
Reviewed By: shapovalov
Differential Revision: D46356189
fbshipit-source-id: ad841bad86d2b591a68e1cb885d4f781cf26c111
Summary: Add a new implicit module Integral Position Encoding based on [MIP-NeRF](https://arxiv.org/abs/2103.13415).
Reviewed By: shapovalov
Differential Revision: D46352730
fbshipit-source-id: c6a56134c975d80052b3a11f5e92fd7d95cbff1e
Summary:
Introduce methods to approximate the radii of conical frustums along rays as described in [MipNerf](https://arxiv.org/abs/2103.13415):
- Two new attributes are added to ImplicitronRayBundle: bins and radii. Bins is of size n_pts_per_ray + 1. It allows us to manipulate easily and n_pts_per_ray intervals. For example we need the intervals coordinates in the radii computation for \(t_{\mu}, t_{\delta}\). Radii are used to store the radii of the conical frustums.
- Add 3 new methods to compute the radii:
- approximate_conical_frustum_as_gaussians: It computes the mean along the ray direction, the variance of the
conical frustum with respect to t and variance of the conical frustum with respect to its radius. This
implementation follows the stable computation defined in the paper.
- compute_3d_diagonal_covariance_gaussian: Will leverage the two previously computed variances to find the
diagonal covariance of the Gaussian.
- conical_frustum_to_gaussian: Mix everything together to compute the means and the diagonal covariances along
the ray of the Gaussians.
- In AbstractMaskRaySampler, introduces the attribute `cast_ray_bundle_as_cone`. If False it won't change the previous behaviour of the RaySampler. However if True, the samplers will sample `n_pts_per_ray +1` instead of `n_pts_per_ray`. This points are then used to set the bins attribute of ImplicitronRayBundle. The support of HeterogeneousRayBundle has not been added since the current code does not allow it. A safeguard has been added to avoid a silent bug in the future.
Reviewed By: shapovalov
Differential Revision: D45269190
fbshipit-source-id: bf22fad12d71d55392f054e3f680013aa0d59b78
Summary: We now use unittest.mock
Reviewed By: shapovalov
Differential Revision: D45868799
fbshipit-source-id: cd1042dc2c49c82c7b9e024f761c496049a31beb
Summary: Make test work in isolation, and when run internally make it not try the sqlalchemy files.
Reviewed By: shapovalov
Differential Revision: D46352513
fbshipit-source-id: 7417a25d7a5347d937631c9f56ae4e3242dd622e
Summary:
Hi,
Not sure this is the best fix. But while running this notebook, I only ever saw a blank canvas when trying to visualize the dolphin. It might be that I have a broken dependency, like plotly. I also don't know what the visualization is "supposed" to look like.
But incase other people have this issue, this one line change solved the whole problem for me. Now I have a happy, rotatable dolphin.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1549
Reviewed By: shapovalov
Differential Revision: D46350930
Pulled By: bottler
fbshipit-source-id: e19aa71eb05a93e2955262a2c90d1f0d09576228
Summary: Fix for https://github.com/facebookresearch/pytorch3d/issues/1441 where we were indexing with a tensor on the wrong device.
Reviewed By: shapovalov
Differential Revision: D46276449
fbshipit-source-id: 7750ed45ffecefa5d291fd1eadfe515310c2cf0d
Summary: Making it easier for the clients to use these datasets.
Reviewed By: bottler
Differential Revision: D46727179
fbshipit-source-id: cf619aee4c4c0222a74b30ea590cf37f08f014cc
Summary: In D42739669, I forgot to update the API of existing implementations of DatasetBase to take `subset_filter`. Looks like only one was missing.
Reviewed By: bottler
Differential Revision: D46724488
fbshipit-source-id: 13ab7a457f853278cf06955aad0cc2bab5fbcce6
Summary:
Adds stratified sampling of sequences within categories applied after category / sequence filters but before the num sequence limit.
It respects the insertion order into the sequence_annots table, i.e. takes top N sequences within each category.
Reviewed By: bottler
Differential Revision: D46724002
fbshipit-source-id: 597cb2a795c3f3bc07f838fc51b4e95a4f981ad3
Summary: Single directional chamfer distance and option to use non-absolute cosine similarity
Reviewed By: bottler
Differential Revision: D46593980
fbshipit-source-id: b2e591706a0cdde1c2d361614cecebb84a581433
Summary: Fine implicit function was called before the coarse implicit function.
Reviewed By: shapovalov
Differential Revision: D46224224
fbshipit-source-id: 6b1cc00cc823d3ea7a5b42774c9ec3b73a69edb5
Summary:
1. We may need to store arrays of unknown shape in the database. It implements and tests serialisation.
2. Previously, when an inexisting metadata file was passed to SqlIndexDataset, it would try to open it and create an empty file, then crash. We now open the file in a read-only mode, so the error message is more intuitive. Note that the implementation is SQLite specific.
Reviewed By: bottler
Differential Revision: D46047857
fbshipit-source-id: 3064ae4f8122b4fc24ad3d6ab696572ebe8d0c26
Summary: I don't know why RE tests sometimes fail here, but maybe it's a race condition. If that's right, this should fix it.
Reviewed By: shapovalov
Differential Revision: D46020054
fbshipit-source-id: 20b746b09ad9bd77c2601ac681047ccc6cc27ed9
Summary:
This is mostly a refactoring diff to reduce friction in extending the frame data.
Slight functional changes: dataset getitem now accepts (seq_name, frame_number_as_singleton_tensor) as a non-advertised feature. Otherwise this code crashes:
```
item = dataset[0]
dataset[item.sequence_name, item.frame_number]
```
Reviewed By: bottler
Differential Revision: D45780175
fbshipit-source-id: 75b8e8d3dabed954a804310abdbd8ab44a8dea29
Summary: We don't want to use print directly in stats.print() method. Instead this method will return the output string to the caller.
Reviewed By: shapovalov
Differential Revision: D45356240
fbshipit-source-id: 2cabe3cdfb9206bf09aa7b3cdd2263148a5ba145
Summary: Drop support for PyTorch 1.9.0 and 1.9.1.
Reviewed By: shapovalov
Differential Revision: D45704329
fbshipit-source-id: c0fe3ecf6a1eb9bcd4163785c0cb4bf4f5060f50
Summary:
typing.NamedTuple was simplified in 3.10
These two fields were the same in 3.8, so this should be a no-op
#buildmore
Reviewed By: bottler
Differential Revision: D45373526
fbshipit-source-id: 2b26156f5f65b7be335133e9e705730f7254260d
Summary:
Although we can load per-vertex normals in `load_obj`, saving per-vertex normals is not supported in `save_obj`.
This patch fixes this by allowing passing per-vertex normal data in `save_obj`:
``` python
def save_obj(
f: PathOrStr,
verts,
faces,
decimal_places: Optional[int] = None,
path_manager: Optional[PathManager] = None,
*,
verts_normals: Optional[torch.Tensor] = None,
faces_normals: Optional[torch.Tensor] = None,
verts_uvs: Optional[torch.Tensor] = None,
faces_uvs: Optional[torch.Tensor] = None,
texture_map: Optional[torch.Tensor] = None,
) -> None:
"""
Save a mesh to an .obj file.
Args:
f: File (str or path) to which the mesh should be written.
verts: FloatTensor of shape (V, 3) giving vertex coordinates.
faces: LongTensor of shape (F, 3) giving faces.
decimal_places: Number of decimal places for saving.
path_manager: Optional PathManager for interpreting f if
it is a str.
verts_normals: FloatTensor of shape (V, 3) giving the normal per vertex.
faces_normals: LongTensor of shape (F, 3) giving the index into verts_normals
for each vertex in the face.
verts_uvs: FloatTensor of shape (V, 2) giving the uv coordinate per vertex.
faces_uvs: LongTensor of shape (F, 3) giving the index into verts_uvs for
each vertex in the face.
texture_map: FloatTensor of shape (H, W, 3) representing the texture map
for the mesh which will be saved as an image. The values are expected
to be in the range [0, 1],
"""
```
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1511
Reviewed By: shapovalov
Differential Revision: D45086045
Pulled By: bottler
fbshipit-source-id: 666efb0d2c302df6cf9f2f6601d83a07856bf32f
Summary:
If my understanding is right, prp_screen[1] should be 32 rather than 48.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1501
Reviewed By: shapovalov
Differential Revision: D45044406
Pulled By: bottler
fbshipit-source-id: 7dd93312db4986f4701e642ba82d94333466b921
Summary:
I forgot to include these tests to D45086611 when transferring code from pixar_replay repo.
They test the new ORM types used in SQL dataset and are SQL Alchemy 2.0 specific.
An important test for extending types is a proof of concept for generality of SQL Dataset. The idea is to extend FrameAnnotation and FrameData in parallel.
Reviewed By: bottler
Differential Revision: D45529284
fbshipit-source-id: 2a634e518f580c312602107c85fc320db43abcf5
Summary:
Added a suit of functions and code additions to experimental_gltf_io.py file to enable saving Meshes in TexturesVertex format into .glb file.
Also added a test to tets_io_gltf.py to check the functionality with the test described in Test Plane.
Reviewed By: bottler
Differential Revision: D44969144
fbshipit-source-id: 9ce815a1584b510442fa36cc4dbc8d41cc3786d5
Summary: Remove the need of tuple and reversed in the raysampling xy_grid computation
Reviewed By: bottler
Differential Revision: D45269342
fbshipit-source-id: d0e4c0923b9a2cca674b35e8d64862043a0eab3b
Summary:
Moving SQL dataset to PyTorch3D. It has been extensively tested in pixar_replay.
It requires SQLAlchemy 2.0, which is not supported in fbcode. So I exclude the sources and tests that depend on it from buck TARGETS.
Reviewed By: bottler
Differential Revision: D45086611
fbshipit-source-id: 0285f03e5824c0478c70ad13731525bb5ec7deef
Summary:
We currently support caching bounding boxes in MaskAnnotation. If present, they are not re-computed from the mask. However, the masks need to be loaded for the bbox to be set.
This diff fixes that. Even if load_masks / load_blobs are unset, the bounding box can be picked up from the metadata.
Reviewed By: bottler
Differential Revision: D45144918
fbshipit-source-id: 8a2e2c115e96070b6fcdc29cbe57e1cee606ddcd
Summary: The code does not crash if depth map/mask are not given.
Reviewed By: bottler
Differential Revision: D45082985
fbshipit-source-id: 3610d8beb4ac897fbbe52f56a6dd012a6365b89b
Summary:
The pattern
```
X.Y if hasattr(X, "Y") else Z
```
can be replaced with
```
getattr(X, "Y", Z)
```
The [getattr](https://www.w3schools.com/python/ref_func_getattr.asp) function gives more succinct code than the [hasattr](https://www.w3schools.com/python/ref_func_hasattr.asp) function. Please use it when appropriate.
**This diff is very low risk. Green tests indicate that you can safely Accept & Ship.**
Reviewed By: bottler
Differential Revision: D44886893
fbshipit-source-id: 86ba23e837217e1ebd64bf8e27d286257894839e
Summary: Provide an extension point pre_expand to let a configurable class A make sure another class B is registered before A is expanded. This reduces top level imports.
Reviewed By: bottler
Differential Revision: D44504122
fbshipit-source-id: c418bebbe6d33862d239be592d9751378eee3a62
Summary:
Introduces the OverfitModel for NeRF-style training with overfitting to one scene.
It is a specific case of GenericModel. It has been disentangle to ease usage.
## General modification
1. Modularize a minimum GenericModel to introduce OverfitModel
2. Introduce OverfitModel and ensure through unit testing that it behaves like GenericModel.
## Modularization
The following methods have been extracted from GenericModel to allow modularity with ManyViewModel:
- get_objective is now a call to weighted_sum_losses
- log_loss_weights
- prepare_inputs
The generic methods have been moved to an utils.py file.
Simplify the code to introduce OverfitModel.
Private methods like chunk_generator are now public and can now be used by ManyViewModel.
Reviewed By: shapovalov
Differential Revision: D43771992
fbshipit-source-id: 6102aeb21c7fdd56aa2ff9cd1dd23fd9fbf26315
Summary: For safety checks, make inplace forward operations in cuda and c++ call increment_version.
Reviewed By: davidsonic
Differential Revision: D44302504
fbshipit-source-id: 6ff62251e352d6778cb54399e2e11459e16e77ba
Summary: - Replace all the relative imports for generic models to absolute import: (from . import y => from pytorch3.x import y)
Reviewed By: shapovalov
Differential Revision: D43620682
fbshipit-source-id: 937318b339b5020d17b511a891c7b000ff659328
Summary: Indexing with a big matrix now fails with a ValueError, possibly because of pytorch improvements. Remove the testcase for it.
Reviewed By: davidsonic
Differential Revision: D42609741
fbshipit-source-id: 0a5a6632ed199cb942bfc4cc4ed347b72e491125
Summary:
Aligning the logic with the official CO3Dv2 evaluation: 92283c4368/co3d/dataset/utils.py (L7)
This will make the evaluator work with the datasets that do not define known/unseen subsets.
Reviewed By: bottler
Differential Revision: D42803136
fbshipit-source-id: cfac389eab010c32d2e33b40fc7f6ed845c327ef
Summary: If a configurable class inherits torch.nn.Module and is instantiated, automatically call `torch.nn.Module.__init__` on it before doing anything else.
Reviewed By: shapovalov
Differential Revision: D42760349
fbshipit-source-id: 409894911a4252b7987e1fd218ee9ecefbec8e62
Summary: ChainDataset is iterable, and it toes not go along with a custom batch sampler.
Reviewed By: bottler
Differential Revision: D42742315
fbshipit-source-id: 40a715c8d24abe72cb2777634247d7467f628564
Summary: For the new API, filtering iterators over sequences by subsets is quite helpful. The change is backwards compatible.
Reviewed By: bottler
Differential Revision: D42739669
fbshipit-source-id: d150a404aeaf42fd04a81304c63a4cba203f897d
Summary:
V2 dataset does not have the concept of known/unseen frames. Test-time conditining is done with train-set frames, which violates the previous check.
Also fixing a corner case in VideoWriter.
Reviewed By: bottler
Differential Revision: D42706976
fbshipit-source-id: d43be3dd3060d18cb9f46d5dcf6252d9f084110f
Summary:
Fixes some issues with RayBundle plotting:
- allows plotting raybundles on gpu
- view -> reshape since we do not require contiguous raybundle tensors as input
Reviewed By: bottler, shapovalov
Differential Revision: D42665923
fbshipit-source-id: e9c6c7810428365dca4cb5ec80ef15ff28644163
Summary: We don’t see much value in reporting metrics by camera difficulty while supporting that in new datasets is quite painful, hence deprecating training cameras in the data API and ignoring in evaluation.
Reviewed By: bottler
Differential Revision: D42678879
fbshipit-source-id: aad511f6cb2ca82745f31c19594e1d80594b61d7
Summary:
The file [rasterizer.py](de3a474d2b/pytorch3d/renderer/mesh/rasterizer.py (L201)) contains a duplicate line before the check if the projection_transform exists. This causes an exception in the case that a projection transform matrix is already provided. The corresponding lines should be (and are already) in the else case of the if-statement.
Removing these lines fixes the bug and produces the desired behavior.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1421
Reviewed By: shapovalov
Differential Revision: D42450999
Pulled By: bottler
fbshipit-source-id: f7464e87ec9ff8768455656324b0b008132c8a54
Summary: Use IndexError so that a camera object is an iterable
Reviewed By: shapovalov
Differential Revision: D42312021
fbshipit-source-id: 67c417d5f1398e8b30a6944468eda057b4ceb444
Summary:
- Fix the numbers in the headers. Currently, there are no header number 2, the tutorial jump from 1 to 3.
- Clean some unnecessary code.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1423
Reviewed By: shapovalov
Differential Revision: D42478609
Pulled By: bottler
fbshipit-source-id: c49fc10b7d38c3573c92fea737101e6c06bbea38
Summary:
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1394
The bash logic for building conda packages became fiddly to edit. We need to switch cuda-toolkit to pytorch-cuda when PyTorch>=1.12 which was going to be a pain, so here I rewrite the code in python and do it.
Reviewed By: shapovalov
Differential Revision: D42036406
fbshipit-source-id: 8bb80c2f7545477182b23fc97c8514dcafcee176
Summary: Make GLB files report their own length correctly. They were off by 28.
Reviewed By: davidsonic
Differential Revision: D41838340
fbshipit-source-id: 9cd66e8337c142298d5ae1d7c27e51fd812d5c7b
Summary: Python 3.7 not needed any more
Reviewed By: shapovalov
Differential Revision: D41841033
fbshipit-source-id: c0cfd048c70e6b9e47224ab8cddcd6b5f4fc5597
Summary: All mac builds now pytorch 1.13
Reviewed By: shapovalov
Differential Revision: D41841035
fbshipit-source-id: b932eb2fefed77ae22f9757f9bd628ce12b11fad
Summary: Write the amalgamated mesh from the Mesh module to glb. In this version, the json header and the binary data specified by the buffer are merged into glb. The image texture attributes are added.
Reviewed By: bottler
Differential Revision: D41489778
fbshipit-source-id: 3af0e9a8f9e9098e73737a254177802e0fb6bd3c
Summary: Fixes a bug which would crash render_flyaround anytime visualize_preds_keys is adjusted
Reviewed By: shapovalov
Differential Revision: D41124462
fbshipit-source-id: 127045a91a055909f8bd56c8af81afac02c00f60
Summary:
Addresses the following issue:
https://github.com/facebookresearch/pytorch3d/issues/1345#issuecomment-1272881244
I.e., when installed from conda, `pytorch3d_implicitron_visualizer` crashes since it invokes `main()` while `main` requires a single positional arg `argv`.
Reviewed By: shapovalov
Differential Revision: D41533497
fbshipit-source-id: e53a923eb8b2f0f9c0e92e9c0866d9cb310c4799
Summary: To be consistent with CUDA hashing, the diff replaces boost hasher with a simplified hasher for storing unique global edge_ids.
Reviewed By: kjchalup
Differential Revision: D41140382
fbshipit-source-id: 2ce598e5edcf6369fe13bd15d1f5e014b252027b
Summary: Autogenerate docs for the renderer too. This will be helpful but make a slightly ugly TOC
Reviewed By: kjchalup
Differential Revision: D40977315
fbshipit-source-id: 10831de3ced68080cb5671c5dc31d4da8500f761
Summary:
Every time I try to run code, I get this warning:
```
warnings.warn("Can't import pucuda.gl, not importing MeshRasterizerOpenGL.")
```
Of course, `pucuda` is a typo of `pycuda`.
This PR fixes the typo
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1379
Reviewed By: kjchalup
Differential Revision: D41295562
Pulled By: bottler
fbshipit-source-id: 2bfa2a2dbe20a5347861d36fbff5094994c1253d
Summary:
Enum fields cause the following to crash since they are loaded as strings:
```
config = OmegaConf.load(autodumped_cfg_file)
Experiment(**config)
```
It would be good to come up with the general solution but for now just fixing the visualisation script.
Reviewed By: bottler
Differential Revision: D41140426
fbshipit-source-id: 71c1c6b1fffe3b5ab1ca0114cfa3f0d81160278f
Summary:
Rasterize MC was not adapted to heterogeneous bundles.
There are some caveats though:
1) on CO3D, we get up to 18 points per image, which is too few for a reasonable visualisation (see below);
2) rasterising for a batch of 100 is slow.
I also moved the unpacking code close to the bundle to be able to reuse it.
{F789678778}
Reviewed By: bottler, davnov134
Differential Revision: D41008600
fbshipit-source-id: 9f10f1f9f9a174cf8c534b9b9859587d69832b71
Summary:
Allow a module's param_group member to specify overrides to the param groups of its members or their members.
Also logging for param group assignments.
This allows defining `params.basis_matrix` in the param_groups of a voxel_grid.
Reviewed By: shapovalov
Differential Revision: D41080667
fbshipit-source-id: 49f3b0e5b36e496f78701db0699cbb8a7e20c51e
Summary: Fix indexing of directions after filtering of points by scaffold.
Reviewed By: shapovalov
Differential Revision: D40853482
fbshipit-source-id: 9cfdb981e97cb82edcd27632c5848537ed2c6837
Summary:
Allows loading of multiple categories.
Multiple categories are provided in a comma-separated list of category names.
Reviewed By: bottler, shapovalov
Differential Revision: D40803297
fbshipit-source-id: 863938be3aa6ffefe9e563aede4a2e9e66aeeaa8
Summary: Try to document implicitron. Most of this is autogenerated.
Reviewed By: shapovalov
Differential Revision: D40623742
fbshipit-source-id: 453508277903b7d987b1703656ba1ee09bc2c570
Summary: The bug lead to non-coinciding origins of the rays emitted from perspective cameras when unit_directions=True
Reviewed By: bottler
Differential Revision: D40865610
fbshipit-source-id: 398598e9e919b53e6bea179f0400e735bbb5b625
Summary: Some things fail if a parameter is not wraped; in particular, it prevented other tensors moving to GPU.
Reviewed By: bottler
Differential Revision: D40819932
fbshipit-source-id: a23b38ceacd7f0dc131cb0355fef1178e3e2f7fd
Summary: Add option to flat pad the last delta. Might to help when training on rgb only.
Reviewed By: shapovalov
Differential Revision: D40587475
fbshipit-source-id: c763fa38948600ea532c730538dc4ff29d2c3e0a
Summary: Make Implicitron run without visdom installed.
Reviewed By: shapovalov
Differential Revision: D40587974
fbshipit-source-id: dc319596c7a4d10a4c54c556dabc89ad9d25c2fb
Summary:
According to the profiler trace D40326775, _check_valid_rotation_matrix is slow because of aten::all_close operation and _safe_det_3x3 bottlenecks. Disable the check by default unless environment variable PYTORCH3D_CHECK_ROTATION_MATRICES is set to 1.
Comparison after applying the change:
```
Profiling/Function get_world_to_view (ms) Transform_points(ms) specular(ms)
before 12.751 18.577 21.384
after 4.432 (34.7%) 9.248 (49.8%) 11.507 (53.8%)
```
Profiling trace:
https://pxl.cl/2h687
More details in https://docs.google.com/document/d/1kfhEQfpeQToikr5OH9ZssM39CskxWoJ2p8DO5-t6eWk/edit?usp=sharing
Reviewed By: kjchalup
Differential Revision: D40442503
fbshipit-source-id: 954b58de47de235c9d93af441643c22868b547d0
Summary: Keep the cause of hydra errors visible in some more cases.
Reviewed By: shapovalov
Differential Revision: D40516202
fbshipit-source-id: 8d214be5cc808a37738add77cc305fe099788546
Summary:
Adds the ability to have different learning rates for different parts of the model. The trainable parts of the implicitron have a new member
param_groups: dictionary where keys are names of individual parameters,
or module’s members and values are the parameter group where the
parameter/member will be sorted to. "self" key is used to denote the
parameter group at the module level. Possible keys, including the "self" key
do not have to be defined. By default all parameters are put into "default"
parameter group and have the learning rate defined in the optimizer,
it can be overriden at the:
- module level with “self” key, all the parameters and child
module s parameters will be put to that parameter group
- member level, which is the same as if the `param_groups` in that
member has key=“self” and value equal to that parameter group.
This is useful if members do not have `param_groups`, for
example torch.nn.Linear.
- parameter level, parameter with the same name as the key
will be put to that parameter group.
And in the optimizer factory, parameters and their learning rates are recursively gathered.
Reviewed By: shapovalov
Differential Revision: D40145802
fbshipit-source-id: 631c02b8d79ee1c0eb4c31e6e42dbd3d2882078a
Summary:
Added initialization configuration for the last layer of the MLP decoding function. You can now set:
- last activation function (tensorf uses sigmoid)
- last bias init (tensorf uses 0, because of sigmoid ofc)
- option to use xavier initialization (we use relu so this should not be set)
Reviewed By: davnov134
Differential Revision: D40304981
fbshipit-source-id: ec398eb2235164ae85cb7c09b9660e843490ea04
Summary:
Small config system fix. Allows get_default_args to work on an instance which has been created with a dict (instead of a DictConfig) as an args field. E.g.
```
gm = GenericModel(
raysampler_AdaptiveRaySampler_args={"scene_extent": 4.0}
)
OmegaConf.structured(gm1)
```
Reviewed By: shapovalov
Differential Revision: D40341047
fbshipit-source-id: 587d0e8262e271df442a80858949a48e5d6db3df
Summary: Tensorf does relu or softmax after the density grid. This diff adds the ability to replicate that.
Reviewed By: bottler
Differential Revision: D40023228
fbshipit-source-id: 9f19868cd68460af98ab6e61c7f708158c26dc08
Summary: More helpful errors when the output channels aren't 1 for density and 3 for color
Reviewed By: shapovalov
Differential Revision: D40341088
fbshipit-source-id: 6074bf7fefe11c8e60fee4db2760b776419bcfee
Summary: Couldn't build p3d on devfair because C++17 is unsupported. Two structured bindings sneaked in.
Reviewed By: bottler
Differential Revision: D40280967
fbshipit-source-id: 9627f3f9f76247a6cefbeac067fdead67c6f4e14
Summary:
TensoRF at step 2000 does volume croping and resizing.
At those steps it calculates part of the voxel grid which has density big enough to have objects and resizes the grid to fit that object.
Change is done on 3 levels:
- implicit function subscribes to epochs and at specific epochs finds the bounding box of the object and calls resizing of the color and density voxel grids to fit it
- VoxelGrid module calls cropping of the underlaying voxel grid and resizing to fit previous size it also adjusts its extends and translation to match wanted size
- Each voxel grid has its own way of cropping the underlaying data
Reviewed By: kjchalup
Differential Revision: D39854548
fbshipit-source-id: 5435b6e599aef1eaab980f5421d3369ee4829c50
Summary:
avoid creating a numpy array of random things just to split it: this can now generate a warning e.g. if the list contains lists of varying lengths. There might also be a performance win here, and we could do more of the same if we care about that.
(The vanilla way to avoid the new warning is to replace `np.split(a,` with `np.split(np.array(a, dtype=object), ` btw.)
Reviewed By: shapovalov
Differential Revision: D40209308
fbshipit-source-id: daae33a23ceb444e8e7241f72ce1525593e2f239
Summary: Forward method is sped up using the scaffold, a low resolution voxel grid which is used to filter out the points in empty space. These points will be predicted as having 0 density and (0, 0, 0) color. The points which were not evaluated as empty space will be passed through the steps outlined above.
Reviewed By: kjchalup
Differential Revision: D39579671
fbshipit-source-id: 8eab8bb43ef77c2a73557efdb725e99a6c60d415
Summary: Avoids use of `torch.cat` operation when rendering a volume by instead issuing multiple calls to `torch.nn.functional.grid_sample`. Density and color tensors can be large.
Reviewed By: bottler
Differential Revision: D40072399
fbshipit-source-id: eb4cd34f6171d54972bbf2877065f973db497de0
Summary:
Torch C++ extension for Marching Cubes
- Add torch C++ extension for marching cubes. Observe a speed up of ~255x-324x speed up (over varying batch sizes and spatial resolutions)
- Add C++ impl in existing unit-tests.
(Note: this ignores all push blocking failures!)
Reviewed By: kjchalup
Differential Revision: D39590638
fbshipit-source-id: e44d2852a24c2c398e5ea9db20f0dfaa1817e457
Summary: Overhaul of marching_cubes_naive for better performance and to avoid relying on unstable hashing. In particular, instead of hashing vertex positions, we index each interpolated vertex with its corresponding edge in the 3d grid.
Reviewed By: kjchalup
Differential Revision: D39419642
fbshipit-source-id: b5fede3525c545d1d374198928dfb216262f0ec0
Summary:
Threaded the for loop:
```
for (int yi = 0; yi < H; ++yi) {...}
```
in function `RasterizeMeshesNaiveCpu()`.
Chunk size is approx equal.
Reviewed By: bottler
Differential Revision: D40063604
fbshipit-source-id: 09150269405538119b0f1b029892179501421e68
Summary: Loads the whole dataset and moves it to the device and sends it to for sampling to enable full dataset heterogeneous raysampling.
Reviewed By: bottler
Differential Revision: D39263009
fbshipit-source-id: c527537dfc5f50116849656c9e171e868f6845b1
Summary:
Changed ray_sampler and metrics to be able to use mixed frame raysampling.
Ray_sampler now has a new member which it passes to the pytorch3d raysampler.
If the raybundle is heterogeneous metrics now samples images by padding xys first. This reduces memory consumption.
Reviewed By: bottler, kjchalup
Differential Revision: D39542221
fbshipit-source-id: a6fec23838d3049ae5c2fd2e1f641c46c7c927e3
Summary: new implicitronRayBundle with added cameraIDs and camera counts. Added to enable a single raybundle inside Implicitron and easier extension in the future. Since RayBundle is named tuple and RayBundleHeterogeneous is dataclass and RayBundleHeterogeneous cannot inherit RayBundle. So if there was no ImplicitronRayBundle every function that uses RayBundle now would have to use Union[RayBundle, RaybundleHeterogeneous] which is confusing and unecessary complicated.
Reviewed By: bottler, kjchalup
Differential Revision: D39262999
fbshipit-source-id: ece160e32f6c88c3977e408e966789bf8307af59
Summary:
Added heterogeneous raysampling to pytorch3d raysampler, different cameras are sampled different number of times.
It now returns RayBundle if heterogeneous raysampling is off and new RayBundleHeterogeneous (with added fields `camera_ids` and `camera_counts`). Heterogeneous raysampling is on if `n_rays_total` is not None.
Reviewed By: bottler
Differential Revision: D39542222
fbshipit-source-id: d3d88d822ec7696e856007c088dc36a1cfa8c625
Summary:
This is quite a thin wrapper – not sure we need it. The motivation is that `Transform3d` is not as matrix-centric now, it can be converted to SE(3) logarithm equally easily.
It simplifies things like averaging cameras and getting axis-angle of camera rotation (previously, one would need to call `se3_log_map(cameras.get_world_to_camera_transform().get_matrix())`), now one fewer thing to call / discover.
Reviewed By: bottler
Differential Revision: D39928000
fbshipit-source-id: 85248d5b8af136618f1d08791af5297ea5179d19
Summary:
`get_rotation_to_best_fit_xy` is useful to expose externally, however there was a bug (which we probably did not care about for our use case): it could return a rotation matrix with det(R) == −1.
The diff fixes that, and also makes centroid optional (it can be computed from points).
Reviewed By: bottler
Differential Revision: D39926791
fbshipit-source-id: 5120c7892815b829f3ddcc23e93d4a5ec0ca0013
Summary: Any module can be subscribed to step updates from the training loop. Once the training loop publishes a step the voxel grid changes its dimensions. During the construction of VoxelGridModule and its parameters it does not know which is the resolution that will be loaded from checkpoint, so before the checkpoint loading a hook runs which changes the VoxelGridModule's parameters to match shapes of the loaded checkpoint.
Reviewed By: bottler
Differential Revision: D39026775
fbshipit-source-id: 0d359ea5c8d2eda11d773d79c7513c83585d5f17
Summary:
User reported that cloned cameras fail to save. The error with latest PyTorch is
```
pickle.PicklingError: Can't pickle ~T_destination: attribute lookup T_destination on torch.nn.modules.module failed
```
This fixes it.
Reviewed By: btgraham
Differential Revision: D39692258
fbshipit-source-id: 75bbf3b8dfa0023dc28bf7d4cc253ca96e46a64d
Summary:
We need to make packing/unpacking in 2 places for mixed frame raysampling (metrics and raysampler) but those tensors that need to be unpacked/packed have more than two dimensions.
I could have reshaped and stored dimensions but this seems to just complicate code there with something which packed_to_padded should support.
I could have made a separate function for implicitron but it would confusing to have two different padded_to_packed functions inside pytorch3d codebase one of which does packing for (b, max) and (b, max, f) and the other for (b, max, …)
Reviewed By: bottler
Differential Revision: D39729026
fbshipit-source-id: 2bdebf290dcc6c316b7fe1aeee49bbb5255e508c
Summary: The implicit function and its members and internal working
Reviewed By: kjchalup
Differential Revision: D38829764
fbshipit-source-id: 28394fe7819e311ed52c9defc9a1b29f37fbc495
Summary: Allow using the new `foreach` option on optimizers.
Reviewed By: shapovalov
Differential Revision: D39694843
fbshipit-source-id: 97109c245b669bc6edff0f246893f95b7ae71f90
Summary: Add the ability to process arbitrary point shapes `[n_grids, ..., 3]` instead of only `[n_grids, n_points, 3]`.
Reviewed By: bottler
Differential Revision: D39574373
fbshipit-source-id: 0a9ecafe9ea58cd8f909644de43a1185ecf934f4
Summary:
Added export of UV textures to IO.save_mesh in Pytorch3d
MeshObjFormat now passes verts_uv, faces_uv, and texture_map as input to save_obj
TODO: check if TexturesUV.verts_uv_list or TexturesUV.verts_uv_padded() should be passed to save_obj
IO.save_mesh(obj_file, meshes, decimal_places=2) should be IO().save_mesh(obj_file, meshes, decimal_places=2)
Reviewed By: bottler
Differential Revision: D39617441
fbshipit-source-id: 4628b7f26f70e38c65f235852b990c8edb0ded23
Summary:
A significant speedup (e.g. >2% of a forward pass).
Move NDCMultinomialRaysampler parts of AbstractMaskRaySampler to members instead of living in a dict. The dict was hiding them from the nn.Module system so their _xy_grid members were remaining on the CPU. Therefore they were being copied to the GPU in every forward pass.
(We couldn't easily use a ModuleDict here because the enum keys are not strs.)
Reviewed By: shapovalov
Differential Revision: D39668589
fbshipit-source-id: 719b88e4a08fd7263a284e0ab38189e666bd7e3a
Summary:
- indicate location of OmegaConf.structured failures
- split the data gathering from enable_get_default_args to ease experimenting with it.
- comment fixes.
- nicer error when a_class_type has weird type.
Reviewed By: kjchalup
Differential Revision: D39434447
fbshipit-source-id: b80c7941547ca450e848038ef5be95b7ebbe8f3e
Summary: Various fixes to get visualize_reconstruction running, and an interactive test for it.
Reviewed By: kjchalup
Differential Revision: D39286691
fbshipit-source-id: 88735034cc01736b24735bcb024577e6ab7ed336
Summary: Workaround for oddity with new hydra.
Reviewed By: davnov134
Differential Revision: D39280639
fbshipit-source-id: 76e91947f633589945446db93cf2dbc259642f8a
Summary: Samples batches without replacement if the number of samples is not specified. This makes sure that we always iterate over the whole dataset in each epoch.
Reviewed By: bottler
Differential Revision: D39270786
fbshipit-source-id: 0c983d1f5e0af711463abfb23939bc0d2b5172a0
Summary:
Move the flyaround rendering function into core implicitron.
The unblocks an example in the facebookresearch/co3d repo.
Reviewed By: bottler
Differential Revision: D39257801
fbshipit-source-id: 6841a88a43d4aa364dd86ba83ca2d4c3cf0435a4
Summary:
The self._stratified_sampling attribute is always overridden unless stratified_sampling is explicitly set to None. However, the desired default behavior is that the value of self._stratified_sampling is used unless the argument stratified_sampling is set to True/False. Changing the default to None achieves this
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1324
Reviewed By: bottler
Differential Revision: D39259775
Pulled By: davnov134
fbshipit-source-id: e01bb747ac80c812eb27bf22e67f5e14f29acadd
Summary: On each call of the stats.update the object calculates current average iteration time by getting time elapsed from the time_start and then dividing it by the current number of steps. It saves the result to AverageMeter object which when queried returns the average of things saved, so the time is averaged twice which biases it towards the start value (which is often larger).
Reviewed By: kjchalup
Differential Revision: D39206989
fbshipit-source-id: ccab5233d7aaca1ac4fd626fb329b83c7c0d6af9
Summary: Currently some implicit functions in implicitron take a raybundle, others take ray_points_world. raybundle is what they really need. However, the raybundle is going to become a bit more flexible later, as it will contain different numbers of rays for each camera.
Reviewed By: bottler
Differential Revision: D39173751
fbshipit-source-id: ebc038e426d22e831e67a18ba64655d8a61e1eb9
Summary: Update the docstring for try_get_projection_transform on the API design.
Reviewed By: kjchalup
Differential Revision: D39227333
fbshipit-source-id: c9d0e625735d4972116d1f71865fb9b763e684de
Summary:
1) Update rasterizer/point rasterizer to accommodate fisheyecamera. Specifically, transform_points is in placement of explicit transform compositions.
2) In rasterizer unittests, update corresponding tests for rasterizer and point_rasterizer. Address comments to test fisheye against perspective camera when distortions are turned off.
3) Address comments to add end2end test for fisheyecameras. In test_render_meshes, fisheyecameras are added to camera enuerations whenever possible.
4) Test renderings with fisheyecameras of different params on cow mesh.
5) Use compositions for linear cameras whenever possible.
Reviewed By: kjchalup
Differential Revision: D38932736
fbshipit-source-id: 5b7074fc001f2390f4cf43c7267a8b37fd987547
Summary:
Amend FisheyeCamera by adding tests for all
combination of params and for different batch_sizes.
Reviewed By: kjchalup
Differential Revision: D39176747
fbshipit-source-id: 830d30da24beeb2f0df52db0b17a4303ed53b59c
Summary: A dummy value in test_opengl_utils seems to be able to break tests in test_mesh_renderer_opengl{,_to}.
Reviewed By: kjchalup
Differential Revision: D39173275
fbshipit-source-id: 83b15159f70135ea575d5085c7b6b37badd6e49e
Summary: D38919607 (c4545a7cbc) and D38858887 (06cbba2628) were premature, turns out CUDA 10.2 doesn't support C++17.
Reviewed By: bottler
Differential Revision: D39156205
fbshipit-source-id: 5e2e84cc4a57d1113a915166631651d438540d56
Summary:
Adds yaml configs to train selected methods on CO3Dv2.
Few more updates:
1) moved some fields to base classes so that we can check is_multisequence in experiment.py
2) skip loading all train cameras for multisequence datasets, without this, co3d-fewview is untrainable
3) fix bug in json index dataset provider v2
Reviewed By: kjchalup
Differential Revision: D38952755
fbshipit-source-id: 3edac6fc8e20775aa70400bd73a0e6d52b091e0c
Summary: Address comments to add benchmarkings for cameras and the new fisheye cameras. The dependency functions in test_cameras have been updated in Diff 1. The following two snapshots show benchmarking results.
Reviewed By: kjchalup
Differential Revision: D38991914
fbshipit-source-id: 51fe9bb7237543e4ee112c9f5068a4cf12a9d482
Summary:
1. A Fisheye camera model that generalizes pinhole camera by considering distortions (i.e. radial, tangential and thin-prism distortions).
2. Added tests against perspective cameras when distortions are off and Aria data points when distortions are on.
3. Address comments to test unhandled shapes between points and transforms. Added tests for __FIELDS, shape broadcasts, cuda etc.
4. Address earlier comments for code efficiency (e.g., adopted torch.norm; torch.solve for matrix inverse; removed inplace operations; unnecessary clone; expand in place of repeat etc).
Reviewed By: jcjohnson
Differential Revision: D38407094
fbshipit-source-id: a3ab48c85c496ac87af692d5d461bb3fc2a2db13
Summary: I think there is a typo here could not find any MultiPassEARenderer just MultiPassEmissionAbsorptionRenderer?
Reviewed By: bottler
Differential Revision: D39056641
fbshipit-source-id: 4dd0b123fc795a0083a957786c032e23dc5abac9
Summary: Added replacable decoding functions which will be applied after the voxel grid to get color and density
Reviewed By: bottler
Differential Revision: D38829763
fbshipit-source-id: f21ce206c1c19548206ea2ce97d7ebea3de30a23
Summary: Simple wrapper around voxel grids to make them a module
Reviewed By: bottler
Differential Revision: D38829762
fbshipit-source-id: dfee85088fa3c65e396cc7d3bf7ebaaffaadb646
Summary:
One of the docstrings is a disaster see https://pytorch3d.readthedocs.io/en/latest/modules/ops.html
Also some minor fixes I encountered when browsing the code
Reviewed By: bottler
Differential Revision: D38581595
fbshipit-source-id: 3b6ca97788af380a44df9144a6a4cac782c6eab8
Summary: Moved the MLP and transformer from nerf to a new file to be reused.
Reviewed By: bottler
Differential Revision: D38828150
fbshipit-source-id: 8ff77b18b3aeeda398d90758a7bcb2482edce66f
Summary: Added voxel grid classes from TensoRF, both in their factorized (CP and VM) and full form.
Reviewed By: bottler
Differential Revision: D38465419
fbshipit-source-id: 8b306338af58dc50ef47a682616022a0512c0047
Summary: Fix EPS issue that causes numerical instabilities when boxes are very close
Reviewed By: kjchalup
Differential Revision: D38661465
fbshipit-source-id: d2b6753cba9dc2f0072ace5289c9aa815a1a29f6
Summary: Removing hardcoded block reduction operation from `sample_farthest_points.cu` code, and replace it with `cub::BlockReduce` reducing complexity of the code, and letting established libraries do the thinking for us.
Reviewed By: bottler
Differential Revision: D38617147
fbshipit-source-id: b230029c55f05cda0aab1648d3105a8d3e92d27b
Summary: Split Volumes class to data and location part so that location part can be reused in planned VoxelGrid classes.
Reviewed By: bottler
Differential Revision: D38782015
fbshipit-source-id: 489da09c5c236f3b81961ce9b09edbd97afaa7c8
Summary:
generic_model_args no longer exists. Update some references to it, mostly in doc.
This fixes the testing of all the yaml files in test_forward pass.
Reviewed By: shapovalov
Differential Revision: D38789202
fbshipit-source-id: f11417efe772d7f86368b3598aa66c52b1309dbf
Summary:
We identified that these logging statements can deteriorate performance in certain cases. I propose removing them from the regular renderer implementation and letting individuals re-insert debug logging wherever needed on a case-by-case basis.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1260
Reviewed By: kjchalup
Differential Revision: D38737439
Pulled By: bottler
fbshipit-source-id: cf9dcbbeae4dbf214c2e17d5bafa00b2ff796393
Summary: Useful for visualising colmap output where some frames are not correctly registered.
Reviewed By: bottler
Differential Revision: D38743191
fbshipit-source-id: e823df2997870dc41d76784e112d4349f904d311
Summary: Previously, "psnr" was evaluated between the masked g.t. image and the render. To avoid confusion, "psnr" is now renamed to "psnr_masked".
Reviewed By: bottler
Differential Revision: D38707511
fbshipit-source-id: 8ee881ab1a05453d6692dde9782333a47d8c1234
Summary: Builds for new PyTorch 1.12.1. Drop builds for PyTorch 1.8.0 and 1.8.1.
Reviewed By: kjchalup
Differential Revision: D38658991
fbshipit-source-id: 6192e226c2154cd051eeee98498d9a395cfd6fd5
Summary: Reports also the PSNR between the unmasked G.T. image and the render.
Reviewed By: bottler
Differential Revision: D38655943
fbshipit-source-id: 1603a2d02116ea1ce037e5530abe1afc65a2ba93
Summary:
**"filename"**: "projects/nerf/nerf/implicit_function.py"
**"warning_type"**: "Incompatible variable type [9]",
**"warning_message"**: " input_skips is declared to have type `Tuple[int]` but is used as type `Tuple[]`.",
**"warning_line"**: 256,
**"fix"**: input_skips: Tuple[int,...] = ()
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1288
Reviewed By: kjchalup
Differential Revision: D38615188
Pulled By: bottler
fbshipit-source-id: a014344dd6cf2125f564f948a3c905ceb84cf994
Summary: This makes the new volumes tutorial work on google colab.
Reviewed By: kjchalup
Differential Revision: D38501906
fbshipit-source-id: a606a357e929dae903dc4d9067bd1519f05b1458
Summary: need to pip install visdom in new volumes tutorial.
Reviewed By: kjchalup
Differential Revision: D38501905
fbshipit-source-id: 534bf097e41f05b3389e9420e6dd2b61a4517861
Summary: Linear followed by exponential LR progression. Needed for making Blender scenes converge.
Reviewed By: kjchalup
Differential Revision: D38557007
fbshipit-source-id: ad630dbc5b8fabcb33eeb5bdeed5e4f31360bac2
Summary:
LLFF (and most/all non-synth datasets) will have no background/foreground distinction. Add support for data with no fg mask.
Also, we had a bug in stats loading, like this:
* Load stats
* One of the stats has a history of length 0
* That's fine, e.g. maybe it's fg_error but the dataset has no notion of fg/bg. So leave it as len 0
* Check whether all the stats have the same history length as an arbitrarily chosen "reference-stat"
* Ooops the reference-stat happened to be the stat with length 0
* assert (legit_stat_len == reference_stat_len (=0)) ---> failed assert
Also some minor fixes (from Jeremy's other diff) to support LLFF
Reviewed By: davnov134
Differential Revision: D38475272
fbshipit-source-id: 5b35ac86d1d5239759f537621f41a3aa4eb3bd68
Summary: In a multisequence (fewview) scenario, it does not make sense to use all cameras for evaluating the difficulty as they come from different scenes. Using only this batch’s source (known) cameras instead.
Reviewed By: bottler
Differential Revision: D38491070
fbshipit-source-id: d6312d8fbb125b28a33db9f53d4215bcd1ca28a8
Summary:
Request in https://github.com/facebookresearch/pytorch3d/issues/1233 for option to disable CUDA build.
Also option to disable binary build completely. This could be useful e.g. in the config tutorial where we need a small python-only part of pytorch3d.
Reviewed By: kjchalup
Differential Revision: D38458624
fbshipit-source-id: 421a0b1cc31306d7e322d3e743e30a7533d7f034
Summary:
Misc fixes.
- most important: the mac image is gone so switch to a newer one.
- torch.concat is new; was used accidentally
- remove lpips from testing in meta.yaml as it is breaking the conda test. Better to leave the relevant tests failing in OSS.
- TypedDict usage is breaking implicitron on Python 3.7.
Reviewed By: patricklabatut
Differential Revision: D38458164
fbshipit-source-id: b16c26453a743b9a771e2a6787b9a4d2a52e41c2
Summary: This field is specific to one purpose.
Reviewed By: patricklabatut
Differential Revision: D38424891
fbshipit-source-id: e017304497012430c30e436da7052b9ad6fc7614
Summary: One way to tidy the installation so we don't install files in site-packages/projects. Fixes https://github.com/facebookresearch/pytorch3d/issues/1279
Reviewed By: shapovalov, davnov134
Differential Revision: D38426772
fbshipit-source-id: ac1a54fbf230adb53904701e1f38bf9567f647ce
Summary: Don't copy from one part of config to another, rather do the copy within GenericModel.
Reviewed By: davnov134
Differential Revision: D38248828
fbshipit-source-id: ff8af985c37ea1f7df9e0aa0a45a58df34c3f893
Summary: Made the config system call open_dict when it calls the tweak function.
Reviewed By: shapovalov
Differential Revision: D38315334
fbshipit-source-id: 5924a92d8d0bf399bbf3788247f81fc990e265e7
Summary:
Stats are logically connected to the training loop, not to the model. Hence, moving to the training loop.
Also removing resume_epoch from OptimizerFactory in favor of a single place - ModelFactory. This removes the need for config consistency checks etc.
Reviewed By: kjchalup
Differential Revision: D38313475
fbshipit-source-id: a1d188a63e28459df381ff98ad8acdcdb14887b7
Summary: Before this diff, train_stats.py would not be created by default, EXCEPT when resuming training. This makes them appear from start.
Reviewed By: shapovalov
Differential Revision: D38320341
fbshipit-source-id: 8ea5b99ec81c377ae129f58e78dc2eaff94821ad
Summary: Remove the dataset's need to provide the task type.
Reviewed By: davnov134, kjchalup
Differential Revision: D38314000
fbshipit-source-id: 3805d885b5d4528abdc78c0da03247edb9abf3f7
Summary:
Added _NEED_CONTROL
to JsonIndexDatasetMapProviderV2 and made dataset_tweak_args use it.
Reviewed By: bottler
Differential Revision: D38313914
fbshipit-source-id: 529847571065dfba995b609a66737bd91e002cfe
Summary: Only import it if you ask for it.
Reviewed By: kjchalup
Differential Revision: D38327167
fbshipit-source-id: 3f05231f26eda582a63afc71b669996342b0c6f9
Summary: Made eval_batches be set in call to `__init__` not after the construction as they were before
Reviewed By: bottler
Differential Revision: D38275943
fbshipit-source-id: 32737401d1ddd16c284e1851b7a91f8b041c406f
Summary: Currently, seeds are set only inside the train loop. But this does not ensure that the model weights are initialized the same way everywhere which makes all experiments irreproducible. This diff fixes it.
Reviewed By: bottler
Differential Revision: D38315840
fbshipit-source-id: 3d2ecebbc36072c2b68dd3cd8c5e30708e7dd808
Summary: Make a dummy single-scene dataset using the code from generate_cow_renders (used in existing NeRF tutorials)
Reviewed By: kjchalup
Differential Revision: D38116910
fbshipit-source-id: 8db6df7098aa221c81d392e5cd21b0e67f65bd70
Summary:
This large diff rewrites a significant portion of Implicitron's config hierarchy. The new hierarchy, and some of the default implementation classes, are as follows:
```
Experiment
data_source: ImplicitronDataSource
dataset_map_provider
data_loader_map_provider
model_factory: ImplicitronModelFactory
model: GenericModel
optimizer_factory: ImplicitronOptimizerFactory
training_loop: ImplicitronTrainingLoop
evaluator: ImplicitronEvaluator
```
1) Experiment (used to be ExperimentConfig) is now a top-level Configurable and contains as members mainly (mostly new) high-level factory Configurables.
2) Experiment's job is to run factories, do some accelerate setup and then pass the results to the main training loop.
3) ImplicitronOptimizerFactory and ImplicitronModelFactory are new high-level factories that create the optimizer, scheduler, model, and stats objects.
4) TrainingLoop is a new configurable that runs the main training loop and the inner train-validate step.
5) Evaluator is a new configurable that TrainingLoop uses to run validation/test steps.
6) GenericModel is not the only model choice anymore. Instead, ImplicitronModelBase (by default instantiated with GenericModel) is a member of Experiment and can be easily replaced by a custom implementation by the user.
All the new Configurables are children of ReplaceableBase, and can be easily replaced with custom implementations.
In addition, I added support for the exponential LR schedule, updated the config files and the test, as well as added a config file that reproduces NERF results and a test to run the repro experiment.
Reviewed By: bottler
Differential Revision: D37723227
fbshipit-source-id: b36bee880d6aa53efdd2abfaae4489d8ab1e8a27
Summary:
This is an internal change in the config systen. It allows redefining a pluggable implementation with new default values. This is useful in notebooks / interactive use. For example, this now works.
class A(ReplaceableBase):
pass
registry.register
class B(A):
i: int = 4
class C(Configurable):
a: A
a_class_type: str = "B"
def __post_init__(self):
run_auto_creation(self)
expand_args_fields(C)
registry.register
class B(A):
i: int = 5
c = C()
assert c.a.i == 5
Reviewed By: shapovalov
Differential Revision: D38219371
fbshipit-source-id: 72911a9bd3426d3359cf8802cc016fc7f6d7713b
Summary:
Adding MeshRasterizerOpenGL, a faster alternative to MeshRasterizer. The new rasterizer follows the ideas from "Differentiable Surface Rendering via non-Differentiable Sampling".
The new rasterizer 20x faster on a 2M face mesh (try pose optimization on Nefertiti from https://www.cs.cmu.edu/~kmcrane/Projects/ModelRepository/!). The larger the mesh, the larger the speedup.
There are two main disadvantages:
* The new rasterizer works with an OpenGL backend, so requires pycuda.gl and pyopengl installed (though we avoided writing any C++ code, everything is in Python!)
* The new rasterizer is non-differentiable. However, you can still differentiate the rendering function if you use if with the new SplatterPhongShader which we recently added to PyTorch3D (see the original paper cited above).
Reviewed By: patricklabatut, jcjohnson
Differential Revision: D37698816
fbshipit-source-id: 54d120639d3cb001f096237807e54aced0acda25
Summary:
EGLContext is a utility to render with OpenGL without an attached display (that is, without a monitor).
DeviceContextManager allows us to avoid unnecessary context creations and releases. See docstrings for more info.
Reviewed By: jcjohnson
Differential Revision: D36562551
fbshipit-source-id: eb0d2a2f85555ee110e203d435a44ad243281d2c
Summary: Avoid calculating all_train_cameras before it is needed, because it is slow in some datasets.
Reviewed By: shapovalov
Differential Revision: D38037157
fbshipit-source-id: 95461226655cde2626b680661951ab17ebb0ec75
Summary: We especially need omegaconf when testing impicitron.
Reviewed By: patricklabatut
Differential Revision: D37921440
fbshipit-source-id: 4e66fde35aa29f60eabd92bf459cd584cfd7e5ca
Summary:
X-link: https://github.com/fairinternal/pytorch3d/pull/39
Blender and LLFF cameras were sending screen space focal length and principal point to a camera init function expecting NDC
Reviewed By: shapovalov
Differential Revision: D37788686
fbshipit-source-id: 2ddf7436248bc0d174eceb04c288b93858138582
Summary: Add the conditioning types to the repro yaml files. In particular, this fixes test_conditioning_type.
Reviewed By: shapovalov
Differential Revision: D37914537
fbshipit-source-id: 621390f329d9da662d915eb3b7bc709206a20552
Summary:
I tried to run `experiment.py` and `pytorch3d_implicitron_runner` and faced the failure with this traceback: https://www.internalfb.com/phabricator/paste/view/P515734086
It seems to be due to the new release of OmegaConf (version=2.2.2) which requires different typing. This fix helped to overcome it.
Reviewed By: bottler
Differential Revision: D37881644
fbshipit-source-id: be0cd4ced0526f8382cea5bdca9b340e93a2fba2
Summary:
EPnP fails the test when the number of points is below 6. As suggested, quadratic option is in theory to deal with as few as 4 points (so num_pts_thresh=3 is set). And when num_pts > num_pts_thresh=4, skip_q is False.
To avoid bumping num_pts_thresh while passing all the original tests, check_output is set to False when num_pts < 6, similar to the logic in Line 123-127. It makes sure that the algo doesn't crash.
Reviewed By: shapovalov
Differential Revision: D37804438
fbshipit-source-id: 74576d63a9553e25e3ec344677edb6912b5f9354
Summary: Removing 1 from the crop mask does not seem sensible.
Reviewed By: bottler, shapovalov
Differential Revision: D37843680
fbshipit-source-id: 70cec80f9ea26deac63312da62b9c8af27d2a010
Summary:
1. Random sampling of num batches without replacement not supported.
2.Providers should implement the interface for the training loop to work.
Reviewed By: bottler, davnov134
Differential Revision: D37815388
fbshipit-source-id: 8a2795b524e733f07346ffdb20a9c0eb1a2b8190
Summary: Accelerate is an additional implicitron dependency, so document it.
Reviewed By: shapovalov
Differential Revision: D37786933
fbshipit-source-id: 11024fe604107881f8ca29e17cb5cbfe492fc7f9
Summary:
1. Respecting `visdom_show_preds` parameter when it is False.
2. Clipping the images pre-visualisation, which is important for methods like SRN that are not arare of pixel value range.
Reviewed By: bottler
Differential Revision: D37786439
fbshipit-source-id: 8dbb5104290bcc5c2829716b663cae17edc911bd
Summary: one more bugfix in JsonIndexDataset
Reviewed By: bottler
Differential Revision: D37789138
fbshipit-source-id: 2fb2bda7448674091ff6b279175f0bbd16ff7a62
Summary:
This fixes a indexing bug in HardDepthShader and adds proper unit tests for both of the DepthShaders. This bug was introduced when updating the shader sizes and discovered when I switched my local model onto pytorch3d trunk instead of the patched copy.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1252
Test Plan:
Unit test + custom model code
```
pytest tests/test_shader.py
```

Reviewed By: bottler
Differential Revision: D37775767
Pulled By: d4l3k
fbshipit-source-id: 5f001903985976d7067d1fa0a3102d602790e3e8
Summary:
For 3D segmentation problems it's really useful to be able to train the models from multiple viewpoints using Pytorch3D as the renderer. Currently due to hardcoded assumptions in a few spots the mesh renderer only supports rendering RGB (3 dimensional) data. You can encode the classification information as 3 channel data but if you have more than 3 classes you're out of luck.
This relaxes the assumptions to make rendering semantic classes work with `HardFlatShader` and `AmbientLights` with no diffusion/specular. The other shaders/lights don't make any sense for classification since they mutate the texture values in some way.
This only requires changes in `Materials` and `AmbientLights`. The bulk of the code is the unit test.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1248
Test Plan: Added unit test that renders a 5 dimensional texture and compare dimensions 2-5 to a stored picture.
Reviewed By: bottler
Differential Revision: D37764610
Pulled By: d4l3k
fbshipit-source-id: 031895724d9318a6f6bab5b31055bb3f438176a5
Summary:
## Changes:
- Added Accelerate Library and refactored experiment.py to use it
- Needed to move `init_optimizer` and `ExperimentConfig` to a separate file to be compatible with submitit/hydra
- Needed to make some modifications to data loaders etc to work well with the accelerate ddp wrappers
- Loading/saving checkpoints incorporates an unwrapping step so remove the ddp wrapped model
## Tests
Tested with both `torchrun` and `submitit/hydra` on two gpus locally. Here are the commands:
**Torchrun**
Modules loaded:
```sh
1) anaconda3/2021.05 2) cuda/11.3 3) NCCL/2.9.8-3-cuda.11.3 4) gcc/5.2.0. (but unload gcc when using submit)
```
```sh
torchrun --nnodes=1 --nproc_per_node=2 experiment.py --config-path ./configs --config-name repro_singleseq_nerf_test
```
**Submitit/Hydra Local test**
```sh
~/pytorch3d/projects/implicitron_trainer$ HYDRA_FULL_ERROR=1 python3.9 experiment.py --config-name repro_singleseq_nerf_test --multirun --config-path ./configs hydra/launcher=submitit_local hydra.launcher.gpus_per_node=2 hydra.launcher.tasks_per_node=2 hydra.launcher.nodes=1
```
**Submitit/Hydra distributed test**
```sh
~/implicitron/pytorch3d$ python3.9 experiment.py --config-name repro_singleseq_nerf_test --multirun --config-path ./configs hydra/launcher=submitit_slurm hydra.launcher.gpus_per_node=8 hydra.launcher.tasks_per_node=8 hydra.launcher.nodes=1 hydra.launcher.partition=learnlab hydra.launcher.timeout_min=4320
```
## TODOS:
- Fix distributed evaluation: currently this doesn't work as the input format to the evaluation function is not suitable for gathering across gpus (needs to be nested list/tuple/dicts of objects that satisfy `is_torch_tensor`) and currently `frame_data` contains `Cameras` type.
- Refactor the `accelerator` object to be accessible by all functions instead of needing to pass it around everywhere? Maybe have a `Trainer` class and add it as a method?
- Update readme with installation instructions for accelerate and also commands for running jobs with torchrun and submitit/hydra
X-link: https://github.com/fairinternal/pytorch3d/pull/37
Reviewed By: davnov134, kjchalup
Differential Revision: D37543870
Pulled By: bottler
fbshipit-source-id: be9eb4e91244d4fe3740d87dafec622ae1e0cf76
Summary: A new version of json index dataset provider supporting CO3Dv2
Reviewed By: shapovalov
Differential Revision: D37690918
fbshipit-source-id: bf2d5fc9d0f1220259e08661dafc69cdbe6b7f94
Summary:
Implements several changes needed for the CO3Dv2 release:
- FrameData contains crop_bbox_xywh which defines the outline of the image crop corresponding to the image-shaped tensors in FrameData
- revised the definition of a bounding box inside JsonDatasetIndex: bbox_xyxy is [xmin, ymin, xmax, ymax], where xmax, ymax are not inclusive; bbox_xywh = [xmin, ymain, xmax-xmin, ymax-ymin]
- is_filtered for detecting whether the entries of the dataset were somehow filtered
- seq_frame_index_to_dataset_index allows to skip entries that are not present in the dataset
Reviewed By: shapovalov
Differential Revision: D37687547
fbshipit-source-id: 7842756b0517878cc0964fc0935d3c0769454d78
Summary: cu116 builds need to happen in a specific image.
Reviewed By: patricklabatut
Differential Revision: D37680352
fbshipit-source-id: 81bef0642ad832e83e4eba6321287759b3229303
Summary: As part of removing Task, move camera difficulty bin breaks from hard code to the top level.
Reviewed By: davnov134
Differential Revision: D37491040
fbshipit-source-id: f2d6775ebc490f6f75020d13f37f6b588cc07a0b
Summary: As part of removing Task, make the dataset code generate the source cameras for itself. There's a small optimization available here, in that the JsonIndexDataset could avoid loading images.
Reviewed By: shapovalov
Differential Revision: D37313423
fbshipit-source-id: 3e5e0b2aabbf9cc51f10547a3523e98c72ad8755
Summary:
Make ViewMetrics easy to replace by putting them into an OmegaConf dataclass.
Also, re-word a few variable names and fix minor TODOs.
Reviewed By: bottler
Differential Revision: D37327157
fbshipit-source-id: 78d8e39bbb3548b952f10abbe05688409fb987cc
Summary: After landing https://github.com/pytorch/pytorch/pull/69607, that made it an error to use indexing with `cpu_tensor[cuda_indices]`. There was one outstanding test in fbcode that incorrectly used indexing in that way, which is fixed here
Reviewed By: bottler, osalpekar
Differential Revision: D37128838
fbshipit-source-id: 611b6f717b5b5d89fa61fd9ebeb513ad7e65a656
Summary:
David had his code crashed when using frame_annot["meta"] dictionary. Turns out we had a typo.
The tests were passing by chance since all the keys were single-character strings.
Reviewed By: bottler
Differential Revision: D37503987
fbshipit-source-id: c12b0df21116cfbbc4675a0182b9b9e6d62bad2e
Summary: small followup to D37172537 (cba26506b6) and D37209012 (81d63c6382): changing default #harmonics and improving a test
Reviewed By: shapovalov
Differential Revision: D37412357
fbshipit-source-id: 1af1005a129425fd24fa6dd213d69c71632099a0
Summary: The blender synthetic dataset contains object masks in the alpha channel. Provide these in the corresponding dataset.
Reviewed By: shapovalov
Differential Revision: D37344380
fbshipit-source-id: 3ddacad9d667c0fa0ae5a61fb1d2ffc806c9abf3
Summary: Images were coming out in the wrong format.
Reviewed By: shapovalov
Differential Revision: D37291278
fbshipit-source-id: c10871c37dd186982e7abf2071ac66ed583df2e6
Summary: Just register ImplicitronDataSource. We don't use it as pluggable yet here.
Reviewed By: shapovalov
Differential Revision: D37315698
fbshipit-source-id: ac41153383f9ab6b14ac69a3dfdc44aca0d94995
Summary: Document the inputs of idr functions and distinguish n_harmonic_functions to be 0 (simple embedding) versus -1 (no embedding).
Reviewed By: davnov134
Differential Revision: D37209012
fbshipit-source-id: 6e5c3eae54c4e5e8c3f76cad1caf162c6c222d52
Summary: Use generator.permutation instead of choice so that different options for n_known_frames_for_test are nested.
Reviewed By: davnov134
Differential Revision: D37210906
fbshipit-source-id: fd0d34ce62260417c3f63354a3f750aae9998b0d
Summary: Allow specifying a color for non-opaque pixels in LSTMRenderer.
Reviewed By: davnov134
Differential Revision: D37172537
fbshipit-source-id: 6039726678bb7947f7d8cd04035b5023b2d5398c
Summary: Copy code from NeRF for loading LLFF data and blender synthetic data, and create dataset objects for them
Reviewed By: shapovalov
Differential Revision: D35581039
fbshipit-source-id: af7a6f3e9a42499700693381b5b147c991f57e5d
Summary:
pyfmt now specifies a target Python version of 3.8 when formatting
with black. With this new config, black adds trailing commas to all
multiline function calls. This applies the new formatting as part
of rolling out the linttool-integration for pyfmt.
paintitblack
Reviewed By: zertosh, lisroach
Differential Revision: D37084377
fbshipit-source-id: 781a1b883a381a172e54d6e447137657977876b4
Summary: Make dataset type and args configurable on JsonIndexDatasetMapProvider.
Reviewed By: davnov134
Differential Revision: D36666705
fbshipit-source-id: 4d0a3781d9a956504f51f1c7134c04edf1eb2846
Summary: Changes to JsonIndexDataset to make it fit with OmegaConf.structured. Also match some default values to what the provider defaults to.
Reviewed By: davnov134
Differential Revision: D36666704
fbshipit-source-id: 65b059a1dbaa240ce85c3e8762b7c3db3b5a6e75
Summary: Allow a class to modify its subparts in get_default_args by defining the special function provide_config_hook.
Reviewed By: davnov134
Differential Revision: D36671081
fbshipit-source-id: 3e5b73880cb846c494a209c4479835f6352f45cf
Summary: Our tests fail (https://fburl.com/jmoqo9bz) because test_splatter_blend uses torch.tile, which is not supported in earlier torch versions. Replace it with tensor.extend.
Reviewed By: bottler
Differential Revision: D36796098
fbshipit-source-id: 38d5b40667f98f3163b33f44e53e96b858cfeba2
Summary: Fix divide by zero for empty pointcloud in chamfer. Also for empty batches. In process, needed to regularize num_points_per_cloud for empty batches.
Reviewed By: kjchalup
Differential Revision: D36311330
fbshipit-source-id: 3378ab738bee77ecc286f2110a5c8dc445960340
Summary: A few minor additions I didn't fit into the SplatterBlender diffs, as requested by reviewers.
Reviewed By: jcjohnson
Differential Revision: D36682437
fbshipit-source-id: 57af995e766dfd2674b3984a3ba00aef7ca7db80
Summary: The ImplicitronDataset class corresponds to JsonIndexDatasetMapProvider
Reviewed By: shapovalov
Differential Revision: D36661396
fbshipit-source-id: 80ca2ff81ef9ecc2e3d1f4e1cd14b6f66a7ec34d
Summary: test_viewpool was inactive so missed being fixed in D36547815 (2d1c6d5d93)
Reviewed By: kjchalup
Differential Revision: D36625587
fbshipit-source-id: e7224eadfa5581fe61f10f67d2221071783de04a
Summary:
Benchmarking. We only use num_faces=2 for splatter, because as far as I can see one would never need to use more. Pose optimization and mesh optimization experiments (see next two diffs) showed that Splatter with 2 faces beats Softmax with 50 and 100 faces in terms of accuracy.
Results: We're slower at 64px^2. At 128px and 256px, we're slower than Softmax+50faces, but faster than Softmax+100faces. We're also slower at 10 faces/pix, but expectation as well as results show that more then 2 faces shouldn't be necessary. See also more results in .https://fburl.com/gdoc/ttv7u7hp
Reviewed By: jcjohnson
Differential Revision: D36210575
fbshipit-source-id: c8de28c8a59ce5fe21a47263bd43d2757b15d123
Summary: Splatting shader. See code comments for details. Same API as SoftPhongShader.
Reviewed By: jcjohnson
Differential Revision: D36354301
fbshipit-source-id: 71ee37f7ff6bb9ce028ba42a65741424a427a92d
Summary: If you miss grid_sample in recent pytorch, it gives a warning, so stop doing this.
Reviewed By: kjchalup
Differential Revision: D36410619
fbshipit-source-id: 41dd4455298645c926f4d96c2084093b3f64ee2c
Summary: PLY with mixture of triangle and quadrilateral faces was failing.
Reviewed By: gkioxari
Differential Revision: D36592981
fbshipit-source-id: 5373edb2f38389ac646a75fd2e1fa7300eb8d054
Summary: Use small image size for test_all_gm_configs
Reviewed By: shapovalov
Differential Revision: D36511528
fbshipit-source-id: 2c65f518a4f23626850343a62d103f85abfabd88
Summary: replace dataset_zoo with a pluggable DatasetMapProvider. The logic is now in annotated_file_dataset_map_provider.
Reviewed By: shapovalov
Differential Revision: D36443965
fbshipit-source-id: 9087649802810055e150b2fbfcc3c197a761f28a
Summary: Separate ImplicitronDatasetBase and FrameData (to be used by all data sources) from ImplicitronDataset (which is specific).
Reviewed By: shapovalov
Differential Revision: D36413111
fbshipit-source-id: 3725744cde2e08baa11aff4048237ba10c7efbc6
Summary:
Move dataset_args and dataloader_args from ExperimentConfig into a new member called datasource so that it can contain replaceables.
Also add enum Task for task type.
Reviewed By: shapovalov
Differential Revision: D36201719
fbshipit-source-id: 47d6967bfea3b7b146b6bbd1572e0457c9365871
Summary: Make ResNetFeatureExtractor be an implementation of FeatureExtractorBase.
Reviewed By: davnov134
Differential Revision: D35433098
fbshipit-source-id: 0664a9166a88e150231cfe2eceba017ae55aed3a
Summary: skip checking the version of black because `black --version` looks different in different versions.
Reviewed By: kjchalup
Differential Revision: D36441262
fbshipit-source-id: a2d9a5cad4f5433909fb85bc9a584e91a2b72601
Summary: Allow extra data in a FrameAnnotation. Therefore allow Optional[T] systematically in _dataclass_from_dict
Reviewed By: davnov134
Differential Revision: D36442691
fbshipit-source-id: ba70f6491574c08b0d9c9acb63f35514d29de214
Summary: Fix recently observed case where enable_get_default_args was missing things declared as Optional[something mutable]=None.
Reviewed By: davnov134
Differential Revision: D36440492
fbshipit-source-id: 192ec07564c325b3b24ccc49b003788f67c63a3d
Summary: A small refactor, originally intended for use with the splatter.
Reviewed By: bottler
Differential Revision: D36210393
fbshipit-source-id: b3372f7cc7690ee45dd3059b2d4be1c8dfa63180
Summary: The splatter can re-use pixel coords computed by the shader.
Reviewed By: bottler
Differential Revision: D36332530
fbshipit-source-id: b28e7abe22cca4f48b4108ad397aafc0f1347901
Summary:
1. Typo in the dataset path in the config.
2. Typo in num_frames.
3. Pick sequence was cached before it was modified for single-sequence.
Reviewed By: bottler
Differential Revision: D36417329
fbshipit-source-id: 6dcd75583de510412e1ae58f63db04bb4447403e
Summary: Make create_x delegate to create_x_impl so that users can rely on create_x_impl in their overrides of create_x.
Reviewed By: shapovalov, davnov134
Differential Revision: D35929810
fbshipit-source-id: 80595894ee93346b881729995775876b016fc08e
Summary:
Applies new import merging and sorting from µsort v1.0.
When merging imports, µsort will make a best-effort to move associated
comments to match merged elements, but there are known limitations due to
the diynamic nature of Python and developer tooling. These changes should
not produce any dangerous runtime changes, but may require touch-ups to
satisfy linters and other tooling.
Note that µsort uses case-insensitive, lexicographical sorting, which
results in a different ordering compared to isort. This provides a more
consistent sorting order, matching the case-insensitive order used when
sorting import statements by module name, and ensures that "frog", "FROG",
and "Frog" always sort next to each other.
For details on µsort's sorting and merging semantics, see the user guide:
https://usort.readthedocs.io/en/stable/guide.html#sorting
Reviewed By: lisroach
Differential Revision: D36402260
fbshipit-source-id: 7cb52f09b740ccc580e61e6d1787d27381a8ce00
Summary: Fix doc and add a call to expand_args_fields for each implicit function.
Reviewed By: shapovalov
Differential Revision: D35929811
fbshipit-source-id: 8c3cfa56b8d8908fd2165614960e3d34b54717bb
Summary: Like vgg16 for lpips, internally we need resnet34 weights for coming feature extractor tests.
Reviewed By: davnov134
Differential Revision: D36349361
fbshipit-source-id: 1c33009c904766fcc15e7e31cd15d0f820c57354
Summary:
This converts raysamplers to ReplaceableBase so that users can hack their own raysampling impls.
Context: Andrea tried to implement TensoRF within implicitron but could not due to the need to implement his own raysampler.
Reviewed By: shapovalov
Differential Revision: D36016318
fbshipit-source-id: ef746f3365282bdfa9c15f7b371090a5aae7f8da
Summary: Uses the GenericRaymarcher only as an ABC and derives two common implementations - EA raymarcher and Cumsum raymarcher (from neural volumes)
Reviewed By: shapovalov
Differential Revision: D35927653
fbshipit-source-id: f7e6776e71f8a4e99eefc018a47f29ae769895ee
Summary: Implements a ViewPooler that groups ViewSampler and FeatureAggregator.
Reviewed By: shapovalov
Differential Revision: D35852367
fbshipit-source-id: c1bcaf5a1f826ff94efce53aa5836121ad9c50ec
Summary:
Applies the black-fbsource codemod with the new build of pyfmt.
paintitblack
Reviewed By: lisroach
Differential Revision: D36324783
fbshipit-source-id: 280c09e88257e5e569ab729691165d8dedd767bc
Summary: Add a capability to detach all detachable tensors in Fragments.
Reviewed By: bottler
Differential Revision: D35918133
fbshipit-source-id: 03b5d4491a3a6791b0a7bc9119f26c1a7aa43196
Summary: Tests all possible model configs in test_forward_pass.py
Reviewed By: shapovalov
Differential Revision: D35851507
fbshipit-source-id: 4860ee1d37cf17a2faab5fc14d4b2ba0b96c4b8b
Summary:
To avoid model_zoo, we need to make GenericModel pluggable.
I also align creation APIs for convenience.
Reviewed By: bottler, davnov134
Differential Revision: D35933093
fbshipit-source-id: 8228926528eb41a795fbfbe32304b8019197e2b1
Summary: GenericModel crashes in case the `aux` field of any Renderer is populated. This is because the `rendered.aux` is unpacked to ViewMetrics.forward whose signature does not contain **kwargs. Hence, the contents of `aux` are unknown to forward's signature resulting in a crash.
Reviewed By: bottler
Differential Revision: D36166118
fbshipit-source-id: 906a067ea02a3648a69667422466451bc219ebf6
Summary:
Create a test runner for the eval_demo code. Debugging this is useful for understanding datasets.
Introduces an environment variable INTERACTIVE_TESTING for ignoring tests which are not intended for use in regular test runs.
Reviewed By: shapovalov
Differential Revision: D35964016
fbshipit-source-id: ab0f93aff66b6cfeca942b14466cf81f7feb2224
Summary: Most of the shaders copypaste exactly the same code into `__init__` and `to`. I will be adding a new shader in the next diff, so let's make it a bit easier.
Reviewed By: bottler
Differential Revision: D35767884
fbshipit-source-id: 0057e3e2ae3be4eaa49ae7e2bf3e4176953dde9d
Summary: Move from isort to usort now that usort supports sorting within lines.
Reviewed By: patricklabatut
Differential Revision: D35893280
fbshipit-source-id: 621c1cd285199d785408504430ee0bdf8683b21e
Summary: New function to check if a renderer needs the object mask.
Reviewed By: davnov134
Differential Revision: D35254009
fbshipit-source-id: 4c99e8a1c0f6641d910eb32bfd6cfae9d3463d50
Summary: Make method for SDF's use of object mask more general, so that a renderer can be given per-pixel values.
Reviewed By: shapovalov
Differential Revision: D35247412
fbshipit-source-id: 6aeccb1d0b5f1265a3f692a1453407a07e51a33c
Summary: For `pip install` without -e, we need to name the entry point functions in setup.py.
Reviewed By: patricklabatut
Differential Revision: D35933037
fbshipit-source-id: be15ae1a4bb7c5305ea2ba992d07f3279c452250
Summary:
Applies new import merging and sorting from µsort v1.0.
When merging imports, µsort will make a best-effort to move associated
comments to match merged elements, but there are known limitations due to
the diynamic nature of Python and developer tooling. These changes should
not produce any dangerous runtime changes, but may require touch-ups to
satisfy linters and other tooling.
Note that µsort uses case-insensitive, lexicographical sorting, which
results in a different ordering compared to isort. This provides a more
consistent sorting order, matching the case-insensitive order used when
sorting import statements by module name, and ensures that "frog", "FROG",
and "Frog" always sort next to each other.
For details on µsort's sorting and merging semantics, see the user guide:
https://usort.readthedocs.io/en/stable/guide.html#sorting
Reviewed By: bottler
Differential Revision: D35553814
fbshipit-source-id: be49bdb6a4c25264ff8d4db3a601f18736d17be1
Summary: D35513897 (4b94649f7b) was a pyre infer job which got some things wrong. Correct by adding the correct types, so these things shouldn't need worrying about again.
Reviewed By: patricklabatut
Differential Revision: D35546144
fbshipit-source-id: 89f6ea2b67be27aa0b0b14afff4347cccf23feb7
Summary: Add option to not rescale the features, giving more control. https://github.com/facebookresearch/pytorch3d/issues/1137
Reviewed By: nikhilaravi
Differential Revision: D35219577
fbshipit-source-id: cbbb643b91b71bc908cedc6dac0f63f6d1355c85
Summary: In order to simplify the interface, we disallow passing None as vertex/face lists to textures.submeshes. This function would only ever get called from within meshes.submeshes where we can provide both arguments, even if they're not necessary for a specific submesh type.
Reviewed By: bottler
Differential Revision: D35581161
fbshipit-source-id: aeab99308a319b144e141ca85ca7515f855116da
Summary:
Copypasting the docstring:
```
Split a mesh into submeshes, defined by face indices of the original Meshes object.
Args:
face_indices:
Let the original mesh have verts_list() of length N.
Can be either
- List of length N. The n-th element is a list of length num_submeshes_n
(empty lists are allowed). Each element of the n-th sublist is a LongTensor
of length num_faces.
- List of length N. The n-th element is a possibly empty padded LongTensor of
shape (num_submeshes_n, max_num_faces).
Returns:
Meshes object with selected submeshes. The submesh tensors are cloned.
Currently submeshing only works with no textures or with the TexturesVertex texture.
Example:
Take a Meshes object `cubes` with 4 meshes, each a translated cube. Then:
* len(cubes) is 4, len(cubes.verts_list()) is 4, len(cubes.faces_list()) is 4,
* [cube_verts.size for cube_verts in cubes.verts_list()] is [8, 8, 8, 8],
* [cube_faces.size for cube_faces in cubes.faces_list()] if [6, 6, 6, 6],
Now let front_facet, top_and_bottom, all_facets be LongTensors of
sizes (2), (4), and (12), each picking up a number of facets of a cube by specifying
the appropriate triangular faces.
Then let `subcubes = cubes.submeshes([[front_facet, top_and_bottom], [], [all_facets], []])`.
* len(subcubes) is 3.
* subcubes[0] is the front facet of the cube contained in cubes[0].
* subcubes[1] is a mesh containing the (disconnected) top and bottom facets of cubes[0].
* subcubes[2] is a clone of cubes[2].
* There are no submeshes of cubes[1] and cubes[3] in subcubes.
* subcubes[0] and subcubes[1] are not watertight. subcubes[2] is.
```
Reviewed By: bottler
Differential Revision: D35440657
fbshipit-source-id: 8a6d2d300ce226b5b9eb440688528b5e795195a1
Summary:
Sort a mesh's vertices in alphabetical order, and resort the face coords accordingly. Textured meshes are not supported yet, but will be added down the stack.
This, togehter with mesh equality, can be used to compare two meshes in a way invariant to vertex permutations, as shown in the unit tests.
We do not want the submeshing mechanism to guarantee any particular vertex order, leaving that up to the implementation, so we need this function for testing.
Reviewed By: bottler
Differential Revision: D35440656
fbshipit-source-id: 5a4dd921fdb00625a33da08b5fea79e20ac6402c
Summary: Adding a mesh equality operator. Two Meshes objects m1, m2 are equal iff their vertex lists, face lists, and normals lists are equal. Textures meshes are not supported yet, but will be added for vertex textures down the stack.
Reviewed By: bottler, nikhilaravi
Differential Revision: D35440655
fbshipit-source-id: 69974a59c091416afdb2892896859a189f5ebf3a
Summary:
The default behavior of Meshes (with verts=None, faces=None) throws an exception:
```
meshes = Meshes()
> ValueError: Verts and Faces must be either a list or a tensor with shape (batch_size, N, 3) where N is either the maximum number of verts or faces respectively.
```
Instead, let's default to an empty mesh, following e.g. PyTorch:
```
empty_tensor = torch.FloatTensor()
> torch.tensor([])
```
this change is backwards-compatible (you can still init with verts=[], faces=[]).
Reviewed By: bottler, nikhilaravi
Differential Revision: D35443453
fbshipit-source-id: d638a8fef49a089bf0da6dd2201727b94ceb21ec
Summary:
Added L1 norm for KNN and chamfer op
* The norm is now specified with a variable `norm` which can only be 1 or 2
Reviewed By: bottler
Differential Revision: D35419637
fbshipit-source-id: 77813fec650b30c28342af90d5ed02c89133e136
Summary: A new type of auto-expanded member of a Configurable: something of type Optional[X] where X is a Configurable. This works like X but its construction is controlled by a boolean membername_enabled.
Reviewed By: davnov134
Differential Revision: D35368269
fbshipit-source-id: 7e0c8a3e8c4930b0aa942fa1b325ce65336ebd5f
Summary:
Try again to solve https://github.com/facebookresearch/pytorch3d/issues/1144 pickling problem.
D35258561 (24260130ce) didn't work.
When writing a function or vanilla class C which you want people to be able to call get_default_args on, you must add the line enable_get_default_args(C) to it. This causes autogeneration of a hidden dataclass in the module.
Reviewed By: davnov134
Differential Revision: D35364410
fbshipit-source-id: 53f6e6fff43e7142ae18ca3b06de7d0c849ef965
Summary:
Error Reproduction:
python=3.8.12
pytorch=1.9.1
pytorch3d=0.6.1
cudatoolkit=11.1.74
test.py:
```python
import torch
from pytorch3d.ops import cubify
voxels = torch.Tensor([[[[0,1], [0,0]], [[0,1], [0,0]]]]).float()
meshes = cubify(voxels, 0.5, device="cpu")
```
The error appears when `device="cpu"` and `pytorch=1.9.1` (works fine with pytorch=1.10.2)
Error message:
```console
/home/kyle/anaconda3/envs/adapt-net/lib/python3.8/site-packages/torch/_tensor.py:575: UserWarning: floor_divide is deprecated, and will be removed in a future version of pytorch. It currently rounds toward 0 (like the 'trunc' function NOT 'floor'). This results in incorrect rounding for negative values.
To keep the current behavior, use torch.div(a, b, rounding_mode='trunc'), or for actual floor division, use torch.div(a, b, rounding_mode='floor'). (Triggered internally at /opt/conda/conda-bld/pytorch_1631630839582/work/aten/src/ATen/native/BinaryOps.cpp:467.)
return torch.floor_divide(self, other)
Traceback (most recent call last):
File "test.py", line 5, in <module>
meshes = cubify(voxels, 0.5, device="cpu")
File "/home/kyle/anaconda3/envs/adapt-net/lib/python3.8/site-packages/torch/autograd/grad_mode.py", line 28, in decorate_context
return func(*args, **kwargs)
File "/home/kyle/Desktop/pytorch3d/pytorch3d/ops/cubify.py", line 227, in cubify
idleverts.scatter_(0, grid_faces.flatten(), 0)
RuntimeError: Expected index [60] to be smaller than self [27] apart from dimension 0 and to be smaller size than src [27]
```
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1067
Reviewed By: nikhilaravi
Differential Revision: D34893567
Pulled By: bottler
fbshipit-source-id: aa95980f7319302044141f7821ef48129cfa37a6
Summary: This is required to suppress a huge stdout full of warnings about overflown bins.
Reviewed By: bottler
Differential Revision: D35359824
fbshipit-source-id: 39214b1bdcb4a5d5debf8ed498b2ca81fa43d210
Summary: Aid reflection by adding the original declared types of replaced members of a configurable as values in _processed_members.
Reviewed By: davnov134
Differential Revision: D35358422
fbshipit-source-id: 80ef3266144c51c1c2105f349e0dd3464e230429
Summary: Use logging instead of printing in the internals of implicitron.
Reviewed By: davnov134
Differential Revision: D35247581
fbshipit-source-id: be5ddad5efe1409adbae0575d35ade6112b3be63
Summary: This might make the implicitron tests work better on RE.
Reviewed By: davnov134
Differential Revision: D35283131
fbshipit-source-id: 4dda9684f632ab6e9cebcbf1e6e4a8243ec00c85
Summary:
ListConfig and DictConfig members of get_default_args(X) when X is a callable will contain references to a temporary dataclass and therefore be unpicklable. Avoid this in a few cases.
Fixes https://github.com/facebookresearch/pytorch3d/issues/1144
Reviewed By: shapovalov
Differential Revision: D35258561
fbshipit-source-id: e52186825f52accee9a899e466967a4ff71b3d25
Summary:
Previously, dtypes were not propagated correctly in composed transforms, resulting in errors when different dtypes were mixed. Even specifying a dtype in the constructor does not fix this. Neither does specifying the dtype for each composition function invocation (e.g. as a `kwarg` in `rotate_axis_angle`).
With the change, I also had to modify the default dtype of `RotateAxisAngle`, which was `torch.float64`; it is now `torch.float32` like for all other transforms. This was required because the fix in propagation broke some tests due to dtype mismatches.
This change in default dtype in turn broke two tests due to precision changes (calculations that were previously done in `torch.float64` were now done in `torch.float32`), so I changed the precision tolerances to be less strict. I chose the lowest power of ten that passed the tests here.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1141
Reviewed By: patricklabatut
Differential Revision: D35192970
Pulled By: bottler
fbshipit-source-id: ba0293e8b3595dfc94b3cf8048e50b7a5e5ed7cf
Summary: Allow things like `renderer:Optional[BaseRenderer]` in configurables.
Reviewed By: davnov134
Differential Revision: D35118339
fbshipit-source-id: 1219321b2817ed4b26fe924c6d6f73887095c985
Summary: To ensure that tests outside implicitron/ don't use implicitron, split the test for recursive includes in to two. License header checking is not needed here any more.
Reviewed By: shapovalov
Differential Revision: D35077830
fbshipit-source-id: 2ebe7436a6dcc5d21a116434f6ddd08705dfab34
Summary:
Before the fix, running get_default_args(C: Callable) returns an unstructured DictConfig which causes Enums to be handled incorrectly. This is a fix.
WIP update: Currently tests still fail whenever a function signature contains an untyped argument: This needs to be somehow fixed.
Reviewed By: bottler
Differential Revision: D34932124
fbshipit-source-id: ecdc45c738633cfea5caa7480ba4f790ece931e8
Summary: bin_size should be 0 not -1 for naive rasterization. See https://github.com/facebookresearch/pytorch3d/issues/1129
Reviewed By: patricklabatut
Differential Revision: D35077115
fbshipit-source-id: b81ff74f47c78429977802f7dcadfd1b96676f8c
Summary: Attempt to reduce nvcc trouble on windows by (1) avoiding flag for c++14 and (2) avoiding `torch/extension.h`, which introduces pybind11, in `.cu` files.
Reviewed By: patricklabatut
Differential Revision: D34969868
fbshipit-source-id: f3878d6a2ba9d644e87ae7b6377cb5008b4b6ce3
Summary: Using the API from D35012121 everywhere.
Reviewed By: bottler
Differential Revision: D35045870
fbshipit-source-id: dab112b5e04160334859bbe8fa2366344b6e0f70
Summary: We often want to iterate over frames in the sequence in temporal order. This diff provides the API to do that. `seq_to_idx` should probably be considered to have `protected` visibility.
Reviewed By: davnov134
Differential Revision: D35012121
fbshipit-source-id: 41896672ec35cd62f3ed4be3aa119efd33adada1
Summary:
Fixes required for MC rasterisation to work.
1) Wrong number of channels for background was used (derived from points dimensions, not features dimensions;
2) split of the results on the wrong dimension was done;
3) CORE CHANGE: blending in alpha compositor was assuming RGBA input.
Reviewed By: davnov134
Differential Revision: D34933673
fbshipit-source-id: a5cc9f201ea21e114639ab9e291a10888d495206
Summary: Fix assumption that face indices are signed in the PLY file, as reported in #1104.
Reviewed By: nikhilaravi
Differential Revision: D34892598
fbshipit-source-id: a8b23bfac1357bdc11bbbf752098319142239804
Summary: As noticed in https://github.com/facebookresearch/pytorch3d/issues/1098 , it would be useful to make this more available.
Reviewed By: nikhilaravi
Differential Revision: D34752526
fbshipit-source-id: 5a127bd557a0cd626f36bf194f22bc0a0a6a2436
Summary: As reported in https://github.com/facebookresearch/pytorch3d/pull/1100, a rasterizer couldn't be moved if it was missing the optional cameras member. Fix that. This matters because the renderer.to calls rasterizer.to, so this to() could be called even by a user who never sets a cameras member.
Reviewed By: nikhilaravi
Differential Revision: D34643841
fbshipit-source-id: 7e26e32e8bc585eb1ee533052754a7b59bc7467a
Summary: As reported in https://github.com/facebookresearch/pytorch3d/pull/1100, _num_faces_per_mesh was changing in the source mesh in join_batch. This affects both TexturesUV and TexturesAtlas
Reviewed By: nikhilaravi
Differential Revision: D34643675
fbshipit-source-id: d67bdaca7278f18a76cfb15ba59d0ea85575bd36
Summary: A scalar background color is not meant to be allowed for the point renderer. It used to be ignored with a warning, but a recent code change made it an error. It was being used, at least in the black (value=0.0) case. Re-enable it.
Reviewed By: nikhilaravi
Differential Revision: D34519651
fbshipit-source-id: d37dcf145bb7b8999c9265cf8fc39b084059dd18
Summary:
1. changed IsInsideTriangle in geometry_utils to take in min_triangle_area parameter instead of hardcoded value
2. updated point_mesh_cpu.cpp and point_mesh_cuda.[h/cu] to adapt to changes in geometry_utils function signatures
3. updated point_mesh_distance.py and test_point_mesh_distance.py to modify _C. calls
Reviewed By: bottler
Differential Revision: D34459764
fbshipit-source-id: 0549e78713c6d68f03d85fb597a13dd88e09b686
Summary: There are cases where importing pytorch3d seems to fail (internally at Meta) because of a clash between the builtin types module and ours, so rename ours.
Reviewed By: patricklabatut
Differential Revision: D34426817
fbshipit-source-id: f175448db6a4967a9a3f7bb6f595aad2ffb36455
Summary:
Run the circleci tests with a non depracated circleci image. Small fix for PyTorch 1.7.
We no longer need to manually install nvidia-docker or the CUDA driver.
Reviewed By: patricklabatut
Differential Revision: D34426816
fbshipit-source-id: d6c67bfb0ff86dff8d8f7fe7b8801657c2e80030
Summary: Small fix by adjusting the area `eps` to account for really small faces when computing point to face distances
Reviewed By: bottler
Differential Revision: D34331336
fbshipit-source-id: 51c4888ea46fefa4e31d5b0bb494a9f9d77813cd
Summary: Lower the epsilon value in the IoU3D calculation to fix small numerical issue from GH#1082
Reviewed By: bottler
Differential Revision: D34371597
fbshipit-source-id: 12443fa359b7755ef4ae60e9adf83734a1a295ae
Summary: Refactor ply_io to make it easier to add new features. Mostly taken from the starting code I attached to https://github.com/facebookresearch/pytorch3d/issues/904.
Reviewed By: patricklabatut
Differential Revision: D34375978
fbshipit-source-id: ec017d31f07c6f71ba6d97a0623bb10be1e81212
Summary: Fix tests which depended on output tensors being identical to input ones, which now fail in main PyTorch branch because of some change in autograd. The functions still work in-place.
Reviewed By: patricklabatut
Differential Revision: D34375817
fbshipit-source-id: 295ae195f75eab6c7abab412c997470d8de8add1
Summary: Use the newer eigh to avoid deprecation warnings in newer pytorch.
Reviewed By: patricklabatut
Differential Revision: D34375784
fbshipit-source-id: 40efe0d33fdfa071fba80fc97ed008cbfd2ef249
Summary:
Modified the compositor background color tests to account for either a 3rd or 4th channel. Also replaced hard coding of channel value with C.
Implemented changes to alpha channel appending logic, and cleaned up extraneous warnings and checks, per task instructions.
Fixes https://github.com/facebookresearch/pytorch3d/issues/1048
Reviewed By: bottler
Differential Revision: D34305312
fbshipit-source-id: 2176c3bdd897d1a2ba6ff4c6fa801fea889e4f02
Summary:
Add a test for Transform3d.stack, and make it work with composed transformations.
Fixes https://github.com/facebookresearch/pytorch3d/issues/1072 .
Reviewed By: patricklabatut
Differential Revision: D34211920
fbshipit-source-id: bfbd0895494ca2ad3d08a61bc82ba23637e168cc
Summary: Move this simple layer from the NeRF project into pytorch3d.
Reviewed By: shapovalov
Differential Revision: D34126972
fbshipit-source-id: a9c6d6c3c1b662c1b844ea5d1b982007d4df83e6
Summary:
When there is no "usemtl" statement in the .obj file use material from .mtl if there is one.
https://github.com/facebookresearch/pytorch3d/issues/1068
Reviewed By: bottler
Differential Revision: D34141152
fbshipit-source-id: 7a5b5cc3f0bb287dc617f68de2cd085db8f7ad94
Summary: Implements a utility function to convert from 2D coordinates in Pytorch3D NDC space to the coordinates in grid_sample.
Reviewed By: shapovalov
Differential Revision: D33741394
fbshipit-source-id: 88981653356588fe646e6dea48fe7f7298738437
Summary: D33970393 (e9fb6c27e3) ran an inference to add some typing. Remove some where it was a bit too confident. (Also fix some pyre errors in plotly_vis caused by new mismatch.)
Reviewed By: patricklabatut
Differential Revision: D34004689
fbshipit-source-id: 430182b0ff0b91be542a3120da6d6b1d2b247c59
Summary: Fix the base class annotation for unproject_points.
Reviewed By: patricklabatut
Differential Revision: D33281586
fbshipit-source-id: 1c34e8c4b30b359fcb9307507bc778ad3fecf290
Summary: Migrate away from NDCGridRaysampler and GridRaysampler to their more flexible replacements.
Reviewed By: patricklabatut
Differential Revision: D33281584
fbshipit-source-id: 65f8702e700a32d38f7cd6bda3924bb1707a0633
Summary: Add --no-cache and --no-index to all commands which try to download wheels from S3, to avoid hitting pypi.
Reviewed By: nikhilaravi
Differential Revision: D33507975
fbshipit-source-id: ee796e43cc1864e475cd73c248e9900487012f25
Summary:
Function to join a list of cameras objects into a single batched object.
FB: In the next diff I will remove the `concatenate_cameras` function in implicitron and update the callsites.
Reviewed By: nikhilaravi
Differential Revision: D33198209
fbshipit-source-id: 0c9f5f5df498a0def9dba756c984e6a946618158
Summary:
convert_to_tensors_and_broadcast had a special case for a single input, which is not used anywhere except fails to do the right thing if a TensorProperties has only one kwarg. At the moment AmbientLights may be the only way to hit the problem. Fix by removing the special case.
Fixes https://github.com/facebookresearch/pytorch3d/issues/1043
Reviewed By: nikhilaravi
Differential Revision: D33638345
fbshipit-source-id: 7a6695f44242e650504320f73b6da74254d49ac7
Summary: PyTorch 1.7.0 was in Oct 2020 and 1.7.1 was in Dec 2020. We shouldn't need older than them, maybe not even 1.7.0.
Reviewed By: patricklabatut
Differential Revision: D33507967
fbshipit-source-id: d3de09c20c44870cbe5522705f2293acc0e62af3
Summary:
The following snippet should work in more cases.
point_cloud = Pointclouds(
[pcl.points_packed() for pcl in point_clouds],
features=[pcl.features_packed() for pcl in point_clouds],
)
We therefore allow features and normals inputs to be lists which contain some (but not all) Nones.
The initialization of a Pointclouds from empty data is also made a bit better now at working out how many feature channels there are.
Reviewed By: davnov134
Differential Revision: D31795089
fbshipit-source-id: 54bf941ba80672d699ffd5ac28927740e830f8ab
Summary: Quick script to list tests to help completion of test command.
Reviewed By: patricklabatut
Differential Revision: D33279584
fbshipit-source-id: acb463106d311498449a14c1daf52434878722bf
Summary: Since coarse rasterization on cuda can overflow bins, we detect when this happens for memory safety. See https://github.com/facebookresearch/pytorch3d/issues/348 . Also try to print a warning.
Reviewed By: patricklabatut
Differential Revision: D33065604
fbshipit-source-id: 99b3c576d01b78e6d77776cf1a3e95984506c93a
Summary: Fix https://github.com/facebookresearch/pytorch3d/issues/1015. Stop relying on the fact that the dtype returned by np.random.choice (int64 on Linux, int32 on Windows) matches the dtype used by pytorch for indexing (int64 everywhere).
Reviewed By: patricklabatut
Differential Revision: D33428680
fbshipit-source-id: 716c857502cd54c563cb256f0eaca7dccd535c10
Summary: Update all FB license strings to the new format.
Reviewed By: patricklabatut
Differential Revision: D33403538
fbshipit-source-id: 97a4596c5c888f3c54f44456dc07e718a387a02c
Summary: Removed harmonic embedding function from projects/nerf and changed import to be from core pytorch3d.
Reviewed By: patricklabatut
Differential Revision: D33142358
fbshipit-source-id: 3004247d50392dbd04ea72e9cd4bace0dc03606b
Summary:
Moved `HarmonicEmbedding` function in core PyTorch3D.
In the next diff will update the NeRF project.
Reviewed By: bottler
Differential Revision: D32833808
fbshipit-source-id: 0a12ccd1627c0ce024463c796544c91eb8d4d122
Summary: Removed `select_cameras.py` from implicitron and updated all callsites to directly index the cameras.
Reviewed By: bottler
Differential Revision: D33187605
fbshipit-source-id: aaf5b36aef9d72db0c7e89dec519f23646f6aa05
Summary:
Added a custom `__getitem__` method to `CamerasBase` which returns an instance of the appropriate camera instead of the `TensorAccessor` class.
Long term we should deprecate the `TensorAccessor` and the `__getitem__` method on `TensorProperties`
FB: In the next diff I will update the uses of `select_cameras` in implicitron.
Reviewed By: bottler
Differential Revision: D33185885
fbshipit-source-id: c31995d0eb126981e91ba61a6151d5404b263f67
Summary:
* Add PyTorch 1.10 + CUDA 11.1 combination.
* Change the CUDA 11.3 builds to happen in a separate docker image.
* Update connection to AWS to use the official `aws` commands instead of the wrapper which is now gone.
Reviewed By: patricklabatut
Differential Revision: D33235489
fbshipit-source-id: 56401f27c002a512ae121b3ec5911d020bfab885
Summary: New sampling mode option in TexturesUV mush match when collating meshes.
Reviewed By: patricklabatut
Differential Revision: D33235901
fbshipit-source-id: f457473d90bf022e65fe122ef45bf5efad134345
Summary: When parsing tutorials for building the website, we fix a few libraries at old versions. They need mistune 0.8.4, not the new version 2+, so this gets added to the list of fixed-version libraries.
Reviewed By: patricklabatut
Differential Revision: D33236031
fbshipit-source-id: 2b152b64043edffc59fa909012eab5794c7e8844
Summary: Function to join a list of pointclouds as a batch similar to the corresponding function for Meshes.
Reviewed By: bottler
Differential Revision: D33145906
fbshipit-source-id: 160639ebb5065e4fae1a1aa43117172719f3871b
Summary: Fix some comments to match the recent change to transform_points_screen.
Reviewed By: patricklabatut
Differential Revision: D33243697
fbshipit-source-id: dc8d182667a9413bca2c2e3657f97b2f7a47c795
Summary: Make code for downloading linux wheels robust to double-digit PyTorch minor version.
Reviewed By: nikhilaravi
Differential Revision: D33170562
fbshipit-source-id: 559a97cc98ff8411e235a9f9e29f84b7a400c716
Summary:
A small numerical fix for IoU for 3D boxes, fixes GH #992
* Adds a check for boxes with zero side areas (invalid boxes)
* Fixes numerical issue when two boxes have coplanar sides
Reviewed By: nikhilaravi
Differential Revision: D33195691
fbshipit-source-id: 8a34b4d1f1e5ec2edb6d54143930da44bdde0906
Summary: Restore compatibility with old C++ after recent torch change. https://github.com/facebookresearch/pytorch3d/issues/995
Reviewed By: patricklabatut
Differential Revision: D33093174
fbshipit-source-id: 841202fb875d601db265e93dcf9cfa4249d02b25
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/69041
`TH_CONCAT_{N}` is still being used by THP so I've moved that into
it's own header but all the compiled code is gone.
Test Plan: Imported from OSS
Reviewed By: anjali411
Differential Revision: D32872477
Pulled By: ngimel
fbshipit-source-id: 06c82d8f96dbcee0715be407c61dfc7d7e8be47a
Summary: Although the PyTorch website, which describes the current version 1.10, suggests CUDA 10.2 and 11.3 are supported, it would appear that we need to include builds for CUDA 11.1 to avoid surprises. This is because these builds are on anaconda, and this combination is used on Google Colab.
Reviewed By: nikhilaravi
Differential Revision: D33063932
fbshipit-source-id: 1b22d1f06e22bd18fb53ceecb58e78ac6a5d1693
Summary: Pre 0.6.1 release, make the tutorials expect wheels with PyTorch 1.10.0
Reviewed By: patricklabatut
Differential Revision: D33016834
fbshipit-source-id: b8c5c1c6158f806c3e55ec668117fa762fa4b75f
Summary: Demonstrate current behavior of pixels with new tests of all renderers.
Reviewed By: gkioxari
Differential Revision: D32651141
fbshipit-source-id: 3ca30b4274ed2699bc5e1a9c6437eb3f0b738cbf
Summary:
All the renderers in PyTorch3D (pointclouds including pulsar, meshes, raysampling) use align_corners=False style. NDC space goes between the edges of the outer pixels. For a non square image with W>H, the vertical NDC space goes from -1 to 1 and the horizontal from -W/H to W/H.
However it was recently pointed out that functionality which deals with screen space inside the camera classes is inconsistent with this. It unintentionally uses align_corners=True. This fixes that.
This would change behaviour of the following:
- If you create a camera in screen coordinates, i.e. setting in_ndc=False, then anything you do with the camera which touches NDC space may be affected, including trying to use renderers. The transform_points_screen function will not be affected...
- If you call the function “transform_points_screen” on a camera defined in NDC space results will be different. I have illustrated in the diff how to get the old results from the new results but this probably isn’t the right long-term solution..
Reviewed By: gkioxari
Differential Revision: D32536305
fbshipit-source-id: 377325a9137282971dcb7ca11a6cba3fc700c9ce
Summary: Give unproject_points an argument letting it bypass screen space. use it to let the raysampler work for cameras defined in screen space.
Reviewed By: gkioxari
Differential Revision: D32596600
fbshipit-source-id: 2fe585dcd138cdbc65dd1c70e1957fd894512d3d
Summary: Move benchmarks to a separate directory as tests/ is getting big.
Reviewed By: nikhilaravi
Differential Revision: D32885462
fbshipit-source-id: a832662a494ee341ab77d95493c95b0af0a83f43
Summary: As subj. Tests corrected accordingly. Also changed the test to provide a bit better diagnostics.
Reviewed By: bottler
Differential Revision: D32879498
fbshipit-source-id: 0a852e4a13dcb4ca3e54d71c6b263c5d2eeaf4eb
Summary:
This diff adds the `sample_mode` parameter to `TexturesUV` to control the interpolation mode during texture sampling. It simply gets forwarded to `torch.nn.funcitonal.grid_sample`.
This option was requested in this [GitHub issue](https://github.com/facebookresearch/pytorch3d/issues/805).
Reviewed By: patricklabatut
Differential Revision: D32665185
fbshipit-source-id: ac0bc66a018bd4cb20d75fec2d7c11145dd20199
Summary:
For a non-square image, the image_size in PointsRasterizationSettings is now (H,W) not (W,H). A part of pulsar's validation code wasn't updated for this.
The following now works.
```
H, W = 249, 125
image_size = (H, W)
camera = PerspectiveCameras(focal_length=1.0, image_size=(image_size,), in_ndc=True)
points_rasterizer = PointsRasterizer(cameras=camera, raster_settings=PointsRasterizationSettings(image_size=image_size, radius=0.0000001))
pulsar_renderer = PulsarPointsRenderer(rasterizer=points_rasterizer)
pulsar_renderer(Pointclouds(...), gamma = (0.1,), znear = (0.1,), zfar = (70,))
```
Reviewed By: nikhilaravi, classner
Differential Revision: D32316322
fbshipit-source-id: 8405a49acecb1c95d37ee368c3055868b797208a
Summary:
Add builds corresponding to the new pytorch 1.10.0. We omit CUDA 11.3 testing because it fails with current hardware, and omit the main build too for the moment.
Also move to the newer GPU circle CI executors.
Reviewed By: gkioxari
Differential Revision: D32335934
fbshipit-source-id: 416d92a8eecd06ef7fc742664a5f2d46f93415f8
Summary:
- Old NDC convention had xy coords in [-1,1]x[-1,1]
- New NDC convention has xy coords in [-1, 1]x[-u, u] or [-u, u]x[-1, 1]
where u > 1 is the aspect ratio of the image.
This PR fixes the NDC raysampler to use the new convention.
Partial fix for https://github.com/facebookresearch/pytorch3d/issues/868
Pull Request resolved: https://github.com/fairinternal/pytorch3d/pull/29
Reviewed By: davnov134
Differential Revision: D31926148
Pulled By: bottler
fbshipit-source-id: c6c42c60d1473b04e60ceb49c8c10951ddf03c74
Summary:
Make sure the functions from `rotation_conversion` are jittable, and add some type hints.
Add tests to verify this is the case.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/898
Reviewed By: patricklabatut
Differential Revision: D31926103
Pulled By: bottler
fbshipit-source-id: bff6013c5ca2d452e37e631bd902f0674d5ca091
Summary:
https://github.com/facebookresearch/pytorch3d/issues/561https://github.com/facebookresearch/pytorch3d/issues/790
Divide by zero fix (NaN fix). When perspective_correct=True, BarycentricPerspectiveCorrectionForward and BarycentricPerspectiveCorrectionBackward in ../csrc/utils/geometry_utils.cuh are called. The denominator (denom) values should not be allowed to go to zero. I'm able to resolve this issue locally with this PR and submit it for the team's review.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/891
Reviewed By: patricklabatut
Differential Revision: D31829695
Pulled By: bottler
fbshipit-source-id: a3517b8362f6e60d48c35731258d8ce261b1d912
Summary: Keep using at:: instead of torch:: so we don't need torch/extension.h and can keep other compilers happy.
Reviewed By: patricklabatut
Differential Revision: D31688436
fbshipit-source-id: 1825503da0104acaf1558d17300c02ef663bf538
Summary: Few tweaks to make CUDA build on windows happier, as remarked in #876.
Reviewed By: patricklabatut
Differential Revision: D31688188
fbshipit-source-id: 20816d6215f2e3ec898f81ae4221b1c2ff24b64f
Summary: Small docs fixes: spelling. Avoid things which get out of date quickly: year, version.
Reviewed By: patricklabatut
Differential Revision: D31659927
fbshipit-source-id: b0111140bdaf3c6cadc09f70621bf5656909ca02
Summary: Fix#873, that grid_sizes defaults to the wrong dtype in points2volumes code, and mask doesn't have a proper default.
Reviewed By: nikhilaravi
Differential Revision: D31503545
fbshipit-source-id: fa32a1a6074fc7ac7bdb362edfb5e5839866a472
Summary: Make eps=1e-4 by default for coplanar check and also enable it to be set by the user in call to `box3d_overlap`.
Reviewed By: gkioxari
Differential Revision: D31596836
fbshipit-source-id: b57fe603fd136cfa58fddf836922706d44fe894e
Summary: PyTorch 1.6.0 came out on 28 Jul 2020. Stop builds for 1.5.0 and 1.5.1. Also update the news section of the README for recent releases.
Reviewed By: nikhilaravi
Differential Revision: D31442830
fbshipit-source-id: 20bdd8a07090776d0461240e71c6536d874615f6
Summary: The epsilon value is important for determining whether vertices are inside/outside a plane.
Reviewed By: gkioxari
Differential Revision: D31485247
fbshipit-source-id: 5517575de7c02f1afa277d00e0190a81f44f5761
Summary: Increase some test tolerances so that they pass in more situations, and re-enable two tests.
Reviewed By: nikhilaravi
Differential Revision: D31379717
fbshipit-source-id: 06a25470cc7b6d71cd639d9fd7df500d4b84c079
Summary:
For non square image, the NDC space in pytorch3d is not square [-1, 1]. Instead, it is [-1, 1] for the smallest side, and [-u, u] for the largest side, where u > 1. This behavior is followed by the pytorch3d renderer.
See the function `get_ndc_to_screen_transform` for a example.
Without this fix, the rendering result is not correct using the converted pytorch3d-camera from a opencv-camera on non square images.
This fix also helps the `transform_points_screen` function delivers consistent results with opencv projection for the converted pytorch3d-camera.
Reviewed By: classner
Differential Revision: D31366775
fbshipit-source-id: 8858ae7b5cf5c0a4af5a2af40a1358b2fe4cf74b
Summary: Do the website building in a docker container to avoid worrying about dependencies.
Reviewed By: nikhilaravi
Differential Revision: D30223892
fbshipit-source-id: 77b7b4630188167316891381f6ca9e9fbe7f0a05
Summary: A small fix for the iou3d note
Reviewed By: bottler
Differential Revision: D31370686
fbshipit-source-id: 6c97302b5c78de52915f31be70f234179c4b246d
Summary: New function to randomly subsample Pointclouds to a maximum size.
Reviewed By: nikhilaravi
Differential Revision: D30936533
fbshipit-source-id: 789eb5004b6a233034ec1c500f20f2d507a303ff
Summary: Added CUDA implementation to match the new, still unused, C++ function for the core of points2vols.
Reviewed By: nikhilaravi
Differential Revision: D29548608
fbshipit-source-id: 16ebb61787fcb4c70461f9215a86ad5f97aecb4e
Summary: Single C++ function for the core of points2vols, not used anywhere yet. Added ability to control align_corners and the weight of each point, which may be useful later.
Reviewed By: nikhilaravi
Differential Revision: D29548607
fbshipit-source-id: a5cda7ec2c14836624e7dfe744c4bbb3f3d3dfe2
Summary:
A note for our new algorithm for IoU of oriented 3D boxes. It includes
* A description of the algorithm
* A comparison with Objectron
Reviewed By: nikhilaravi
Differential Revision: D31288066
fbshipit-source-id: 0ea8da887bc5810bf4a3e0848223dd3590df1538
Summary: C++ Implementation of algorithm to compute 3D bounding boxes for batches of bboxes of shape (N, 8, 3) and (M, 8, 3).
Reviewed By: gkioxari
Differential Revision: D30905190
fbshipit-source-id: 02e2cf025cd4fa3ff706ce5cf9b82c0fb5443f96
Summary:
I have implemented an exact solution for 3D IoU of oriented 3D boxes.
This file includes:
* box3d_overlap: which computes the exact IoU of box1 and box2
* box3d_overlap_sampling: which computes an approximate IoU of box1 and box2 by sampling points within the boxes
Note that both implementations currently do not support batching.
Our exact IoU implementation is based on the fact that the intersecting shape of the two 3D boxes will be formed by segments of the surface of the boxes. Our algorithm computes these segments by reasoning whether triangles of one box are within the second box and vice versa. We deal with intersecting triangles by clipping them.
Reviewed By: gkioxari
Differential Revision: D30667497
fbshipit-source-id: 2f747f410f90b7f854eeaf3036794bc3ac982917
Summary: Add conda builds for the newly released PyTorch version 1.9.1.
Reviewed By: patricklabatut
Differential Revision: D31140206
fbshipit-source-id: 697549a3ef0db8248f4f9b5c00cf1407296b5022
Summary:
Copy some descriptions of renderer parameters to more places so they are easier to find.
Also a couple of small corrections, and make RasterizationSettings a dataclass.
Reviewed By: nikhilaravi, patricklabatut
Differential Revision: D30899822
fbshipit-source-id: 805cf366acb7d51cb308fa574deff0657c199673
Summary: Attempt to fix#659, an observation that the rasterizer is nondeterministic, by resolving tied faces by picking those with lower index.
Reviewed By: nikhilaravi, patricklabatut
Differential Revision: D30699039
fbshipit-source-id: 39ed797eb7e9ce7370ae71259ad6b757f9449923
Summary: Unlike other cu files, sigmoid_alpha_blend uses torch/extension.h. Avoid for possible build speed win and because of a reported problem #843 on windows with CUDA 11.4.
Reviewed By: nikhilaravi
Differential Revision: D31054121
fbshipit-source-id: 53a1f985a1695a044dfd2ee1a5b0adabdf280595
Summary: Rename sample_farthest_point.cpp to not match its CUDA equivalent.
Reviewed By: nikhilaravi
Differential Revision: D31006645
fbshipit-source-id: 135b511cbde320d2b3e07fc5b027971ef9210aa9
Summary: Remove use of nonstandard C++. Noticed on windows in issue https://github.com/facebookresearch/pytorch3d/issues/843. (We use `__restrict__` in CUDA, where it is fine, even on windows)
Reviewed By: nikhilaravi
Differential Revision: D31006516
fbshipit-source-id: 929ba9b3216cb70fad3ffa3274c910618d83973f
Summary:
CUDA implementation of farthest point sampling algorithm.
## Visual comparison
Compared to random sampling, farthest point sampling gives better coverage of the shape.
{F658631262}
## Reduction
Parallelized block reduction to find the max value at each iteration happens as follows:
1. First split the points into two equal sized parts (e.g. for a list with 8 values):
`[20, 27, 6, 8 | 11, 10, 2, 33]`
2. Use half of the thread (4 threads) to compare pairs of elements from each half (e.g elements [0, 4], [1, 5] etc) and store the result in the first half of the list:
`[20, 27, 6, 33 | 11, 10, 2, 33]`
Now we no longer care about the second part but again divide the first part into two
`[20, 27 | 6, 33| -, -, -, -]`
Now we can use 2 threads to compare the 4 elements
4. Finally we have gotten down to a single pair
`[20 | 33 | -, - | -, -, -, -]`
Use 1 thread to compare the remaining two elements
5. The max will now be at thread id = 0
`[33 | - | -, - | -, -, -, -]`
The reduction will give the farthest point for the selected batch index at this iteration.
Reviewed By: bottler, jcjohnson
Differential Revision: D30401803
fbshipit-source-id: 525bd5ae27c4b13b501812cfe62306bb003827d2
Summary:
This is a naive python implementation of the iterative farthest point sampling algorithm along with associated simple tests. The C++/CUDA implementations will follow in subsequent diffs.
The algorithm is used to subsample a pointcloud with better coverage of the space of the pointcloud.
The function has not been added to `__init__.py`. I will add this after the full C++/CUDA implementations.
Reviewed By: jcjohnson
Differential Revision: D30285716
fbshipit-source-id: 33f4181041fc652776406bcfd67800a6f0c3dd58
Summary: Fix issue #826. This is a correction to the joining of TexturesUV into a single scene.
Reviewed By: nikhilaravi
Differential Revision: D30767092
fbshipit-source-id: 03ba6a1d2f22e569d1b3641cd13ddbb8dcb87ec7
Summary:
* HAT_INV_SKEW_SYMMETRIC_TOL was a global variable and torch script gives an error when compiling that function. Move it to the function scope.
* torch script gives error when compiling acos_linear_extrapolation because bound is a union of tuple and float. The tuple version is kept in this diff.
Reviewed By: patricklabatut
Differential Revision: D30614916
fbshipit-source-id: 34258d200dc6a09fbf8917cac84ba8a269c00aef
Summary: In D30349234 (1b8d86a104) we introduced persistent=False to some register_buffer calls, which depend on PyTorch 1.6. We go back to the old behaviour for PyTorch 1.5.
Reviewed By: nikhilaravi
Differential Revision: D30731327
fbshipit-source-id: ab02ef98ee87440ef02479b72f4872b562ab85b5
Summary:
There has historically been a lot of duplication between the coarse rasterization logic for point clouds and meshes. This diff factors out the shared logic, so coarse rasterization of point clouds and meshes share the same core logic.
Previously the only difference between the coarse rasterization kernels for points and meshes was the logic for checking whether a {point / triangle} intersects a tile in the image. We implement a generic coarse rasterization kernel that takes a set of 2D bounding boxes rather than geometric primitives; we then implement separate kernels that compute 2D bounding boxes for points and triangles.
This change does not affect the Python API at all. It also should not change any rasterization behavior, since this diff is just a refactoring of the existing logic.
I see this diff as the first in a few pieces of rasterizer refactoring. Followup diffs should do the following:
- Add a check for bin overflow in the generic coarse rasterizer kernel: allocate a global scalar to flag bin overflow which kernel worker threads can write to in case they detect bin overflow. The C++ launcher function can then check this flag after the kernel returns and issue a warning to the user in case of overflow.
- As a slightly more involved mechanism, if bin overflow is detected then the coarse kernel can continue running in order to count how many elements fall into each bin, without actually writing out their indices to the coarse output tensor. Then the actual number of entries per bin can be used to re-allocate the output tensor and re-run the coarse rasterization kernel so that bin overflow can be automatically avoided.
- The unification of the coarse and fine rasterization kernels also allows us to insert an extra CUDA kernel prior to coarse rasterization that filters out primitives outside the view frustum. This would be helpful for rendering full scenes (e.g. Matterport data) where only a small piece of the mesh is actually visible at any one time.
Reviewed By: bottler
Differential Revision: D25710361
fbshipit-source-id: 9c9dea512cb339c42adb3c92e7733fedd586ce1b
Summary: Renaming parts of the mesh coarse rasterization and separating the bounding box calculation. All in preparation for sharing code with point rasterization.
Reviewed By: bottler
Differential Revision: D30369112
fbshipit-source-id: 3508c0b1239b355030cfa4038d5f3d6a945ebbf4
Summary: In preparation for sharing coarse rasterization between point clouds and meshes, move the functions to a new file. No code changes.
Reviewed By: bottler
Differential Revision: D30367812
fbshipit-source-id: 9e73835a26c4ac91f5c9f61ff682bc8218e36c6a
Summary: Change cyclic deps test to be independent of test discovery order. Also let it work without plotly.
Reviewed By: nikhilaravi
Differential Revision: D30669614
fbshipit-source-id: 2eadf3f8b56b6096c5466ce53b4f8ac6df27b964
Summary: Regenerate config.yml after a recent bad merge which lost a few builds.
Reviewed By: nikhilaravi
Differential Revision: D30696918
fbshipit-source-id: 3ecdfca8682baed13692ec710aa7c25dbd24dd44
Summary: Fixes GitHub issue #751. The vectorized implementation of bilinear interpolation didn't properly handle the edge cases in the same way as the `grid_sample` method in PyTorch.
Reviewed By: bottler
Differential Revision: D30684208
fbshipit-source-id: edf241ecbd72d46b94ad340a4e601e26c83db88e
Summary: Replace master with main in hard coded paths or mentions in documentation
Reviewed By: bottler
Differential Revision: D30696097
fbshipit-source-id: d5ff67bb026d90d1543d10ab027f916e8361ca69
Summary:
As suggested in #802. By not persisting the _xy_grid buffer, we can allow (in some cases) a model with one image_size to be loaded from a saved model which was trained at a different resolution.
Also avoid persisting _frequencies in HarmonicEmbedding for similar reasons.
BC-break: This will cause load_state_dict, in strict mode, to complain if you try to load an old model with the new code.
Reviewed By: patricklabatut
Differential Revision: D30349234
fbshipit-source-id: d6061d1e51c9f79a78d61a9f732c9a5dfadbbb47
Summary:
Use PyTorch3D's new faster sample_pdf function instead of local Python implementation.
Also clarify deps for the Python implementation.
Reviewed By: gkioxari
Differential Revision: D30512109
fbshipit-source-id: 84cfdc00313fada37a6b29837de96f6a4646434f
Summary:
Great work! :)
Just found a link in the examples that is not working. This will fix it.
Best,
Alex
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/818
Reviewed By: nikhilaravi
Differential Revision: D30637532
Pulled By: patricklabatut
fbshipit-source-id: ed6c52375d1e760cb0fb2c0a66648dfeb0c6ed46
Summary: We won't support PyTorch 1.4 in the next release. PyTorch 1.5.0 came out in June 2020, more than a year ago.
Reviewed By: patricklabatut
Differential Revision: D30424388
fbshipit-source-id: 25499096066c9a2b909a0550394f5210409f0d74
Summary: New test that each subpackage of pytorch3d imports cleanly.
Reviewed By: patricklabatut
Differential Revision: D30001632
fbshipit-source-id: ca8dcac94491fc22f33602b3bbef481cba927094
Summary: Implement the sample_pdf function from the NeRF project as compiled operators.. The binary search (in searchsorted) is replaced with a low tech linear search, but this is not a problem for the envisaged numbers of bins.
Reviewed By: gkioxari
Differential Revision: D26312535
fbshipit-source-id: df1c3119cd63d944380ed1b2657b6ad81d743e49
Summary: Copy the sample_pdf operation from the NeRF project in to PyTorch3D, in preparation for optimizing it.
Reviewed By: gkioxari
Differential Revision: D27117930
fbshipit-source-id: 20286b007f589a4c4d53ed818c4bc5f2abd22833
Summary: Small fix for omitting this argument.
Reviewed By: nikhilaravi
Differential Revision: D29548610
fbshipit-source-id: f25032fab3faa2f09006f5fcf8628138555f2f20
Summary: Fixes to a couple of comments on points to volumes, make the mask work in round_points_to_volumes, and remove a duplicate rand calculation
Reviewed By: nikhilaravi
Differential Revision: D29522845
fbshipit-source-id: 86770ba37ef3942b909baf63fd73eed1399635b6
Summary: Much of the code is actually available during the conda tests, as long as we look in the right place. We enable some of them.
Reviewed By: nikhilaravi
Differential Revision: D30249357
fbshipit-source-id: 01c57b6b8c04442237965f23eded594aeb90abfb
Summary: Change doc references to master branch to its new name main.
Reviewed By: nikhilaravi
Differential Revision: D30303018
fbshipit-source-id: cfdbb207dfe3366de7e0ca759ed56f4b8dd894d1
Summary:
Implementation of ball query from PointNet++. This function is similar to KNN (find the neighbors in p2 for all points in p1). These are the key differences:
- It will return the **first** K neighbors within a specified radius as opposed to the **closest** K neighbors.
- As all the points in p2 do not need to be considered to find the closest K, the algorithm is much faster than KNN when p2 has a large number of points.
- The neighbors are not sorted
- Due to the radius threshold it is not guaranteed that there will be K neighbors even if there are more than K points in p2.
- The padding value for `idx` is -1 instead of 0.
# Note:
- Some of the code is very similar to KNN so it could be possible to modify the KNN forward kernels to support ball query.
- Some users might want to use kNN with ball query - for this we could provide a wrapper function around the current `knn_points` which enables applying the radius threshold afterwards as an alternative. This could be called `ball_query_knn`.
Reviewed By: jcjohnson
Differential Revision: D30261362
fbshipit-source-id: 66b6a7e0114beff7164daf7eba21546ff41ec450
Summary: New test that notes and tutorials are listed in the website metadata, so that they will be included in the website build.
Reviewed By: nikhilaravi
Differential Revision: D30223799
fbshipit-source-id: 2dca9730b54e68da2fd430a7b47cb7e18814d518
Summary: Recent additions need to be included.
Reviewed By: nikhilaravi
Differential Revision: D30223717
fbshipit-source-id: 4b29a4132ea6fb7c1a530aac5d1e36aa61c663bb
Summary: Fix to resolve GitHub issue #796 - the cameras were being passed in the renderer forward pass instead of at initialization. The rasterizer was correctly using the cameras passed in the `kwargs` for the projection, but the `cameras` are still part of the `kwargs` for the `get_screen_to_ndc_transform` and `get_ndc_to_screen_transform` functions which is causing issues about duplicate arguments.
Reviewed By: bottler
Differential Revision: D30175679
fbshipit-source-id: 547e88d8439456e728fa2772722df5fa0fe4584d
Summary: At the next release, the prebuilt PyTorch3D wheels will depend on PyTorch 1.9.0. Update the tutorials to expect this.
Reviewed By: nikhilaravi
Differential Revision: D29614450
fbshipit-source-id: 39978a6a55b62fb7c7e62aaa8f138e47cadd631e
Summary: Restore compatibility with PyTorch 1.4 and 1.5, and a few lint fixes.
Reviewed By: patricklabatut
Differential Revision: D30048115
fbshipit-source-id: ee05efa7c625f6079fb06a3cc23be93e48df9433
Summary:
API fix for NDC/screen cameras and compatibility with PyTorch3D renderers.
With this new fix:
* Users can define cameras and `transform_points` under any coordinate system conventions. The transformation applies the camera K and RT to the input points, not regarding for PyTorch3D conventions. So this makes cameras completely independent from PyTorch3D renderer.
* Cameras can be defined either in NDC space or screen space. For existing ones, FoV cameras are in NDC space. Perspective/Orthographic can be defined in NDC or screen space.
* The interface with PyTorch3D renderers happens through `transform_points_ndc` which transforms points to the NDC space and assumes that input points are provided according to PyTorch3D conventions.
* Similarly, `transform_points_screen` transforms points to screen space and again assumes that input points are under PyTorch3D conventions.
* For Orthographic/Perspective cameras, if they are defined in screen space, the `get_ndc_camera_transform` allows points to be converted to NDC for use for the renderers.
Reviewed By: nikhilaravi
Differential Revision: D26932657
fbshipit-source-id: 1a964e3e7caa54d10c792cf39c4d527ba2fb2e79
Summary: This fixes a recently introduced circular import: the problem went unnoticed by having `pytorch3d.renderer` imported first...
Reviewed By: bottler
Differential Revision: D29686235
fbshipit-source-id: 4b9f2faecec2cc8347ee259cfc359dc9e4f67784
Summary: Remove `pyre-fixme` and `pyre-ignore` and fix the type errors.
Reviewed By: kandluis
Differential Revision: D29899546
fbshipit-source-id: dc8314f314bbc8acc002b8dbf21013cf3bafe65d
Summary: This changes only documentation. We want to be explicit that ray directions are not normalised (nor assumed to be normalised) but their magnitude is used.
Reviewed By: nikhilaravi
Differential Revision: D29845210
fbshipit-source-id: b81fb3da13a42ad20e8721ed5271fd4f3d8f5acb
Summary: Use PathManager for checking file existence, rather than assuming the path is a local file, in a couple of cases.
Reviewed By: patricklabatut
Differential Revision: D29734621
fbshipit-source-id: e2236a7c2c50ba6916936a4d786abd601205b519
Summary: A bad env var check meant these tests were not being run. Fix that, and fix the copyright test for the new message format.
Reviewed By: patricklabatut
Differential Revision: D29734562
fbshipit-source-id: a1a9bb68901b09c71c7b4ff81a04083febca8d50
Summary:
# Background
There is an unstable error during training (it can happen after several minutes or after several hours).
The error is connected to `torch.det()` function in `_check_valid_rotation_matrix()`.
if I remove the function `torch.det()` in `_check_valid_rotation_matrix()` or remove the whole functions `_check_valid_rotation_matrix()` the error is disappeared (D29555876).
# Solution
Replace `torch.det()` with manual implementation for 3x3 matrix.
Reviewed By: patricklabatut
Differential Revision: D29655924
fbshipit-source-id: 41bde1119274a705ab849751ece28873d2c45155
Summary:
# Make `transform3d.py` a little bit better (performance and code quality)
## 1. Add decorator `torch.no_grad()` to the function `_check_valid_rotation_matrix()`
Function `_check_valid_rotation_matrix()` is needed to identify errors during forward pass only, it's not used for gradients.
## 2. Replace two calls `to` with the single one
Reviewed By: bottler
Differential Revision: D29656501
fbshipit-source-id: 4419e24dbf436c1b60abf77bda4376fb87a593be
Summary:
Context: in the code we are releasing with CO3D dataset, we use `cuda()` on TensorProperties like Pointclouds and Cameras where we recursively move batch to a GPU. It would be good to push it to a release so we don’t need to depend on the nightly build.
Additionally, I aligned the logic of `.to("cuda")` without device index to the one of `torch.Tensor` where the current device is populated to index. It should not affect any actual use cases but some tests had to be changed.
Reviewed By: bottler
Differential Revision: D29659529
fbshipit-source-id: abe58aeaca14bacc68da3e6cf5ae07df3353e3ce
Summary: An early-return test for gradient calculation did not include the opacity gradient calculation - hence would also return early without calculating gradients even if opacity gradients are required.
Reviewed By: bottler
Differential Revision: D29505684
fbshipit-source-id: 575e820b8f58b19476b2fe3288702806733e840b
Summary: This commit adds a new camera conversion function for OpenCV style parameters to Pulsar parameters to the library. Using this function it addresses a bug reported here: https://fb.workplace.com/groups/629644647557365/posts/1079637302558095, by using the PyTorch3D->OpenCV->Pulsar chain instead of the original direct conversion function. Both conversions are well-tested and an additional test for the full chain has been added, resulting in a more reliable solution requiring less code.
Reviewed By: patricklabatut
Differential Revision: D29322106
fbshipit-source-id: 13df13c2e48f628f75d9f44f19ff7f1646fb7ebd
Summary: Use rotation matrices for OpenCV / PyTorch3D conversions: this avoids hiding issues with conversions to / from axis-angle vectors and ensure new conversion functions have a consistent interface.
Reviewed By: bottler, classner
Differential Revision: D29634099
fbshipit-source-id: 40b28357914eb563fedea60a965dcf69e848ccfa
Summary: Fixes#514, so we don't assume user of the tutorial has access to utils.
Reviewed By: nikhilaravi
Differential Revision: D29557294
fbshipit-source-id: 10ac994be65df0822d3ee4e9d690189ff13074a2
Summary: Avoid using old xcode which CircleCI say is deprecated.
Reviewed By: patricklabatut
Differential Revision: D29538176
fbshipit-source-id: 1e2ae4845d42365c778536446958966bbecf188c
Summary: Enable this benchmark to be run on its own, like others.
Reviewed By: patricklabatut
Differential Revision: D29522846
fbshipit-source-id: c7b3b5c9a0fcdeeb79d8b2ec197684b4380aa547
Summary: solve and lstsq have moved around in torch. Cope with both.
Reviewed By: patricklabatut
Differential Revision: D29302316
fbshipit-source-id: b34f0b923e90a357f20df359635929241eba6e74
Summary: Deprecate the `so3_exponential_map()` function in favor of its alias `so3_exp_map()`: this aligns with the naming of `so3_log_map()` and the recently introduced `se3_exp_map()` / `se3_log_map()` pair.
Reviewed By: bottler
Differential Revision: D29329966
fbshipit-source-id: b6f60b9e86b2995f70b1fbeb16f9feea05c55de9
Summary: Add functionality to to save an `.obj` file with associated UV textures: `.png` image and `.mtl` file as well as saving verts_uvs and faces_uvs to the `.obj` file.
Reviewed By: bottler
Differential Revision: D29337562
fbshipit-source-id: 86829b40dae9224088b328e7f5a16eacf8582eb5
Summary: Annotate the (return type of the) following dunder functions across the codebase: `__init__()`, `__len__()`, `__getitem__()`
Reviewed By: nikhilaravi
Differential Revision: D29001801
fbshipit-source-id: 928d9e1c417ffe01ab8c0445311287786e997c7c
Summary:
Refactor of all functions to compute laplacian matrices in one file.
Support for:
* Standard Laplacian
* Cotangent Laplacian
* Norm Laplacian
Reviewed By: nikhilaravi
Differential Revision: D29297466
fbshipit-source-id: b96b88915ce8ef0c2f5693ec9b179fd27b70abf9
Summary: This diff implements the inverse of D28992470 (8006842f2a): a function to extract OpenCV convention camera parameters from a PyTorch3D `PerspectiveCameras` object. This is the first part of the new PyTorch3d<>OpenCV<>Pulsar conversion functions.
Reviewed By: patricklabatut
Differential Revision: D29278411
fbshipit-source-id: 68d4555b508dbe8685d8239443f839d194cc2484
Summary:
Get rid of pyre fixmes related to importing a native module:
- add stub file for the `_C` native extension to the internal typeshed
- add initial annotations to the new stub file
- remove the now unnecessary pyre ignores
Reviewed By: nikhilaravi
Differential Revision: D28929467
fbshipit-source-id: 6525e15c8f27215a3ff6f78392925fd0ed6ec2ac
Summary:
Github action to close issues/PRs that are not labelled with "enhancement" or "how-to" if they have not had any activity in 30 days.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/721
Reviewed By: bottler
Differential Revision: D29309817
Pulled By: nikhilaravi
fbshipit-source-id: 039f6d4f29e9d04c01f59d145317a34ad75026a5
Summary: Add some more validation of a list of texture maps. Move the initialisation of maps_padded to a new function to reduce complexity.
Reviewed By: nikhilaravi
Differential Revision: D29263443
fbshipit-source-id: 153e262d2e9af21090570768020fca019e364024
Summary: The TexturesUV class supports an arbitrary number of channels. In one place in join_scene we unnecessarily assumed the usual value, 3.
Reviewed By: patricklabatut
Differential Revision: D29133477
fbshipit-source-id: de8eb15fdd55675da084634d9d99e2a3f4d35401
Summary: Comments in textures.py were inconsistent in describing the number of channels, sometimes C, sometimes D, sometimes 3. Now always C.
Reviewed By: patricklabatut
Differential Revision: D29263435
fbshipit-source-id: 7c1260c164c52852dc9e14d0e12da4cfb64af408
Summary:
Build for pytorch 1.9, and make it the only mac build. Not testing on cuda 11.1, because of annoying failures which are restricted to certain hardware.
Also update cuda driver in CI tests.
Reviewed By: patricklabatut
Differential Revision: D29302314
fbshipit-source-id: 78def378adb9d7aa287abdc5ac0af269e3ba3625
Summary: include_package_data does not work well in the presence of built extensions, and the OSS build hasn't been working for a few days since #593 was merged.
Reviewed By: patricklabatut
Differential Revision: D29302315
fbshipit-source-id: db7e46f8c4593743c3522087979592f9989c7c6b
Summary: Because rotations and (rotation) quaternions live on curved manifolds, it doesn't make sense to optimize them directly. Having a prominent option to require gradient on random ones may cause people to try, and isn't particularly useful.
Reviewed By: theschnitz
Differential Revision: D29160734
fbshipit-source-id: fc9e320672349fe334747c5b214655882a460a62
Summary:
Change the cow gltf loading test to validate the texture values and not to validate the renderer output because it has an unstable pixel.
Also a couple of lints.
Reviewed By: patricklabatut
Differential Revision: D29131260
fbshipit-source-id: 5e11f066a2a638588aacb09776cc842173ef669f
Summary: Conda build command can be very slow at resolving dependencies with PyTorch 1.8. I extended the timeout for this in the tests. Here do the same for the builds.
Reviewed By: patricklabatut
Differential Revision: D29131188
fbshipit-source-id: 554e694f0f8aa7509141016720b1e9019177b214
Summary: As noted in #710, save_ply was failing with some values of the faces tensor. It was assuming the faces were contiguous in using view() to change them. Here we avoid doing that.
Reviewed By: patricklabatut
Differential Revision: D29159655
fbshipit-source-id: 47214a7ce915bab8d81f109c2b97cde464fd57d8
Summary: Implements a conversion function between OpenCV and PyTorch3D cameras.
Reviewed By: patricklabatut
Differential Revision: D28992470
fbshipit-source-id: dbcc9f213ec293c2f6938261c704aea09aad3c90
Summary:
Improves so3 functions to make gradient computation stable:
- Instead of `torch.acos`, uses `acos_linear_extrapolation` which has finite gradients of reasonable magnitude for all inputs.
- Adds tests for the latter.
The tests of the finiteness of the gradient in `test_so3_exp_singularity`, `test_so3_exp_singularity`, `test_so3_cos_bound` would fail if the `so3` functions would call `torch.acos` instead of `acos_linear_extrapolation`.
Reviewed By: bottler
Differential Revision: D23326429
fbshipit-source-id: dc296abf2ae3ddfb3942c8146621491a9cb740ee
Summary:
Implements a backprop-safe version of `torch.acos` that linearly extrapolates the function outside bounds.
Below is a plot of the extrapolated acos for different bounds:
{F611339485}
Reviewed By: bottler, nikhilaravi
Differential Revision: D27945714
fbshipit-source-id: fa2e2385b56d6fe534338d5192447c4a3aec540c
Summary:
Fix small face issue for point_mesh distance computation.
The issue lies in the computation of `IsInsideTriangle` which is unstable and non-symmetrical when faces with small areas are given as input. This diff fixes the issue by returning `False` for `IsInsideTriangle` when small faces are given as input.
Reviewed By: bottler
Differential Revision: D29163052
fbshipit-source-id: be297002f26b5e6eded9394fde00553a37406bee
Summary: Small fix to `fit_textured_mesh.ipynb` tutorial due to a recent change in numpy
Reviewed By: bottler
Differential Revision: D29219990
fbshipit-source-id: f5feeef9eb952720ea7154d066795fbbe64ce7a1
Summary:
As reported on github, `matrix_to_quaternion` was incorrect for rotations by 180˚. We resolved the sign of the component `i` based on the sign of `i*r`, assuming `r > 0`, which is untrue if `r == 0`.
This diff handles special cases and ensures we use the non-zero elements to copy the sign from.
Reviewed By: bottler
Differential Revision: D29149465
fbshipit-source-id: cd508cc31567fc37ea3463dd7e8c8e8d5d64a235
Summary: Increase code coverage of shader and re-include them in code coverage test
Reviewed By: nikhilaravi
Differential Revision: D29097503
fbshipit-source-id: 2791989ee1562cfa193f3addea0ce72d6840614a
Summary:
There was a bug when `z_clip_value` is not None but there are no faces which are actually visible in the image due to culling. In `rasterize_meshes.py` a function `convert_clipped_rasterization_to_original_faces` is called to convert the clipped face indices etc back to the unclipped versions, but the case where there is no clipping was not handled correctly.
Fixes Github Issue #632
Reviewed By: bottler
Differential Revision: D29116150
fbshipit-source-id: fae82a0b4848c84b3ed7c7b04ef5c9848352cf5c
Summary: Fixed multiple issues with shape broadcasting in lighting, shading and blending and updated the tests.
Reviewed By: bottler
Differential Revision: D28997941
fbshipit-source-id: d3ef93f979344076b1d9098a86178b4da63844c8
Summary: Increase code coverage of subdivide_meshes and re-include it in code coverage test
Reviewed By: bottler
Differential Revision: D29097476
fbshipit-source-id: 3403ae38a90c4b53f24188eed11faae202a235b5
Summary:
When `z_clip_value = None` and faces are outside the view frustum the shape of one of the tensors in `clip.py` is incorrect.
`faces_num_clipped_verts` should be (F,) but it was (F,3). Added a new test to ensure this case is handled.
Reviewed By: bottler
Differential Revision: D29051282
fbshipit-source-id: 5f4172ba4d4a75d928404dde9abf48aef18c68bd
Summary:
When textures are set on `Meshes` we need to check if the dimensions actually match that of the verts/faces in the mesh. There was a github issue where someone tried to set the attribute after construction of the `Meshes` object and ran into an error when trying to sample textures.
The desired usage is to initialize the class with the textures (not set an attribute afterwards) but in any case we need to check the dimensions match before sampling textures.
Reviewed By: bottler
Differential Revision: D29020249
fbshipit-source-id: 9fb8a5368b83c9ec53652df92b96fc8b2613f591
Summary: Omit specific code from code coverage computation. This is done to make code coverage test pass again. Test coverage for shader.py and subdivide_meshes.py will be increased in later diffs to re-include them.
Reviewed By: bottler
Differential Revision: D29061105
fbshipit-source-id: addac35a216c96de9f559e2d8fe42496adc85791
Summary:
There are a couple times in the code where Device, make_device and get_device are imported by:
`from ..common.types import Device, get_device, make_device`
which will not work without this init file, at least on python 3.8.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/706
Reviewed By: bottler
Differential Revision: D29031835
Pulled By: patricklabatut
fbshipit-source-id: 15743e3c8cffdfcca51b6d2f377b923da9cbe6f9
Summary: Make Transform3d.to() not ignore a different dtype when device is the same and no copy is requested. Fix other methods where dtype is ignored.
Reviewed By: nikhilaravi
Differential Revision: D28981171
fbshipit-source-id: 4528e6092f4a693aecbe8131ede985fca84e84cf
Summary: Fix type annotations for device type
Reviewed By: nikhilaravi
Differential Revision: D28971179
fbshipit-source-id: 410b673c76dfd65ac51b2d144f17ed86a04a3058
Summary:
Tidy uses of `torch.device` in `Volumes`:
- Allow `str` or `torch.device` in `Volumes.to()` method
- Consistently use `torch.device` for internal type
- Fix comparison of devices
Reviewed By: nikhilaravi
Differential Revision: D28970876
fbshipit-source-id: c640cc22ced684a54cc450ac38a0f4b3435d47be
Summary:
Tidy uses of `torch.device` in `Pointclouds`:
- Allow `str` or `torch.device` in `Pointclouds.to()` method
- Consistently use `torch.device` for internal type
- Fix comparison of devices
Reviewed By: nikhilaravi
Differential Revision: D28970221
fbshipit-source-id: 3ca7104d4c0d9b20b0cff4f00e3ce931c5f1528a
Summary:
Tidy uses of `torch.device` in `Meshes`:
- Allow `str` or `torch.device` in `Meshes.to()` method
- Consistently use `torch.device` for internal type
- Fix comparison of devices
Reviewed By: nikhilaravi
Differential Revision: D28969461
fbshipit-source-id: 16d3c1f5458954bb11fdf0efea88542e94dccd7a
Summary:
Tidy uses of `torch.device` in `Transforms3d`:
- Allow `str` or `torch.device` in user-facing methods
- Consistently use `torch.device` for internal types
- Fix comparison of devices
Reviewed By: nikhilaravi
Differential Revision: D28929486
fbshipit-source-id: bd1d6cc7ede3d8fd549fd3224a9b07eec53f8164
Summary: Introduce device type and utility functions in common types module
Reviewed By: nikhilaravi
Differential Revision: D28970930
fbshipit-source-id: 191ec07390ed66a958c23eb2b43229312492e0b7
Summary: Improve type annotations for volumes and remove a few pyre fixmes
Reviewed By: nikhilaravi
Differential Revision: D28943371
fbshipit-source-id: ca2b7a50d72a392910e65cee5e564f34523414d2
Summary: Updated the alpha channel in the `hard_rgb_blend` function to return the mask of the pixels which have overlapping mesh faces.
Reviewed By: bottler
Differential Revision: D29001604
fbshipit-source-id: 22a2173d769f2d3ad34892d68ceb628f073bca22
Summary: If we are not visualizing the training with visdom, then there are a couple of outputs of the coarse rendering step which are not small and are returned by the renderer but never used. We don't need to bother transferring them to the CPU.
Reviewed By: nikhilaravi
Differential Revision: D28939958
fbshipit-source-id: 7e0d6681d6524f7fb57b6b20164580006120de80
Summary:
One test hits problems with CUDA 11.1 and pytorch 1.8. This seems to be a known bug, so we just run that test on the cpu in the problematic cases.
Note - the full test run is much slower with cuda 11.1 than 10.2, but this is known.
Reviewed By: patricklabatut
Differential Revision: D28938933
fbshipit-source-id: cf8ed84cd10a0b52d8f4292edbef7bd4844fea65
Summary: Improve type annotations for textures and remove a few pyre fixmes
Reviewed By: nikhilaravi
Differential Revision: D28942630
fbshipit-source-id: 422f2bdf07b435869461ca103d71473aa0c2b814
Summary:
All classes implicitly inherit from `object` since Python 3, so remove unnecessary explicit inheritance.
From the [official documentation](https://docs.python.org/3/library/functions.html#object):
> `object` is a base for all classes.
Reviewed By: nikhilaravi
Differential Revision: D28942595
fbshipit-source-id: 466c0d19d8a93a6263e7ad734c3e87160cfa6066
Summary: Restore assertNormsClose's printing of its message on failure which I broke in D26233419 (cd9786e787).
Reviewed By: nikhilaravi
Differential Revision: D28799743
fbshipit-source-id: e7a24b2558b68991c731bbd55fb3ca6c1df98f69
Summary: make assertClose print its failure information even if a message is supplied.
Reviewed By: nikhilaravi
Differential Revision: D28799745
fbshipit-source-id: 787c8c356342420cd8f40fdc0b2aba036142298e
Summary:
Caught a silly typo in the docs, figured I'd send in a PR. Thanks for sharing your work!
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/693
Reviewed By: bottler
Differential Revision: D28837851
Pulled By: patricklabatut
fbshipit-source-id: c326189007c3537429a8aa2a3b2850d60b74b16d
Summary:
Inside the implicit function, the color and density calculations are independent and time is saved by putting them on separate streams.
(In fact, colors is slower than densities, and the raymarcher does some calculation with the densities before the colors. So theoretically we could go further and not join the streams together until the colors are actually needed. The code would be more complicated. But the profile suggests that the raymarcher is quick and so this wouldn't be expected to make a big difference.)
In inference, this might increase memory usage, so it isn't an obvious win. That is why I have added a flag.
Reviewed By: nikhilaravi
Differential Revision: D28648549
fbshipit-source-id: c087de80d8ccfce1dad3a13e71df2f305a36952e
Summary: When harmonic embedding is used, we always cat its input onto its output before proceeding. Avoid an intermediate tensor by making the module do that for itself.
Reviewed By: davnov134
Differential Revision: D28185791
fbshipit-source-id: 98d92c94a918dd42e16cdadcaac71dabbc7de5c3
Summary:
Add custom layer to avoid repeating copied data for every ray position.
This should also save time in the backward pass because there are fewer multiplies with the weights.
Reviewed By: theschnitz
Differential Revision: D28382412
fbshipit-source-id: 1ba7356cd8520ebd598568ae503e47d31d3989eb
Summary:
The multiplicative factors in function embeddings go from `2**0` to `2**(self.n_harmonic_functions-1)`, and not from `2**0` to `2**self.n_harmonic_functions`.
Pull Request resolved: https://github.com/fairinternal/pytorch3d/pull/13
Reviewed By: nikhilaravi
Differential Revision: D28637894
Pulled By: ignacio-rocco
fbshipit-source-id: da20f39eba9aaa09af5b24be1554a3bfd7556281
Summary: Experimental data loader for taking the default scene from a GLB file and converting it to a single mesh in PyTorch3D.
Reviewed By: nikhilaravi
Differential Revision: D25900167
fbshipit-source-id: bff22ac00298b83a0bd071ae5c8923561e1d81d7
Summary:
Specific object to represent light which is 100% everywhere. Sometimes lighting is irrelevant, for example when viewing a mesh which has lighting already baked in.
This is not primarily aiming for a performance win but I think the test which has changed might be a bit faster.
Reviewed By: theschnitz
Differential Revision: D26405151
fbshipit-source-id: 82eae55de0bee918548a3eaf031b002cb95e726c
Summary: Function to relatively rotate a camera position. Also document how to relatively translate a camera position.
Reviewed By: theschnitz
Differential Revision: D25900166
fbshipit-source-id: 2ddaf06ee7c5e2a2e973c04d7dee6ccb61c6ff84
Summary:
If you join several meshes which have TexturesUV textures using join_meshes_as_scene then we amalgamate all the texture images in to a single one. This now checks if some of the images are equal (i.e. the tensors are the same tensor, in the `is` sense; they have the same `id` in Python) and only uses one copy if they are.
I have an example of a massive scene made of several textured meshes with some shared, where this makes the difference between fitting the data on the GPU and not.
Reviewed By: theschnitz
Differential Revision: D25982364
fbshipit-source-id: a8228805f38475c796302e27328a340d9b56c8ef
Summary: Currently the Rotate transform does not consider the R's device at all, resulting in errors if you're expecting it to be on cuda but it gets the default casting to cpu. This updates the transform to respect R's device.
Reviewed By: nikhilaravi
Differential Revision: D27828118
fbshipit-source-id: ddd99f73eadbd990688eb22f3d1ffbacbe168c81
Summary: Add gitignore file to ignore data and checkpoints in the NeRF project.
Reviewed By: nikhilaravi
Differential Revision: D28382413
fbshipit-source-id: 747d69f4353a76a28acde8ba26a896cb2278f976
Summary: Avoid test files explicitly importing TestCase objects from each other, because doing so causes the tests to be discovered twice by unittest discover. This means moving a few static functions out of their classes. I noticed this while trying to fix failures from yesterday.
Reviewed By: nikhilaravi
Differential Revision: D28194679
fbshipit-source-id: ac6e6585603bd4ef9c098cdd56891d94f8923ba6
Summary:
A couple of tests are failing in open source after my changes yesterday because of numerical issues calculating normals. In particular we have meshes with very few vertices and several faces, where the normals should be zero but end up non-negligible after F.normalize. I have no idea why the different environments produce different results, so that the tests are passing internally.
An example. Consider a mesh with the following faces:
```
tensor([[4, 0, 2],
[4, 1, 2],
[3, 1, 0],
[1, 3, 1],
[3, 0, 1],
[4, 0, 0],
[4, 0, 2]])
```
At vertex 3, there is one zero-area face and there are two other faces, which are back-to-back with each other. This vertex should have zero normal. The open source calculation produces a small but nonzero normal which varies unpredictably with changes in scale/offset, which can cause test failures.
In this diff, the main change is to increase the number of vertices to make this less likely to happen. Also a small change to init_mesh to make it not generate a batch of empty meshes.
Reviewed By: nikhilaravi
Differential Revision: D28220984
fbshipit-source-id: 79fdc62e5f5f8836de5a3a9980cfd6fe44590359
Summary: 3 extend functions in textures.py updated to call `self.__class__` rather than create a new object of its type. As mentioned in https://github.com/facebookresearch/pytorch3d/issues/618 .
Reviewed By: bottler
Differential Revision: D28281218
fbshipit-source-id: b9c99ab87e46a3f28c37efa1ee2c2dceb560b491
Summary:
Several tutorials were importing skimage and not using it (and it is not an official dependency of PyTorch3D).
Also several had a bad call to plt.grid.
Reviewed By: nikhilaravi
Differential Revision: D28185822
fbshipit-source-id: adabfd0d4d339e1081c26b7b28f5e3953b492f2e
Summary: Add ability to load normals when they are present in a PLY file.
Reviewed By: nikhilaravi
Differential Revision: D26458971
fbshipit-source-id: 658270b611f7624eab4f5f62ff438038e1d25723
Summary: Save existing vertex normals when a mesh is saved to PLY, and existing normals when a point cloud is saved to PLY.
Reviewed By: theschnitz
Differential Revision: D27765257
fbshipit-source-id: fa0aae4c0f100f7e5eb742f48fc3dfc87435deba
Summary: Add ability to ask a Meshes if it already has normals. If it does, then requesting normals will not trigger a calculation. MeshesFormatInterpreters will therefore be able to decide whether to save normals.
Reviewed By: theschnitz, nikhilaravi
Differential Revision: D27765261
fbshipit-source-id: 7c87dbf999d5616d20f5eb2c01039ee5ff65a830
Summary: Add ability to set the vertex normals when creating a Meshes, so that the pluggable loaders can return them from a file.
Reviewed By: nikhilaravi
Differential Revision: D27765258
fbshipit-source-id: b5ddaa00de3707f636f94d9f74d1da12ecce0608
Summary: If offset_verts_ is used to move meshes with a single vector, the normals won't change so don't need to recalculate. I am planning to allow user-specified vertex normals. This change means that user-specified vertex normals won't get overwritten when they don't need to be.
Reviewed By: nikhilaravi
Differential Revision: D27765256
fbshipit-source-id: f6e4d308ac9ac023030325cb75a18d39b966cf88
Summary:
There is no need to recalculate normals when scaling a mesh by a constant. We omit doing this for vertex normals. This will make things less confusing when we allow user-specified vertex normals.
Face normals also don't need recalculating, but they are calculated at the same time as face areas which do, so it is easiest not to change their behavior here. That is convenient because we are not immediately planning to allow user-specified face normals.
Reviewed By: nikhilaravi
Differential Revision: D27793476
fbshipit-source-id: 827f1be4bc78bf0391ce3959cce48c4f3ee326fe
Summary: When a PLY file contains colors in byte format, these are now scaled from 0..255 to [0,1], as they should be
Reviewed By: gkioxari
Differential Revision: D27765254
fbshipit-source-id: 526b5f5149d5e8cbffd7412b411be52c935fa4ad
Summary:
Include TexturesVertex colors when loading and saving Meshes to PLY files.
A couple of other improvements to the internals of ply_io, including using `None` instead of empty tensors for some missing data.
Reviewed By: gkioxari
Differential Revision: D27765260
fbshipit-source-id: b9857dc777c244b9d7d6643b608596d31435ecda
Summary: We don't use gradents of sample_pdf. Here we disable gradient calculation around calling it, instead of calling detach later. There's a theoretical speedup, but mainly this enables using sample_pdf implementations which don't support gradients.
Reviewed By: nikhilaravi
Differential Revision: D28057284
fbshipit-source-id: 8a9d5e73f18b34e1e4291028008e02973023638d
Summary: As remarked in #655, we need to specify the fvcore channel before conda-forge, because there is now an fvcore on conda-forge which we don't aim to use. Compare D27589827
Reviewed By: nikhilaravi
Differential Revision: D27938996
fbshipit-source-id: 8abf7994a26e0ea9e6a19fb1e246aba7af091ddc
Summary: We can check the bounds without using extra memory. This produces a small speedup in NeRF training (like 0.5%).
Reviewed By: nikhilaravi
Differential Revision: D27859691
fbshipit-source-id: d566420c465f51231f4a57438084c98b73253046
Summary:
When a list of Meshes is `join_batched()`, the `num_verts_per_mesh` in the list would be unexpectedly modified.
Also some cleanup around `_num_verts_per_mesh`.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/623
Test Plan: A modification to an existing test checks this.
Reviewed By: nikhilaravi
Differential Revision: D27682104
Pulled By: bottler
fbshipit-source-id: 9d00913dfb4869bd6c7d3f5cc9156b7b6f1aecc9
Summary: The renderer gets used for visualization only in places. Here we avoid creating an autograd graph during that, which is not needed and can fail because some of the graph which existed earlier might be needed and has not been retained after the optimizer step. See https://github.com/facebookresearch/pytorch3d/issues/624
Reviewed By: gkioxari
Differential Revision: D27593018
fbshipit-source-id: 62ae7a5a790111273aa4c566f172abd36c844bfb
Summary: Internally flake8 sometimes crashes. Stop the rest of the linter being bypassed when this happens.
Reviewed By: theschnitz
Differential Revision: D27765255
fbshipit-source-id: 7ad1fb4630a05f4bc3763cf13370f5e4e00228de
Summary: Simplify finding the data directories in the tests.
Reviewed By: nikhilaravi
Differential Revision: D27634293
fbshipit-source-id: dc308a7c86c41e6fae56a2ab58187c9f0335b575
Summary: Make common functions for finding directories where test data is found, instead of lots of tests using their own `__file__` while trying to get ./tests/data and the tutorials data.
Reviewed By: nikhilaravi
Differential Revision: D27633701
fbshipit-source-id: 1467bb6018cea16eba3cab097d713116d51071e9
Summary: flake8 no longer respects the black fmt:off message, so include specific line-length exclusion.
Reviewed By: nikhilaravi
Differential Revision: D27624641
fbshipit-source-id: adcdb6f55b382fbf252eede3f3ddeda0621da883
Summary:
Update `main` build to latest CircleCI image - Ubuntu 2020.04.
Avoid torch.logical_or and logical_and for PyTorch 1.4 compatibility.
Also speed up the test run with Pytorch 1.4.0 (which has no ninja) by not setting NVCC_FLAGS for it.
Reviewed By: theschnitz
Differential Revision: D27262327
fbshipit-source-id: ddc359d134b1dc755f8b20bd3f33bb080cb3a0e1
Summary:
As noted in #601, the example notebook was using an internal function _read_image from PyTorch3D, which has changed signature recently. It is not meant to be used externally. Switch to using PIL directly.
Other changes: (1) removed unused skimage import. (2) some small tidyups. We now don't have places where cells modify values set by other cells. (3) removed bad calls to `plt.grid` which have no effect.
Reviewed By: theschnitz, nikhilaravi
Differential Revision: D27080372
fbshipit-source-id: 2fce651b3e5d7a4619f0a2b298c5db18c8fa1e2c
Summary: Make black and isort stop disagreeing by removing some unneeded comments around import statements. pyre ignores are moved.
Reviewed By: theschnitz
Differential Revision: D27118137
fbshipit-source-id: 9926d0f21142adcf9b5cfe1d394754317f6386df
Summary: When viewing two or more pointclouds in a single plot, we should be subsampling each one separately rather than subsampling their union.
Reviewed By: nikhilaravi
Differential Revision: D27010770
fbshipit-source-id: 3c7e04a6049edd39756047f985d5a82c2601b3a2
Summary: Avoid using the newish member function isfinite. We use torch.isfinite instead for torch 1.4.0 compatibility.
Reviewed By: nikhilaravi
Differential Revision: D26946672
fbshipit-source-id: 853c3716f40061152f1ea54a39eb60b565de7c2c
Summary: Small change to swap how height/width are inferred from the image_size setting.
Reviewed By: gkioxari
Differential Revision: D26648340
fbshipit-source-id: 2c657a115c96cadf3ac63be87b0e1bfba10c9315
Summary:
- Fix the calculation of the non square NDC range when the H and W are not integer multiples.
- Add test for this case
Reviewed By: gkioxari
Differential Revision: D26613213
fbshipit-source-id: df6763cac602e9f1d516b41b432c4d2cfbaa356d
Summary: Implements the ascii OFF file format. This was discussed in https://github.com/facebookresearch/pytorch3d/issues/216
Reviewed By: theschnitz
Differential Revision: D25788834
fbshipit-source-id: c141d1f4ba3bad24e3c1f280a20aee782bfd74d6
Summary: One step in finding all the pairs of vertices which share faces is a simple calculation but annoying to parallelize. It was implemented in pure Python. We move it to C++. We still pull the data to the CPU and put the answer back on the device.
Reviewed By: nikhilaravi, gkioxari
Differential Revision: D26073475
fbshipit-source-id: ffbf4e2c347a511ab5084bceff600465812b6a52
Summary:
Fixes mostly related to the "main" build on circleci.
-Avoid error to do with tuple copy from initializer_list which is `explicit` on old compiler.
-Add better reporting to copyright test.
-Move to PackedTensorAccessor64 from the deprecated PackedTensorAccessor
-Avoid some warnings about mismatched comparisons.
The "main" build is the only one that runs the test_build stuff. In that area
-Fix my bad copyright fix D26275931 (3463f418b8) / 965c9c
-Add test that all tutorials are valid json.
Reviewed By: nikhilaravi
Differential Revision: D26366466
fbshipit-source-id: c4ab8b7e6647987069f7cb7144aa6ab7c24bcdac
Summary: Add link to v0.4 after it has been tagged.
Reviewed By: bottler
Differential Revision: D26286000
fbshipit-source-id: b75893e668a18122c64aa989b6f4d150c99831be
Summary:
- Updated the C++/CUDA mesh rasterization kernels to handle the clipped faces. In particular this required careful handling of the distance calculation for faces which are cut into a quadrilateral by the image plane and then split into two sub triangles i.e. both sub triangles can't be part of the top K faces.
- Updated `rasterize_meshes.py` to use the utils functions to clip the meshes and convert the fragments back to in terms of the unclipped mesh
- Added end to end tests
Reviewed By: jcjohnson
Differential Revision: D26169685
fbshipit-source-id: d64cd0d656109b965f44a35c301b7c81f451cfa0
Summary: Small update to the cameras and rasterizer to correctly infer the type of camera (perspective vs orthographic).
Reviewed By: jcjohnson
Differential Revision: D26267225
fbshipit-source-id: a58ed3bc2ab25553d2a4307c734204c1d41b5176
Summary:
This diff adds utils functions for converting rasterization fragments of the clipped mesh into fragments expressed in terms of the original unclipped mesh.
The face indices and barycentric coordinates are converted in this step. The pixel to triangle distances are handled in the rasterizer which is updated in the next diff in the stack.
Reviewed By: jcjohnson
Differential Revision: D26169539
fbshipit-source-id: ba451d3facd60ef88a8ffaf25fd04ca07b449ceb
Summary:
Instead of culling faces behind the camera, partially clip them if they intersect with the image plane.
This diff implements the utils functions for clipping.
There are 4 cases for the mesh faces which are all handled:
```
Case 1: the triangle is completely in front of the clipping plane (it is left
unchanged)
Case 2: the triangle is completely behind the clipping plane (it is culled)
Case 3: the triangle has exactly two vertices behind the clipping plane (it is
clipped into a smaller triangle)
Case 4: the triangle has exactly one vertex behind the clipping plane (it is clipped
into a smaller quadrilateral and divided into two triangular faces)
```
Reviewed By: jcjohnson
Differential Revision: D23108673
fbshipit-source-id: 550a8b6a982d06065dff10aba10d47e8b144ae52
Summary: Prepare the tutorial notebooks to use wheels from S3 when run on colab.
Reviewed By: nikhilaravi
Differential Revision: D26226932
fbshipit-source-id: 1f9366c3fb4ba195333a5d5dfa3f6876ea934508
Summary: For Linux, instead of uploading wheels to PyPI which will only work with one particular version of PyTorch and CUDA, from the next release we will store a range of built wheels on S3.
Reviewed By: nikhilaravi
Differential Revision: D26209398
fbshipit-source-id: 945a6907b78807e1eedb25007f87f90bbf59f80e
Summary:
These two tests fail (with non-small differences) when the seed is changed or if certain environmental changes are made. We disable them pending investigation.
A small change to the tolerance at the failing assertion doesn't help. The change in common_testing helps diagnose this.
Reviewed By: shapovalov
Differential Revision: D26233419
fbshipit-source-id: 357afc1786825256c9bade101fb15707e4dea5ed
Summary: Implements the test script of NeRF.
Reviewed By: nikhilaravi
Differential Revision: D25684450
fbshipit-source-id: 739169d9df706795814912bb9a15e2e65ac92df8
Summary: Implements the training script of NeRF.
Reviewed By: nikhilaravi
Differential Revision: D25684439
fbshipit-source-id: 8b19b6dc282eb6bf6e46ec4476bb0f13a84c90dd
Summary: Implements the `Stats` class that handles logging of the training statistics.
Reviewed By: nikhilaravi
Differential Revision: D25684430
fbshipit-source-id: 920a1c65917ab5d047988494d92173da60cfd64b
Summary: Implements the main NeRF model class that controls the radiance field and its renderer
Reviewed By: nikhilaravi
Differential Revision: D25684419
fbshipit-source-id: fae45572daa6748c6234bd212f3e68110f778238
Summary: Implements the radiance field function of NeRF
Reviewed By: nikhilaravi
Differential Revision: D25684413
fbshipit-source-id: 4bf6dd5d22e6134a09f7b9f314536ec16670f737
Summary: An initial NeRF diff which sets up the folder structure and implements the raymarching algorithm of NeRF.
Reviewed By: nikhilaravi
Differential Revision: D25623990
fbshipit-source-id: ac6b05a9b866358bd4bbf44858f06859d8a6ebd1
Summary: Corner case where there's nothing to do in this function.
Reviewed By: nikhilaravi
Differential Revision: D26073476
fbshipit-source-id: eb061683ffe35c1ffa8384c422a1557a636d52cd
Summary: We were double counting some pairs in some cases. Specifically if four or more faces share an edge, then some of them were getting double counted. This is a minimal tweak to avoid that.
Reviewed By: nikhilaravi
Differential Revision: D26073477
fbshipit-source-id: a40032acf3044bb98dd91cb29904614ef64d5599
Summary:
Fixes the assertion that `p1` and `p2` have the same last dimension. The issue was that `D` is set to equal `p2.size(2)`, and then `D` is compared to `p2.size(2)`. The fix instead compares `D` to `p1.size(2).
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/524
Reviewed By: bottler
Differential Revision: D26008688
Pulled By: nikhilaravi
fbshipit-source-id: e32afe9da127d81b1a411d3c223b539a7400597b
Summary: We previously did not send an `up` vector in to plotly when visualization_cameras is supplied. This meant the image would have the default orientation instead of the correct one. Now we use the library function `camera_to_eye_at_up` to calculate the plotly position, which includes the `up` vector.
Reviewed By: nikhilaravi
Differential Revision: D25981183
fbshipit-source-id: abec72b349f3a5519209e0e6c0518133c3750807
Summary:
Plotly viewing from a specific camera location requires converting that location in to an (eye, at, up) specification. There may be other reasons to want to do this as well. I create a separate utility function for it.
I envisage more such utility functions for manipulating camera information, so I create a separate camera_utils.py file for such things.
Reviewed By: nikhilaravi
Differential Revision: D25981184
fbshipit-source-id: 0947bf98b212676c021f2fddf775bf436dee3487
Summary:
It is common when trying things out to want to move a whole mesh or point cloud by the same amount. Here we allow the offset functions to broadcast.
Also add a sanity check to join_meshes_as_scene which it is easy to call wrongly.
Reviewed By: nikhilaravi
Differential Revision: D25980593
fbshipit-source-id: cdf1568e1317e3b81ad94ed4e608ba7eef81290b
Summary: Make `to` on Transform3D carry its member _transforms.
Reviewed By: nikhilaravi
Differential Revision: D25978611
fbshipit-source-id: 12b39e7a657f28d59ca60800bf9f4193a2c08197
Summary: Gradient calculation flags were not properly routed through the Python interface. This diff fixes this. In particular, gradients for focal length (only if no other camera gradients were calculated) and opacity were not calculated as required.
Reviewed By: gkioxari
Differential Revision: D25921202
fbshipit-source-id: 22cbae3bda886d81bb95878f0be45c2ddd29934c
Summary:
PyTorch versions 1.7.0 and 1.7.1 are between https://github.com/pytorch/pytorch/pull/43931 and https://github.com/pytorch/pytorch/pull/47404. In this gap, PyTorch always copies CC to nvcc_args, like PyTorch3D does. Newer nvcc versions are not happy with `-ccbin` being specified twice, even if it is specified twice the same. We update PyTorch3D so that it doesn't supply `-ccbin` in these cases.
Also tweak the detection of the current ccbin so that it is aware that `-ccbin foo` and `-ccbin=foo` are equivalent.
Reviewed By: theschnitz
Differential Revision: D25825468
fbshipit-source-id: b04e7718cf01820649518eedda99c399c732e8af
Summary:
Allow PLY files to not contain faces. Allow loading pointclouds with color, at least encoded according to the way of some cloudcompare examples.
TODO: Allow vertex normals to be read, and allow vertex colors to be written. Make the return type of load_ply something more user friendly, like a dict.
Noticed in https://github.com/facebookresearch/pytorch3d/issues/209
Reviewed By: nikhilaravi
Differential Revision: D22573314
fbshipit-source-id: 72ba1f7c6417f5dfc83f2ebf359eff017057635c
Summary:
In the original implementation, I had considered PLY properties where there are mixed types of elements in a property to be rare and basically unimportant, so the implementation is very naive.
If we want to support pointcloud PLY files, we need to handle at least the subcase where there are no lists efficiently because this seems to be very common there.
Reviewed By: nikhilaravi, gkioxari
Differential Revision: D22573315
fbshipit-source-id: db6f29446d4e555a2e2b37d38c8e4450d061465b
Summary: We already have code for obj and ply formats. Here we actually make it available in `IO.load_mesh` and `IO.save_mesh`.
Reviewed By: theschnitz, nikhilaravi
Differential Revision: D25400650
fbshipit-source-id: f26d6d7fc46c48634a948eea4d255afad13b807b
Summary: Implements a notebook that fits a volume to multiple views of the cow mesh.
Reviewed By: nikhilaravi
Differential Revision: D24553385
fbshipit-source-id: 367ca39e176b40df2c5946c9c05d3be824dc8d1c
Summary: Implemented a data structure for volumes.
Reviewed By: gkioxari
Differential Revision: D20342920
fbshipit-source-id: ccc23eaa183ed8a4e9cd7674b4dcf31e8a65c3c6
Summary: Extends `list_to_padded`/`padded_to_list` to work for tensors with an arbitrary number of input dimensions.
Reviewed By: nikhilaravi, gkioxari
Differential Revision: D23813969
fbshipit-source-id: 52c212a2ecdb3c4dfb6ac47217715e07998f37f1
Summary: Now we use iopath, we need to find it from its own channel.
Reviewed By: nikhilaravi
Differential Revision: D25710499
fbshipit-source-id: 1c67eb6d5b009d35b65a3acd3ebff6e0e45fecc4
Summary:
Make no internal functions inside pytorch3d/io interpret str paths except using a PathManager from iopath which they have been given. This means we no longer use any global PathManager object and we no longer use fvcore's deprecated file_io.
To preserve the APIs, various top level functions create their own default-initialized PathManager object if they are not provided one.
Reviewed By: theschnitz
Differential Revision: D25372969
fbshipit-source-id: c176ee31439645fa54a157d6f1aef18b09501569
Summary: Allowing usort, isort and black to coexist without fighting means we can't have imports commented as deprecated from the same module as other imports.
Reviewed By: nikhilaravi
Differential Revision: D25372970
fbshipit-source-id: 637f5a0025c0df9fbec47cba73ce5387f4f8b467
Summary: Add ioPath as a dependency of PyTorch3D in preparation for using the new PathManager.
Reviewed By: nikhilaravi
Differential Revision: D25372971
fbshipit-source-id: d8aa661d2de975e747dd494edc42bf843990cf68
Summary: Use a more recent PyTorch to build the documentation.
Reviewed By: nikhilaravi
Differential Revision: D25679756
fbshipit-source-id: 83d647f709337110d39886eaa6aad2565d740c6d
Summary: This fixes a corner case for multi-radius handling for the pulsar backend. The additional dimensionality check ensures that the batched parsing for radiuses is only performed when appropriate.
Reviewed By: bottler
Differential Revision: D25387708
fbshipit-source-id: c486dcf327f812265b7ca8ca5ef5c6a31e6d4549
Summary:
Defines a function to run marching cubes algorithm on a single or batch of 3D scalar fields. Returns a mesh's faces and vertices.
UPDATES (12/18)
- Input data is now specified as a (B, D, H, W) tensor as opposed to a (B, W, H, D) tensor. This will now be compatible with the Volumes datastructure.
- Add an option to return output vertices in local coordinates instead of world coordinates.
Also added a small fix to remove the dype for device in Transforms3D - if passing in a torch.device instead of str it causes a pyre error.
Reviewed By: jcjohnson
Differential Revision: D24599019
fbshipit-source-id: 90554a200319fed8736a12371cc349e7108aacd0
Summary: Fixes the index out of bound errors for texture sampling from a texture atlas: when barycentric coordinates are 1.0, the integer index into the (R, R) per face texture map is R (max can only be R-1).
Reviewed By: gkioxari
Differential Revision: D25543803
fbshipit-source-id: 82d0935b981352b49c1d95d5a17f9cc88bad0a82
Summary:
Similar to non square image rasterization for meshes, apply the same updates to the pointcloud rasterizer.
Main API Change:
- PointRasterizationSettings now accepts a tuple/list of (H, W) for the image size.
Reviewed By: jcjohnson
Differential Revision: D25465206
fbshipit-source-id: 7370d83c431af1b972158cecae19d82364623380
Summary: Add `return self` to the `to` function for the renderer classes.
Reviewed By: bottler
Differential Revision: D25534487
fbshipit-source-id: e8dbd35524f0bd40e835439e93184b5a1f1532ca
Summary:
As for now, epsilon value is ignored, since `kwargs` are passed to constructor only
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/418
Reviewed By: gkioxari
Differential Revision: D24730500
Pulled By: nikhilaravi
fbshipit-source-id: 7cce820dbe14f8c74d3df4f18c45d50e228c6a45
Summary:
`INSTALL.md` On Windows, pip install from git does not work with single quotes. I replace them with double quote as those should work for any OS.
`camera_position_optimization_with_differentiable_rendering.ipynb` To extract the silhouette from the reference image, we need to reject white values, not black values, because the background of the ref is white:

Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/254
Reviewed By: gkioxari
Differential Revision: D23798508
Pulled By: nikhilaravi
fbshipit-source-id: 1fbec291c48c367539a8a4fea389a109aab49e3d
Summary: Add nightly linux conda builds with the new pytorch 1.7.1. This supports python 3.9.
Reviewed By: nikhilaravi
Differential Revision: D25532757
fbshipit-source-id: b734637063e148389951899450566275f3cf5831
Summary: We have already uploaded a conda package of the cub 1.10.0 sources to our channel on anaconda. Here is the code we used.
Reviewed By: nikhilaravi
Differential Revision: D25395358
fbshipit-source-id: b58fd473fcafd425c98c9d7a7c32574f651383a0
Summary:
There are a couple of options for supporting non square images:
1) NDC stays at [-1, 1] in both directions with the distance calculations all modified by (W/H). There are a lot of distance based calculations (e.g. triangle areas for barycentric coordinates etc) so this requires changes in many places.
2) NDC is scaled by (W/H) so the smallest side has [-1, 1]. In this case none of the distance calculations need to be updated and only the pixel to NDC calculation needs to be modified.
I decided to go with option 2 after trying option 1!
API Changes:
- Image size can now be specified optionally as a tuple
TODO:
- add a benchmark test for the non square case.
Reviewed By: jcjohnson
Differential Revision: D24404975
fbshipit-source-id: 545efb67c822d748ec35999b35762bce58db2cf4
Summary: The "manual" docker pull in the testrun builds has been taking more than 10 minutes recently, and its lack of output causes circleci to timeout. As a quick fix, we enable the output from this operation.
Reviewed By: gkioxari
Differential Revision: D25305127
fbshipit-source-id: 19682bfa0294145457a37df6d6faf7a08dcc63c9
Summary: Taubin Smoothing for filtering meshes and making them smoother. Taubin smoothing is an iterative approach.
Reviewed By: nikhilaravi
Differential Revision: D24751149
fbshipit-source-id: fb779e955f1a1f6750e704f1b4c6dfa37aebac1a
Summary: If a pointcloud had less than pointcloud_max_points, the colors would not render. This diff fixes that.
Reviewed By: bottler
Differential Revision: D25099044
fbshipit-source-id: 47c3ddcdb4e06284b0a7966ffca1b973f394921f
Summary: Previously, grids where the columns don't divide the number of plots evenly would error. Now, there'll just be a sparse last row.
Reviewed By: bottler
Differential Revision: D25069236
fbshipit-source-id: 9d2fd62f3d39bfebc07ce0a41718621fa69d6057
Summary: This fixed#442 by declaring two math functions to be device-only.
Reviewed By: bottler
Differential Revision: D24896992
fbshipit-source-id: a15918d06d2a3e6ee5cf250fec7af5f2f50a6164
2020-11-11 14:06:21 -08:00
910 changed files with 105419 additions and 6751 deletions
The core library is written in PyTorch. Several components have underlying implementation in CUDA for improved performance. A subset of these components have CPU implementations in C++/Pytorch. It is advised to use PyTorch3D with GPU support in order to use all the features.
The core library is written in PyTorch. Several components have underlying implementation in CUDA for improved performance. A subset of these components have CPU implementations in C++/PyTorch. It is advised to use PyTorch3D with GPU support in order to use all the features.
For the CUB build time dependency, if you are using conda, you can continue with
For the CUB build time dependency, which you only need if you have CUDA older than 11.7, if you are using conda, you can continue with
```
```
conda install -c bottler nvidiacub
conda install -c bottler nvidiacub
```
```
@@ -42,7 +43,7 @@ export CUB_HOME=$PWD/cub-1.10.0
For developing on top of PyTorch3D or contributing, you will need to run the linter and tests. If you want to run any of the notebook tutorials as `docs/tutorials` or the examples in `docs/examples` you will also need matplotlib and OpenCV.
For developing on top of PyTorch3D or contributing, you will need to run the linter and tests. If you want to run any of the notebook tutorials as `docs/tutorials` or the examples in `docs/examples` you will also need matplotlib and OpenCV.
If you are using pre-compiled pytorch 1.4 and torchvision 0.5, you should make the following changes to the pytorch source code to successfully compile with Visual Studio 2019 (MSVC 19.16.27034) and CUDA 10.1.
Depending on the version of PyTorch, changes to some PyTorch headers may be needed before compilation. These are often discussed in issues in this repository.
- Data structure for storing and manipulating triangle meshes
- Data structure for storing and manipulating triangle meshes
- Efficient operations on triangle meshes (projective transformations, graph convolution, sampling, loss functions)
- Efficient operations on triangle meshes (projective transformations, graph convolution, sampling, loss functions)
- A differentiable mesh renderer
- A differentiable mesh renderer
- Implicitron, see [its README](projects/implicitron_trainer), a framework for new-view synthesis via implicit representations. ([blog post](https://ai.facebook.com/blog/implicitron-a-new-modular-extensible-framework-for-neural-implicit-representations-in-pytorch3d/))
PyTorch3D is designed to integrate smoothly with deep learning methods for predicting and manipulating 3D data.
PyTorch3D is designed to integrate smoothly with deep learning methods for predicting and manipulating 3D data.
For this reason, all operators in PyTorch3D:
For this reason, all operators in PyTorch3D:
@@ -23,33 +24,47 @@ For this reason, all operators in PyTorch3D:
Within FAIR, PyTorch3D has been used to power research projects such as [Mesh R-CNN](https://arxiv.org/abs/1906.02739).
Within FAIR, PyTorch3D has been used to power research projects such as [Mesh R-CNN](https://arxiv.org/abs/1906.02739).
See our [blog post](https://ai.facebook.com/blog/-introducing-pytorch3d-an-open-source-library-for-3d-deep-learning/) to see more demos and learn about PyTorch3D.
## Installation
## Installation
For detailed instructions refer to [INSTALL.md](INSTALL.md).
For detailed instructions refer to [INSTALL.md](INSTALL.md).
## License
## License
PyTorch3D is released under the [BSD-3-Clause License](LICENSE).
PyTorch3D is released under the [BSD License](LICENSE).
## Tutorials
## Tutorials
Get started with PyTorch3D by trying one of the tutorial notebooks.
Get started with PyTorch3D by trying one of the tutorial notebooks.
| [Deform a sphere mesh to dolphin](https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/deform_source_mesh_to_target_mesh.ipynb)| [Bundle adjustment](https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/bundle_adjustment.ipynb) |
| [Deform a sphere mesh to dolphin](https://github.com/facebookresearch/pytorch3d/blob/main/docs/tutorials/deform_source_mesh_to_target_mesh.ipynb)| [Bundle adjustment](https://github.com/facebookresearch/pytorch3d/blob/main/docs/tutorials/bundle_adjustment.ipynb) |
| [Render textured pointclouds](https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/render_colored_points.ipynb)| [Fit a mesh with texture](https://github.com/facebookresearch/pytorch3d/blob/master/docs/tutorials/fit_textured_mesh.ipynb)|
| [Render textured pointclouds](https://github.com/facebookresearch/pytorch3d/blob/main/docs/tutorials/render_colored_points.ipynb)| [Fit a mesh with texture](https://github.com/facebookresearch/pytorch3d/blob/main/docs/tutorials/fit_textured_mesh.ipynb)|
@@ -71,6 +86,13 @@ We have created a short (~14 min) video tutorial providing an overview of the Py
We welcome new contributions to PyTorch3D and we will be actively maintaining this library! Please refer to [CONTRIBUTING.md](./.github/CONTRIBUTING.md) for full instructions on how to run the code, tests and linter, and submit your pull requests.
We welcome new contributions to PyTorch3D and we will be actively maintaining this library! Please refer to [CONTRIBUTING.md](./.github/CONTRIBUTING.md) for full instructions on how to run the code, tests and linter, and submit your pull requests.
## Development and Compatibility
-`main` branch: 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
- backward-compatibility between releases: no guarantee. Best efforts to communicate breaking changes and facilitate migration of code or data (incl. models).
## Contributors
## Contributors
PyTorch3D is written and maintained by the Facebook AI Research Computer Vision Team.
PyTorch3D is written and maintained by the Facebook AI Research Computer Vision Team.
@@ -79,11 +101,13 @@ In alphabetical order:
* Amitav Baruah
* Amitav Baruah
* Steve Branson
* Steve Branson
* Krzysztof Chalupka
* Jiali Duan
* Luya Gao
* Luya Gao
* Georgia Gkioxari
* Georgia Gkioxari
* Taylor Gordon
* Taylor Gordon
* Justin Johnson
* Justin Johnson
* Patrick Labtut
* Patrick Labatut
* Christoph Lassner
* Christoph Lassner
* Wan-Yen Lo
* Wan-Yen Lo
* David Novotny
* David Novotny
@@ -111,8 +135,8 @@ If you are using the pulsar backend for sphere-rendering (the `PulsarPointRender
```bibtex
```bibtex
@article{lassner2020pulsar,
@article{lassner2020pulsar,
author={Christoph Lassner},
author={Christoph Lassner and Michael Zollh\"ofer},
title={Fast Differentiable Raycasting for Neural Rendering using Sphere-based Representations},
@@ -122,16 +146,38 @@ If you are using the pulsar backend for sphere-rendering (the `PulsarPointRender
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`](https://github.com/facebookresearch/pytorch3d/releases), and the builds can be installed using `conda` as per the instructions in [INSTALL.md](INSTALL.md).
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`](https://github.com/facebookresearch/pytorch3d/releases), and the builds can be installed using `conda` as per the instructions in [INSTALL.md](INSTALL.md).
**[November 2nd 2020]:** PyTorch3D v0.3 released, integrating the pulsar backend.
**[Aug 10th 2022]:** PyTorch3D [v0.7.0](https://github.com/facebookresearch/pytorch3d/releases/tag/v0.7.0) released with Implicitron and MeshRasterizerOpenGL.
**[Apr 28th 2022]:** PyTorch3D [v0.6.2](https://github.com/facebookresearch/pytorch3d/releases/tag/v0.6.2) released
**[Dec 16th 2021]:** PyTorch3D [v0.6.1](https://github.com/facebookresearch/pytorch3d/releases/tag/v0.6.1) released
**[Oct 6th 2021]:** PyTorch3D [v0.6.0](https://github.com/facebookresearch/pytorch3d/releases/tag/v0.6.0) released
**[Aug 5th 2021]:** PyTorch3D [v0.5.0](https://github.com/facebookresearch/pytorch3d/releases/tag/v0.5.0) released
**[Feb 9th 2021]:** PyTorch3D [v0.4.0](https://github.com/facebookresearch/pytorch3d/releases/tag/v0.4.0) released with support for implicit functions, volume rendering and a [reimplementation of NeRF](https://github.com/facebookresearch/pytorch3d/tree/main/projects/nerf).
**[November 2nd 2020]:** PyTorch3D [v0.3.0](https://github.com/facebookresearch/pytorch3d/releases/tag/v0.3.0) released, integrating the pulsar backend.
**[Aug 28th 2020]:** PyTorch3D [v0.2.5](https://github.com/facebookresearch/pytorch3d/releases/tag/v0.2.5) released
**[July 17th 2020]:** PyTorch3D tech report published on ArXiv: https://arxiv.org/abs/2007.08501
**[July 17th 2020]:** PyTorch3D tech report published on ArXiv: https://arxiv.org/abs/2007.08501
**[April 24th 2020]:** PyTorch3D v0.2 released
**[April 24th 2020]:** PyTorch3D [v0.2.0](https://github.com/facebookresearch/pytorch3d/releases/tag/v0.2.0) released
**[March 25th 2020]:** [SynSin](https://arxiv.org/abs/1912.08804) codebase released using PyTorch3D: https://github.com/facebookresearch/synsin
**[March 25th 2020]:** [SynSin](https://arxiv.org/abs/1912.08804) codebase released using PyTorch3D: https://github.com/facebookresearch/synsin
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.