DML_ROI_ALIGN_GRAD_OPERATOR_DESC構造体 (directml.h)
ROI_ALIGN と ROI_ALIGN1のバックプロパティ グラデーションを計算します。
DML_ROI_ALIGN1_OPERATOR_DESC、ニアイースト ネイバー サンプリングまたはバイリニア補間を使用して、入力テンソルのサブ領域をトリミングして再スケーリングすることを思い出してください。 同等の DML_OPERATOR_ROI_ALIGN1の 出力 と同じサイズの InputGradientTensor
を指定すると、この演算子は、DML_OPERATOR_ROI_ALIGN1の 入力 と同じサイズの OutputGradientTensor
を生成します。
たとえば、最も近い近隣 スケーリングを実行する DML_OPERATOR_ROI_ALIGN1 を、[1, 1, 4, 4]
の次元を持つ入力の重複しない 4 つのトリミングについて、幅が 1.5 倍、高さが 0.5 倍であるとします。
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]]]]
各領域の 0 番目の要素が出力内の 2 つの要素にどのように影響するかに注目してください。1 番目の要素は出力内の 1 つの要素に寄与し、2 番目と 3 番目の要素は出力の要素に寄与しません。
対応する DML_OPERATOR_ROI_ALIGN_GRAD では、次の処理が実行されます。
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]]]]
要約すると、DML_OPERATOR_ROI_ALIGN_GRAD は、リージョンが重複していない場合に、InputGradientTensor
の各バッチで実行される DML_OPERATOR_RESAMPLE_GRAD と同様に動作します。
OutputROIGradientTensor
の場合、数学は少し異なり、次の擬似コードで要約できます (MinimumSamplesPerOutput == 1
と 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
または OutputROIGradientTensor
は、1 つだけ必要な場合は省略できます。ただし、少なくとも 1 つを指定する必要があります。
構文
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;
};
メンバーズ
InputTensor
型: _Maybenull_ const DML_TENSOR_DESC*
ディメンションが { BatchCount, ChannelCount, InputHeight, InputWidth }
された前方パスからの入力データを格納するテンソル。 このテンソル 、OutputROIGradientTensor
を指定する場合、または ReductionFunction == DML_REDUCE_FUNCTION_MAX
するときに指定する必要があります。 これは、DML_OPERATOR_ROI_ALIGN または DML_OPERATOR_ROI_ALIGN1の InputTensor
に提供されるのと同じテンソルです。
InputGradientTensor
型: const DML_TENSOR_DESC*
ROITensor
型: const DML_TENSOR_DESC*
関心領域 (ROI) データを含むテンソル。入力テンソルの X 次元と Y 次元を指す浮動小数点座標内の一連の境界ボックス。
ROITensor
の使用可能なディメンションは、{ NumROIs, 4 }
、{ 1, NumROIs, 4 }
、または { 1, 1, NumROIs, 4 }
です。 各 ROI の値は、左上隅と右下隅の座標 [x1, y1, x2, y2]
順になります。 領域は空の場合があります。つまり、すべての出力ピクセルは単一の入力座標から取得され、領域は反転 (x2 x1 未満など) できます。つまり、出力はミラー化/反転されたバージョンの入力を受け取ります。 これらの座標は、最初に SpatialScaleX
と SpatialScaleY
でスケーリングされますが、両方が 1.0 の場合、領域の四角形は単に入力テンソル座標に直接対応します。 これは、DML_OPERATOR_ROI_ALIGN または DML_OPERATOR_ROI_ALIGN1の ROITensor
に提供されるのと同じテンソルです。
BatchIndicesTensor
型: const DML_TENSOR_DESC*
ROI を抽出するバッチ インデックスを含むテンソル。
BatchIndicesTensor
の許容寸法は、{ NumROIs }
、{ 1, NumROIs }
、{ 1, 1, NumROIs }
、または { 1, 1, 1, NumROIs }
です。 各値は、InputTensor
からのバッチのインデックスです。 値が [0, BatchCount)
範囲内にない場合、動作は未定義です。 これは、DML_OPERATOR_ROI_ALIGN または DML_OPERATOR_ROI_ALIGN1の BatchIndicesTensor
に提供されるのと同じテンソルです。
OutputGradientTensor
型: _Maybenull_ const DML_TENSOR_DESC*
InputTensor
に関する逆プロパティグラデーションを含む出力テンソル。 通常、このテンソルは、前方パス内の対応する DML_OPERATOR_ROI_ALIGN1 の 入力 と同じサイズになります。
OutputROIGradientTensor
が指定されていない場合は、OutputGradientTensor
指定する必要があります。
OutputROIGradientTensor
型: _Maybenull_ const DML_TENSOR_DESC*
ROITensor
に関する逆プロパティグラデーションを含む出力テンソル。 このテンソルは、ROITensor
と同じサイズにする必要があります。
OutputGradientTensor
が指定されていない場合は、OutputROIGradientTensor
指定する必要があります。
ReductionFunction
「DML_ROI_ALIGN1_OPERATOR_DESC::ReductionFunction」を参照してください。
InterpolationMode
DML_ROI_ALIGN1_OPERATOR_DESC::InterpolationModeを参照してください。
SpatialScaleX
型: FLOAT
「DML_ROI_ALIGN1_OPERATOR_DESC::SpatialScaleX」を参照してください。
SpatialScaleY
型: FLOAT
「DML_ROI_ALIGN1_OPERATOR_DESC::SpatialScaleY」を参照してください。
InputPixelOffset
型: FLOAT
DML_ROI_ALIGN1_OPERATOR_DESC::InputPixelOffsetを参照してください。
OutputPixelOffset
型: FLOAT
DML_ROI_ALIGN1_OPERATOR_DESC::OutputPixelOffsetを参照してください。
MinimumSamplesPerOutput
型: UINT
DML_ROI_ALIGN1_OPERATOR_DESC::MinimumSamplesPerOutputを参照してください。
MaximumSamplesPerOutput
型: UINT
DML_ROI_ALIGN1_OPERATOR_DESC::MaximumSamplesPerOutputを参照してください。
AlignRegionsToCorners
型: BOOL
「DML_ROI_ALIGN1_OPERATOR_DESC::AlignRegionsToCorners」を参照してください。
備考
可用性
この演算子は、DML_FEATURE_LEVEL_4_1
で導入されました。
Tensor 制約
InputGradientTensor、InputTensor、OutputGradientTensor、Output ROIGradientTensor、および ROITensor は、同じ DataTypeである必要があります。
Tensor のサポート
DML_FEATURE_LEVEL_4_1以降
テンソル | 種類 | サポートされているディメンション数 | サポートされているデータ型 |
---|---|---|---|
InputTensor | 省略可能な入力 | 4 | FLOAT32、FLOAT16 |
InputGradientTensor | インプット | 4 | FLOAT32、FLOAT16 |
ROITensor | インプット | 2 ~ 4 | FLOAT32、FLOAT16 |
BatchIndicesTensor | インプット | 1 ~ 4 | UINT32 |
OutputGradientTensor | 省略可能な出力 | 4 | FLOAT32、FLOAT16 |
OutputROIGradientTensor | 省略可能な出力 | 2 ~ 4 | FLOAT32、FLOAT16 |
必要条件
要件 | 価値 |
---|---|
ヘッダー | directml.h |