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
引入的。
张量约束
InputTensor、 OutputTensor 和 ROITensor 必须具有相同 的数据类型。
张量支持
张 | 种类 | 支持的维度计数 | 支持的数据类型 |
---|---|---|---|
InputTensor | 输入 | 4 | FLOAT32、FLOAT16 |
ROITensor | 输入 | 4 | FLOAT32、FLOAT16 |
OutputTensor | 输出 | 4 | FLOAT32、FLOAT16 |
要求
标头 | directml.h |