我正在尝试使用faster_rcnn_inception_v2
模型检测自定义对象,并且正在使用Tensorflow对象检测API。
在测试模型时,它会将带有分数的对象检测为对象名称,例如*Person: 99%*
。
如何删除分数
这是我的可视化功能
vis_util.visualize_boxes_and_labels_on_image_array(
image_np,
np.squeeze(boxes),
np.squeeze(classes).astype(np.int32),
np.squeeze(scores),
category_index,
use_normalized_coordinates=True,
line_thickness=8)
我已将分数更改为无
vis_util.visualize_boxes_and_labels_on_image_array(
image_np,
np.squeeze(boxes),
np.squeeze(classes).astype(np.int32),
None,
category_index,
use_normalized_coordinates=True,
line_thickness=8)
答案 0 :(得分:0)
我假设您使用的是官方Object Detection Demo笔记本提供的代码,或者它的某些变体?如果是这样,那么这里的这段代码就是负责渲染边界框的部分:
vis_util.visualize_boxes_and_labels_on_image_array(
image_np,
output_dict['detection_boxes'],
output_dict['detection_classes'],
output_dict['detection_scores'],
category_index,
instance_masks=output_dict.get('detection_masks'),
use_normalized_coordinates=True,
line_thickness=8)
要从渲染的边界框中删除检测分数,只需将output_dict['detection_scores']
替换为scores=None
:
vis_util.visualize_boxes_and_labels_on_image_array(
image_np,
output_dict['detection_boxes'],
output_dict['detection_classes'],
scores=None, # replace here
category_index,
instance_masks=output_dict.get('detection_masks'),
use_normalized_coordinates=True,
line_thickness=8)
您可以在tensorflow/models/research/object_detection/utils/visualization_utils.py
中查看此函数的源代码。它是其中一条评论中所说的:
分数:形状为[N]或无的numpy数组。如果scores = None,则此函数假定要绘制的框为地面真实框,并且将所有框绘制为黑色,没有类别或得分。
答案 1 :(得分:0)
要回答您的原始问题,应将visualize_boxes_and_labels_on_image_array
的skip_scores
和skip_labels
输入参数设置为True。
您将看到多余的框,因为当您将“无”作为分数传递时,可视化功能不再能够为预测分数设置阈值。
看看visualize_boxes_and_labels_on_image_array
的定义,您会注意到min_score_thresh
输入参数默认情况下设置为0.5。默认情况下,检测到的分数小于0.5的框不会可视化,除非您不将scores
传递给此函数,在这种情况下,所有框都将可视化。