Skip to main content

Torchvision+ Deformable Convolutional Networks

Project description

Torchvision+ Deformable Convolution Networks

GitHub Workflow Status PyPI GitHub

This package contains the PyTorch implementations of the 2D Deformable Convolution operation (the commonly used torchvision.ops.deform_conv2d) proposed in https://arxiv.org/abs/1811.11168, as well as its 1D and 3D equivalences, which are not available in torchvision (thus the name).

And beyond that, the package also provides the transposed versions of them, which interestingly noone has ever proposed to use. The main idea is, while offset in deformable convolution guides the convolution kernel where to get the inputs to compute the output; in transposed deformable convolution, it guides the convolution kernel where to write the outputs.

Highlights

  • Supported operations: (All are implemented in C++/Cuda)

    • tvdcn.ops.deform_conv1d
    • tvdcn.ops.deform_conv2d
    • tvdcn.ops.deform_conv3d
    • tvdcn.ops.deform_conv_transpose1d
    • tvdcn.ops.deform_conv_transpose2d
    • tvdcn.ops.deform_conv_transpose3d
  • And the following supplementary operations (for activating mask):

    • tvdcn.ops.mask_softmax1d
    • tvdcn.ops.mask_softmax2d
    • tvdcn.ops.mask_softmax3d
  • Both offset and mask can be turned off, and can be applied in separate groups.

  • All the nn.Module wrappers for these operations are implemented, everything is @torch.jit.script-able! Please check Usage.

Note: We don't care much about onnx exportation, but if you do, you can check this repo: https://github.com/masamitsu-murase/deform_conv2d_onnx_exporter.

Requirements

  • torch>=1.9.0

Installation

From PyPI:

tvdcn provides some prebuilt wheels on PyPI. Run this command to install:

pip install tvdcn

The Linux and Windows wheels are built with Cuda 11.8. If you cannot find a wheel for your Arch/Python/Cuda, or there is any problem with library linking when importing, please proceed to instructions to build from source, all steps are super easy.

Linux/Windows MacOS
Python version: 3.8-3.11 3.8-3.11
PyTorch version: torch==2.0.1 torch==2.0.1
Cuda version: 11.8 -
GPU CCs: 3.7,5.0,6.0,6.1,7.0,7.5,8.0,8.6,8.9,9.0+PTX -

From Source:

For installing from source, you need a C++ compiler (gcc/msvc) and a Cuda compiler (nvcc). Clone this repo and execute the following command:

pip install .

Or just compile the binary for inplace usage:

python setup.py build_ext --inplace

A binary (.so file for Unix and .pyd file for Windows) should be compiled inside the tvdcn folder. To check if installation is successful, try:

import tvdcn

print('Library loaded successfully:', tvdcn.has_ops())
print('Compiled with Cuda:', tvdcn.with_cuda())

Note: We use soft Cuda version compatibility checking between the built binary and the installed PyTorch, which means only major version matching is required. However, we suggest building the binaries with the same Cuda version with installed PyTorch's Cuda version to prevent any possible conflict.

Usage

Functions:

Functionally, the package offers 6 functions (listed in Highlights) much similar to torchvision.ops.deform_conv2d. However, the order of parameters is slightly different, so be cautious (check this comparison). Specifically, the signatures of deform_conv2d and deform_conv_transpose2d look like this:

def deform_conv2d(
        input: Tensor,
        weight: Tensor,
        offset: Optional[Tensor] = None,
        mask: Optional[Tensor] = None,
        bias: Optional[Tensor] = None,
        stride: Union[int, Tuple[int, ...]] = 1,
        padding: Union[int, Tuple[int, ...]] = 0,
        dilation: Union[int, Tuple[int, ...]] = 1,
        groups: int = 1) -> Tensor:
    ...


def deform_conv_transpose2d(
        input: Tensor,
        weight: Tensor,
        offset: Optional[Tensor] = None,
        mask: Optional[Tensor] = None,
        bias: Optional[Tensor] = None,
        stride: Union[int, Tuple[int, ...]] = 1,
        padding: Union[int, Tuple[int, ...]] = 0,
        output_padding: Union[int, Tuple[int, ...]] = 0,
        dilation: Union[int, Tuple[int, ...]] = 1,
        groups: int = 1) -> Tensor:
    ...

