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