# modulated-deform-conv **Repository Path**: kleanfeng/modulated-deform-conv ## Basic Information - **Project Name**: modulated-deform-conv - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-25 - **Last Updated**: 2024-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # modulated-deform-conv 该项目是一个 Pytorch C++ and CUDA Extension,采用C++和Cuda实现了deformable-conv2d,modulated-deformable-conv2d,deformable-conv3d,modulated-deformable-conv3d的forward function和backward function,并在Python中对其进行了包装。
This Project is a Pytorch C++ and CUDA Extension, which implements the forward function and backward function for deformable-conv2d, modulated-deformable-conv2d, deformable-conv3d, modulated-deformable-conv3d, then encapsulates C++ and CUDA code into Python Package. ### 安装 Install * run `pip install modulated-deform-conv` * or `git clone https://github.com/CHONSPQX/modulated-deform-conv.git`,then `cd modulated-deform-conv` and run `python setup.py install` #### 要求 Requires * Python 3 * Pytorch>=1.3 * Linux, gcc版本>=4.9(For Linux, gcc version>=4.9) * Windows,CUDA版本需要VS版本兼容(For Windows, CUDA version must be compatiable with Visual Studio version) 由于资源有限,目前测试过的环境有(Because of limited resources, only the following environment are tested) - Ubuntu18.04 , gcc 7.4 , CUDA 10.2 ,Python3.7.4, Pytorch 1.3.1 - Ubuntu18.04 , gcc 7.4 , CUDA 10.2 ,Python3.7.4, Pytorch 1.4.0 - Ubuntu18.04 , gcc 7.5 , CUDA 11.1 ,Python3.6.12, Pytorch 1.7.0 - Windows10 , Visual Studio 2017 , CUDA 10.1 ,Python3.7.6, Pytorch 1.4.0 - Windows10 , Visual Studio 2019 , CUDA 11.1 ,Python3.6.12, Pytorch 1.7.0 #### 速度优化 Speed Optimization * `pip download modulated-deform-conv` 解压得到的压缩文件,进入`modulated-deform-conv`,打开`src/config.h`,用户可根据自身显卡情况,设置以下两个变量,获得更快运行速度,然后运行 `python setup.py install`
Unzip the downloaded compressed file, `cd modulated-deform-conv`, then open `src/config.h`,users are recommended to set the following `VARIABLES` to optimize run speed according to their NVIDIA GPU condition, then run `python setup.py install` * `const int CUDA_NUM_THREADS` * `const int MAX_GRID_NUM` * 运行时可以通过传递`in_step`参数来优化速度,该变量控制每次并行处理的batch 大小。
Or users can set different `in_step` value in run time, which controls the batch size of each parallel processing . ### 使用 Use 直接使用C++函数,请`import MDCONV_CUDA` 使用封装后的python类,请`import modulated_deform_conv` Using C++ functions directly, please `import MDCONV_CUDA` Using the packaged function by Python, please `import modulated_deform_conv` # 文档 Documents ## 1.C++ and CUDA Code * 文件 Files |Filename |Content | |:--------------------------:| :-----------------------: | |`config.h` | **macro&gloabl variables&inline functions** | |`deformable_conv.cu`| **MDCONV_CUDA.deform_conv2d_forward_cuda MDCONV_CUDA.deform_conv2d_backward_cuda** | |`mdeformable_conv.cu`| **MDCONV_CUDA.modulated_deform_conv2d_forward_cuda MDCONV_CUDA.modulated_deform_conv2d_backward_cuda** | |`deformable_conv3d.cu`| **MDCONV_CUDA.deform_conv3d_forward_cuda MDCONV_CUDA.deform_conv3d_backward_cuda** | |`mdeformable_conv3d.cu`| **MDCONV_CUDA.modulated_deform_conv3d_forward_cuda MDCONV_CUDA.modulated_deform_conv2d_backward_cuda** | |`utils.cu`| **some code for display debug outputs** | |`warp.cpp`| **glue code between C++ and Python** | * 变量 Variables |Variable Name | Type | Introduction | | :--------------------: | :-------------------: |:----------------:| |`kernel_h`| `const int`|first dimension size of the convolution kernel| |`kernel_w`| `const int`|second dimension size of the convolution kernel| |`kernel_l`| `const int`|third dimension size of the convolution kernel| |`stride_h`| `const int`|stride for first dimension| |`stride_w`| `const int`|stride for second dimension| |`stride_l`| `const int`|stride for third dimension| |`pad_h`| `const int`|zero padding for first dimension| |`pad_w`| `const int`|zero padding for second dimension| |`pad_l`| `const int`|zero padding for third dimension| |`dilation_h`| `const int`|dilation rate for first dimension| |`dilation_w`| `const int`|dilation rate for second dimension| |`dilation_l`| `const int`|dilation rate for third dimension| |`group`| `const int`|group of convolution | |`deformable_group`| `const int`|group of offset and mask | |`in_step`| `const int`|batch size of each parallel processing| |`with_bias`| `const bool`|if have bias| |`input`| `at::Tensor` |`B,I,H,W[,L]`,`I` must be divisible by`group` and ` deformable_group`| |`grad_input`| `at::Tensor` |`grad_input` must be size like `input` | |`weight`| `at::Tensor` |`O,I/group,H,W[,L]`,`O`must be divisible by`group`| |`grad_weight`| `at::Tensor` |`grad_weight` must be size like `weight`| |`bias`| `at::Tensor` |`[O]`, if `with_bias=true`, `bias` must be non-null| |`grad_bias`| `at::Tensor` |`grad_bias` must be size like `bias`| |`offset`| `at::Tensor` |`B,deformable_group*2*kernel_h*kernel_w,H,W` `B,deformable_group*3*kernel_h*kernel_w*kernel_l,H,W,L`| |`grad_offset`| `at::Tensor` |`grad_offset` must be size like `offset`| |`mask`| `at::Tensor` |`B,deformable_group*kernel_h*kernel_w,H,W` `B,deformable_group*kernel_h*kernel_w*kernel_l,H,W,L`| |`grad_mask`| `at::Tensor` |`grad_mask` must be size like `mask`| |`output`| `at::Tensor` |`B,O,OH,OW[,OL]`| |`grad_output`| `at::Tensor` |`grad_output` must be size like `output`| ## 2.Python Code |Class Name |Type | |:--------------------------:| :-----------------------: | |`class DeformConv2dFunction` | `torch.autograd.Function` | |`class ModulatedDeformConv2dFunction` | `torch.autograd.Function` | |`class DeformConv3dFunction` | `torch.autograd.Function` | |`class ModulatedDeformConv3dFunction` | `torch.autograd.Function` | |`class DeformConv2d` | `torch.nn.Module` | |`class ModulatedDeformConv2d` | `torch.nn.Module` | |`class DeformConv3d` | `torch.nn.Module` | |`class ModulatedDeformConv3d` | `torch.nn.Module` | ## Author **Xin Qiao** `qiaoxin182@gmail.com` + [github/chonspqx](https://github.com/chonspqx) ## License Copyright (c) 2020 Xin Qiao Released under the MIT license