다음을 통해 공유


DML_ROI_ALIGN_GRAD_OPERATOR_DESC 구조체(directml.h)

ROI_ALIGN ROI_ALIGN1 대한 백프로포지션 그라데이션을 계산합니다.

DML_ROI_ALIGN1_OPERATOR_DESC 인접한 샘플링 또는 쌍선형 보간을 사용하여 입력 텐서의 하위 범위를 자르고 다시 크기 조정합니다. InputGradientTensor 동일한 DML_OPERATOR_ROI_ALIGN1 출력과 크기가 같은 가 있는 경우 이 연산자는 OutputGradientTensorDML_OPERATOR_ROI_ALIGN1입력과 동일한 크기의 생성합니다.

예를 들어 크기가 인 입력의 4개의 겹치지 않는 작물에 대해 너비가 1.5x이고 높이가 0.5배인 가장 가까운 인접 크기 조정을 수행하는 DML_OPERATOR_ROI_ALIGN1 고려합니다.[1, 1, 4, 4]

ROITensor
[[0, 0, 2, 2],
 [2, 0, 4, 2],
 [0, 2, 2, 4],
 [2, 2, 4, 4]]

BatchIndicesTensor
[0, 0, 0, 0]

InputTensor
[[[[1,   2, |  3,  4],    RoiAlign1     [[[[ 1,  1,  2]]],
   [5,   6, |  7,  8],       -->         [[[ 3,  3,  4]]],
   ------------------                    [[[ 9,  9, 10]]],
   [9,  10, | 11, 12],                   [[[11, 11, 12]]]]
   [13, 14, | 15, 16]]]]

각 영역의 0번째 요소가 출력의 두 요소에 어떻게 기여하는지 확인합니다. 즉, 첫 번째 요소는 출력의 한 요소에 기여하고, 2차 및 3번째 요소는 출력의 요소에 기여하지 않습니다.

해당 DML_OPERATOR_ROI_ALIGN_GRAD 다음을 수행합니다.

InputGradientTensor                  OutputGradientTensor
[[[[ 1,  2,  3]]],    ROIAlignGrad   [[[[ 3,  3, |  9,  6],
 [[[ 4,  5,  6]]],         -->          [ 0,  0, |  0,  0],
 [[[ 7,  8,  9]]],                      ------------------
 [[[10, 11, 12]]]]                      [15,  9, | 21, 12],
                                        [ 0,  0, |  0,  0]]]]

요약하자면, DML_OPERATOR_ROI_ALIGN_GRAD 영역이 겹치지 않을 때 의 InputGradientTensor 각 일괄 처리에서 수행되는 DML_OPERATOR_RESAMPLE_GRAD 유사하게 동작합니다.

의 경우 OutputROIGradientTensor수학은 약간 다르며 다음 의사 코드(및 MaximumSamplesPerOutput == 1를 가정MinimumSamplesPerOutput == 1)로 요약할 수 있습니다.

for each region of interest (ROI):
    for each inputGradientCoordinate:
        for each inputCoordinate that contributed to this inputGradient element:
            topYIndex = floor(inputCoordinate.y)
            bottomYIndex = ceil(inputCoordinate.y)
            leftXIndex = floor(inputCoordinate.x)
            rightXIndex = ceil(inputCoordinate.x)

            yLerp = inputCoordinate.y - topYIndex
            xLerp = inputCoordinate.x - leftXIndex

            topLeft = InputTensor[topYIndex][leftXIndex]
            topRight = InputTensor[topYIndex][rightXIndex]
            bottomLeft = InputTensor[bottomYIndex][leftXIndex]
            bottomRight = InputTensor[bottomYIndex][rightXIndex]

            inputGradientWeight = InputGradientTensor[inputGradientCoordinate.y][inputGradientCoordinate.x]
            imageGradY = (1 - xLerp) * (bottomLeft - topLeft) + xLerp * (bottomRight - topRight)
            imageGradX = (1 - yLerp) * (topRight - topLeft) + yLerp * (bottomRight - bottomLeft)

            imageGradY *= inputGradientWeight
            imageGradX *= inputGradientWeight

            OutputROIGradientTensor[roiIndex][0] += imageGradX * (inputWidth - inputGradientCoordinate.x)
            OutputROIGradientTensor[roiIndex][1] += imageGradY * (inputHeight - inputGradientCoordinate.y)
            OutputROIGradientTensor[roiIndex][2] += imageGradX * inputGradientCoordinate.x
            OutputROIGradientTensor[roiIndex][3] += imageGradY * inputGradientCoordinate.y

