distribute_fpn_proposals

paddle.fluid.layers. distribute_fpn_proposals ( fpn_rois, min_level, max_level, refer_level, refer_scale, name=None ) [源代码]

该op仅支持LoDTensor输入。在 Feature Pyramid Networks(FPN)模型中,需要依据proposal的尺度和参考尺度与级别将所有proposal分配到不同的FPN级别中。此外,为了恢复proposals的顺序,我们返回一个数组,该数组表示当前proposals中的原始RoIs索引。要计算每个RoI的FPN级别,公式如下:

\[\begin{split}roi\_scale &= \sqrt{BBoxArea(fpn\_roi)}\\ level = floor(&\log(\frac{roi\_scale}{refer\_scale}) + refer\_level)\end{split}\]

其中BBoxArea方法用来计算每个RoI的区域。

参数

  • fpn_rois (Variable) - 维度为[N,4]的2-D LoDTensor,其中N为检测框的个数,数据类型为float32或float64。

  • min_level (int32) - 产生proposal最低级别FPN层。

  • max_level (int32) - 产生proposal最高级别FPN层。

  • refer_level (int32) - 具有指定比例的FPN层的引用级别。

  • refer_scale (int32) - 具有指定级别的FPN层的引用比例。

  • name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

  • multi_rois(List)- 长度为(max_level-min_level+1)的列表,其中元素为Variable,维度为[M, 4]的2-D LoDTensor,M为每个级别proposal的个数,数据类型为float32或float64。表示每个FPN级别包含的proposals。

  • restore_ind(Variable)- 维度为[N,1]的Tensor,N是总rois的数量。数据类型为int32。它用于恢复fpn_rois的顺序。

返回类型

Tuple

代码示例

import paddle.fluid as fluid
import paddle
paddle.enable_static()
fpn_rois = fluid.data(
    name='data', shape=[None, 4], dtype='float32', lod_level=1)
multi_rois, restore_ind = fluid.layers.distribute_fpn_proposals(
    fpn_rois=fpn_rois,
    min_level=2,
    max_level=5,
    refer_level=4,
    refer_scale=224)