Tensorflow 对象检测的每个边界框的概率 distributions/confidence 得分 API

Probablity distributions/confidence score for each bounding box for Tensorflow Object Detection API

通常,我们为每个检测到的对象打印的每个边界框只有一个置信度分数。我的理解是,对于每个检测到的 Tensorflow 对象检测 API 都有多个分数,但最后它使用 argmax 打印具有最高分数的对象的名称。现在,如果我想打印所有分数(不仅仅是最高分),我在哪里可以找到它们?

您可以使用 output_dict 获取图像的所有分数和相应标签,其中将包含有关图像的所有信息 detection_scoresdetection_classesdetection_boxesnum_detections

对于给定的图像,您只需执行以下操作即可打印检测到的对象的所有分数。

all_scores ={}
image_np = np.array(Image.open(image_path))
#Actual detection.
output_dict = run_inference_for_single_image(model, image_np)
for cls_idx,scr in zip(output_dict["detection_classes"],output_dict["detection_scores"]):
   all_scores[cls_idx] = scr

all_scores 的输出看起来像这样:

{1: 0.044680625,
 3: 0.05898307,
 9: 0.051253375,
 16: 0.04842608,
 18: 0.0313316,
 21: 0.031728894,
 33: 0.13961948,
 34: 0.07948237,
 38: 0.044567253,
 42: 0.047603823,
 47: 0.030417146,
 57: 0.0398438,
 62: 0.032532312,
 63: 0.04614881,
 84: 0.0338195,
 88: 0.036108077} 

如果要打印名称,可以将索引名称与类别名称映射。

希望这能回答您的问题,祝您学习愉快。

对于最新版本的对象检测API(对应于 TensorFlow 版本 2.2),包含检测的字典具有以下键:

dict_keys([
'raw_detection_boxes',
'detection_multiclass_scores',
'raw_detection_scores', 
'detection_anchor_indices', 
'detection_scores',
'detection_boxes',
'detection_classes',
'num_detections'])

detection_multiclass_scores 是对应于所有 类 每次检测的分数(不仅仅是最高的)。所以如果你想看到他们,你会做这样的事情:

model = tf.saved_model.load(model_directory)
detections = model(input_tensor)
detections = {key: value[0, :num_detections].numpy()
                for key, value in detections.items()}
print(detections['detection_multiclass_scores'])

您的 model_directory 是保存模型的目录,input_tensor 是您要推断为张量的图像。

如果我没记错(如果我记错了,请纠正我)这些分数不适用于旧版本的对象检测 API。