OutputGradientTensor 또는 OutputROIGradientTensor 는 하나만 필요한 경우 생략할 수 있지만 하나 이상을 제공해야 합니다.

구문

struct DML_ROI_ALIGN_GRAD_OPERATOR_DESC {
  const DML_TENSOR_DESC  *InputTensor;
  const DML_TENSOR_DESC  *InputGradientTensor;
  const DML_TENSOR_DESC  *ROITensor;
  const DML_TENSOR_DESC  *BatchIndicesTensor;
  const DML_TENSOR_DESC  *OutputGradientTensor;
  const DML_TENSOR_DESC  *OutputROIGradientTensor;
  DML_REDUCE_FUNCTION    ReductionFunction;
  DML_INTERPOLATION_MODE InterpolationMode;
  FLOAT                  SpatialScaleX;
  FLOAT                  SpatialScaleY;
  FLOAT                  InputPixelOffset;
  FLOAT                  OutputPixelOffset;
  UINT                   MinimumSamplesPerOutput;
  UINT                   MaximumSamplesPerOutput;
  BOOL                   AlignRegionsToCorners;
};

멤버

InputTensor

형식: _Maybenull_ const DML_TENSOR_DESC*

차원이 인 전달 패스의 입력 데이터를 포함하는 텐서입니다.{ BatchCount, ChannelCount, InputHeight, InputWidth } 이 텐서는 가 제공될 때 또는 인 경우 OutputROIGradientTensorReductionFunction == DML_REDUCE_FUNCTION_MAX제공해야 합니다. 이는 DML_OPERATOR_ROI_ALIGN 또는DML_OPERATOR_ROI_ALIGN1 대해 에 제공되는 InputTensor 것과 동일한 텐서입니다.

InputGradientTensor

형식: const DML_TENSOR_DESC*

ROITensor

형식: const DML_TENSOR_DESC*

ROI(관심 영역) 데이터를 포함하는 텐서입니다. 입력 텐서의 X 및 Y 차원을 가리키는 부동 소수점 좌표의 경계 상자 시리즈입니다. 의 허용된 차원은 ROITensor , { 1, NumROIs, 4 }또는 { 1, 1, NumROIs, 4 }입니다{ NumROIs, 4 }. 각 ROI에 대해 값은 순서 [x1, y1, x2, y2]대로 왼쪽 위와 오른쪽 아래 모서리의 좌표가 됩니다. 영역은 비어 있을 수 있습니다. 즉, 모든 출력 픽셀은 단일 입력 좌표에서 제공되며 영역은 반전될 수 있습니다(예: x2 보다 작음 x1). 즉, 출력이 입력의 미러/대칭 이동 버전을 받습니다. 이러한 좌표는 먼저 및 SpatialScaleYSpatialScaleX 크기가 조정되지만 둘 다 1.0인 경우 영역 사각형은 입력 텐서 좌표에 직접 해당합니다. 이는 DML_OPERATOR_ROI_ALIGN 또는DML_OPERATOR_ROI_ALIGN1 대해 에 제공되는 ROITensor 것과 동일한 텐서입니다.

BatchIndicesTensor

형식: const DML_TENSOR_DESC*

