检测对象时如何删除/删除边界框?

时间:2020-09-03 14:09:24

标签: tensorflow object-detection-api

我正在使用TensorFlow执行对象检测任务,但有时会显示误报,因此我想过滤一些边界框。
例如,如果对象的边界框的宽度小于整个屏幕的50%,则显示该框:

(boxes, scores, classes, num_detections) = sess.run(
                [boxes, scores, classes, num_detections],
                feed_dict={image_tensor: frame_expanded})
            # W = width of frame, H = height of frame
            ymin = int((boxes[0][0][0] * H))
            xmin = int((boxes[0][0][1] * W))
            ymax = int((boxes[0][0][2] * H))
            xmax = int((boxes[0][0][3] * W))

            if (xmax -xmin) < W*0.5:
                vis_util.visualize_boxes_and_labels_on_image_array(
                    frame,
                    np.squeeze(boxes),
                    np.squeeze(classes).astype(np.int32),
                    np.squeeze(scores),
                    category_index,
                    use_normalized_coordinates=True,
                    line_thickness=1,
                    )

但是,它不起作用。它仍然显示所有边界框。我试图比较整个屏幕区域的面积,但也不起作用。

Image from false cow detection.

简而言之,如何通过后期处理或预处理来移除外部较大的盒子?

如果有人可以提供帮助,我将感到非常高兴。

编辑: 我的模型是SSD Mobilenet v2。我使用自己的数据集进行了训练,该数据集仅包含一个类(牛),并且作为输入数据,我正在通过OpenCV流式传输视频。

0 个答案:

没有答案