matrix_nms matrix_nms ( bboxes, scores, score_threshold, post_threshold, nms_top_k, keep_top_k, use_gaussian=False, gaussian_sigma=2.0, background_label=0, normalized=True, return_index=False, return_rois_num=True, name=None ) [source]

This operator does matrix non maximum suppression (NMS). First selects a subset of candidate bounding boxes that have higher scores than score_threshold (if provided), then the top k candidate is selected if nms_top_k is larger than -1. Score of the remaining candidate are then decayed according to the Matrix NMS scheme. Aftern NMS step, at most keep_top_k number of total bboxes are to be kept per image if keep_top_k is larger than -1.

  • bboxes (Tensor) – A 3-D Tensor with shape [N, M, 4] represents the predicted locations of M bounding bboxes, N is the batch size. Each bounding box has four coordinate values and the layout is [xmin, ymin, xmax, ymax], when box size equals to 4. The data type is float32 or float64.

  • scores (Tensor) – A 3-D Tensor with shape [N, C, M] represents the predicted confidence predictions. N is the batch size, C is the class number, M is number of bounding boxes. For each category there are total M scores which corresponding M bounding boxes. Please note, M is equal to the 2nd dimension of BBoxes. The data type is float32 or float64.

  • score_threshold (float) – Threshold to filter out bounding boxes with low confidence score.

  • post_threshold (float) – Threshold to filter out bounding boxes with low confidence score AFTER decaying.

  • nms_top_k (int) – Maximum number of detections to be kept according to the confidences after the filtering detections based on score_threshold.

  • keep_top_k (int) – Number of total bboxes to be kept per image after NMS step. -1 means keeping all bboxes after NMS step.

  • use_gaussian (bool, optional) – Use Gaussian as the decay function. Default: False

  • gaussian_sigma (float, optional) – Sigma for Gaussian decay function. Default: 2.0

  • background_label (int, optional) – The index of background label, the background label will be ignored. If set to -1, then all categories will be considered. Default: 0

  • normalized (bool, optional) – Whether detections are normalized. Default: True

  • return_index (bool, optional) – Whether return selected index. Default: False

  • return_rois_num (bool, optional) – whether return rois_num. Default: True

  • name (str, optional) – Name of the matrix nms op. Default: None.


  • A tuple with three Tensor, (Out, Index, RoisNum) if return_index is True, otherwise, a tuple with two Tensor (Out, RoisNum) is returned.

  • Out (Tensor), A 2-D Tensor with shape [No, 6] containing the detection results. Each row has 6 values, [label, confidence, xmin, ymin, xmax, ymax]

  • Index (Tensor), A 2-D Tensor with shape [No, 1] containing the selected indices, which are absolute values cross batches.

  • rois_num (Tensor), A 1-D Tensor with shape [N] containing the number of detected boxes in each image.


>>> import paddle
>>> from import matrix_nms

>>> boxes = paddle.rand([4, 1, 4])
>>> boxes[..., 2] = boxes[..., 0] + boxes[..., 2]
>>> boxes[..., 3] = boxes[..., 1] + boxes[..., 3]
>>> scores = paddle.rand([4, 80, 1])
>>> out = matrix_nms(bboxes=boxes, scores=scores, background_label=0,
...                         score_threshold=0.5, post_threshold=0.1,
...                         nms_top_k=400, keep_top_k=200, normalized=False)