다음을 통해 공유


DML_ROI_ALIGN_GRAD_OPERATOR_DESC 구조체(directml.h)

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

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

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

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경우 수학은 약간 다르며 다음 의사 코드(MinimumSamplesPerOutput == 1MaximumSamplesPerOutput == 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 }전달 패스의 입력 데이터를 포함하는 텐서입니다. 이 텐서 OutputROIGradientTensor 제공되거나 ReductionFunction == DML_REDUCE_FUNCTION_MAX 제공해야 합니다. 이는 DML_OPERATOR_ROI_ALIGN 또는 DML_OPERATOR_ROI_ALIGN1InputTensor 위해 제공되는 것과 동일한 텐서입니다.

InputGradientTensor

형식: const DML_TENSOR_DESC*

ROITensor

형식: const DML_TENSOR_DESC*

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

BatchIndicesTensor

형식: const DML_TENSOR_DESC*

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

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도입되었습니다.

Tensor 제약 조건

InputGradientTensor, InputTensor, OutputGradientTensor, OutputROIGradientTensorROITensor 동일한 DataType있어야 합니다.

Tensor 지원

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