DML_ROI_ALIGN_GRAD_OPERATOR_DESC-Struktur (directml.h)
Berechnet Backpropagationsverläufe für ROI_ALIGN und ROI_ALIGN1.
Erinnern Sie daran, dass DML_ROI_ALIGN1_OPERATOR_DESC und Subregionen eines Eingabetensors neu skaliert, indem sie entweder neareast-neighbor Sampling oder bilineare Interpolation verwenden. Bei einem InputGradientTensor
-Operator mit den gleichen Größen wie die Ausgabe eines gleichwertigen DML_OPERATOR_ROI_ALIGN1 erzeugt dieser Operator eine OutputGradientTensor
mit den gleichen Größen wie die Eingabevon DML_OPERATOR_ROI_ALIGN1.
Betrachten Sie als Beispiel eine DML_OPERATOR_ROI_ALIGN1 , die eine nächstliegende Skalierung von 1,5x in der Breite und 0,5x in der Höhe für 4 nicht überlappende Zuschnitte 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, wie das 0. Element jedes Bereichs zu zwei Elementen in der Ausgabe beiträgt– das 1. Element trägt zu einem Element in der Ausgabe bei, und das 2. und das 3. Element tragen zu keinem Element der Ausgabe bei.
Die entsprechende DML_OPERATOR_ROI_ALIGN_GRAD führt Folgendes aus:
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 lässt sich sagen, dass sich DML_OPERATOR_ROI_ALIGN_GRAD ähnlich verhält wie eine DML_OPERATOR_RESAMPLE_GRAD , die InputGradientTensor
für jeden Batch des ausgeführt wird, wenn sich die Regionen nicht überschneiden.
Für OutputROIGradientTensor
ist die Mathematik etwas anders und kann durch den 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
kann weggelassen werden, wenn nur eine benötigt wird, aber mindestens eine bereitgestellt werden muss.
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;
};
Member
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 bereitgestellt werden, wenn OutputROIGradientTensor
oder wenn ReductionFunction == DML_REDUCE_FUNCTION_MAX
angegeben wird. Dies ist derselbe Tensor, der für DML_OPERATOR_ROI_ALIGN oder DML_OPERATOR_ROI_ALIGN1 bereitgestellt InputTensor
wird.
InputGradientTensor
Typ: const DML_TENSOR_DESC*
ROITensor
Typ: const DML_TENSOR_DESC*
Ein Tensor, der die Roi-Daten (Regions of Interest) enthält– eine Reihe von Begrenzungsrahmen in Gleitkommakoordinaten, die auf die X- und Y-Dimensionen des Eingabe tensors zeigen. Die zulässigen Dimensionen 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]
. Regionen können leer sein, was bedeutet, dass alle Ausgabepixel aus der einzelnen Eingabekoordinate stammen und Regionen invertiert werden können (z. B. x2 kleiner als x1), was bedeutet, dass die Ausgabe eine gespiegelte/gespiegelte Version der Eingabe empfängt. Diese Koordinaten werden zuerst nach 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_ALIGN1 bereitgestellt ROITensor
wird.
BatchIndicesTensor
Typ: const DML_TENSOR_DESC*
Ein Tensor, der die Batchindizes enthält, aus denen die ROIs extrahiert werden sollen. Die zulässigen Dimensionen 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 die Werte nicht im Bereich [0, BatchCount)
liegen. Dies ist derselbe Tensor, der für DML_OPERATOR_ROI_ALIGN oder DML_OPERATOR_ROI_ALIGN1 bereitgestellt BatchIndicesTensor
wird.
OutputGradientTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Ein Ausgabe tensor, der die backpropagierten Farbverläufe in Bezug auf InputTensor
enthält. In der Regel hat dieser Tensor die gleichen Größen wie die Eingabe des entsprechenden DML_OPERATOR_ROI_ALIGN1 im Vorwärtsdurchlauf. Wenn OutputROIGradientTensor
nicht angegeben wird, OutputGradientTensor
muss angegeben werden.
OutputROIGradientTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Ein Ausgabe tensor, der die backpropagierten Farbverläufe in Bezug auf ROITensor
enthält. Dieser Tensor muss die gleichen Größen wie ROITensor
aufweisen. Wenn OutputGradientTensor
nicht angegeben wird, OutputROIGradientTensor
muss 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.
Hinweise
Verfügbarkeit
Dieser Operator wurde in DML_FEATURE_LEVEL_4_1
eingeführt.
Tensoreinschränkungen
InputGradientTensor, InputTensor, OutputGradientTensor, OutputROIGradientTensor und ROITensor müssen denselben Datentyp aufweisen.
Tensorunterstützung
DML_FEATURE_LEVEL_4_1 und höher
Tensor | Variante | 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 |
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für