Compartir a través de


estructura DML_ROI_ALIGN_GRAD_OPERATOR_DESC (directml.h)

Calcula degradados de copia inversa para ROI_ALIGN y ROI_ALIGN1.

Recuerde que DML_ROI_ALIGN1_OPERATOR_DESC cultivos y reascala las subdivisiones de un tensor de entrada mediante el muestreo de vecino cercano o la interpolación bilineal. Dado un con los mismos tamaños que el de salida de de un DML_OPERATOR_ROI_ALIGN1equivalente, este operador genera un con los mismos tamaños que el de entrada de de DML_OPERATOR_ROI_ALIGN1.

Por ejemplo, considere un DML_OPERATOR_ROI_ALIGN1 que realiza un vecino más cercano escalado de 1,5x en el ancho y 0,5x en el alto, para 4 cultivos no superpuestos de una entrada con dimensiones [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]]]]

Observe cómo el 0º elemento de cada región contribuye a dos elementos de la salida: el primer elemento contribuye a un elemento de la salida y los elementos 2 y 3rd contribuyen a ningún elemento de la salida.

El DML_OPERATOR_ROI_ALIGN_GRAD correspondiente realizaría lo siguiente:

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]]]]

En resumen, DML_OPERATOR_ROI_ALIGN_GRAD se comporta de forma similar a un DML_OPERATOR_RESAMPLE_GRAD realizado en cada lote del InputGradientTensor cuando las regiones no se superponen.

Para OutputROIGradientTensor, las matemáticas son un poco diferentes y se pueden resumir mediante el siguiente pseudocódigo (suponiendo que MinimumSamplesPerOutput == 1 y 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 o OutputROIGradientTensor se pueden omitir si solo se necesita uno; pero se debe proporcionar al menos uno.

Sintaxis

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;
};

Miembros

InputTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Tensor que contiene los datos de entrada del paso hacia delante con dimensiones { BatchCount, ChannelCount, InputHeight, InputWidth }. Este tensor debe proporcionarse cuando se suministra OutputROIGradientTensor o cuando se ReductionFunction == DML_REDUCE_FUNCTION_MAX. Este es el mismo tensor que se proporcionaría a InputTensor para DML_OPERATOR_ROI_ALIGN o DML_OPERATOR_ROI_ALIGN1.

InputGradientTensor

Tipo: const DML_TENSOR_DESC*

ROITensor

Tipo: const DML_TENSOR_DESC*

Tensor que contiene las regiones de interés (ROI), una serie de cuadros de límite en coordenadas de punto flotante que apuntan a las dimensiones X e Y del tensor de entrada. Las dimensiones permitidas de ROITensor son { NumROIs, 4 }, { 1, NumROIs, 4 }o { 1, 1, NumROIs, 4 }. Para cada ROI, los valores serán las coordenadas de sus esquinas superior izquierda e inferior derecha en el orden [x1, y1, x2, y2]. Las regiones pueden estar vacías, lo que significa que todos los píxeles de salida proceden de la única coordenada de entrada y las regiones se pueden invertir (por ejemplo, x2 menos que x1), lo que significa que la salida recibe una versión reflejada/volteada de la entrada. Estas coordenadas se escalan primero por SpatialScaleX y SpatialScaleY, pero si ambas son 1,0, los rectángulos de región simplemente se corresponden directamente con las coordenadas de tensor de entrada. Este es el mismo tensor que se proporcionaría a ROITensor para DML_OPERATOR_ROI_ALIGN o DML_OPERATOR_ROI_ALIGN1.

BatchIndicesTensor

Tipo: const DML_TENSOR_DESC*

Tensor que contiene los índices de lote de los que extraer las ROIs. Las dimensiones permitidas de BatchIndicesTensor son { NumROIs }, { 1, NumROIs }, { 1, 1, NumROIs }o { 1, 1, 1, NumROIs }. Cada valor es el índice de un lote de InputTensor. El comportamiento no está definido si los valores no están en el intervalo [0, BatchCount). Este es el mismo tensor que se proporcionaría a BatchIndicesTensor para DML_OPERATOR_ROI_ALIGN o DML_OPERATOR_ROI_ALIGN1.

OutputGradientTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Tensor de salida que contiene los degradados de copia inversa con respecto a InputTensor. Normalmente, este tensor tendría los mismos tamaños que la entrada del DML_OPERATOR_ROI_ALIGN1 correspondiente en el paso hacia delante. Si no se proporciona OutputROIGradientTensor, OutputGradientTensordebe proporcionarse.

OutputROIGradientTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Tensor de salida que contiene los degradados de copia inversa con respecto a ROITensor. Este tensor debe tener los mismos tamaños que ROITensor. Si no se proporciona OutputGradientTensor, OutputROIGradientTensordebe proporcionarse.

ReductionFunction

Tipo: DML_REDUCE_FUNCTION

Consulte DML_ROI_ALIGN1_OPERATOR_DESC::ReductionFunction.

InterpolationMode

Tipo: DML_INTERPOLATION_MODE

Vea DML_ROI_ALIGN1_OPERATOR_DESC::InterpolationMode.

SpatialScaleX

Tipo: FLOAT de

Consulte DML_ROI_ALIGN1_OPERATOR_DESC::SpatialScaleX.

SpatialScaleY

Tipo: FLOAT de

Consulte DML_ROI_ALIGN1_OPERATOR_DESC::SpatialScaleY.

InputPixelOffset

Tipo: FLOAT de

Consulte DML_ROI_ALIGN1_OPERATOR_DESC::InputPixelOffset.

OutputPixelOffset

Tipo: FLOAT de

Consulte DML_ROI_ALIGN1_OPERATOR_DESC::OutputPixelOffset.

MinimumSamplesPerOutput

Tipo: UINT de

Consulte DML_ROI_ALIGN1_OPERATOR_DESC::MinimumSamplesPerOutput.

MaximumSamplesPerOutput

Tipo: UINT de

Consulte DML_ROI_ALIGN1_OPERATOR_DESC::MaximumSamplesPerOutput.

AlignRegionsToCorners

Tipo: BOOL de

Consulte DML_ROI_ALIGN1_OPERATOR_DESC::AlignRegionsToCorners.

Observaciones

Disponibilidad

Este operador se introdujo en DML_FEATURE_LEVEL_4_1.

Restricciones tensor

InputGradientTensor, InputTensor, OutputGradientTensor, OutputROIGradientTensory ROITensor deben tener el mismo DataType.

Compatibilidad con Tensor

DML_FEATURE_LEVEL_4_1 y versiones posteriores

Tensor Amable Recuentos de dimensiones admitidos Tipos de datos admitidos
InputTensor Entrada opcional 4 FLOAT32, FLOAT16
InputGradientTensor Entrada 4 FLOAT32, FLOAT16
ROITensor Entrada De 2 a 4 FLOAT32, FLOAT16
BatchIndicesTensor Entrada De 1 a 4 UINT32
OutputGradientTensor Salida opcional 4 FLOAT32, FLOAT16
OutputROIGradientTensor Salida opcional De 2 a 4 FLOAT32, FLOAT16

Requisitos

Requisito Valor
encabezado de directml.h