DML_ROI_ALIGN1_OPERATOR_DESC 구조체(directml.h)
R-CNN 마스크 용지에 설명된 대로 ROI 맞춤 작업을 수행합니다. 요약하자면, 이 작업은 입력 이미지 텐서에서 잘린 창을 추출하고 지정된 InterpolationMode를 사용하여 OutputTensor의 마지막 2차원에 지정된 공통 출력 크기로 크기를 조정합니다.
일반적인 논리는 다음과 같습니다.
for every region roiIndex
outputSizeX = OutputTensor.Sizes[3]
outputSizeY = OutputTensor.Sizes[2]
scaledRegionX1 = ROITensor[roiIndex, 0] * SpatialScaleX
scaledRegionY1 = ROITensor[roiIndex, 1] * SpatialScaleY
scaledRegionX2 = ROITensor[roiIndex, 2] * SpatialScaleX
scaledRegionY2 = ROITensor[roiIndex, 3] * SpatialScaleY
scaledRegionSizeX = scaledRegionX2 - scaledRegionX1
scaledRegionSizeY = scaledRegionY2 - scaledRegionY1
inputSamplesPerOutputSampleX = clamp(scaledRegionSizeX / outputSizeX, MinimumSamplesPerOutput, MaximumSamplesPerOutput)
inputSamplesPerOutputSampleY = clamp(scaledRegionSizeY / outputSizeY, MinimumSamplesPerOutput, MaximumSamplesPerOutput)
outputSampleSizeX = outputSizeX * inputSamplesPerOutputSampleX
outputSampleSizeY = outputSizeY * inputSamplesPerOutputSampleY
outputSampleToInputScaleX = scaledRegionSizeX / outputSampleSizeX
outputSampleToInputScaleY = scaledRegionSizeX / outputSampleSizeX
compute all output values
endfor
다음과 같이 현재 지역의 모든 출력 값을 계산합니다.
for every output tensor element x y and channel in the region
outputValue = getOutputValue(channel, outputTensorX, outputTensorY)
OutputTensor[roiIndex, channel, outputTensorY, outputTensorX] = outputValue
endfor
다음과 같이 출력 요소에 대한 각 입력 샘플을 계산합니다.
outputTensorSampleX = outputTensorX * inputSamplesPerOutputSampleX
outputTensorSampleY = outputTensorY * inputSamplesPerOutputSampleY
outputValue = 0
for sampleX from outputTensorSampleX to <= outputTensorSampleX + inputSamplesPerOutputSampleX
for sampleY from outputTensorSampleY to <= outputTensorSampleY + inputSamplesPerOutputSampleY
inputTensorX = (sampleX - OutputPixelOffset) * outputSampleToInputScaleX + scaledRegionX1 - InputPixelOffset
inputTensorY = (sampleY - OutputPixelOffset) * outputSampleToInputScaleY + scaledRegionY1 - InputPixelOffset
inputValue = interpolate2D(InputTensor, BatchIndicesTensor[roiIndex], channel, inputTensorX, inputTensorY)
outputValue = either average or maximum with inputValue
endfor
endfor
return outputValue
예제
구문
struct DML_ROI_ALIGN1_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *ROITensor;
const DML_TENSOR_DESC *BatchIndicesTensor;
const DML_TENSOR_DESC *OutputTensor;
DML_REDUCE_FUNCTION ReductionFunction;
DML_INTERPOLATION_MODE InterpolationMode;
FLOAT SpatialScaleX;
FLOAT SpatialScaleY;
FLOAT InputPixelOffset;
FLOAT OutputPixelOffset;
FLOAT OutOfBoundsInputValue;
UINT MinimumSamplesPerOutput;
UINT MaximumSamplesPerOutput;
BOOL AlignRegionsToCorners;
};
멤버
InputTensor
형식: const DML_TENSOR_DESC*
차원이 인 입력 데이터를 포함하는 텐서입니다.{ BatchCount, ChannelCount, InputHeight, InputWidth }
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 미만)을 반전할 수 있습니다. 즉, 출력이 입력의 미러/대칭 이동 버전을 받습니다. 이러한 좌표는 먼저 SpatialScaleX 및 SpatialScaleY에 의해 크기 조정되지만 둘 다 1.0인 경우 영역 사각형은 입력 텐서 좌표에 직접 해당합니다.
BatchIndicesTensor
형식: const DML_TENSOR_DESC*
ROI를 추출할 일괄 처리 인덱스를 포함하는 텐서입니다. BatchIndicesTensor의 허용되는 차원은 , { 1, NumROIs }
, { 1, 1, NumROIs }
또는 { 1, 1, 1, NumROIs }
입니다{ NumROIs }
. 각 값은 InputTensor의 일괄 처리 인덱스입니다. 값이 범위에 [0, BatchCount)
없으면 동작이 정의되지 않습니다.
OutputTensor
형식: const DML_TENSOR_DESC*
출력 데이터를 포함하는 텐서입니다. OutputTensor의 예상 차원은 입니다{ NumROIs, ChannelCount, OutputHeight, OutputWidth }
.
ReductionFunction
출력 요소(DML_REDUCE_FUNCTION_AVERAGE 또는 DML_REDUCE_FUNCTION_MAX)에 기여하는 모든 입력 샘플에서 축소할 때 사용할 감소 함수입니다. 줄일 입력 샘플 수는 MinimumSamplesPerOutput 및 MaximumSamplesPerOutput으로 제한됩니다.
InterpolationMode
영역 크기를 조정할 때 사용할 보간 모드입니다.
- DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR. 각 출력 요소에 대해 해당 픽셀 센터에 가장 가까운 입력 요소를 선택하는 가장 가까운 nighbor 알고리즘을 사용합니다.
- DML_INTERPOLATION_MODE_LINEAR. 차원당 가장 가까운 2개의 인접 입력 요소의 가중 평균을 수행하여 출력 요소를 계산하는 쌍선형 알고리즘을 사용합니다. 크기는 2개뿐이므로 가중 평균은 각 출력 요소에 대해 총 4개의 입력 요소에서 계산됩니다.
SpatialScaleX
형식: FLOAT
배율 인수의 X(또는 너비) 구성 요소를 사용하여 ROITensor 좌표를 곱하여 InputHeight 및 InputWidth에 비례하도록 합니다. 예를 들어 ROITensor 에 정규화된 좌표(범위 [0..1]
의 값)가 포함된 경우 SpatialScaleX 는 일반적으로 InputWidth와 동일한 값을 갖습니다.
SpatialScaleY
형식: FLOAT
배율 인수의 Y(또는 높이) 구성 요소는 ROITensor 좌표를 곱하여 InputHeight 및 InputWidth에 비례하도록 합니다. 예를 들어 ROITensor 에 정규화된 좌표(범위 [0..1]
의 값)가 포함된 경우 SpatialScaleY 는 일반적으로 InputHeight와 동일한 값을 갖습니다.
InputPixelOffset
형식: FLOAT
입력 좌표에서 (0,0)
왼쪽 위 픽셀 가운데로의 오프셋(일반적으로 0 또는 0.5)입니다. 이 값이 0이면 픽셀의 왼쪽 위 모서리가 중심 대신 사용되며, 일반적으로 예상 결과를 제공하지는 않지만 일부 프레임워크와의 호환성에 유용합니다. 이 값이 0.5이면 픽셀이 가운데에 있는 것으로 처리되며 이는 DML_ROI_ALIGN_OPERATOR_DESC 동작과 동일합니다.
OutputPixelOffset
형식: FLOAT
왼쪽 위 픽셀 중심에서 출력 좌표로 (0,0)
의 오프셋(일반적으로 0 또는 -0.5)입니다. 이 값이 0이면 픽셀의 왼쪽 위 모서리가 중심 대신 사용되며, 일반적으로 예상 결과를 제공하지는 않지만 일부 프레임워크와의 호환성에 유용합니다. 이 값이 -0.5이면 픽셀이 가운데에 있는 것으로 처리되며 이는 DML_ROI_ALIGN_OPERATOR_DESC 동작과 동일합니다.
OutOfBoundsInputValue
형식: FLOAT
ROI가 InputTensor 범위를 벗어날 때 InputTensor에서 읽을 값입니다. SpatialScaleX 및 SpatialScaleY로 ROITensor 크기를 조정한 후 얻은 값이 InputWidth 및 InputHeight보다 큰 경우에 발생할 수 있습니다.
MinimumSamplesPerOutput
형식: UINT
모든 출력 요소에 사용할 최소 입력 샘플 수입니다. 연산자는 ScaledCropSize OutputSize / 를 수행한 다음 MinimumSamplesPerOutput 및 MaximumSamplesPerOutput으로 고정하여 입력 샘플 수를 계산합니다.
MaximumSamplesPerOutput
형식: UINT
모든 출력 요소에 사용할 최대 입력 샘플 수입니다. 연산자는 ScaledCropSize OutputSize / 를 수행한 다음 MinimumSamplesPerOutput 및 MaximumSamplesPerOutput으로 고정하여 입력 샘플 수를 계산합니다.
AlignRegionsToCorners
형식: BOOL
각 지역의 출력 샘플 지점은 지역 내에서 균등하게 분산되지 않고 영역의 바로 모서리로 확장되어야 합니다. 기본값은 FALSE이며 DML_ROI_ALIGN_OPERATOR_DESC 동작과 동일합니다.
설명
가용성
이 연산자는 DML_FEATURE_LEVEL_4_0 도입되었습니다.
텐서 제약 조건
InputTensor, OutputTensor 및 ROITensor 에는 동일한 DataType이 있어야 합니다.
텐서 지원
DML_FEATURE_LEVEL_5_0 이상
텐서 | 종류 | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 4 | FLOAT32, FLOAT16 |
ROITensor | 입력 | 2~4 | FLOAT32, FLOAT16 |
BatchIndicesTensor | 입력 | 1~4개 | UINT64, UINT32 |
OutputTensor | 출력 | 4 | FLOAT32, FLOAT16 |
DML_FEATURE_LEVEL_4_0 이상
텐서 | 종류 | 지원되는 차원 수 | 지원되는 데이터 형식 |
---|---|---|---|
InputTensor | 입력 | 4 | FLOAT32, FLOAT16 |
ROITensor | 입력 | 2~4 | FLOAT32, FLOAT16 |
BatchIndicesTensor | 입력 | 1~4 | UINT32 |
OutputTensor | 출력 | 4 | FLOAT32, FLOAT16 |
요구 사항
지원되는 최소 클라이언트 | Windows 빌드 22000 |
지원되는 최소 서버 | Windows 빌드 22000 |
머리글 | directml.h |