ROI를 추출할 일괄 처리 인덱스를 포함하는 텐서입니다. 의 허용되는 차원 BatchIndicesTensor 은 , , { 1, NumROIs }{ 1, 1, NumROIs }또는 { 1, 1, 1, NumROIs }입니다{ NumROIs }. 각 값은 에서 InputTensor일괄 처리의 인덱스입니다. 값이 범위에 [0, BatchCount)없으면 동작이 정의되지 않습니다. 이는 DML_OPERATOR_ROI_ALIGN 또는DML_OPERATOR_ROI_ALIGN1 대해 에 제공되는 BatchIndicesTensor 것과 동일한 텐서입니다.

OutputGradientTensor

형식: _Maybenull_ const DML_TENSOR_DESC*

과 관련하여 백프로페이팅된 그라데이션을 InputTensor포함하는 출력 텐서입니다. 일반적으로 이 텐서의 크기는 전달 패스에 있는 해당 DML_OPERATOR_ROI_ALIGN1입력과 같습니다. 가 OutputROIGradientTensor 제공되지 OutputGradientTensor 않으면 를 제공해야 합니다.

OutputROIGradientTensor

형식: _Maybenull_ const DML_TENSOR_DESC*

과 관련하여 백프로페이팅된 그라데이션을 ROITensor포함하는 출력 텐서입니다. 이 텐서의 크기는 와 같 ROITensor아야 합니다. 가 OutputGradientTensor 제공되지 OutputROIGradientTensor 않으면 를 제공해야 합니다.

ReductionFunction

형식: DML_REDUCE_FUNCTION

DML_ROI_ALIGN1_OPERATOR_DESC::ReductionFunction을 참조하세요.

InterpolationMode

형식: DML_INTERPOLATION_MODE

DML_ROI_ALIGN1_OPERATOR_DESC::InterpolationMode를 참조하세요.

SpatialScaleX

형식: FLOAT

DML_ROI_ALIGN1_OPERATOR_DESC::SpatialScaleX를 참조하세요.

SpatialScaleY

형식: FLOAT

DML_ROI_ALIGN1_OPERATOR_DESC::SpatialScaleY를 참조하세요.

InputPixelOffset

형식: FLOAT

DML_ROI_ALIGN1_OPERATOR_DESC::InputPixelOffset을 참조하세요.

OutputPixelOffset

형식: FLOAT

DML_ROI_ALIGN1_OPERATOR_DESC::OutputPixelOffset을 참조하세요.

MinimumSamplesPerOutput

형식: UINT

DML_ROI_ALIGN1_OPERATOR_DESC::MinimumSamplesPerOutput을 참조하세요.

MaximumSamplesPerOutput

형식: UINT

DML_ROI_ALIGN1_OPERATOR_DESC::MaximumSamplesPerOutput을 참조하세요.

AlignRegionsToCorners

형식: BOOL

DML_ROI_ALIGN1_OPERATOR_DESC::AlignRegionsToCorners를 참조하세요.

설명

가용성

이 연산자는 에서 DML_FEATURE_LEVEL_4_1도입되었습니다.

텐서 제약 조건

InputGradientTensor, InputTensor, OutputGradientTensor, OutputROIGradientTensorROITensor 는 동일한 DataType을 가져야 합니다.

텐서 지원

DML_FEATURE_LEVEL_4_1 이상

텐서 종류 지원되는 차원 수 지원되는 데이터 형식
InputTensor 선택적 입력 4 FLOAT32, FLOAT16
InputGradientTensor 입력 4 FLOAT32, FLOAT16
ROITensor 입력 2~4 FLOAT32, FLOAT16
BatchIndicesTensor 입력 1~4 Uint32
OutputGradientTensor 선택적 출력 4 FLOAT32, FLOAT16
OutputROIGradientTensor 선택적 출력 2~4 FLOAT32, FLOAT16

요구 사항

요구 사항
헤더 directml.h