diff --git a/paddle/fluid/operators/detection/multiclass_nms_op.cc b/paddle/fluid/operators/detection/multiclass_nms_op.cc index 265bfc6c75c273416e9fa9c5a803118c7a759e8d..f357e3ccf905309e6656f3fa87fbee45dc357c1e 100644 --- a/paddle/fluid/operators/detection/multiclass_nms_op.cc +++ b/paddle/fluid/operators/detection/multiclass_nms_op.cc @@ -520,7 +520,7 @@ independently for each class. The outputs is a 2-D LoDTenosr, for each image, the offsets in first dimension of LoDTensor are called LoD, the number of offset is N + 1, where N is the batch size. If LoD[i + 1] - LoD[i] == 0, means there is no detected bbox for this image. If there is no detected boxes -for all images, all the elements in LoD are set to {0,1}, and the Out only +for all images, all the elements in LoD are set to {1}, and the Out only contains one value which is -1. )DOC"); } diff --git a/python/paddle/fluid/layers/detection.py b/python/paddle/fluid/layers/detection.py index 4ee0cce62a60e7e7eb404592d7b88226b9948921..7cf575d2539ce770f50411048f8ba948809b3c31 100644 --- a/python/paddle/fluid/layers/detection.py +++ b/python/paddle/fluid/layers/detection.py @@ -263,8 +263,10 @@ def detection_output(loc, number is N + 1, N is the batch size. The i-th image has `LoD[i + 1] - LoD[i]` detected results, if it is 0, the i-th image has no detected results. If all images have not detected results, - all the elements in LoD are 0, and output tensor only contains one + LoD will be set to {1}, and output tensor only contains one value, which is -1. + (After version 1.3, when no boxes detected, the lod is changed + from {0} to {1}.) Examples: .. code-block:: python @@ -1967,8 +1969,8 @@ def multiclass_nms(bboxes, scores, score_threshold, nms_top_k, - nms_threshold, keep_top_k, + nms_threshold=0.3, normalized=True, nms_eta=1., background_label=0, @@ -2035,8 +2037,10 @@ def multiclass_nms(bboxes, Each row has 10 values: [label, confidence, x1, y1, x2, y2, x3, y3, x4, y4]. No is the total number of detections. If there is no detected boxes for all - images, lod will be set to {0, 1} and Out only contains one value - which is -1. + images, lod will be set to {1} and Out only contains one value + which is -1. + (After version 1.3, when no boxes detected, the lod is changed + from {0} to {1}) Examples: .. code-block:: python diff --git a/python/paddle/fluid/tests/unittests/test_multiclass_nms_op.py b/python/paddle/fluid/tests/unittests/test_multiclass_nms_op.py index 2a50e0bd856004a46dae01652d8507e88beaa884..8fc391a1ff2529460b038979c0c7d0a9d905a7e0 100644 --- a/python/paddle/fluid/tests/unittests/test_multiclass_nms_op.py +++ b/python/paddle/fluid/tests/unittests/test_multiclass_nms_op.py @@ -19,7 +19,7 @@ import copy from op_test import OpTest -def iou(box_a, box_b, normalized): +def iou(box_a, box_b, norm): """Apply intersection-over-union overlap between box_a and box_b """ xmin_a = min(box_a[0], box_a[2]) @@ -32,10 +32,10 @@ def iou(box_a, box_b, normalized): xmax_b = max(box_b[0], box_b[2]) ymax_b = max(box_b[1], box_b[3]) - area_a = (ymax_a - ymin_a + (normalized == False)) * \ - (xmax_a - xmin_a + (normalized == False)) - area_b = (ymax_b - ymin_b + (normalized == False)) * \ - (xmax_b - xmin_b + (normalized == False)) + area_a = (ymax_a - ymin_a + (norm == False)) * (xmax_a - xmin_a + + (norm == False)) + area_b = (ymax_b - ymin_b + (norm == False)) * (xmax_b - xmin_b + + (norm == False)) if area_a <= 0 and area_b <= 0: return 0.0 @@ -44,8 +44,8 @@ def iou(box_a, box_b, normalized): xb = min(xmax_a, xmax_b) yb = min(ymax_a, ymax_b) - inter_area = max(xb - xa + (normalized == False), 0.0) * \ - max(yb - ya + (normalized == False), 0.0) + inter_area = max(xb - xa + (norm == False), + 0.0) * max(yb - ya + (norm == False), 0.0) iou_ratio = inter_area / (area_a + area_b - inter_area) @@ -210,7 +210,6 @@ def batched_multiclass_nms(boxes, normalized, shared=True) if nmsed_num == 0: - # lod.append(1) continue lod.append(nmsed_num)