我正在使用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流式传输视频。