DML_ROI_ALIGN_GRAD_OPERATOR_DESC 구조체(directml.h)
ROI_ALIGN 및ROI_ALIGN1 대한 백프로포지션 그라데이션을 계산합니다.
DML_ROI_ALIGN1_OPERATOR_DESC 인접한 샘플링 또는 쌍선형 보간을 사용하여 입력 텐서의 하위 범위를 자르고 다시 크기 조정합니다. InputGradientTensor
동일한 DML_OPERATOR_ROI_ALIGN1 출력과 크기가 같은 가 있는 경우 이 연산자는 OutputGradientTensor
DML_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 }
이 텐서는 가 제공될 때 또는 인 경우 OutputROIGradientTensor
ReductionFunction == 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). 즉, 출력이 입력의 미러/대칭 이동 버전을 받습니다. 이러한 좌표는 먼저 및 SpatialScaleY
로 SpatialScaleX
크기가 조정되지만 둘 다 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_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
도입되었습니다.
텐서 제약 조건
InputGradientTensor, InputTensor, OutputGradientTensor, OutputROIGradientTensor 및 ROITensor 는 동일한 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 |
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기