| |
| #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"); |
| } |
|
|
| } |
|
|