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_sizes
和 fixed_ratios
来计算。生成的每个输入位置附近的候选框中心(网格点)由 densities
和 density prior box
的数量计算,其中 density prior box
的数量由 fixed_sizes
和 fixed_ratios
决定。fixed_sizes
和 densities
的大小一致。
参数¶
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的比值,如果该属性未被设置,同时
densities
和fix_sizes
被设置,则aspect_ratios
被用于生成 density prior boxesvariance (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。默认值:Falsename (str,可选) - 具体用法请参见 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是输入中每个位置的候选框数。
返回类型¶
元组
代码示例¶
#declarative mode
import paddle.fluid as fluid
import numpy as np
import paddle
paddle.enable_static()
input = fluid.data(name="input", shape=[None,3,6,9])
image = fluid.data(name="image", shape=[None,3,9,12])
box, var = fluid.layers.density_prior_box(
input=input,
image=image,
densities=[4, 2, 1],
fixed_sizes=[32.0, 64.0, 128.0],
fixed_ratios=[1.],
clip=True,
flatten_to_2d=True)
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())
# prepare a batch of data
input_data = np.random.rand(1,3,6,9).astype("float32")
image_data = np.random.rand(1,3,9,12).astype("float32")
box_out, var_out = exe.run(
fluid.default_main_program(),
feed={"input":input_data,
"image":image_data},
fetch_list=[box,var],
return_numpy=True)
# print(box_out.shape)
# (1134, 4)
# print(var_out.shape)
# (1134, 4)
#imperative mode
import paddle.fluid.dygraph as dg
with dg.guard(place) as g:
input = dg.to_variable(input_data)
image = dg.to_variable(image_data)
box, var = fluid.layers.density_prior_box(
input=input,
image=image,
densities=[4, 2, 1],
fixed_sizes=[32.0, 64.0, 128.0],
fixed_ratios=[1.],
clip=True)
# print(box.shape)
# [6L, 9L, 21L, 4L]
# print(var.shape)
# [6L, 9L, 21L, 4L]