If offset=None and mask=None, the executed operations are identical to conventional convolution.

Neural Network Layers:

The nn.Module wrappers are:

  • tvdcn.ops.DeformConv1d
  • tvdcn.ops.DeformConv2d
  • tvdcn.ops.DeformConv3d
  • tvdcn.ops.DeformConvTranspose1d
  • tvdcn.ops.DeformConvTranspose2d
  • tvdcn.ops.DeformConvTranspose3d

They are subclasses of the torch.nn.modules._ConvNd, but you have to specify offset and optionally mask as extra inputs for the forward function. For example:

import torch

from tvdcn import DeformConv2d

input = torch.rand(2, 3, 64, 64)
offset = torch.rand(2, 2 * 3 * 3, 62, 62)
# if mask is None, perform the original deform_conv without modulation (v2)
mask = torch.rand(2, 1 * 3 * 3, 62, 62)

conv = DeformConv2d(3, 16, kernel_size=(3, 3))

output = conv(input, offset, mask)
print(output.shape)

Additionally, following many other implementations out there, we also implemented the packed wrappers:

  • tvdcn.ops.PackedDeformConv1d
  • tvdcn.ops.PackedDeformConv2d
  • tvdcn.ops.PackedDeformConv3d
  • tvdcn.ops.PackedDeformConvTranspose1d
  • tvdcn.ops.PackedDeformConvTranspose2d
  • tvdcn.ops.PackedDeformConvTranspose3d

These are easy-to-use classes that contain ordinary convolution layers with appropriate hyperparameters to generate offset (and mask if initialized with modulated=True); but that means less customization. The only tunable hyperparameters that effect these supplementary conv layers are offset_groups and mask_groups, which have been decoupled from and behave somewhat similar to groups.

To use the softmax activation for mask proposed in Deformable Convolution v3, set mask_activation='softmax'. offset_activation and mask_activation also accept any nn.Module.

import torch

from tvdcn import PackedDeformConv1d

input = torch.rand(2, 3, 128)

conv = PackedDeformConv1d(3, 16,
                          kernel_size=5,
                          modulated=True,
                          mask_activation='softmax')
# jit scripting
scripted_conv = torch.jit.script(conv)
print(scripted_conv)

output = scripted_conv(input)
print(output.shape)

Note: For transposed packed modules, we are generating offset and mask with pointwise convolution as we haven't found a better way to do it.

Check the examples folder, maybe you can find something helpful.

Acknowledgements

This for fun project is directly modified and extended from torchvision.ops.deform_conv2d.

License

The code is released under the MIT license. See LICENSE.txt for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tvdcn-0.2.7.tar.gz (49.4 kB view details)

Uploaded Source

Built Distributions

tvdcn-0.2.7-cp311-cp311-win_amd64.whl (10.0 MB view details)

Uploaded CPython 3.11 Windows x86-64

tvdcn-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

