Condividi tramite


struttura DML_RESAMPLE3_OPERATOR_DESC (directml.h)

Ricampiona gli elementi dal tensore di origine al tensore di destinazione, con antializzazione, se appropriato, usando i fattori di scala per calcolare le dimensioni del tensore di destinazione. È possibile usare una modalità di interpolazione lineare o vicina più vicina. L'operatore supporta l'interpolazione tra più dimensioni, non solo 2D. È quindi possibile mantenere le stesse dimensioni spaziali, ma interpolare tra canali o tra batch. La relazione tra le coordinate di input e output è la seguente:

OutputTensorX = (InputTensorX + InputPixelOffset) * Scale + OutputPixelOffset

Importante

Questa API è disponibile come parte del pacchetto ridistribuibile autonomo DirectML (vedere Microsoft.AI.DirectML versione 1.15.1 e successive. Vedere anche cronologia delle versioni di DirectML.

Sintassi

struct DML_RESAMPLE3_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;
    BOOL Antialiased;
};

Membri

InputTensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente i dati di input.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensore in cui scrivere i dati di output.

InterpolationMode

Tipo: DML_INTERPOLATION_MODE

Questo campo determina il tipo di interpolazione usata per scegliere i pixel di output.

  • DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR. Usa l'algoritmo adiacente più vicino , che sceglie l'elemento di input più vicino all'offset pixel corrispondente per ogni elemento di output.

  • DML_INTERPOLATION_MODE_LINEAR. Usa l'algoritmo di interpolazione lineare , che calcola l'elemento di output calcolando la media ponderata dei due elementi di input adiacenti più vicini per dimensione. Il ricampionamento è supportato fino a quattro dimensioni (quadrilineare), in cui la media ponderata viene calcolata su un totale di sedici elementi di input per ogni elemento di output.

RoundingDirection

Tipo: DML_AXIS_DIRECTION

Direzione da arrotondare lungo ogni asse quando si esegue il mapping delle coordinate frazionarie ai pixel di input. Poiché l'interpolazione bilineare interpola comunque le coordinate frazionarie, ciò influisce solo DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR.

  • DML_AXIS_DIRECTION_INCREASING. Coordinate frazionarie arrotondate verso valori dell'asse crescenti (ceil).

  • DML_AXIS_DIRECTION_DECREASING. Coordinate frazionarie arrotondate verso valori dell'asse decrescenti (piano).

DimensionCount

Tipo: UINT

Numero di elementi nelle matrici Scales, InputPixelOffsets e OutputPixelOffsets . Questo valore deve corrispondere al numero di dimensioni di InputTensor e OutputTensor.

Scales

Tipo: _Field_size_(DimensionCount) const FLOAT*

Le scale da applicare durante il ricampionamento dell'input, in cui scala > 1 aumentano le prestazioni dell'immagine e ridimensionano < 1 ridurre l'immagine per tale dimensione. Si noti che le scale non devono essere esattamente OutputSize / InputSize. Se l'input dopo il ridimensionamento è maggiore del limite di output, viene ritagliato in base alle dimensioni di output. D'altra parte, se l'input dopo il ridimensionamento è inferiore al limite di output, i bordi di output vengono bloccati.

InputPixelOffsets

Tipo: _Field_size_(DimensionCount) const FLOAT*

Offset da applicare ai pixel di input prima del ricampionamento. Quando questo valore è 0, viene usato l'angolo superiore sinistro del pixel anziché il relativo centro, che in genere non darà il risultato previsto. Per ricampionare l'immagine usando il centro dei pixel e ottenere lo stesso comportamento di DML_RESAMPLE_OPERATOR_DESC, questo valore deve essere 0,5.

OutputPixelOffsets

Tipo: _Field_size_(DimensionCount) const FLOAT*

Offset da applicare ai pixel di output dopo il ricampionamento. Quando questo valore è 0, viene usato l'angolo superiore sinistro del pixel anziché il relativo centro, che in genere non darà il risultato previsto. Per ricampionare l'immagine usando il centro dei pixel e ottenere lo stesso comportamento di DML_RESAMPLE_OPERATOR_DESC, questo valore deve essere -0,5.

Antialiased

Tipo: BOOL

L'antialiasing viene ottenuta estendendo il filtro di ricampionamento in base a un fattore max(1, 1 / scale), il che significa che quando si esegue il downcampioning, più pixel di input contribuiscono a un pixel di output.

Ciò si verifica quando questo flag è impostato su TRUEe presupponendo le condizioni seguenti:

  • InterpolationMode è DML_INTERPOLATION_MODE_LINEAR
  • 1/Scalabilità > 2

Questo operatore userà quindi un filtro antialiasing durante il ridimensionamento.

Osservazioni

Quando Antialiased è false, questo operatore equivale a DML_RESAMPLE2_OPERATOR_DESC.

Disponibilità

Questo operatore è stato introdotto in DML_FEATURE_LEVEL_6_4.

Vincoli tensor

InputTensor e OutputTensor devono avere lo stesso Tipo di dati e DimensionCount.

Supporto tensor

Tensore Gentile Conteggi delle dimensioni supportati Tipi di dati supportati
InputTensor Immissione Da 1 a 4 FLOAT32, FLOAT16, INT8, UINT8
OutputTensor Prodotto Da 1 a 4 FLOAT32, FLOAT16, INT8, UINT8

Fabbisogno

   
Intestazione directml.h