DML_ROI_ALIGN_GRAD_OPERATOR_DESC Struktur (directml.h)
Berechnet Hintergrundeigenschaftenverläufe für ROI_ALIGN und ROI_ALIGN1.
Erinnern Sie sich daran, dass DML_ROI_ALIGN1_OPERATOR_DESC Teilregionen eines Eingabe-Tensors unter Verwendung von Nahast-Nachbar-Sampling oder bilinearer Interpolation neu skalieren. Angesichts einer InputGradientTensor
mit den gleichen Größen wie die Ausgabe eines entsprechenden DML_OPERATOR_ROI_ALIGN1erzeugt dieser Operator eine OutputGradientTensor
mit den gleichen Größen wie die Eingabe von DML_OPERATOR_ROI_ALIGN1.
Betrachten Sie beispielsweise eine DML_OPERATOR_ROI_ALIGN1, die eine nächsten Nachbarn Skalierung von 1,5x in der Breite und 0,5x in der Höhe für 4 nicht überlappende Kulturen einer Eingabe mit Dimensionen [1, 1, 4, 4]
ausführt:
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]]]]
Beachten Sie, dass das 0. Element jeder Region zu zwei Elementen in der Ausgabe beiträgt – das 1. Element trägt zu einem Element in der Ausgabe bei, und die 2. und 3. Elemente tragen zu keinen Elementen der Ausgabe bei.
Die entsprechende DML_OPERATOR_ROI_ALIGN_GRAD würde Folgendes ausführen:
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]]]]
Zusammenfassend verhält sich DML_OPERATOR_ROI_ALIGN_GRAD ähnlich wie eine DML_OPERATOR_RESAMPLE_GRAD, die für jeden Batch der InputGradientTensor
ausgeführt wird, wenn sich Regionen nicht überlappen.
Für OutputROIGradientTensor
ist die Mathematik etwas anders und kann mit dem folgenden Pseudocode zusammengefasst werden (vorausgesetzt, dass MinimumSamplesPerOutput == 1
und 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
oder OutputROIGradientTensor
können weggelassen werden, wenn nur eine benötigt wird; aber mindestens eine muss bereitgestellt werden.
Syntax
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;
};
Angehörige
InputTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Ein Tensor, der die Eingabedaten aus dem Vorwärtsdurchlauf mit Dimensionen { BatchCount, ChannelCount, InputHeight, InputWidth }
enthält. Dieser Tensor muss angegeben werden, wenn OutputROIGradientTensor
geliefert wird oder wenn ReductionFunction == DML_REDUCE_FUNCTION_MAX
. Dies ist derselbe Tensor, der für DML_OPERATOR_ROI_ALIGN oder DML_OPERATOR_ROI_ALIGN1InputTensor
bereitgestellt wird.
InputGradientTensor
Typ: DML_TENSOR_DESC*
ROITensor
Typ: DML_TENSOR_DESC*
Ein Tensor, der die Regionen von Interesse (ROI) enthält – eine Reihe von umgebenden Feldern in Gleitkommakoordinaten, die in die X- und Y-Dimensionen des Eingabe-Tensors zeigen. Die zulässigen Abmessungen von ROITensor
sind { NumROIs, 4 }
, { 1, NumROIs, 4 }
oder { 1, 1, NumROIs, 4 }
. Für jeden ROI sind die Werte die Koordinaten der oberen linken und unteren rechten Ecken in der Reihenfolge [x1, y1, x2, y2]
. Bereiche können leer sein, was bedeutet, dass alle Ausgabepixel aus der einzelnen Eingabekoordinate stammen, und Regionen können invertiert werden (z. B. x2 kleiner als x1), was bedeutet, dass die Ausgabe eine gespiegelte/gespiegelte Version der Eingabe empfängt. Diese Koordinaten werden zuerst durch SpatialScaleX
und SpatialScaleY
skaliert, aber wenn beide 1,0 sind, entsprechen die Bereichsrechtecke einfach direkt den Eingabe-Tensorkoordinaten. Dies ist derselbe Tensor, der für DML_OPERATOR_ROI_ALIGN oder DML_OPERATOR_ROI_ALIGN1ROITensor
bereitgestellt wird.
BatchIndicesTensor
Typ: DML_TENSOR_DESC*
Ein Tensor, der die Batchindizes enthält, aus denen die ROIs extrahiert werden sollen. Die zulässigen Abmessungen von BatchIndicesTensor
sind { NumROIs }
, { 1, NumROIs }
, { 1, 1, NumROIs }
oder { 1, 1, 1, NumROIs }
. Jeder Wert ist der Index eines Batches aus InputTensor
. Das Verhalten ist nicht definiert, wenn sich die Werte nicht im Bereich [0, BatchCount)
befinden. Dies ist derselbe Tensor, der für DML_OPERATOR_ROI_ALIGN oder DML_OPERATOR_ROI_ALIGN1BatchIndicesTensor
bereitgestellt wird.
OutputGradientTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Ein Ausgabe-Tensor, der die umgekehrten Farbverläufe in Bezug auf InputTensor
enthält. In der Regel hat dieser Tensor die gleichen Größen wie die Eingabe der entsprechenden DML_OPERATOR_ROI_ALIGN1 im Vorwärtsdurchlauf. Wenn OutputROIGradientTensor
nicht angegeben wird, muss OutputGradientTensor
angegeben werden.
OutputROIGradientTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Ein Ausgabe-Tensor, der die umgekehrten Farbverläufe in Bezug auf ROITensor
enthält. Dieser Tensor muss die gleichen Größen wie ROITensor
haben. Wenn OutputGradientTensor
nicht angegeben wird, muss OutputROIGradientTensor
angegeben werden.
ReductionFunction
Typ: DML_REDUCE_FUNCTION
Siehe DML_ROI_ALIGN1_OPERATOR_DESC::ReductionFunction.
InterpolationMode
Siehe DML_ROI_ALIGN1_OPERATOR_DESC::InterpolationMode.
SpatialScaleX
Typ: FLOAT-
Siehe DML_ROI_ALIGN1_OPERATOR_DESC::SpatialScaleX.
SpatialScaleY
Typ: FLOAT-
Siehe DML_ROI_ALIGN1_OPERATOR_DESC::SpatialScaleY.
InputPixelOffset
Typ: FLOAT-
Siehe DML_ROI_ALIGN1_OPERATOR_DESC::InputPixelOffset.
OutputPixelOffset
Typ: FLOAT-
Siehe DML_ROI_ALIGN1_OPERATOR_DESC::OutputPixelOffset.
MinimumSamplesPerOutput
Typ: UINT-
Siehe DML_ROI_ALIGN1_OPERATOR_DESC::MinimumSamplesPerOutput.
MaximumSamplesPerOutput
Typ: UINT-
Siehe DML_ROI_ALIGN1_OPERATOR_DESC::MaximumSamplesPerOutput.
AlignRegionsToCorners
Typ: BOOL-
Siehe DML_ROI_ALIGN1_OPERATOR_DESC::AlignRegionsToCorners.
Bemerkungen
Verfügbarkeit
Dieser Operator wurde in DML_FEATURE_LEVEL_4_1
eingeführt.
Tensoreinschränkungen
InputGradientTensor, InputTensor, OutputGradientTensor, OutputROIGradientTensor, und ROITensor- müssen denselben DataType-haben.
Tensorunterstützung
DML_FEATURE_LEVEL_4_1 und höher
Tensor | Art | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
InputTensor | Optionale Eingabe | 4 | FLOAT32, FLOAT16 |
InputGradientTensor | Eingabe | 4 | FLOAT32, FLOAT16 |
ROITensor | Eingabe | 2 bis 4 | FLOAT32, FLOAT16 |
BatchIndicesTensor | Eingabe | 1 bis 4 | UINT32 |
OutputGradientTensor | Optionale Ausgabe | 4 | FLOAT32, FLOAT16 |
OutputROIGradientTensor | Optionale Ausgabe | 2 bis 4 | FLOAT32, FLOAT16 |
Anforderungen
Anforderung | Wert |
---|---|
Header- | directml.h |