Tensorflow 对象检测的每个边界框的概率 distributions/confidence 得分 API
Probablity distributions/confidence score for each bounding box for Tensorflow Object Detection API
通常,我们为每个检测到的对象打印的每个边界框只有一个置信度分数。我的理解是,对于每个检测到的 Tensorflow 对象检测 API 都有多个分数,但最后它使用 argmax 打印具有最高分数的对象的名称。现在,如果我想打印所有分数(不仅仅是最高分),我在哪里可以找到它们?
您可以使用 output_dict
获取图像的所有分数和相应标签,其中将包含有关图像的所有信息 detection_scores
、detection_classes
、detection_boxes
和 num_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。
通常,我们为每个检测到的对象打印的每个边界框只有一个置信度分数。我的理解是,对于每个检测到的 Tensorflow 对象检测 API 都有多个分数,但最后它使用 argmax 打印具有最高分数的对象的名称。现在,如果我想打印所有分数(不仅仅是最高分),我在哪里可以找到它们?
您可以使用 output_dict
获取图像的所有分数和相应标签,其中将包含有关图像的所有信息 detection_scores
、detection_classes
、detection_boxes
和 num_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。