density_prior_box

paddle.fluid.layers. density_prior_box ( input, image, densities=None, fixed_sizes=None, fixed_ratios=None, variance=[0.1, 0.1, 0.2, 0.2], clip=False, steps=[0.0, 0.0], offset=0.5, flatten_to_2d=False, name=None ) [源代码]

该OP为SSD算法(Single Shot MultiBox Detector)生成density prior box,在每个 input 的位置产生N个候选框,其中,N由 densities , fixed_sizesfixed_ratios 来计算。生成的每个输入位置附近的候选框中心(网格点)由 densitiesdensity prior box 的数量计算,其中 density prior box 的数量由 fixed_sizesfixed_ratios 决定。fixed_sizesdensities 的大小一致。

\[N\_density\_prior\_box =sum(N\_fixed\_ratios * {densities\_i}^2)\]
参数:
  • input (Variable) - 形状为NCHW的4-D Tensor,数据类型为float32或float64。

  • image (Variable) - 输入图像,形状为NCHW的4-D Tensor,数据类型为float32或float64。

  • densities (list|tuple|None) - 生成的density prior boxes的densities,此属性应该是一个整数列表或数组。默认值为None。

  • fixed_sizes (list|tuple|None) - 生成的density prior boxes的大小,此属性应该为和 densities 有同样长度的列表或数组。默认值为None。

  • fixed_ratios (list|tuple|None) - 生成的density prior boxes的比值,如果该属性未被设置,同时 densitiesfix_sizes 被设置,则 aspect_ratios 被用于生成 density prior boxes

  • variance (list|tuple) - 将被用于density prior boxes编码的方差,默认值为:[0.1, 0.1, 0.2, 0.2]

  • clip (bool) - 是否裁剪超出范围的box。默认值:False

  • step (list|tuple) - Prior boxes在宽度和高度的步长,如果step[0]等于0.0或step[1]等于0.0, input的the density prior boxes的高度/宽度的步长将被自动计算。默认值:Default: [0., 0.]

  • offset (float) - Prior boxes中心偏移值,默认为:0.5

  • flatten_to_2d (bool) - 是否将output prior boxes和方差 flatten 至2-D,其中第二个dim为4。默认值:False

  • name (str|None) - 该参数供开发人员打印调试信息时使用,具体用法请参见 Name 。默认值为None。

返回:含有两个变量的元组,包括:

候选框:

当flatten_to_2d为False时,形状为[H, W, num_priors, 4]的4-D Tensor。 当flatten_to_2d为True时,形式为[H * W * num_priors, 4]的 2-D Tensor。 其中,H是输入的高度,W是输入的宽度,num_priors是输入中每个位置的候选框数。

候选框的方差:

当flatten_to_2d为False时,形状为[H, W, num_priors, 4]的4-D Tensor。 当flatten_to_2d为True时,形式为[H * W * num_priors, 4]的2-D Tensor。 其中,H是输入的高度,W是输入的宽度,num_priors是输入中每个位置的候选框数。

返回类型:元组

代码示例

import paddle.fluid as fluid
input = fluid.layers.data(name="input", shape=[3,6,9])
images = fluid.layers.data(name="images", shape=[3,9,12])
box, var = fluid.layers.density_prior_box(
    input=input,
    image=images,
    densities=[4, 2, 1],
    fixed_sizes=[32.0, 64.0, 128.0],
    fixed_ratios=[1.],
    clip=True,
    flatten_to_2d=True)