| | |
| | #pragma once |
| | #include <torch/types.h> |
| |
|
| | namespace detectron2 { |
| |
|
| | #if defined(WITH_CUDA) || defined(WITH_HIP) |
| | int deform_conv_forward_cuda( |
| | at::Tensor input, |
| | at::Tensor weight, |
| | at::Tensor offset, |
| | at::Tensor output, |
| | at::Tensor columns, |
| | at::Tensor ones, |
| | int kW, |
| | int kH, |
| | int dW, |
| | int dH, |
| | int padW, |
| | int padH, |
| | int dilationW, |
| | int dilationH, |
| | int group, |
| | int deformable_group, |
| | int im2col_step); |
| |
|
| | int deform_conv_backward_input_cuda( |
| | at::Tensor input, |
| | at::Tensor offset, |
| | at::Tensor gradOutput, |
| | at::Tensor gradInput, |
| | at::Tensor gradOffset, |
| | at::Tensor weight, |
| | at::Tensor columns, |
| | int kW, |
| | int kH, |
| | int dW, |
| | int dH, |
| | int padW, |
| | int padH, |
| | int dilationW, |
| | int dilationH, |
| | int group, |
| | int deformable_group, |
| | int im2col_step); |
| |
|
| | int deform_conv_backward_parameters_cuda( |
| | at::Tensor input, |
| | at::Tensor offset, |
| | at::Tensor gradOutput, |
| | at::Tensor gradWeight, |
| | at::Tensor columns, |
| | at::Tensor ones, |
| | int kW, |
| | int kH, |
| | int dW, |
| | int dH, |
| | int padW, |
| | int padH, |
| | int dilationW, |
| | int dilationH, |
| | int group, |
| | int deformable_group, |
| | float scale, |
| | int im2col_step); |
| |
|
| | void modulated_deform_conv_cuda_forward( |
| | at::Tensor input, |
| | at::Tensor weight, |
| | at::Tensor bias, |
| | at::Tensor ones, |
| | at::Tensor offset, |
| | at::Tensor mask, |
| | at::Tensor output, |
| | at::Tensor columns, |
| | int kernel_h, |
| | int kernel_w, |
| | const int stride_h, |
| | const int stride_w, |
| | const int pad_h, |
| | const int pad_w, |
| | const int dilation_h, |
| | const int dilation_w, |
| | const int group, |
| | const int deformable_group, |
| | const bool with_bias); |
| |
|
| | void modulated_deform_conv_cuda_backward( |
| | at::Tensor input, |
| | at::Tensor weight, |
| | at::Tensor bias, |
| | at::Tensor ones, |
| | at::Tensor offset, |
| | at::Tensor mask, |
| | at::Tensor columns, |
| | at::Tensor grad_input, |
| | at::Tensor grad_weight, |
| | at::Tensor grad_bias, |
| | at::Tensor grad_offset, |
| | at::Tensor grad_mask, |
| | at::Tensor grad_output, |
| | int kernel_h, |
| | int kernel_w, |
| | int stride_h, |
| | int stride_w, |
| | int pad_h, |
| | int pad_w, |
| | int dilation_h, |
| | int dilation_w, |
| | int group, |
| | int deformable_group, |
| | const bool with_bias); |
| |
|
| | #endif |
| |
|
| | inline int deform_conv_forward( |
| | at::Tensor input, |
| | at::Tensor weight, |
| | at::Tensor offset, |
| | at::Tensor output, |
| | at::Tensor columns, |
| | at::Tensor ones, |
| | int kW, |
| | int kH, |
| | int dW, |
| | int dH, |
| | int padW, |
| | int padH, |
| | int dilationW, |
| | int dilationH, |
| | int group, |
| | int deformable_group, |
| | int im2col_step) { |
| | if (input.is_cuda()) { |
| | #if defined(WITH_CUDA) || defined(WITH_HIP) |
| | TORCH_CHECK(weight.is_cuda(), "weight tensor is not on GPU!"); |
| | TORCH_CHECK(offset.is_cuda(), "offset tensor is not on GPU!"); |
| | return deform_conv_forward_cuda( |
| | input, |
| | weight, |
| | offset, |
| | output, |
| | columns, |
| | ones, |
| | kW, |
| | kH, |
| | dW, |
| | dH, |
| | padW, |
| | padH, |
| | dilationW, |
| | dilationH, |
| | group, |
| | deformable_group, |
| | im2col_step); |
| | #else |
| | AT_ERROR("Detectron2 is not compiled with GPU support!"); |
| | #endif |
| | } |
| | AT_ERROR("This operator is not implemented on CPU"); |
| | } |
| |
|
| | inline int deform_conv_backward_input( |
| | at::Tensor input, |
| | at::Tensor offset, |
| | at::Tensor gradOutput, |
| | at::Tensor gradInput, |
| | at::Tensor gradOffset, |
| | at::Tensor weight, |
| | at::Tensor columns, |
| | int kW, |
| | int kH, |
| | int dW, |
| | int dH, |
| | int padW, |
| | int padH, |
| | int dilationW, |
| | int dilationH, |
| | int group, |
| | int deformable_group, |
| | int im2col_step) { |
| | if (gradOutput.is_cuda()) { |
| | #if defined(WITH_CUDA) || defined(WITH_HIP) |
| | TORCH_CHECK(input.is_cuda(), "input tensor is not on GPU!"); |
| | TORCH_CHECK(weight.is_cuda(), "weight tensor is not on GPU!"); |
| | TORCH_CHECK(offset.is_cuda(), "offset tensor is not on GPU!"); |
| | return deform_conv_backward_input_cuda( |
| | input, |
| | offset, |
| | gradOutput, |
| | gradInput, |
| | gradOffset, |
| | weight, |
| | columns, |
| | kW, |
| | kH, |
| | dW, |
| | dH, |
| | padW, |
| | padH, |
| | dilationW, |
| | dilationH, |
| | group, |
| | deformable_group, |
| | im2col_step); |
| | #else |
| | AT_ERROR("Detectron2 is not compiled with GPU support!"); |
| | #endif |
| | } |
| | AT_ERROR("This operator is not implemented on CPU"); |
| | } |
| |
|
| | inline int deform_conv_backward_filter( |
| | at::Tensor input, |
| | at::Tensor offset, |
| | at::Tensor gradOutput, |
| | at::Tensor gradWeight, |
| | at::Tensor columns, |
| | at::Tensor ones, |
| | int kW, |
| | int kH, |
| | int dW, |
| | int dH, |
| | int padW, |
| | int padH, |
| | int dilationW, |
| | int dilationH, |
| | int group, |
| | int deformable_group, |
| | float scale, |
| | int im2col_step) { |
| | if (gradOutput.is_cuda()) { |
| | #if defined(WITH_CUDA) || defined(WITH_HIP) |
| | TORCH_CHECK(input.is_cuda(), "input tensor is not on GPU!"); |
| | TORCH_CHECK(offset.is_cuda(), "offset tensor is not on GPU!"); |
| | return deform_conv_backward_parameters_cuda( |
| | input, |
| | offset, |
| | gradOutput, |
| | gradWeight, |
| | columns, |
| | ones, |
| | kW, |
| | kH, |
| | dW, |
| | dH, |
| | padW, |
| | padH, |
| | dilationW, |
| | dilationH, |
| | group, |
| | deformable_group, |
| | scale, |
| | im2col_step); |
| | #else |
| | AT_ERROR("Detectron2 is not compiled with GPU support!"); |
| | #endif |
| | } |
| | AT_ERROR("This operator is not implemented on CPU"); |
| | } |
| |
|
| | inline void modulated_deform_conv_forward( |
| | at::Tensor input, |
| | at::Tensor weight, |
| | at::Tensor bias, |
| | at::Tensor ones, |
| | at::Tensor offset, |
| | at::Tensor mask, |
| | at::Tensor output, |
| | at::Tensor columns, |
| | int kernel_h, |
| | int kernel_w, |
| | const int stride_h, |
| | const int stride_w, |
| | const int pad_h, |
| | const int pad_w, |
| | const int dilation_h, |
| | const int dilation_w, |
| | const int group, |
| | const int deformable_group, |
| | const bool with_bias) { |
| | if (input.is_cuda()) { |
| | #if defined(WITH_CUDA) || defined(WITH_HIP) |
| | TORCH_CHECK(weight.is_cuda(), "weight tensor is not on GPU!"); |
| | TORCH_CHECK(bias.is_cuda(), "bias tensor is not on GPU!"); |
| | TORCH_CHECK(offset.is_cuda(), "offset tensor is not on GPU!"); |
| | return modulated_deform_conv_cuda_forward( |
| | input, |
| | weight, |
| | bias, |
| | ones, |
| | offset, |
| | mask, |
| | output, |
| | columns, |
| | kernel_h, |
| | kernel_w, |
| | stride_h, |
| | stride_w, |
| | pad_h, |
| | pad_w, |
| | dilation_h, |
| | dilation_w, |
| | group, |
| | deformable_group, |
| | with_bias); |
| | #else |
| | AT_ERROR("Detectron2 is not compiled with GPU support!"); |
| | #endif |
| | } |
| | AT_ERROR("This operator is not implemented on CPU"); |
| | } |
| |
|
| | inline void modulated_deform_conv_backward( |
| | at::Tensor input, |
| | at::Tensor weight, |
| | at::Tensor bias, |
| | at::Tensor ones, |
| | at::Tensor offset, |
| | at::Tensor mask, |
| | at::Tensor columns, |
| | at::Tensor grad_input, |
| | at::Tensor grad_weight, |
| | at::Tensor grad_bias, |
| | at::Tensor grad_offset, |
| | at::Tensor grad_mask, |
| | at::Tensor grad_output, |
| | int kernel_h, |
| | int kernel_w, |
| | int stride_h, |
| | int stride_w, |
| | int pad_h, |
| | int pad_w, |
| | int dilation_h, |
| | int dilation_w, |
| | int group, |
| | int deformable_group, |
| | const bool with_bias) { |
| | if (grad_output.is_cuda()) { |
| | #if defined(WITH_CUDA) || defined(WITH_HIP) |
| | TORCH_CHECK(input.is_cuda(), "input tensor is not on GPU!"); |
| | TORCH_CHECK(weight.is_cuda(), "weight tensor is not on GPU!"); |
| | TORCH_CHECK(bias.is_cuda(), "bias tensor is not on GPU!"); |
| | TORCH_CHECK(offset.is_cuda(), "offset tensor is not on GPU!"); |
| | return modulated_deform_conv_cuda_backward( |
| | input, |
| | weight, |
| | bias, |
| | ones, |
| | offset, |
| | mask, |
| | columns, |
| | grad_input, |
| | grad_weight, |
| | grad_bias, |
| | grad_offset, |
| | grad_mask, |
| | grad_output, |
| | kernel_h, |
| | kernel_w, |
| | stride_h, |
| | stride_w, |
| | pad_h, |
| | pad_w, |
| | dilation_h, |
| | dilation_w, |
| | group, |
| | deformable_group, |
| | with_bias); |
| | #else |
| | AT_ERROR("Detectron2 is not compiled with GPU support!"); |
| | #endif |
| | } |
| | AT_ERROR("This operator is not implemented on CPU"); |
| | } |
| |
|
| | } |
| |
|