tvdcn-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl (466.3 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

tvdcn-0.2.7-cp310-cp310-win_amd64.whl (10.0 MB view details)

Uploaded CPython 3.10 Windows x86-64

tvdcn-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

tvdcn-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl (466.3 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

tvdcn-0.2.7-cp39-cp39-win_amd64.whl (10.0 MB view details)

Uploaded CPython 3.9 Windows x86-64

tvdcn-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

tvdcn-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl (466.2 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

tvdcn-0.2.7-cp38-cp38-win_amd64.whl (10.0 MB view details)

Uploaded CPython 3.8 Windows x86-64

tvdcn-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (20.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

tvdcn-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl (466.2 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

File details

Details for the file tvdcn-0.2.7.tar.gz.

File metadata

  • Download URL: tvdcn-0.2.7.tar.gz
  • Upload date:
  • Size: 49.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for tvdcn-0.2.7.tar.gz
Algorithm Hash digest
SHA256 201015580bffa6527bb4f492bf0e673ced6b974aef42c19850b95095d0fa7f07
MD5 b4b37c6c572ca5331ed43c535f8ab21a
BLAKE2b-256 4b7f0dac02e624aa20bef5fa5f60aa659d7f25417a72c38aa2f2792ddecab3b7

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: tvdcn-0.2.7-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 10.0 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for tvdcn-0.2.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e02593ab424814861e1f44b72c67af94d95c22ed53a28b5ed3c0cc1a696af979
MD5 711a6b80f49a503366130e4c532dcb72
BLAKE2b-256 986397bed7db6af87f58f46adcab675c31e3e1e9fd305c12ce3601dd193a181c

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tvdcn-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7398ca0046f8b3bffd9a1133b13545a96afcda583ce56176d90ee68fa7cdd49d
MD5 b813e0ebe8428ffb310f03ba311cfabd
BLAKE2b-256 48127109f2a8986122927ce9dfe4cd74575be48f131882d3671e2c45b8f1eeb8

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for tvdcn-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2552a0fcf079df37fba7b210d17283f9f74c799561467a6dc8beaf06ac69822e
MD5 3371043c930f58a598a16a294cf1b72b
BLAKE2b-256 1ea567ed82714c30b0cdeea721f7516ebaf51c199d12d54cfa15f4f3b22399d0

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: tvdcn-0.2.7-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 10.0 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for tvdcn-0.2.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1b079518bbf39ea07c0b08c7daa7c1105b04ecc8be2380791b244ef3f1684e6d
MD5 c8d9594f4d226a95d1e02c59e845cfe1
BLAKE2b-256 333242a3824a45074771356f1b914610ee8dc18fd0ed0cc728ca5af57453a8cc

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tvdcn-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a68c980a40c03113127964112276db73a2ff2d508a08afde182191f8170ec15e
MD5 6e856f7a0bcfd7fe3964d312531230de
BLAKE2b-256 79f9c8c8bf07ab4789a3e7c6953f051d8108603a3e206b545e9709c0375ae3b8

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for tvdcn-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b4be975ef7eeaa7a7c8517ae9a129231ae73ed8fd70a87c5a21f1897fd13a9eb
MD5 875cb8f638a3e38166ec69a93a1792ae
BLAKE2b-256 4f8d0dd0a992df3e64803b5f4a12ad32865f7600fe77771cd7bf4e937e023acd

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: tvdcn-0.2.7-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 10.0 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for tvdcn-0.2.7-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 2095a1e84d4471a39ea1dc420b52e082c81b1fe67c68a16c2d5aa306a1657d4f
MD5 be0194c00640b5b3dc44be892c4bd0b7
BLAKE2b-256 d6eb2b7c6cd51b91710d7a51bbf3bfabfffaf8a47291bc179a16353aacf62c80

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tvdcn-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fe3419d25b27aa88be3121a3a60188281f943bfbf7367c21959e55154ad90d66
MD5 fac4144d380a037ed3f4d14e21e7a2bf
BLAKE2b-256 0c364abaf675fff0bb3208c50a1df04dc2542aa14d8281bd74999d58c22993e8

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for tvdcn-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1ab25fa90f177d81251dafa50319a1cd9e4c03293c6cbb972ee0df5468b09f49
MD5 290cb53b81ac8304a3adc2ea8c89adcb
BLAKE2b-256 354f9e5a9671c29d33d54e0429fd82d942860e28e435e2e8cde82a9c99140d61

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: tvdcn-0.2.7-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 10.0 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for tvdcn-0.2.7-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 86920c4c64296bbf6104ffcda8f6e25eb4611a23c6baa1960b7b905819b43f19
MD5 d717e4a4360ad492924ee12ae2dd1e1f
BLAKE2b-256 9a05c63f4aa37863f06c3a55bcc406aba824d0873eadf3ac2168bbdd85d069c3

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tvdcn-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8821564eedfd291c2076136a6db17c8048fa1501367a5c7705fcbc31e7f6a276
MD5 88df778f5dde7bd6c5f53876056334ff
BLAKE2b-256 862aa7e3088aa0e595f1664a49fb94c89d4f1c6499eb1a97bab3ec4b1e154a3e

See more details on using hashes here.

File details

Details for the file tvdcn-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for tvdcn-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4a3230a96cbeb22dc488b4001ce76fb04679829fabe2d6353d05fd02bb45c137
MD5 521d54751badd28e44ef025a7b14efda
BLAKE2b-256 9c207568c508751b22241bc768987acd8fa2c152315a70ffe3c971c432b5bfcd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page