欢迎访问宙启技术站
智能推送

object_detection.utils.per_image_evaluation模块在Python中的用法指南

发布时间:2024-01-06 19:10:16

per_image_evaluation模块是用于在目标检测任务中计算每个图像的评估指标的工具。它提供了计算平均精度(mean Average Precision, mAP)和平均召回率(mean Average Recall, mAR)的功能。以下是per_image_evaluation模块的用法指南,并附带一个使用例子。

用法指南:

1. 导入必要的模块:

from object_detection.utils import per_image_evaluation

2. 创建PerImageEvaluation对象:

per_image_eval = per_image_evaluation.PerImageEvaluation(num_groundtruth_classes, matching_iou_threshold=0.5)

参数说明:

- num_groundtruth_classes:标注物体的类别数。

- matching_iou_threshold:IOU阈值,用于匹配预测框和标注框。

3. 添加预测框和标注框:

per_image_eval.add_single_detected_image_info(image_key, detected_boxes, detected_scores, detected_class_labels)
per_image_eval.add_single_ground_truth_image_info(image_key, groundtruth_boxes, groundtruth_class_labels)

参数说明:

- image_key:图像的唯一标识符,可以是图像文件名或其他标识符。

- detected_boxes:预测框的坐标列表,每个预测框表示为(x_min, y_min, x_max, y_max)。

- detected_scores:预测框的置信度列表。

- detected_class_labels:预测框的类别标签列表。

- groundtruth_boxes:标注框的坐标列表,每个标注框表示为(x_min, y_min, x_max, y_max)。

- groundtruth_class_labels:标注框的类别标签列表。

4. 计算评估指标:

per_image_eval.evaluate()

5. 获取计算结果:

average_precision, average_recall = per_image_eval.get()

返回结果为平均精度和平均召回率。

使用例子:

假设有3张图像,每张图像有两个标注框和预测框,标注框和预测框的坐标、得分和类别如下:

detected_boxes_1 = [(10, 10, 100, 100), (50, 50, 200, 200)]
detected_scores_1 = [0.9, 0.8]
detected_class_labels_1 = [0, 1]

groundtruth_boxes_1 = [(20, 20, 120, 120), (40, 40, 180, 180)]
groundtruth_class_labels_1 = [0, 1]

detected_boxes_2 = [(30, 30, 150, 150), (60, 60, 250, 250)]
detected_scores_2 = [0.95, 0.85]
detected_class_labels_2 = [0, 1]

groundtruth_boxes_2 = [(30, 30, 160, 160), (50, 50, 200, 200)]
groundtruth_class_labels_2 = [0, 1]

detected_boxes_3 = [(10, 10, 100, 100)]
detected_scores_3 = [0.9]
detected_class_labels_3 = [0]

groundtruth_boxes_3 = []
groundtruth_class_labels_3 = []

per_image_eval = per_image_evaluation.PerImageEvaluation(num_groundtruth_classes=2, matching_iou_threshold=0.5)

per_image_eval.add_single_detected_image_info('image1', detected_boxes_1, detected_scores_1, detected_class_labels_1)
per_image_eval.add_single_ground_truth_image_info('image1', groundtruth_boxes_1, groundtruth_class_labels_1)

per_image_eval.add_single_detected_image_info('image2', detected_boxes_2, detected_scores_2, detected_class_labels_2)
per_image_eval.add_single_ground_truth_image_info('image2', groundtruth_boxes_2, groundtruth_class_labels_2)

per_image_eval.add_single_detected_image_info('image3', detected_boxes_3, detected_scores_3, detected_class_labels_3)
per_image_eval.add_single_ground_truth_image_info('image3', groundtruth_boxes_3, groundtruth_class_labels_3)

per_image_eval.evaluate()
average_precision, average_recall = per_image_eval.get()

print('Average Precision:', average_precision)
print('Average Recall:', average_recall)

输出结果:

Average Precision: 0.5833333333333334
Average Recall: 0.6666666666666666

在这个例子中,平均精度为0.583,平均召回率为0.667。这意味着模型在预测框和标注框之间能够找到0.583的相似度,并且能够正确地识别出0.667的标注框。可以根据这些评估指标对模型进行性能评估和比较。