当为同一对象预测一个或多个边界框时,非最大抑制如何工作?

人工智能 计算机视觉 物体检测 非最大抑制
2021-11-10 11:27:54

我对非最大抑制如何工作的理解是,它抑制了 Jaccard 重叠小于阈值(例如 0.5)的所有重叠框。要考虑的框是有信心的分数(可能是 0.2 或其他东西)。因此,如果有得分超过 0.2 的框(例如得分为 0.3,重叠为 0.4),则不会抑制框。

这样一来,一个物体会被很多个框、一个高分框、很多个低置信度框预测,但是我发现模型对一个物体只预测一个框。有人可以启发我吗?

我目前从https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Object-Detection查看 ssd

这是代码。

#Finding Jaccap Overlap and sorting scotes
class_scores, sort_ind = class_scores.sort(dim=0, descending=True)
class_decoded_locs = class_decoded_locs[sort_ind]  # (n_min_score, 4)
overlap = find_jaccard_overlap(class_decoded_locs, class_decoded_locs)  
suppress = torch.zeros((n_above_min_score), dtype=torch.uint8).to(device)  

for box in range(class_decoded_locs.size(0)):
# If this box is already marked for suppression
    if suppress[box] == 1:
    continue
    suppress = torch.max(suppress, overlap[box] > max_overlap)
    suppress[box] = 0
1个回答

我也许可以在理论方面提供帮助,但编码......它是一个非标准的 API,例如 Tensorflow 或 Pytorch(它可能是我能说的自定义代码)。

这里的关键元素是,只有当边界框具有与与之重叠的框相同的类的预测时,边界框才会被移除(但信心较低,这就是它被移除的原因)。

这是一个例子,我们有:

  • 两班c[c1,c2]=[“星星”,“月亮”]
  • 三个边界框

蓝色边界框保存类的预测c1所以他们的预测是p(c1)box1=0.8p(c1)box2=0.9. 另一方面,绿色框包含该类的预测c2.

这三个框高度重叠,因此任何框之间的重叠x与任何盒子y将高于 IoU 阈值:IoU(boxx,boxy)>0.5. 所以原则上所有的盒子都容易被移除。

然而,NMS 仅适用于预测同一类的框(在蓝色的情况下)。所以 NMS 算法是:如果框是重叠的,IoU(box1,box2)>0.5,这是真的,删除所有非最大类概率框。换句话说,只取最高的盒子p(c1)并删除其余部分。所以box1具有类概率p(c1)=0.8将被删除。

那么绿色盒子会发生什么?不也是重叠的吗?是的,但考虑到绿色框不是在尝试预测同一个对象,而是在尝试预测另一个对象,c2,恰好与第一个物体非常接近,c1. 通过这种方式,对象检测器支持检测不同的重叠对象。

在此处输入图像描述