DML_ROI_ALIGN_GRAD_OPERATOR_DESC 구조체(directml.h)
ROI_ALIGN 및 ROI_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 == 1
및 MaximumSamplesPerOutput == 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보다 작음). 즉, 출력이 입력의 미러/대칭 이동 버전을 받습니다. 이러한 좌표는 먼저 SpatialScaleX
및 SpatialScaleY
크기 조정되지만 둘 다 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_ROI_ALIGN1_OPERATOR_DESC::ReductionFunction참조하세요.
InterpolationMode
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, OutputROIGradientTensor및 ROITensor 동일한 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 |