DML_ROI_ALIGN_GRAD_OPERATOR_DESC 構造体 (directml.h)
ROI_ALIGNとROI_ALIGN1のバックプロパティ グラデーションを計算します。
DML_ROI_ALIGN1_OPERATOR_DESC、近距離近隣サンプリングまたは二次補間を使用して、入力テンソルのサブ領域をトリミングして再スケーリングすることを思い出してください。 InputGradientTensor
同等のDML_OPERATOR_ROI_ALIGN1の出力と同じサイズの を指定すると、この演算子は、DML_OPERATOR_ROI_ALIGN1の入力と同じサイズの を生成OutputGradientTensor
します。
たとえば、入力の重なり合っていない 4 つのトリミングに対して、最[1, 1, 4, 4]
も近い近隣のスケーリングを幅に 1.5 倍、高さが 0.5 倍のDML_OPERATOR_ROI_ALIGN1について考えてみます。
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 未満など) できます。つまり、出力はミラー化/反転されたバージョンの入力を受け取ります。 これらの座標は最初に と SpatialScaleY
によってSpatialScaleX
スケーリングされますが、両方が 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
導入されました。
テンソル制約
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 |
要件
要件 | 値 |
---|---|
Header | directml.h |
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示