Summary: Use `self.__class__` when creating new instances, to slightly accommodate inheritance.
Reviewed By: nikhilaravi
Differential Revision: D21504476
fbshipit-source-id: b4600d15462fc1985da95a4cf761c7d794cfb0bb
Summary:
Fixes the case where the rotation angle is exactly 0/PI.
Added a test for `so3_log_map(identity_matrix)`.
Reviewed By: nikhilaravi
Differential Revision: D21477078
fbshipit-source-id: adff804da97f6f0d4f50aa1f6904a34832cb8bfe
Summary: Fix to enable a mesh/point rasterizer to be initialized without having to specify the camera.
Reviewed By: jcjohnson, gkioxari
Differential Revision: D21362359
fbshipit-source-id: 4f84ea18ad9f179c7b7c2289ebf9422a2f5e26de
Summary: This has been failing intermittently
Reviewed By: nikhilaravi
Differential Revision: D21403157
fbshipit-source-id: 51b74d6c813b52effe72d14b565e250fcabbb463
Summary:
Ran the linter.
TODO: need to update the linter as per D21353065.
Reviewed By: bottler
Differential Revision: D21362270
fbshipit-source-id: ad0e781de0a29f565ad25c43bc94a19b1828c020
Summary:
Use nn.functional.interpolate instead of a TorchVision transform to resize texture maps to a common value. This works on all devices. This fixes issue #175.
Also fix the condition so it only happens when needed.
Reviewed By: nikhilaravi
Differential Revision: D21324510
fbshipit-source-id: c50eb06514984995bd81f2c44079be6e0b4098e4
Summary: Update version number for version 0.2.0.
Reviewed By: nikhilaravi
Differential Revision: D21157358
fbshipit-source-id: 32a5b93e5dc65a31a806a5ce7231f8603fe02e85
Summary: Bump the nvidia driver used in the conda tests. Add an environment variable (unused) to allow building without ninja. Print relative error on assertClose failure.
Reviewed By: nikhilaravi
Differential Revision: D21227373
fbshipit-source-id: 5dd8eb097151da27d3632daa755a1e7b9ac97845
Summary:
Cuda test failing on circle with the error `random_ expects 'from' to be less than 'to', but got from=0 >= to=0`
This is because the `high` value in `torch.randint` is 1 more than the highest value in the distribution from which a value is drawn. So if there is only 1 cuda device available then the low and high are 0.
Reviewed By: gkioxari
Differential Revision: D21236669
fbshipit-source-id: 46c312d431c474f1f2c50747b1d5e7afbd7df3a9
Summary:
Updates to:
- enable cuda kernel launches on any GPU (not just the default)
- cuda and contiguous checks for all kernels
- checks to ensure all tensors are on the same device
- error reporting in the cuda kernels
- cuda tests now run on a random device not just the default
Reviewed By: jcjohnson, gkioxari
Differential Revision: D21215280
fbshipit-source-id: 1bedc9fe6c35e9e920bdc4d78ed12865b1005519
Summary:
Updated the load obj function to support creating of a per face texture map using the information in an .mtl file. Uses the approach from in SoftRasterizer.
Currently I have ported in the SoftRasterizer code but this is only to help with comparison and will be deleted before landing. The ShapeNet Test data will also be deleted.
Here is the [Design doc](https://docs.google.com/document/d/1AUcLP4QwVSqlfLAUfbjM9ic5vYn9P54Ha8QbcVXW2eI/edit?usp=sharing).
## Added
- texture atlas creation functions in PyTorch based on the SoftRas cuda implementation
- tests to compare SoftRas vs PyTorch3D implementation to verify it matches (using real shapenet data with meshes consisting of multiple textures)
- benchmarks tests
## Remaining todo:
- add more tests for obj io to test the new functions and the two texturing options
- replace the shapenet data with the output from SoftRas saved as a file.
# MAIN FILES TO REVIEW
- `obj_io.py`
- `test_obj_io.py` [still some tests to be added but have comparisons with SoftRas for now]
The reference SoftRas implementations are in `softras_load_obj.py` and `load_textures.cu`.
Reviewed By: gkioxari
Differential Revision: D20754859
fbshipit-source-id: 42ace9dfb73f26e29d800c763f56d5b66c60c5e2
Summary:
Use aten instead of torch interface in all cuda code. This allows the cuda build to work with pytorch 1.5 with GCC 5 (e.g. the compiler of ubuntu 16.04LTS). This wasn't working. It has been failing with errors like the below, perhaps due to a bug in nvcc.
```
torch/include/torch/csrc/api/include/torch/nn/cloneable.h:68:61: error: invalid static_cast from type ‘const torch::OrderedDict<std::basic_string<char>, std::shared_ptr<torch::nn::Module> >’ to type ‘torch::OrderedDict<std::basic_string<char>, std::shared_ptr<torch::nn::Module> >
```
Reviewed By: nikhilaravi
Differential Revision: D21204029
fbshipit-source-id: ca6bdbcecf42493365e1c23a33fe35e1759fe8b6
Summary:
davnov134 found that the algorithm crashes if X is an axis-aligned plane. This is because I implemented scaling control points by `X.std()` as a poor man’s version of PCA whitening.
I checked that it does not bring consistent improvements, so let’s get rid of it.
The algorithm still results in slightly higher errors on the axis aligned planes but at least it does not crash. As a next step, I will experiment with detecting a planar case and using 3-point barycentric coordinates rather than 4-points.
Reviewed By: davnov134
Differential Revision: D21179968
fbshipit-source-id: 1f002fce5541934486b51808be0e910324977222
Summary:
We have multiple KNN CUDA implementations. From python, users can currently request a particular implementation via the `version` flag, but they have no way of knowing which implementations can be used for a given problem.
This diff exposes a function `pytorch3d._C.knn_check_version(version, D, K)` that returns whether a particular version can be used.
Reviewed By: nikhilaravi
Differential Revision: D21162573
fbshipit-source-id: 6061960bdcecba454fd920b00036f4e9ff3fdbc0
Summary:
Modify test_chamfer for more robustness. Avoid empty pointclouds, including where point_reduction is mean, for which we currently return nan (*), and so that we aren't looking at an empty gradient. Make sure we aren't using padding as points in the homogenous cases in the tests, which will lead to a tie between closest points and therefore a potential instability in the gradient - see https://github.com/pytorch/pytorch/issues/35699.
(*) This doesn't attempt to fix the nan.
Reviewed By: nikhilaravi, gkioxari
Differential Revision: D21157322
fbshipit-source-id: a609e84e25a24379c8928ff645d587552526e4af
Summary: cuda 10.2 location on linux. Also remove unused conda test dependencies.
Reviewed By: nikhilaravi
Differential Revision: D21176409
fbshipit-source-id: dd3f339a92233ff16877ba76506ddf8f4418715d
Summary:
Added backface culling as an option to the `raster_settings`. This is needed for the full forward rendering of shapenet meshes with texture (some meshes contain
multiple overlapping segments which have different textures).
For a triangle (v0, v1, v2) define the vectors A = (v1 - v0) and B = (v2 − v0) and use this to calculate the area of the triangle as:
```
area = 0.5 * A x B
area = 0.5 * ((x1 − x0)(y2 − y0) − (x2 − x0)(y1 − y0))
```
The area will be positive if (v0, v1, v2) are oriented counterclockwise (a front face), and negative if (v0, v1, v2) are oriented clockwise (a back face).
We can reuse the `edge_function` as it already calculates the triangle area.
Reviewed By: jcjohnson
Differential Revision: D20960115
fbshipit-source-id: 2d8a4b9ccfb653df18e79aed8d05c7ec0f057ab1
Summary:
Add conda packages for pytorch 1.5. Make wheels be only pytorch 1.5.
Note that pytorch 1.4 has conda packages for cuda 9.2, 10.0 and 10.1, whilst pytorch 1.5 has packages for cuda 9.2, 10.1 and 10.2. We mirror these choices.
Reviewed By: nikhilaravi
Differential Revision: D21157392
fbshipit-source-id: 2f7311e6a83774a6d6c8afb8110b8bd9f37f1454
Summary:
Fix a bug which resulted in a rendering artifacts if the image size was not a multiple of 16.
Fix: Revert coarse rasterization to original implementation and only update fine rasterization to reverse the ordering of Y and X axis. This is much simpler than the previous approach!
Additional changes:
- updated mesh rendering end-end tests to check outputs from both naive and coarse to fine rasterization.
- added pointcloud rendering end-end tests
Reviewed By: gkioxari
Differential Revision: D21102725
fbshipit-source-id: 2e7e1b013dd6dd12b3a00b79eb8167deddb2e89a
Summary:
None of the current test_build tests make sense during `conda build`.
Also remove the unnecessary dependency on the `six` library.
Reviewed By: nikhilaravi
Differential Revision: D20893852
fbshipit-source-id: 685f0446eaa0bd9151eeee89fc630a1ddc0252ff
Summary: This is mostly replacing the old PackedTensorAccessor with the new PackedTensorAccessor64.
Reviewed By: gkioxari
Differential Revision: D21088773
fbshipit-source-id: 5973e5a29d934eafb7c70ec5ec154ca076b64d27
Summary: A couple of files for the removed nearest_neighbor functionality are left behind.
Reviewed By: nikhilaravi
Differential Revision: D21088624
fbshipit-source-id: 4bb29016b4e5f63102765b384c363733b60032fa
Summary:
Efficient PnP algorithm to fit 2D to 3D correspondences under perspective assumption.
Benchmarked both variants of nullspace and pick one; SVD takes 7 times longer in the 100K points case.
Reviewed By: davnov134, gkioxari
Differential Revision: D20095754
fbshipit-source-id: 2b4519729630e6373820880272f674829eaed073
Summary: Made a CameraBase class. Added `unproject_points` method for each camera class.
Reviewed By: nikhilaravi
Differential Revision: D20373602
fbshipit-source-id: 7e3da5ae420091b5fcab400a9884ef29ad7a7343
Summary: Estimates normals of a point cloud.
Reviewed By: gkioxari
Differential Revision: D20860182
fbshipit-source-id: 652ec2743fa645e02c01ffa37c2971bf27b89cef
Summary: It seemed that even though the chamfer diff was rebased on top of the knn autograd diff, some of the final updates did not get applied. I'm really surprised that the sandcastle tests did not fail and prevent the diff from landing.
Reviewed By: gkioxari
Differential Revision: D21066156
fbshipit-source-id: 5216efe95180c1b6082d0bac404fa1920cfb7b02
Summary: knn is more general and faster than the nearest_neighbor code, so remove the latter.
Reviewed By: gkioxari
Differential Revision: D20816424
fbshipit-source-id: 75d6c44d17180752d0c9859814bbdf7892558158
Summary:
Allow Pointclouds objects and heterogenous data to be provided for Chamfer loss. Remove "none" as an option for point_reduction because it doesn't make sense and in the current implementation is effectively the same as "sum".
Possible improvement: create specialised operations for sum and cosine_similarity of padded tensors, to avoid having to create masks. sum would be useful elsewhere.
Reviewed By: gkioxari
Differential Revision: D20816301
fbshipit-source-id: 0f32073210225d157c029d80de450eecdb64f4d2
Summary: Remove `bin_size` and `max_faces_per_pixel` from being specified. This means the coarse-to-fine rasterization will be used by default and will help avoid confusion with the naive version.
Reviewed By: jcjohnson
Differential Revision: D20908905
fbshipit-source-id: c181c88e844d888aa81a36870918307961dc1175
Summary:
Pytorch 1.5 is coming soon. I imagine we will want the ability to upload conda packages for pytorch3d to anaconda cloud for each of pytorch 1.4 and pytorch 1.5. This change adds the dependent pytorch version to the name of the conda package to make that feasible.
As an example, a built package after this change will have a name like `linux-64/pytorch3d-0.1.1-py38_cu100_pyt14.tar.bz2`, instead of simply `linux-64/pytorch3d-0.1.1-py38_cu100.tar.bz2`.
Also some tiny cleanup of circleci config.
Other alternatives: (1) forcing users to update pytorch and pytorch3d together, (2) trying to get away with one build for multiple pytorch versions.
Reviewed By: nikhilaravi
Differential Revision: D20599039
fbshipit-source-id: 20164eda4a5141afed47b3596e559950d796ffc9
Summary: Interface and working implementation of ragged KNN. Benchmarks (which aren't ragged) haven't slowed. New benchmark shows that ragged is faster than non-ragged of the same shape.
Reviewed By: jcjohnson
Differential Revision: D20696507
fbshipit-source-id: 21b80f71343a3475c8d3ee0ce2680f92f0fae4de
Summary: The conda build process generates some files of its own, which we don't want to catch in our test for copyright notices.
Reviewed By: nikhilaravi, patricklabatut
Differential Revision: D20868566
fbshipit-source-id: 76a786a3eb9a674d59e630cc06f346e8b82258a4
Summary:
Allows to initialize a Transform3D object with a batch of user-defined transformation matrices:
```
t = Transform3D(matrix=torch.randn(2, 4, 4))
```
Reviewed By: nikhilaravi
Differential Revision: D20693475
fbshipit-source-id: dccc49b2ca4c19a034844c63463953ba8f52c1bc