mirror of https://github.com/open-mmlab/mmcv.git
[Feature] Add NPU adapter for Deformable RoIPool (#2481)
* add npu adapter for deformroipool * cleancode * Update deform_roi_pool.cpp * Update deform_roi_pool.cpp * Update deform_roi_pool.cpp * Update deform_roi_pool.cpp * Update deform_roi_pool.cpp * Update deform_roi_pool.cpp * Update deform_roi_pool.cpppull/2460/head^2
parent
4c51afce2a
commit
46eb9ec5d0
|
@ -19,7 +19,7 @@ We implement common ops used in detection, segmentation, etc.
|
|||
| CornerPool | | √ | | | |
|
||||
| Correlation | | √ | | | |
|
||||
| Deformable Convolution v1/v2 | √ | √ | | | |
|
||||
| Deformable RoIPool | | √ | √ | | |
|
||||
| Deformable RoIPool | | √ | √ | | √ |
|
||||
| DiffIoURotated | | √ | | | |
|
||||
| DynamicScatter | | √ | | | |
|
||||
| FurthestPointSample | | √ | | | |
|
||||
|
|
|
@ -19,7 +19,7 @@ MMCV 提供了检测、分割等任务中常用的算子
|
|||
| CornerPool | | √ | | | |
|
||||
| Correlation | | √ | | | |
|
||||
| Deformable Convolution v1/v2 | √ | √ | | | |
|
||||
| Deformable RoIPool | | √ | √ | | |
|
||||
| Deformable RoIPool | | √ | √ | | √ |
|
||||
| DiffIoURotated | | √ | | | |
|
||||
| DynamicScatter | | √ | | | |
|
||||
| FurthestPointSample | | √ | | | |
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
#include "pytorch_npu_helper.hpp"
|
||||
|
||||
using namespace NPU_NAME_SPACE;
|
||||
using namespace std;
|
||||
|
||||
void deform_roi_pool_forward_impl(Tensor input, Tensor rois, Tensor offset,
|
||||
Tensor output, int pooled_height,
|
||||
int pooled_width, float spatial_scale,
|
||||
int sampling_ratio, float gamma);
|
||||
|
||||
void deform_roi_pool_backward_impl(Tensor grad_output, Tensor input,
|
||||
Tensor rois, Tensor offset,
|
||||
Tensor grad_input, Tensor grad_offset,
|
||||
int pooled_height, int pooled_width,
|
||||
float spatial_scale, int sampling_ratio,
|
||||
float gamma);
|
||||
|
||||
void deform_roi_pool_forward_npu(Tensor input, Tensor rois, Tensor offset,
|
||||
Tensor output, int pooled_height,
|
||||
int pooled_width, float spatial_scale,
|
||||
int sampling_ratio, float gamma) {
|
||||
c10::SmallVector<int64_t, 2> output_sizes = {pooled_height, pooled_width};
|
||||
at::IntArrayRef output_size = at::IntArrayRef(output_sizes);
|
||||
int64_t sampling_ratio_ = (int64_t)sampling_ratio;
|
||||
OpCommand cmd;
|
||||
cmd.Name("DeformableRoiPool")
|
||||
.Input(input)
|
||||
.Input(rois)
|
||||
.Input(offset)
|
||||
.Output(output)
|
||||
.Attr("spatial_scale", spatial_scale)
|
||||
.Attr("output_size", output_size)
|
||||
.Attr("sampling_ratio", sampling_ratio_)
|
||||
.Attr("gamma", gamma)
|
||||
.Run();
|
||||
}
|
||||
|
||||
void deform_roi_pool_backward_npu(Tensor grad_output, Tensor input, Tensor rois,
|
||||
Tensor offset, Tensor grad_input,
|
||||
Tensor grad_offset, int pooled_height,
|
||||
int pooled_width, float spatial_scale,
|
||||
int sampling_ratio, float gamma) {
|
||||
c10::SmallVector<int64_t, 2> output_sizes = {pooled_height, pooled_width};
|
||||
at::IntArrayRef output_size = at::IntArrayRef(output_sizes);
|
||||
int64_t sampling_ratio_ = (int64_t)sampling_ratio;
|
||||
OpCommand cmd;
|
||||
cmd.Name("DeformableRoiPoolGrad")
|
||||
.Input(grad_input)
|
||||
.Input(input)
|
||||
.Input(rois)
|
||||
.Input(offset)
|
||||
.Output(grad_output)
|
||||
.Output(grad_offset)
|
||||
.Attr("output_size", output_size)
|
||||
.Attr("spatial_scale", spatial_scale)
|
||||
.Attr("sample_ratio", sampling_ratio_)
|
||||
.Attr("gamma", gamma)
|
||||
.Run();
|
||||
}
|
||||
|
||||
REGISTER_NPU_IMPL(deform_roi_pool_forward_impl, deform_roi_pool_forward_npu);
|
||||
|
||||
REGISTER_NPU_IMPL(deform_roi_pool_backward_impl, deform_roi_pool_backward_npu);
|
|
@ -5,7 +5,7 @@ import numpy as np
|
|||
import pytest
|
||||
import torch
|
||||
|
||||
from mmcv.utils import IS_CUDA_AVAILABLE, IS_MLU_AVAILABLE
|
||||
from mmcv.utils import IS_CUDA_AVAILABLE, IS_MLU_AVAILABLE, IS_NPU_AVAILABLE
|
||||
|
||||
_USING_PARROTS = True
|
||||
try:
|
||||
|
@ -133,7 +133,11 @@ class TestDeformRoIPool:
|
|||
pytest.param(
|
||||
'mlu',
|
||||
marks=pytest.mark.skipif(
|
||||
not IS_MLU_AVAILABLE, reason='requires MLU support'))
|
||||
not IS_MLU_AVAILABLE, reason='requires MLU support')),
|
||||
pytest.param(
|
||||
'npu',
|
||||
marks=pytest.mark.skipif(
|
||||
not IS_NPU_AVAILABLE, reason='requires NPU support'))
|
||||
])
|
||||
@pytest.mark.parametrize('dtype', [
|
||||
torch.float,
|
||||
|
|
Loading…
Reference in New Issue