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

问题描述

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

(Boxes,scores,classes,num_detections) = sess.run(
                [Boxes,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流式传输视频。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)