iou_similarity¶
IOU Similarity Operator
计算两个框列表的intersection-over-union(IOU)。框列表 \(X\) 应为LoDTensor, \(Y\) 是普通张量,\(X\) 成批输入的所有实例共享 \(Y\) 中的框。给定框A和框B,IOU的运算如下:
\[IOU(A, B) = \frac{area(A\cap B)}{area(A)+area(B)-area(A\cap B)}\]
参数¶
x (Variable) - 框列表 \(X\) 是二维LoDTensor,维度为 \([N,4]\),存有 \(N\) 个框,每个框表示为 \([xmin, ymin, xmax, ymax]\) ,\(X\) 的维度为 \([N,4]\)。如果输入是图像特征图,\([xmin, ymin]\) 表示框的左上角坐标,接近坐标轴的原点。\([xmax, ymax]\) 表示框的右下角坐标。该张量包含批次输入的LoD信息。该批次输入的一个实例能容纳不同的项数。数据类型为float32或float64。
y (Variable) - 框列表 \(Y\) 是二维张量,存有 \(M\) 个框,每个框表示为 \([xmin, ymin, xmax, ymax]\) ,\(Y\) 的维度为 \([M,4]\)。如果输入是图像特征图,\([xmin, ymin]\) 表示框的左上角坐标,接近坐标轴的原点。\([xmax, ymax]\) 表示框的右下角坐标。数据类型为float32或float64。
box_normalized (bool) - 先验框坐标是否正则化,即是否在[0, 1]区间内。默认值为true
返回¶
维度为 \([N,M]\) 的LoDTensor,代表每一对iou分数,数据类型与 \(X\) 相同
返回类型¶
Variable
代码示例¶
import numpy as np
import paddle.fluid as fluid
use_gpu = False
place = fluid.CUDAPlace(0) if use_gpu else fluid.CPUPlace()
exe = fluid.Executor(place)
x = fluid.data(name='x', shape=[None, 4], dtype='float32')
y = fluid.data(name='y', shape=[None, 4], dtype='float32')
iou = fluid.layers.iou_similarity(x=x, y=y)
exe.run(fluid.default_startup_program())
test_program = fluid.default_main_program().clone(for_test=True)
[out_iou] = exe.run(test_program,
fetch_list=iou,
feed={'x': np.array([[0.5, 0.5, 2.0, 2.0],
[0., 0., 1.0, 1.0]]).astype('float32'),
'y': np.array([[1.0, 1.0, 2.5, 2.5]]).astype('float32')})
# out_iou is [[0.2857143],
# [0. ]] with shape: [2, 1]