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 |