mindspore.ops.CombinedNonMaxSuppression

class mindspore.ops.CombinedNonMaxSuppression(clip_boxes=True, pad_per_class=False)[源代码]

根据分数降序,使用非极大抑制法通过遍历所有可能的边界框(Bounding Box)来选择一个最优的结果。

参数:
  • clip_boxes (bool, 可选) - 如果为True,则假设边界框坐标在[0,1]之间,如果超出[0,1]则剪辑输出框。如果为False,则不进行剪切并按原样输出框坐标。默认值:True。

  • pad_per_class (bool, 可选) - 如果为True,输出 nmsed_boxesnmsed_scoresnmsed_classes 将被填充为 max_output_size_per_class * num_classes的长度,如果该长度超过 max_total_size ,在这种情况下它将被裁剪为 max_total_size 。如果为False,则输出 nmsed_boxesnmsed_scoresnmsed_classes 将被填充/裁剪到 max_total_size 。默认值:False。

输入:
  • boxes (Tensor) - Shape可表示为:(batch_size, num_boxes, q, 4)。如果q为1,则对所有类都使用相同的边界框;如果q等于类的数量,则对于每一类都使用特定的边界框。数据类型:float32。

  • scores (Tensor) - 表示对应于每个Bounding Boxes( boxes 的每一行)的单个分数,数据类型必须为float32,其shape可表示为:(batch_size, num_boxes, num_classes)。

  • max_output_size_per_class (Tensor) - 0D Tensor,表示每个类中由非极大抑制法(non-max suppression)选择的Bounding Boxes数目的上限。数据类型:int32。

  • max_total_size (Tensor) - 0D Tensor,表示在所有类中可保留的Bounding Boxes数目的上限。数据类型:int32。

  • iou_threshold (Tensor) - 0D Tensor,判断Bounding Boxes是否与IOU重叠过多的阈值,取值必须在[0,1]区间内。数据类型:float32。

  • score_threshold (Tensor) - 0D Tensor,表示根据 score 判断何时删除Bounding Boxes的阈值。数据类型:float32。

输出:
  • nmsed_boxes (Tensor) - 包含由非极大抑制法选择出来的Bounding Boxes,shape为(batch_size, num_detection, 4),数据类型为float32。

  • nmsed_scores (Tensor) - 包含每个box的分数,shape为(batch_size, num_detection),数据类型为float32。

  • nmsed_classes (Tensor) - 包含每个box的类别,shape为(batch_size, num_detection),数据类型为float32。

  • valid_detections (Tensor) - 表示每个batch的有效检测数,shape为(batch_size,),数据类型为int32。

异常:
  • TypeError - boxesscoresiou_thresholdscore threshold 的数据格式不是float32。

  • TypeError - max_output_size_per_classmax_total_size 的数据格式不是int32。

  • ValueError - boxes 不是四维Tensor。

  • ValueError - max_output_size_per_classmax_total_sizeiou_thresholdscore threshold 不是0D Tensor。

  • ValueError - boxesscores 的shape[0]或shape[1]不一致。

  • ValueError - boxesscores 的shape[2]不一致或 boxes 的shape[2]不为1。

  • ValueError - scores 不是3D Tensor。

  • ValueError - max_total_size 小于0。

  • ValueError - max_output_size_per_class 小于0。

  • ValueError - iou_threshold 取值不在区间[0,1]中。

支持平台:

Ascend CPU

样例:

>>> boxes = Tensor(np.array([[[[200, 100, 150, 100]],
...                           [[220, 120, 150, 100]],
...                           [[190, 110, 150, 100]],
...                           [[210, 112, 150, 100]]]])).astype('float32')
>>> scores = Tensor(np.array([[[0.2000, 0.7000, 0.1000], [0.1000, 0.8000, 0.1000], [0.3000, 0.6000, 0.1000],
...                            [0.0500, 0.9000, 0.0500]]])).astype('float32')
>>> max_output_size_per_class = Tensor(4, mstype.int32)
>>> max_total_size = Tensor(1, mstype.int32)
>>> iou_threshold = Tensor(0, mstype.float32)
>>> score_threshold = Tensor(0, mstype.float32)
>>> net = ops.CombinedNonMaxSuppression()
>>> out = net(boxes, scores, max_output_size_per_class, max_total_size, iou_threshold, score_threshold)
>>> print(out)
(Tensor(shape=[1, 1, 4], dtype=Float32, value= [[[1.00000000e+00, 1.00000000e+00, 1.00000000e+00,
                                                  1.00000000e+00]]]),
Tensor(shape=[1, 1], dtype=Float32, value= [[ 8.99999976e-01]]),
Tensor(shape=[1, 1], dtype=Float32, value= [[ 1.00000000e+00]]),
Tensor(shape=[1], dtype=Int32, value= [1]))