| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 27 天前 | ||
| 1 个月前 | ||
| 28 天前 |
ROIPooling
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | × |
| Atlas训练系列产品 | × |
功能说明
-
算子功能:对输入特征图按ROI(Region of Interest)区域进行最大池化,输出固定尺寸的池化结果,用于目标检测等任务。
-
计算公式:
对每个ROI n(rois[n] = [batch_idx, x1, y1, x2, y2])、通道c、池化位置(ph,pw):
1. ROI坐标映射(使用分离的h/w缩放因子,roundf取整为int,终点坐标无+1偏移):
roi_startw=round(x1⋅spatial_scale_w),roi_starth=round(y1⋅spatial_scale_h)\text{roi\_start}_w = \text{round}(x1 \cdot \text{spatial\_scale\_w}), \quad \text{roi\_start}_h = \text{round}(y1 \cdot \text{spatial\_scale\_h})
roi_endw=round(x2⋅spatial_scale_w),roi_endh=round(y2⋅spatial_scale_h)\text{roi\_end}_w = \text{round}(x2 \cdot \text{spatial\_scale\_w}), \quad \text{roi\_end}_h = \text{round}(y2 \cdot \text{spatial\_scale\_h})
以上坐标均为整数(int类型),+1偏移在ROI尺寸上(见下),不在坐标上。
2. ROI尺寸(int运算,+1在宽度/高度上,malformed ROI强制非空):
roi_w=max(roi_endw−roi_startw+1,1),roi_h=max(roi_endh−roi_starth+1,1)\text{roi\_w} = \max(\text{roi\_end}_w - \text{roi\_start}_w + 1, 1), \quad \text{roi\_h} = \max(\text{roi\_end}_h - \text{roi\_start}_h + 1, 1)
3. Bin切分与边界裁剪(bin_size为float,基于int的roi_w/roi_h):
bin_sizew=roi_wpooled_w,bin_sizeh=roi_hpooled_h\text{bin\_size}_w = \frac{\text{roi\_w}}{\text{pooled\_w}}, \quad \text{bin\_size}_h = \frac{\text{roi\_h}}{\text{pooled\_h}}
binx1=clamp(⌊pw⋅bin_sizew⌋+roi_startw,0,W)\text{bin}_{x1} = \text{clamp}(\lfloor pw \cdot \text{bin\_size}_w \rfloor + \text{roi\_start}_w, 0, W)
binx2=clamp(⌈(pw+1)⋅bin_sizew⌉+roi_startw,0,W)\text{bin}_{x2} = \text{clamp}(\lceil (pw+1) \cdot \text{bin\_size}_w \rceil + \text{roi\_start}_w, 0, W)
(y方向同理,clamp到[0, H])
floor/ceil基于相对偏移(不含roi_start),再加整数roi_start。
4. Max Pooling(空bin输出0):
y[n,c,ph,pw]={0if binx2≤binx1 or biny2≤biny1maxh,w∈[biny1,biny2)×[binx1,binx2)x[batch_idx,c,h,w]otherwisey[n, c, ph, pw] = \begin{cases} 0 & \text{if } \text{bin}_{x2} \le \text{bin}_{x1} \text{ or } \text{bin}_{y2} \le \text{bin}_{y1} \\ \max_{h, w \in [\text{bin}_{y1}, \text{bin}_{y2}) \times [\text{bin}_{x1}, \text{bin}_{x2})} x[\text{batch\_idx}, c, h, w] & \text{otherwise} \end{cases}
其中+1偏移在ROI尺寸上(roi_width = roi_end - roi_start + 1),是ROI Pooling通用标准(源自Fast R-CNN)
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 特征图,shape为[N,C,H,W],公式中的x。 | FLOAT、FLOAT16 | ND |
| rois | 输入 | ROI框,shape为[K,5],每行为[batch_idx,x1,y1,x2,y2]。 | FLOAT、FLOAT16 | ND |
| roi_actual_num | 输入 | 每个batch的实际ROI数量,可选输入,当前版本不参与计算。 | INT32 | ND |
| y | 输出 | 池化结果,shape为[K,C,pooled_h,pooled_w],公式中的y。 | FLOAT、FLOAT16 | ND |
| pooled_h | 属性 | 池化输出高度。 | Int | - |
| pooled_w | 属性 | 池化输出宽度。 | Int | - |
| spatial_scale_h | 属性 | 高度方向缩放因子。 | Float | - |
| spatial_scale_w | 属性 | 宽度方向缩放因子。 | Float | - |
约束说明
- 输入x仅支持4维[N,C,H,W]。
- 输入rois仅支持2维[K,5],每行为[batch_idx,x1,y1,x2,y2]。
- roi_actual_num为可选输入,当前版本不参与计算。
- pooled_h和pooled_w必须大于0。
- spatial_scale_h和spatial_scale_w必须大于0。
- x与rois的dtype必须一致。
- 输出y的shape为[K,C,pooled_h,pooled_w]。
- ROI坐标用roundf取整为int,+1偏移在ROI尺寸上(roi_width = roi_end - roi_start + 1)。
- malformed ROI强制非空,roi_size取max(size,1)(int运算)。
- 空bin输出0。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| 图模式调用 | test_geir_roi_pooling | 参见算子调用完成算子编译和验证。 |