Faster R-CNN:如何避免在同一区域进行多次检测?

机器算法验证 神经网络 卷积神经网络 张量流 物体检测
2022-04-11 13:05:19

我使用 Tensorflow 对象检测 API 从头开始​​训练 Pascal VOC 数据集。我刚刚查看了 200k 训练步骤后的第一个结果,结果还可以,尽管我经常在重叠区域中检测到同一类。例如,考虑以下检测(忽略第一张图像中的错误人员检测。

多次检测同一辆摩托车 多次检测同一架飞机

有没有一种通用的方法可以避免对同一对象进行多次检测?我猜这是由重叠的区域建议引起的,检测网络预测的对象符合高于 0.7 IoU 阈值的groundtruth 数据,所以将这个阈值设置得更高一点可能会有所帮助?

顺便提一句。我正在使用更快的 R-CNN Resnet 101 架构。

编辑:

我在整个模型上得到了 0.3 的 mAP。

2个回答

这是对象检测器(例如 Faster R-CNN)的一个共同属性:它们多次预测每个对象。过滤掉重复项是非最大抑制函数的工作。松散地解释,NMS 采用一对具有相同类别的重叠框,如果它们的重叠大于某个阈值,则只保留概率较高的框。此过程继续进行,直到没有更多具有足够重叠的框为止。这个最小重叠率是您可以调整的超参数之一。

您可以调整的第二个超参数是类别概率的阈值(例如 70%)。所有以较低概率预测的对象都被简单地忽略。

调整这两个超参数应该会给你一个令人满意的预测质量。

如前所述,NMS 用于去除误报。由于您使用的是更快的 R-CNN,因此 NMS 的阈值自动设置为 0.7。因此,您可以使用 OpenCV 函数 cv2.dnn.NMSBoxes(boxes, confidences, confid, thresh) 您可以深入研究它以获取更多信息。