Compartilhar via


Estrutura DML_RESAMPLE2_OPERATOR_DESC (directml.h)

Faz a reamostragem de elementos do tensor de origem para o de destino, usando os fatores de escala para calcular o tamanho do tensor de destino. Você pode usar um modo de interpolação linear ou vizinho mais próximo. O operador dá suporte à interpolação em várias dimensões, não apenas 2D. Assim, você pode manter o mesmo tamanho espacial, mas interpolar entre canais ou entre lotes. A relação entre as coordenadas de entrada e saída é a seguinte:

OutputTensorX = (InputTensorX + InputPixelOffset) * Scale + OutputPixelOffset

Importante

Essa API está disponível como parte do pacote redistribuível autônomo DirectML (consulte Microsoft.AI.DirectML versão 1.9 e posterior. Confira também o histórico de versões do DirectML.

Sintaxe

struct DML_RESAMPLE2_OPERATOR_DESC
{
    const DML_TENSOR_DESC* InputTensor;
    const DML_TENSOR_DESC* OutputTensor;
    DML_INTERPOLATION_MODE InterpolationMode;
    DML_AXIS_DIRECTION RoundingDirection;
    UINT DimensionCount;
    _Field_size_(DimensionCount) const FLOAT* Scales;
    _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
    _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
};

Membros

InputTensor

Tipo: const DML_TENSOR_DESC*

O tensor que contém os dados de entrada.

OutputTensor

Tipo: const DML_TENSOR_DESC*

O tensor no qual gravar os dados de saída.

InterpolationMode

Tipo: DML_INTERPOLATION_MODE

Esse campo determina o tipo de interpolação usado para escolher os pixels de saída.

  • DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR. Usa o algoritmo vizinho mais próximo, que escolhe o elemento de entrada mais próximo do deslocamento de pixel correspondente para cada elemento de saída.

  • DML_INTERPOLATION_MODE_LINEAR. Usa o algoritmo de interpolação linear, que calcula o elemento de saída calculando a média ponderada dos dois elementos de entrada vizinhos mais próximos por dimensão. A reamostragem é suportada em até quatro dimensões (quadrilinear), em que a média ponderada é calculada em um total de dezesseis elementos de entrada para cada elemento de saída.

RoundingDirection

Tipo: DML_AXIS_DIRECTION

A direção para arredondar ao longo de cada eixo ao mapear coordenadas fracionárias de volta para pixels de entrada. Como a interpolação bilinear interpola coordenadas fracionárias de qualquer maneira, isso afeta apenas DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR.

  • DML_AXIS_DIRECTION_INCREASING. Coordenadas fracionárias arredondadas em direção a valores de eixo crescente (ceil).

  • DML_AXIS_DIRECTION_DECREASING. Coordenadas fracionárias arredondadas em direção a valores de eixo decrescentes (piso).

DimensionCount

Tipo: UINT

O número de elementos nas matrizes Scales, InputPixelOffsets e OutputPixelOffsets. Esse valor deve corresponder à contagem de dimensões de InputTensor e OutputTensor.

Scales

Tipo: _Field_size_(DimensionCount) const FLOAT*

As escalas a serem aplicadas ao fazer a reamostragem da entrada, em que a escala > 1 aumenta a imagem e a escala < 1 diminui a imagem para essa dimensão. Observe que as escalas não precisam ser exatamente OutputSize / InputSize. Se a entrada após o dimensionamento for maior do que o limite de saída, nós a cortaremos para o tamanho da saída. Por outro lado, se a entrada após o dimensionamento for menor que o limite de saída, as bordas de saída serão fixadas.

InputPixelOffsets

Tipo: _Field_size_(DimensionCount) const FLOAT*

Os deslocamentos a serem aplicados aos pixels de entrada antes da reamostragem. Quando esse valor é 0, o canto superior esquerdo do pixel é usado em vez de seu centro, o que geralmente não fornece o resultado esperado. Para redefinir a amostra da imagem usando o centro dos pixels e obter o mesmo comportamento que DML_RESAMPLE_OPERATOR_DESC, esse valor deve ser 0,5.

OutputPixelOffsets

Tipo: _Field_size_(DimensionCount) const FLOAT*

Os deslocamentos a serem aplicados aos pixels de saída após a reamostragem. Quando esse valor é 0, o canto superior esquerdo do pixel é usado em vez de seu centro, o que geralmente não fornece o resultado esperado. Para redefinir a amostra da imagem usando o centro dos pixels e obter o mesmo comportamento que DML_RESAMPLE_OPERATOR_DESC, esse valor deve ser -0,5.

Comentários

Esse operador é equivalente a DML_RESAMPLE1_OPERATOR_DESC quando InterpolationMode é definido como DML_INTERPOLATION_MODE_LINEAR; ou quando InterpolationMode é definido como DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR e RoundingDirection como DML_AXIS_DIRECTION_DECREASING e OutputPixelOffsets são ajustados um -0,5 adicional.

Disponibilidade

Esse operador foi introduzido em DML_FEATURE_LEVEL_5_1.

Restrições de tensor

InputTensor e OutputTensor devem ter o mesmo DataType e DimensionCount.

Suporte a tensores

DML_FEATURE_LEVEL_6_2 e acima

Tensor Tipo Contagens de dimensões compatíveis Tipos de dados com suporte
InputTensor Entrada 1 a 4 FLOAT32, FLOAT16, INT8, UINT8
OutputTensor Saída 1 a 4 FLOAT32, FLOAT16, INT8, UINT8

DML_FEATURE_LEVEL_5_1 e acima

Tensor Tipo Contagens de dimensões compatíveis Tipos de dados com suporte
InputTensor Entrada 1 a 4 FLOAT32, FLOAT16
OutputTensor Saída 1 a 4 FLOAT32, FLOAT16

Requisitos

   
Cabeçalho directml.h