文件最后提交记录最后更新时间
1 个月前
1 个月前
1 个月前
1 个月前
27 天前
1 个月前
28 天前
README

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≤biny1max⁡h,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 参见算子调用完成算子编译和验证。