структура DML_ROI_ALIGN1_OPERATOR_DESC (directml.h)
Выполняет операцию выравнивания рентабельности инвестиций, как описано в документе Маска R-CNN . Таким образом, операция извлекает обрезанные окна из тензора входного изображения и изменяет их размер до общего размера вывода, заданного последними 2 измерениями OutputTensor с помощью указанного интерполяционногоmode.
Общая логика выглядит следующим образом.
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 : { NumROIs, 4 }
, { 1, NumROIs, 4 }
или { 1, 1, NumROIs, 4 }
. Для каждого roi значения будут координатами его верхнего левого и нижнего правых углов в порядке [x1, y1, x2, y2]
. Области могут быть пустыми, то есть все выходные пиксели поступают из одной входной координаты, а области могут быть инвертированы (например, x2 меньше x1), то есть выходные данные получают зеркальную или перевернутую версию входных данных. Эти координаты сначала масштабируются с помощью SpatialScaleX и SpatialScaleY, но если они оба имеют значение 1,0, то прямоугольники области просто соответствуют непосредственно входным тензорным координатам.
BatchIndicesTensor
Тип: const DML_TENSOR_DESC*
Тензор, содержащий пакетные индексы для извлечения рентабельности инвестиций. Допустимые размеры BatchIndicesTensor : { NumROIs }
, { 1, NumROIs }
, { 1, 1, NumROIs }
или { 1, 1, 1, NumROIs }
. Каждое значение является индексом пакета из InputTensor. Поведение не определено, если значения не находятся в диапазоне [0, BatchCount)
.
OutputTensor
Тип: const DML_TENSOR_DESC*
Тензор, содержащий выходные данные. Ожидаемые размеры OutputTensor — { NumROIs, ChannelCount, OutputHeight, OutputWidth }
.
ReductionFunction
Тип: DML_REDUCE_FUNCTION
Функция сокращения, используемая при сокращении всех входных выборок, которые влияют на выходной элемент (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
Значение, считываемое из InputTensor , когда roIs находится за пределами InputTensor. Это может произойти, если значения, полученные после масштабирования ROITensorspatialScaleX и SpatialScaleY , больше , чем 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 и выше
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | 4 | FLOAT32, FLOAT16 |
RoITensor | Входные данные | От 2 до 4 | FLOAT32, FLOAT16 |
BatchIndicesTensor | Входные данные | от 1 до 4 | UINT64, UINT32 |
OutputTensor | Выходные данные | 4 | FLOAT32, FLOAT16 |
DML_FEATURE_LEVEL_4_0 и выше
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | 4 | FLOAT32, FLOAT16 |
ROITensor | Входные данные | От 2 до 4 | FLOAT32, FLOAT16 |
BatchIndicesTensor | Входные данные | От 1 до 4 | UINT32 |
OutputTensor | Выходные данные | 4 | FLOAT32, FLOAT16 |
Требования
Минимальная версия клиента | Сборка Windows 22000 |
Минимальная версия сервера | Сборка Windows 22000 |
Верхняя часть | directml.h |