pytorch/tools
bnehoran 74b65c32be Add align_corners option to grid_sample and affine_grid, change default to False (#24929)
Summary:
Resolves: https://github.com/pytorch/pytorch/issues/20785
Addresses https://github.com/pytorch/pytorch/issues/24470 for `affine_grid`
Subsumes and closes: https://github.com/pytorch/pytorch/pull/24878 and likewise closes: https://github.com/pytorch/pytorch/issues/24821

Adds the `align_corners` option to `grid_sample` and `affine_grid`, paralleling the option that was added to `interpolate` in version 0.4.0.

In short, setting `align_corners` to `False` allows these functions to be resolution agnostic.
This ensures, for example, that a grid generated from a neural net trained to warp 1024x1024 images will also work to warp the same image upsampled/downsampled to other resolutions like 512x512 or 2048x2048 without producing scaling/stretching artifacts.

Refer to the documentation and https://github.com/pytorch/pytorch/issues/20785 for more details.

#### BC-Breaking Changes

- **Important**: BC-Breaking change because of new default for `align_corners`
The old functionality can still be achieved by setting `align_corners=True`, but the default is now set to `align_corners=False`, since this is the more correct setting, and since this matches the default setting of `interpolate`.

- **Should not cause BC issues**: BC-Breaking change for pathological use case
2D affine transforms on 1D coordinates and 3D affine transforms on 2D coordinates (that is, when one of the spatial dimensions has an empty span) are ill-defined, and not an intended use case of `affine_grid`. Whereas before, all grid point components along such dimension were set arbitrarily to `-1` (that is, before multiplying be the affine matrix), they are now all set instead to `0`, which is a much more consistent and defensible arbitrary choice. A warning is triggered for such cases.

#### Documentation

- Update `affine_grid` documentation to express that it does indeed support 3D affine transforms. This support was already there but not documented.
- Add documentation warnings for BC-breaking changes in `grid_sample` and `affine_grid` (see above).

#### Refactors

- `affine_grid` no longer dispatches to cuDNN under any circumstances.
The decision point for when the cuDNN `affine_grid_generator` is compatible with the native PyTorch version and when it fails is a headache to maintain (see [these conditions](5377478e94/torch/nn/_functions/vision.py (L7-L8))). The native PyTorch kernel is now used in all cases.

- The kernels for `grid_sample` are slightly refactored to make maintenance easier.

#### Tests
Two new tests are added in `test_nn.py`:
- `test_affine_grid_error_checking` for errors and warnings in `affine_grid`
- `test_affine_grid_3D` for testing `affine_grid`'s 3D functionality. The functionality existed prior to this, but wasn't tested.
Pull Request resolved: https://github.com/pytorch/pytorch/pull/24929

Differential Revision: D16949064

Pulled By: ailzhang

fbshipit-source-id: b133ce0d47a2a5b3e2140b9d05fb05fca9140926
2019-08-21 21:17:49 -07:00
..
amd_build Improve hip-clang support in build_amd.py (#23835) 2019-08-07 07:49:07 -07:00
autograd Add align_corners option to grid_sample and affine_grid, change default to False (#24929) 2019-08-21 21:17:49 -07:00
cwrap Fixed deprecated use of yaml.load 2019-07-22 13:25:27 -07:00
docker
jit Revert D16929363: Revert D16048264: Add static dispatch mode to reduce mobile code size 2019-08-20 17:08:31 -07:00
nnwrap Turn on F401: Unused import warning. (#18598) 2019-03-30 09:01:17 -07:00
pyi Implement tensor.align_to(names), torch.align_tensors(*tensors) (#23804) 2019-08-14 09:40:27 -07:00
setup_helpers Fix CUDNN location related build issue on Antergos Linux (based on Arch) (#24300) 2019-08-15 15:22:49 -07:00
shared Turn on F401: Unused import warning. (#18598) 2019-03-30 09:01:17 -07:00
__init__.py
aten_mirror.sh Restore TBB module (#20454) 2019-05-28 02:49:36 -07:00
build_libtorch.py Specify build dir as a global variable in BUILD_DIR in the build system. 2019-07-25 07:19:47 -07:00
build_pytorch_libs.py Remove escape_path in our build system. (#24044) 2019-08-13 20:38:19 -07:00
build_variables.py bind autograd functions into C++ (#24342) 2019-08-20 15:36:34 -07:00
clang_format.py clang-format by line (#21531) 2019-06-07 13:42:44 -07:00
clang_tidy.py print clang tidy output to stderr (#24052) 2019-08-08 17:42:24 -07:00
download_mnist.py Turn on F401: Unused import warning. (#18598) 2019-03-30 09:01:17 -07:00
flake8_hook.py Add missing shebangs to Python files with executable permissions. 2019-06-06 10:53:40 -07:00
generated_dirs.txt
git-pre-commit Remove THD (#22065) 2019-06-25 12:19:13 -07:00
git_add_generated_dirs.sh
git_reset_generated_dirs.sh
pytorch.version Convert all tabs to spaces, add CI. (#18959) 2019-04-09 08:12:26 -07:00
README.md
run-clang-tidy-in-ci.sh PyTorch export to ONNX Opset 7 and 8 - Cont (#22421) 2019-07-12 14:52:48 -07:00

This folder contains a number of scripts which are used as part of the PyTorch build process. This directory also doubles as a Python module hierarchy (thus the __init__.py).

Overview

Modern infrastructure:

  • autograd - Code generation for autograd. This includes definitions of all our derivatives.
  • jit - Code generation for JIT
  • shared - Generic infrastructure that scripts in tools may find useful.
    • module_loader.py - Makes it easier to import arbitrary Python files in a script, without having to add them to the PYTHONPATH first.

Legacy infrastructure (we should kill this):

  • nnwrap - Generates the THNN/THCUNN wrappers which make legacy functionality available. (TODO: What exactly does this implement?)
  • cwrap - Implementation of legacy code generation for THNN/THCUNN. This is used by nnwrap.

Build system pieces:

  • setup_helpers - Helper code for searching for third-party dependencies on the user system.
  • build_pytorch_libs.sh - Script that builds all of the constituent libraries of PyTorch, but not the PyTorch Python extension itself. We are working on eliminating this script in favor of a unified cmake build.
  • build_pytorch_libs.bat - Same as above, but for Windows.
  • build_libtorch.py - Script for building libtorch, a standalone C++ library without Python support. This build script is tested in CI.

Developer tools which you might find useful:

Important if you want to run on AMD GPU:

  • amd_build - HIPify scripts, for transpiling CUDA into AMD HIP. Right now, PyTorch and Caffe2 share logic for how to do this transpilation, but have separate entry-points for transpiling either PyTorch or Caffe2 code.
    • build_amd.py - Top-level entry point for HIPifying our codebase.

Tools which are only situationally useful: