在 Tensorflow 对象检测 API 中摆脱不同 类 的重叠边界框

Get rid of overlapping bounding boxes across different classes in Tensorflow Object Detection API

我正在使用 Tensorflow 对象检测 API 来训练我自己的车辆检测器。当我使用 Object detection tutorial 测试我的模型时,我发现在某些情况下,一辆卡车被检测为汽车和卡车,周围有两个重叠的边界框。我只想留下检测分数最高的那个。

我知道对象检测 API 确实摆脱了重叠的边界框,但它对跨不同 类 的边界框没有这样做。有没有办法摆脱重叠的盒子?我可以更改对象检测 API 代码中的任何地方来实现该目标吗?

您可以对所有 类 使用 non_max_suppression:

  corners = tf.constant(boxes, tf.float32)
  boxesList = box_list.BoxList(corners)
  boxesList.add_field('scores', tf.constant(scores))
  iou_thresh = 0.1
  max_output_size = 100
  sess = tf.Session()
  nms = box_list_ops.non_max_suppression(
      boxesList, iou_thresh, max_output_size)
  boxes = sess.run(nms.get())

有两种方法可以消除重叠的边界框。

1、在文件 visualization_utils.py;

中的 "visualize_boxes_and_labels_on_image_array" 函数中将 "min_score_thresh" 参数设置得更大

2、在配置文件中设置非最大抑制阈值