Поделиться через


структура 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

Режим интерполяции, используемый при изменении размера регионов.

  • 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