DML_RESAMPLE2_OPERATOR_DESC-Struktur (directml.h)
Resampelt Elemente vom Quell- an den Ziel-Tensor, wobei die Skalierungsfaktoren zum Berechnen der Ziel-Tensorgröße verwendet werden. Sie können einen linearen oder Pixelwiederholung Interpolationsmodus verwenden. Der Operator unterstützt die Interpolation über mehrere Dimensionen hinweg, nicht nur 2D. Sie können also die gleiche räumliche Größe beibehalten, aber über Kanäle oder batchweise interpolieren. Die Beziehung zwischen den Eingabe- und Ausgabekoordinaten lautet wie folgt:
OutputTensorX = (InputTensorX + InputPixelOffset) * Scale + OutputPixelOffset
Wichtig
Diese API ist als Teil des eigenständigen weiterverteilbare Pakets DirectML verfügbar (siehe Microsoft.AI.DirectML , Version 1.9 und höher). Siehe auch DirectML-Versionsverlauf.
Syntax
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;
};
Member
InputTensor
Typ: const DML_TENSOR_DESC*
Der Tensor, der die Eingabedaten enthält.
OutputTensor
Typ: const DML_TENSOR_DESC*
Der Tensor, in den die Ausgabedaten geschrieben werden sollen.
InterpolationMode
Dieses Feld bestimmt die Art der Interpolation, die zum Auswählen von Ausgabepixeln verwendet wird.
DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR. Verwendet den Algorithmus der Pixelwiederholung, der das Eingabeelement am nächsten zum entsprechenden Pixeloffset für jedes Ausgabeelement auswählt.
DML_INTERPOLATION_MODE_LINEAR. Verwendet den Algorithmus der linearen Interpolation , der das Ausgabeelement berechnet, indem der gewichtete Mittelwert der beiden nächsten benachbarten Eingabeelemente pro Dimension berechnet wird. Das Resampling wird bis zu vier Dimensionen (quadrilinear) unterstützt, wobei der gewichtete Mittelwert für jedes Ausgabeelement insgesamt sechszehn Eingabeelemente berechnet wird.
RoundingDirection
Typ: DML_AXIS_DIRECTION
Die Richtung, die auf jeder Achse gerundet werden soll, wenn Bruchkoordinaten zurück zu Eingabepixeln zugeordnet werden. Da die bilineare Interpolation trotzdem Bruchkoordinaten interpoliert, wirkt sich dies nur auf DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR aus.
DML_AXIS_DIRECTION_INCREASING. Runde Bruchkoordinaten zur Erhöhung der Achsenwerte (Oben).
DML_AXIS_DIRECTION_DECREASING. Abgerundete Bruchkoordinaten in Richtung abnehmender Achsenwerte (Unten).
DimensionCount
Typ: UINT
Die Anzahl der Elemente in den Arrays Scales, InputPixelOffsets und OutputPixelOffsets. Dieser Wert muss mit der Dimensionsanzahl von InputTensor und OutputTensor übereinstimmen.
Scales
Typ: _Field_size_(DimensionCount) const FLOAT*
Die Skalierungen, die beim Resampling der Eingabe angewendet werden sollen, wobei die Skalierung > 1 das Bild nach oben skaliert und Skalierung < 1 das Bild nach unten skaliert für diese Dimension. Beachten Sie, dass die Skalierungen nicht genau OutputSize / InputSize
sein müssen. Wenn die Eingabe nach der Skalierung größer als die Ausgabegrenze ist, wird sie auf die Ausgabegröße zugeschnitten. Wenn die Eingabe nach der Skalierung dagegen kleiner als die Ausgabegrenze ist, werden die Ausgaberänder geklemmt.
InputPixelOffsets
Typ: _Field_size_(DimensionCount) const FLOAT*
Die Offsets, die vor dem Resampling auf die Eingabepixel angewendet werden sollen. Wenn dieser Wert 0 ist, wird die obere linke Ecke des Pixels anstelle der Mitte verwendet, die normalerweise nicht das erwartete Ergebnis zurückgibt. Um das Bild mithilfe der Mitte der Pixel neu zu sortieren und das gleiche Verhalten wie DML_RESAMPLE_OPERATOR_DESC
zu erhalten, muss dieser Wert 0,5 sein.
OutputPixelOffsets
Typ: _Field_size_(DimensionCount) const FLOAT*
Die Offsets, die nach dem Resampling auf die Ausgabepixel angewendet werden sollen. Wenn dieser Wert 0 ist, wird die obere linke Ecke des Pixels anstelle der Mitte verwendet, die normalerweise nicht das erwartete Ergebnis zurückgibt. Um das Bild mithilfe der Mitte der Pixel neu zu sortieren und das gleiche Verhalten wie DML_RESAMPLE_OPERATOR_DESC zu erhalten, muss dieser Wert 0,5 sein.
Hinweise
Dieser Operator entspricht DML_RESAMPLE1_OPERATOR_DESC, wenn InterpolationMode auf DML_INTERPOLATION_MODE_LINEAR festgelegt ist; oder wenn InterpolationMode auf DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR festgelegt ist, und RoundingDirection auf DML_AXIS_DIRECTION_DECREASING und OutputPixelOffsets werden zusätzliche -0,5 angepasst.
Verfügbarkeit
Dieser Operator wurde in DML_FEATURE_LEVEL_5_1 eingeführt.
Tensor-Einschränkungen
InputTensor und OutputTensor müssen denselben DataType und DimensionCount aufweisen.
Tensor-Unterstützung
DML_FEATURE_LEVEL_6_2 und höher
Tensor | Variante | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 1 bis 4 | FLOAT32, FLOAT16, INT8, UINT8 |
OutputTensor | Output | 1 bis 4 | FLOAT32, FLOAT16, INT8, UINT8 |
DML_FEATURE_LEVEL_5_1 und höher
Tensor | Variante | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Eingabe | 1 bis 4 | FLOAT32, FLOAT16 |
OutputTensor | Output | 1 bis 4 | FLOAT32, FLOAT16 |
Anforderungen
Übergeordnet | directml.h |