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 Deformable Convolution operation (the commonly used torchvision.ops.deform_conv2d) proposed in https://arxiv.org/abs/1811.11168, and the Transposed Deformable Convolution proposed in https://arxiv.org/abs/2210.09446 (currently without interpolation kernel scaling). It also supports their 1D and 3D equivalences, which are not available in torchvision (thus the name).

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 (mask activation proposed in https://arxiv.org/abs/2211.05778):

    • 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) with C++17 features enabled. 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, int]] = 1,
        padding: Union[int, Tuple[int, int]] = 0,
        dilation: Union[int, Tuple[int, 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, int]] = 1,
        padding: Union[int, Tuple[int, int]] = 0,
        output_padding: Union[int, Tuple[int, int]] = 0,
        dilation: Union[int, Tuple[int, 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.4.1.tar.gz (74.1 kB view details)

Uploaded Source

Built Distributions

tvdcn-0.4.1-cp311-cp311-win_amd64.whl (10.2 MB view details)

Uploaded CPython 3.11 Windows x86-64

tvdcn-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

tvdcn-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl (540.9 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

tvdcn-0.4.1-cp310-cp310-win_amd64.whl (10.2 MB view details)

Uploaded CPython 3.10 Windows x86-64

tvdcn-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

tvdcn-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl (540.9 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

tvdcn-0.4.1-cp39-cp39-win_amd64.whl (10.2 MB view details)

Uploaded CPython 3.9 Windows x86-64

tvdcn-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

tvdcn-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl (540.9 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

tvdcn-0.4.1-cp38-cp38-win_amd64.whl (10.2 MB view details)

Uploaded CPython 3.8 Windows x86-64

tvdcn-0.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

tvdcn-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl (540.9 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for tvdcn-0.4.1.tar.gz
Algorithm Hash digest
SHA256 17a3652369eedde7ba4c2eaa0044bf4b05c864fd0de3268fd4abf1803cdda532
MD5 3f59eb4a9bf89b0da4ec5ccdc6e29177
BLAKE2b-256 58faf3790cd24771c22e8b3ef4a941b9d04d896e704903d22e005fb3ad21fbe9

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for tvdcn-0.4.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 63a6eb3afdf90329ddfa5cbe36f154370d823681bdb029e4bdf733ff5f9ba454
MD5 e9a5ac6b1e004f5bf945f9d5e4e5a2db
BLAKE2b-256 c233e1bc927af8ecaf69c06c5e546b0e78aa9bc7c525400339e8dba872ff9cd8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tvdcn-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dfa8a4b4037769325de095794ecdf68ec6ab578fd593875c28f3418b5193e947
MD5 e619569c802924208a3a69c34d95e96c
BLAKE2b-256 cee1880c1b77bf8715035c5b16ea46f4fb110ac717ccb92b169cd7642233f9cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tvdcn-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0177c48245b84255a2a6417b4bff59578b34f33c47092e51b89e5fc9816ca4bb
MD5 78a88e403a46b38970201dda7d8308c2
BLAKE2b-256 9215ee1fe527f1c9e97ebed05a39e47a4ee69d99d9c3ebecc0f5de19bed7d674

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for tvdcn-0.4.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 064eb89d8d5797045bd637acaf9e2ac9771063a9d88182fd6027fd0521523e60
MD5 d308b15b1af57984dd7a4b4488006774
BLAKE2b-256 199384412ab1d184c668d840177207658f266646566167f738efac68566ec835

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tvdcn-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 79675609fbc3afe117ec588a6e6b9f03852b39153609129c565f503abb911dfe
MD5 909646a234562c164e6f4a40540d6ad2
BLAKE2b-256 015a8905e668cce55fee2671fe459053ae2ae44db8240ec4adc87d874f58f7ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tvdcn-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fca8a96286076d9d40e87844d758e681cfdc59d005b8d5764c69ca48c5e002bf
MD5 7db71ea1e52e44a2fdc95e8c1b896930
BLAKE2b-256 e98ceec1eb8dd322ba8cf8b48f750b6745da997a5175de3aed82b1015ebff232

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for tvdcn-0.4.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 6d02fee84589c9995edf9dbeb5bcb15c7f9fb6de914fd1d600d66a26ff7b89d9
MD5 93ffbf92bfbef1bf134238294397aa94
BLAKE2b-256 20abab877073a5346cdf71ddc0c0827e1ee5f39eef72e5c4824fcd85ced947a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tvdcn-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d9f000d126212a6465a7d8a251aceb9e4772cfb34f4af0732428db4827d7a5e
MD5 8992b565ea596f4f4bb99b0f98586f82
BLAKE2b-256 2750951caf129eb82b2ef461fe58a2cb55253788af792f88bc050fd5c5cf555c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tvdcn-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0c760527d4eea243b377de03bcb254f0b0afff9da188d4dc89d7e3072ffbc2c6
MD5 969ec19af3e35ce43a157ed232a0a32c
BLAKE2b-256 07fa924607ecb63c7db723b630bbd06a4f1b28ec7893401841f4e9ca15b0dbb3

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for tvdcn-0.4.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 dc14fcfe77c4f498cda579e1a9678dcf0a60df95027ebaaf78b00723b7607afe
MD5 3b498701af0dad24c979b765cbefc9ad
BLAKE2b-256 083a0bfbc8ff73aaaeeaa6ab4c26b4d98c1d527876750566fd17647b8f80e1b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tvdcn-0.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 34af1574deb607d3ff0692cd8351d695c9bb7afa8cb6f1fa64b6b254bcc91eea
MD5 6da884f6e96bc97f884ac36c44605b2c
BLAKE2b-256 33a20a2c0b856f19a380c15355550c47e21c3a01814a84c1a224912052ce2ddb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tvdcn-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4772d4f2de6207a6b7ee62db8340ac4758d01cb64c11d46038bfdd067d82deb0
MD5 3a67fad8a0c695afec84d8baa81cdf0a
BLAKE2b-256 42fb9b3e87b98a2e783b2231398f71cd03f86b7b713ceab2f5b832cdf924de16

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