Torchvision+ Deformable Convolutional Networks
Project description
Torchvision+ Deformable Convolution Networks
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
andmask
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 17a3652369eedde7ba4c2eaa0044bf4b05c864fd0de3268fd4abf1803cdda532 |
|
MD5 | 3f59eb4a9bf89b0da4ec5ccdc6e29177 |
|
BLAKE2b-256 | 58faf3790cd24771c22e8b3ef4a941b9d04d896e704903d22e005fb3ad21fbe9 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 63a6eb3afdf90329ddfa5cbe36f154370d823681bdb029e4bdf733ff5f9ba454 |
|
MD5 | e9a5ac6b1e004f5bf945f9d5e4e5a2db |
|
BLAKE2b-256 | c233e1bc927af8ecaf69c06c5e546b0e78aa9bc7c525400339e8dba872ff9cd8 |
File details
Details for the file tvdcn-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: tvdcn-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 34.3 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | dfa8a4b4037769325de095794ecdf68ec6ab578fd593875c28f3418b5193e947 |
|
MD5 | e619569c802924208a3a69c34d95e96c |
|
BLAKE2b-256 | cee1880c1b77bf8715035c5b16ea46f4fb110ac717ccb92b169cd7642233f9cf |
File details
Details for the file tvdcn-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: tvdcn-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 540.9 kB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0177c48245b84255a2a6417b4bff59578b34f33c47092e51b89e5fc9816ca4bb |
|
MD5 | 78a88e403a46b38970201dda7d8308c2 |
|
BLAKE2b-256 | 9215ee1fe527f1c9e97ebed05a39e47a4ee69d99d9c3ebecc0f5de19bed7d674 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 064eb89d8d5797045bd637acaf9e2ac9771063a9d88182fd6027fd0521523e60 |
|
MD5 | d308b15b1af57984dd7a4b4488006774 |
|
BLAKE2b-256 | 199384412ab1d184c668d840177207658f266646566167f738efac68566ec835 |
File details
Details for the file tvdcn-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: tvdcn-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 34.3 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 79675609fbc3afe117ec588a6e6b9f03852b39153609129c565f503abb911dfe |
|
MD5 | 909646a234562c164e6f4a40540d6ad2 |
|
BLAKE2b-256 | 015a8905e668cce55fee2671fe459053ae2ae44db8240ec4adc87d874f58f7ef |
File details
Details for the file tvdcn-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: tvdcn-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 540.9 kB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fca8a96286076d9d40e87844d758e681cfdc59d005b8d5764c69ca48c5e002bf |
|
MD5 | 7db71ea1e52e44a2fdc95e8c1b896930 |
|
BLAKE2b-256 | e98ceec1eb8dd322ba8cf8b48f750b6745da997a5175de3aed82b1015ebff232 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d02fee84589c9995edf9dbeb5bcb15c7f9fb6de914fd1d600d66a26ff7b89d9 |
|
MD5 | 93ffbf92bfbef1bf134238294397aa94 |
|
BLAKE2b-256 | 20abab877073a5346cdf71ddc0c0827e1ee5f39eef72e5c4824fcd85ced947a2 |
File details
Details for the file tvdcn-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: tvdcn-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 34.3 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d9f000d126212a6465a7d8a251aceb9e4772cfb34f4af0732428db4827d7a5e |
|
MD5 | 8992b565ea596f4f4bb99b0f98586f82 |
|
BLAKE2b-256 | 2750951caf129eb82b2ef461fe58a2cb55253788af792f88bc050fd5c5cf555c |
File details
Details for the file tvdcn-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: tvdcn-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl
- Upload date:
- Size: 540.9 kB
- Tags: CPython 3.9, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0c760527d4eea243b377de03bcb254f0b0afff9da188d4dc89d7e3072ffbc2c6 |
|
MD5 | 969ec19af3e35ce43a157ed232a0a32c |
|
BLAKE2b-256 | 07fa924607ecb63c7db723b630bbd06a4f1b28ec7893401841f4e9ca15b0dbb3 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | dc14fcfe77c4f498cda579e1a9678dcf0a60df95027ebaaf78b00723b7607afe |
|
MD5 | 3b498701af0dad24c979b765cbefc9ad |
|
BLAKE2b-256 | 083a0bfbc8ff73aaaeeaa6ab4c26b4d98c1d527876750566fd17647b8f80e1b5 |
File details
Details for the file tvdcn-0.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: tvdcn-0.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 34.3 MB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 34af1574deb607d3ff0692cd8351d695c9bb7afa8cb6f1fa64b6b254bcc91eea |
|
MD5 | 6da884f6e96bc97f884ac36c44605b2c |
|
BLAKE2b-256 | 33a20a2c0b856f19a380c15355550c47e21c3a01814a84c1a224912052ce2ddb |
File details
Details for the file tvdcn-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: tvdcn-0.4.1-cp38-cp38-macosx_10_9_x86_64.whl
- Upload date:
- Size: 540.9 kB
- Tags: CPython 3.8, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4772d4f2de6207a6b7ee62db8340ac4758d01cb64c11d46038bfdd067d82deb0 |
|
MD5 | 3a67fad8a0c695afec84d8baa81cdf0a |
|
BLAKE2b-256 | 42fb9b3e87b98a2e783b2231398f71cd03f86b7b713ceab2f5b832cdf924de16 |