Skip to content

Commit 2f5a801

Browse files
committed
add roi_align api
1 parent 90f39b1 commit 2f5a801

File tree

4 files changed

+60
-0
lines changed

4 files changed

+60
-0
lines changed

paddle/fluid/API.spec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ paddle.fluid.layers.pad ArgSpec(args=['x', 'paddings', 'pad_value', 'name'], var
114114
paddle.fluid.layers.pad_constant_like ArgSpec(args=['x', 'y', 'pad_value', 'name'], varargs=None, keywords=None, defaults=(0.0, None))
115115
paddle.fluid.layers.label_smooth ArgSpec(args=['label', 'prior_dist', 'epsilon', 'dtype', 'name'], varargs=None, keywords=None, defaults=(None, 0.1, 'float32', None))
116116
paddle.fluid.layers.roi_pool ArgSpec(args=['input', 'rois', 'pooled_height', 'pooled_width', 'spatial_scale'], varargs=None, keywords=None, defaults=(1, 1, 1.0))
117+
paddle.fluid.layers.roi_align ArgSpec(args=['input', 'rois', 'pooled_height', 'pooled_width', 'spatial_scale', 'sampling_ratio'], varargs=None, keywords=None, defaults=(1, 1, 1.0, -1))
117118
paddle.fluid.layers.dice_loss ArgSpec(args=['input', 'label', 'epsilon'], varargs=None, keywords=None, defaults=(1e-05,))
118119
paddle.fluid.layers.image_resize ArgSpec(args=['input', 'out_shape', 'scale', 'name', 'resample'], varargs=None, keywords=None, defaults=(None, None, None, 'BILINEAR'))
119120
paddle.fluid.layers.image_resize_short ArgSpec(args=['input', 'out_short_len', 'resample'], varargs=None, keywords=None, defaults=('BILINEAR',))

paddle/fluid/operators/roi_align_op.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ class ROIAlignOpMaker : public framework::OpProtoAndCheckerMaker {
132132
"and pooled_w, likewise for height")
133133
.SetDefault(-1);
134134
AddComment(R"DOC(
135+
135136
)DOC");
136137
}
137138
};

python/paddle/fluid/layers/nn.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
'pad_constant_like',
9595
'label_smooth',
9696
'roi_pool',
97+
'roi_align',
9798
'dice_loss',
9899
'image_resize',
99100
'image_resize_short',
@@ -5177,6 +5178,53 @@ def roi_pool(input, rois, pooled_height=1, pooled_width=1, spatial_scale=1.0):
51775178
return pool_out
51785179

51795180

5181+
@templatedoc()
5182+
def roi_align(input,
5183+
rois,
5184+
pooled_height=1,
5185+
pooled_width=1,
5186+
spatial_scale=1.0,
5187+
sampling_ratio=-1):
5188+
"""
5189+
${comment}
5190+
5191+
Args:
5192+
input (Variable): ${x_comment}
5193+
rois (Variable): ROIs (Regions of Interest) to pool over.
5194+
pooled_height (integer): ${pooled_height_comment} Default: 1
5195+
pooled_width (integer): ${pooled_width_comment} Default: 1
5196+
spatial_scale (float): ${spatial_scale_comment} Default: 1.0
5197+
sampling_ratio(intger): ${sampling_ratio_comment} Default: -1
5198+
5199+
Returns:
5200+
Variable: ${out_comment}.
5201+
Examples:
5202+
.. code-block:: python
5203+
5204+
align_out = fluid.layers.roi_align(input=x,
5205+
rois=rois,
5206+
pooled_height=7,
5207+
pooled_width=7,
5208+
spatial_scale=0.5,
5209+
sampling_ratio=-1)
5210+
"""
5211+
helper = LayerHelper('roi_align', **locals())
5212+
dtype = helper.input_dtype()
5213+
align_out = helper.create_tmp_variable(dtype)
5214+
helper.append_op(
5215+
type="roi_align",
5216+
inputs={"X": input,
5217+
"ROIs": rois},
5218+
outputs={"Out": align_out},
5219+
attrs={
5220+
"pooled_height": pooled_height,
5221+
"pooled_width": pooled_width,
5222+
"spatial_scale": spatial_scale,
5223+
"sampling_ratio": sampling_ratio
5224+
})
5225+
return align_out
5226+
5227+
51805228
def dice_loss(input, label, epsilon=0.00001):
51815229
"""
51825230
Dice loss for comparing the similarity of two batch of data,

python/paddle/fluid/tests/unittests/test_layers.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,16 @@ def test_roi_pool(self):
444444
self.assertIsNotNone(output)
445445
print(str(program))
446446

447+
def test_roi_align(self):
448+
program = Program()
449+
with program_guard(program):
450+
x = layers.data(name="x", shape=[256, 30, 30], dtype="float32")
451+
rois = layers.data(
452+
name="rois", shape=[4], dtype="float32", lod_level=1)
453+
output = layers.roi_align(x, rois, 14, 14, 0.5, 2)
454+
self.assertIsNotNone(output)
455+
print(str(program))
456+
447457
def test_resize_bilinear(self):
448458
program = Program()
449459
with program_guard(program):

0 commit comments

Comments
 (0)