DML_ROI_POOLING_OPERATOR_DESC 结构 (directml.h)

根据感兴趣的区域或 ROI) 跨输入张量 (执行 MaxPool 函数。 对于每个输出元素,其输入中相应 ROI 的坐标通过以下公式计算。

Y 作为 InputTensor ({ BatchSize, ChannelCount, **height**, width }) 第三个维度的索引。

X 成为 InputTensor ({ BatchSize, ChannelCount, height, **width** }) 第四个维度的索引。

x1 = round(RoiX1 * SpatialScale)
x2 = round(RoiX2 * SpatialScale)
y1 = round(RoiY1 * SpatialScale)
y2 = round(RoiY2 * SpatialScale)

RegionHeight = y2 - y1 + 1
RegionWidth = x2 - x1 + 1

StartY = (OutputIndices.Y * RegionHeight) / PooledSize.Height + y1
StartX = (OutputIndices.X * RegionWidth) / PooledSize.Width + x1

EndY = ((OutputIndices.Y + 1) * RegionHeight + PooledSize.Height - 1) / PooledSize.Height + y1
EndX = ((OutputIndices.X + 1) * RegionWidth + PooledSize.Width - 1) / PooledSize.Width + x1

如果计算出的坐标超出边界,则会将其固定到输入边界。

语法

struct DML_ROI_POOLING_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *ROITensor;
  const DML_TENSOR_DESC *OutputTensor;
  FLOAT                 SpatialScale;
  DML_SIZE_2D           PooledSize;
};

成员

InputTensor

类型: const DML_TENSOR_DESC*

包含维度 { BatchCount, ChannelCount, InputHeight, InputWidth }为 的输入数据的张量。

ROITensor

类型: const DML_TENSOR_DESC*

包含相关区域 (ROI) 数据的张量。 的预期维度 ROITensor{ 1, 1, NumROIs, 5 } ,每个 ROI 的数据为 [BatchID, x1, y1, x2, y2]。 x1、y1、x2、y2 是每个 ROI 的角的非独占坐标,x2 >= x1,y2 >= y1。

OutputTensor

类型: const DML_TENSOR_DESC*

包含输出数据的张量。 OutputTensor 的预期维度为 { NumROIs, InputChannelCount, PooledSize.Height, PooledSize.Width }

SpatialScale

类型: FLOAT

用于将 ROI 坐标从其输入刻度转换为池时使用的比例的乘法空间比例因子。

PooledSize

类型: DML_SIZE_2D

ROI 池输出大小 (高度、宽度) ,这必须与 OutputTensor 的最后 2 个维度匹配。

可用性

此运算符是在 中 DML_FEATURE_LEVEL_1_0引入的。

张量约束

InputTensorOutputTensorROITensor 必须具有相同 的数据类型

张量支持

种类 支持的维度计数 支持的数据类型
InputTensor 输入 4 FLOAT32、FLOAT16
ROITensor 输入 4 FLOAT32、FLOAT16
OutputTensor 输出 4 FLOAT32、FLOAT16

要求

   
标头 directml.h