From 072eca348a06b62c7ac4dd5f11bd7482b42641c4 Mon Sep 17 00:00:00 2001 From: jerrywgz Date: Tue, 5 Mar 2019 10:18:18 +0000 Subject: [PATCH] refine doc, test=develop --- paddle/fluid/API.spec | 2 +- .../detection/box_decoder_and_assign_op.cc | 62 +++++++++---------- .../detection/box_decoder_and_assign_op.cu | 2 +- .../detection/box_decoder_and_assign_op.h | 2 +- python/paddle/fluid/layers/detection.py | 18 ++++-- .../test_box_decoder_and_assign_op.py | 2 +- 6 files changed, 44 insertions(+), 44 deletions(-) diff --git a/paddle/fluid/API.spec b/paddle/fluid/API.spec index b16a9df13e9..da0d0bdec18 100644 --- a/paddle/fluid/API.spec +++ b/paddle/fluid/API.spec @@ -328,7 +328,7 @@ paddle.fluid.layers.polygon_box_transform (ArgSpec(args=['input', 'name'], varar paddle.fluid.layers.yolov3_loss (ArgSpec(args=['x', 'gtbox', 'gtlabel', 'anchors', 'anchor_mask', 'class_num', 'ignore_thresh', 'downsample_ratio', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', '991e934c3e09abf0edec7c9c978b4691')) paddle.fluid.layers.box_clip (ArgSpec(args=['input', 'im_info', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', '397e9e02b451d99c56e20f268fa03f2e')) paddle.fluid.layers.multiclass_nms (ArgSpec(args=['bboxes', 'scores', 'score_threshold', 'nms_top_k', 'keep_top_k', 'nms_threshold', 'normalized', 'nms_eta', 'background_label', 'name'], varargs=None, keywords=None, defaults=(0.3, True, 1.0, 0, None)), ('document', 'ca7d1107b6c5d2d6d8221039a220fde0')) -paddle.fluid.layers.box_decoder_and_assign (ArgSpec(args=['prior_box', 'prior_box_var', 'target_box', 'box_score', 'box_clip', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', 'fb470052db88526a94a7e5de9d9b3a4c')) +paddle.fluid.layers.box_decoder_and_assign (ArgSpec(args=['prior_box', 'prior_box_var', 'target_box', 'box_score', 'box_clip', 'name'], varargs=None, keywords=None, defaults=(None,)), ('document', '005a5ae47d6c8fff721931d69d072b9f')) paddle.fluid.layers.accuracy (ArgSpec(args=['input', 'label', 'k', 'correct', 'total'], varargs=None, keywords=None, defaults=(1, None, None)), ('document', '9808534c12c5e739a10f73ebb0b4eafd')) paddle.fluid.layers.auc (ArgSpec(args=['input', 'label', 'curve', 'num_thresholds', 'topk', 'slide_steps'], varargs=None, keywords=None, defaults=('ROC', 4095, 1, 1)), ('document', 'e0e95334fce92d16c2d9db6e7caffc47')) paddle.fluid.layers.exponential_decay (ArgSpec(args=['learning_rate', 'decay_steps', 'decay_rate', 'staircase'], varargs=None, keywords=None, defaults=(False,)), ('document', '98a5050bee8522fcea81aa795adaba51')) diff --git a/paddle/fluid/operators/detection/box_decoder_and_assign_op.cc b/paddle/fluid/operators/detection/box_decoder_and_assign_op.cc index 585552cd42a..945d575a644 100644 --- a/paddle/fluid/operators/detection/box_decoder_and_assign_op.cc +++ b/paddle/fluid/operators/detection/box_decoder_and_assign_op.cc @@ -35,8 +35,8 @@ class BoxDecoderAndAssignOp : public framework::OperatorWithKernel { ctx->HasInput("BoxScore"), "Input(BoxScore) of BoxDecoderAndAssignOp should not be null."); PADDLE_ENFORCE( - ctx->HasOutput("OutputBox"), - "Output(OutputBox) of BoxDecoderAndAssignOp should not be null."); + ctx->HasOutput("DecodeBox"), + "Output(DecodeBox) of BoxDecoderAndAssignOp should not be null."); PADDLE_ENFORCE( ctx->HasOutput("OutputAssignBox"), "Output(OutputAssignBox) of BoxDecoderAndAssignOp should not be null."); @@ -68,9 +68,9 @@ class BoxDecoderAndAssignOp : public framework::OperatorWithKernel { "of box_score is [N, classnum], The shape of prior_box " "is [N, 4]"); - ctx->SetOutputDim("OutputBox", framework::make_ddim({target_box_dims[0], + ctx->SetOutputDim("DecodeBox", framework::make_ddim({target_box_dims[0], target_box_dims[1]})); - ctx->ShareLoD("TargetBox", /*->*/ "OutputBox"); + ctx->ShareLoD("TargetBox", /*->*/ "DecodeBox"); ctx->SetOutputDim( "OutputAssignBox", framework::make_ddim({prior_box_dims[0], prior_box_dims[1]})); @@ -84,38 +84,32 @@ class BoxDecoderAndAssignOpMaker : public framework::OpProtoAndCheckerMaker { AddInput( "PriorBox", "(Tensor, default Tensor) " - "Box list PriorBox is a 2-D Tensor with shape [M, 4] holds M boxes, " - "each box is represented as [xmin, ymin, xmax, ymax], " + "Box list PriorBox is a 2-D Tensor with shape [N, 4] which holds N " + "boxes and each box is represented as [xmin, ymin, xmax, ymax], " "[xmin, ymin] is the left top coordinate of the anchor box, " "if the input is image feature map, they are close to the origin " "of the coordinate system. [xmax, ymax] is the right bottom " "coordinate of the anchor box."); AddInput("PriorBoxVar", "(Tensor, default Tensor, optional) " - "PriorBoxVar is a 2-D Tensor with shape [M, 4] holds M group " - "of variance. PriorBoxVar will set all elements to 1 by " + "PriorBoxVar is a 2-D Tensor with shape [N, 4] which holds N " + "group of variance. PriorBoxVar will set all elements to 1 by " "default.") .AsDispensable(); - AddInput( - "TargetBox", - "(LoDTensor or Tensor) This input can be a 2-D LoDTensor with shape " - "[N, classnum*4]. [N, classnum*4], each box is represented as " - "[xmin, ymin, xmax, ymax], [xmin, ymin] is the left top coordinate " - "of the box if the input is image feature map, they are close to " - "the origin of the coordinate system. [xmax, ymax] is the right " - "bottom coordinate of the box. This tensor can contain LoD " - "information to represent a batch of inputs. One instance of this " - "batch can contain different numbers of entities."); - AddInput( - "BoxScore", - "(LoDTensor or Tensor) This input can be a 2-D LoDTensor with shape " - "[N, classnum], each box is represented as [classnum] which is " - "the classification probabilities."); + AddInput("TargetBox", + "(LoDTensor or Tensor) " + "This input can be a 2-D LoDTensor with shape " + "[N, classnum*4]. It holds N targets for N boxes."); + AddInput("BoxScore", + "(LoDTensor or Tensor) " + "This input can be a 2-D LoDTensor with shape " + "[N, classnum], each box is represented as [classnum] which is " + "the classification probabilities."); AddAttr("box_clip", "(float, default 4.135, np.log(1000. / 16.)) " "clip box to prevent overflowing") .SetDefault(4.135f); - AddOutput("OutputBox", + AddOutput("DecodeBox", "(LoDTensor or Tensor) " "the output tensor of op with shape [N, classnum * 4] " "representing the result of N target boxes decoded with " @@ -130,12 +124,12 @@ class BoxDecoderAndAssignOpMaker : public framework::OpProtoAndCheckerMaker { Bounding Box Coder. -Decode the target bounding box with the priorbox information. +Decode the target bounding box with the prior_box information. -The Decoding schema described below: +The Decoding schema is described below: $$ - oy = (ph \\times pyv \\times ty + py) - \\frac{th}{2} + ox = (pw \\times pxv \\times tx + px) - \\frac{tw}{2} $$ $$ oy = (ph \\times pyv \\times ty + py) - \\frac{th}{2} @@ -149,15 +143,15 @@ The Decoding schema described below: where `tx`, `ty`, `tw`, `th` denote the target box's center coordinates, width and height respectively. Similarly, `px`, `py`, `pw`, `ph` denote the -priorbox's (anchor) center coordinates, width and height. `pxv`, `pyv`, `pwv`, -`phv` denote the variance of the priorbox and `ox`, `oy`, `ow`, `oh` denote the -encoded/decoded coordinates, width and height. +prior_box's (anchor) center coordinates, width and height. `pxv`, `pyv`, `pwv`, +`phv` denote the variance of the prior_box and `ox`, `oy`, `ow`, `oh` denote the +decoded coordinates, width and height in decode_box. -After box decode, the Assigning schema described below: +decode_box is obtained after box decode, then assigning schema is described below: -For each priorbox, use the best non-background class's decoded values to -updata the priorbox locations and get outputassignbox. So, the shape of -output_assign_box is the same as priorbox. +For each prior_box, use the best non-background class's decoded values to +update the prior_box locations and get output_assign_box. So, the shape of +output_assign_box is the same as PriorBox. )DOC"); } }; diff --git a/paddle/fluid/operators/detection/box_decoder_and_assign_op.cu b/paddle/fluid/operators/detection/box_decoder_and_assign_op.cu index ef17c4c0006..25e6545eb59 100644 --- a/paddle/fluid/operators/detection/box_decoder_and_assign_op.cu +++ b/paddle/fluid/operators/detection/box_decoder_and_assign_op.cu @@ -101,7 +101,7 @@ class BoxDecoderAndAssignCUDAKernel : public framework::OpKernel { auto* prior_box_var = context.Input("PriorBoxVar"); auto* target_box = context.Input("TargetBox"); auto* box_score = context.Input("BoxScore"); - auto* output_box = context.Output("OutputBox"); + auto* output_box = context.Output("DecodeBox"); auto* output_assign_box = context.Output("OutputAssignBox"); diff --git a/paddle/fluid/operators/detection/box_decoder_and_assign_op.h b/paddle/fluid/operators/detection/box_decoder_and_assign_op.h index ff343e5d44b..e66a8351f47 100644 --- a/paddle/fluid/operators/detection/box_decoder_and_assign_op.h +++ b/paddle/fluid/operators/detection/box_decoder_and_assign_op.h @@ -27,7 +27,7 @@ class BoxDecoderAndAssignKernel : public framework::OpKernel { auto* prior_box_var = context.Input("PriorBoxVar"); auto* target_box = context.Input("TargetBox"); auto* box_score = context.Input("BoxScore"); - auto* output_box = context.Output("OutputBox"); + auto* output_box = context.Output("DecodeBox"); auto* output_assign_box = context.Output("OutputAssignBox"); int roi_num = target_box->dims()[0]; diff --git a/python/paddle/fluid/layers/detection.py b/python/paddle/fluid/layers/detection.py index b465fe129ac..acdf619afa5 100644 --- a/python/paddle/fluid/layers/detection.py +++ b/python/paddle/fluid/layers/detection.py @@ -2238,10 +2238,16 @@ def box_decoder_and_assign(prior_box, prior_box_var(${prior_box_var_type}): ${prior_box_var_comment} target_box(${target_box_type}): ${target_box_comment} box_score(${box_score_type}): ${box_score_comment} + box_clip(${box_clip_type}): ${box_clip_comment} name(str|None): The name of this operator Returns: - output_box(${output_box_type}): ${output_box_comment} - output_assign_box(${output_assign_box_type}): ${output_assign_box_comment} + decode_box(Variable), output_assign_box(Variable): + + two variables: + + - decode_box(${decode_box_type}): ${decode_box_comment} + - output_assign_box(${output_assign_box_type}): ${output_assign_box_comment} + Examples: .. code-block:: python @@ -2253,13 +2259,13 @@ def box_decoder_and_assign(prior_box, name='target_box', shape=[20, 4*81], dtype='float32') scores = fluid.layers.data( name='scores', shape=[20, 81], dtype='float32') - output_box, assign_box = fluid.layers.box_decoder_and_assign( + decoded_box, output_assign_box = fluid.layers.box_decoder_and_assign( pb, pbv, loc, scores, 4.135) """ helper = LayerHelper("box_decoder_and_assign", **locals()) - output_box = helper.create_variable_for_type_inference( + decoded_box = helper.create_variable_for_type_inference( dtype=prior_box.dtype) output_assign_box = helper.create_variable_for_type_inference( dtype=prior_box.dtype) @@ -2274,7 +2280,7 @@ def box_decoder_and_assign(prior_box, }, attrs={"box_clip": box_clip}, outputs={ - "OutputBox": output_box, + "DecodeBox": decoded_box, "OutputAssignBox": output_assign_box }) - return output_box, output_assign_box + return decoded_box, output_assign_box diff --git a/python/paddle/fluid/tests/unittests/test_box_decoder_and_assign_op.py b/python/paddle/fluid/tests/unittests/test_box_decoder_and_assign_op.py index b136c90f2d6..b0afc2a2e4a 100644 --- a/python/paddle/fluid/tests/unittests/test_box_decoder_and_assign_op.py +++ b/python/paddle/fluid/tests/unittests/test_box_decoder_and_assign_op.py @@ -87,7 +87,7 @@ class TestBoxDecoderAndAssignOpWithLoD(OpTest): } self.attrs = {'box_clip': box_clip} self.outputs = { - 'OutputBox': output_box, + 'DecodeBox': output_box, 'OutputAssignBox': output_assign_box } -- GitLab