如何计算 Detectron2 中的并集交集?
How can I calculate Intersection Over Union in Detectron2?
我正在使用 Detectron2 进行对象检测。我已经注册了 pascalvoc 数据集并训练了一个检测模型。如何计算测试数据集的平均 IOU?我知道 detection2 有一个用于计算 IOU 的预定义函数,即 detectron2.structures.pairwise_iou
我在 csv 文件中有测试图像的地面实况边界框。 csv 文件包含(文件名、宽度、高度、class、xmin、ymin、xmax、ymax)。如何解析 IOU 函数中的两个边界框并将其显示在 google colab.
这是我生成预测边界框的代码
from detectron2.utils.visualizer import ColorMode
import random
dataset_dicts = DatasetCatalog.get('/content/test')
for d in random.sample(dataset_dicts, 5):
im = cv2.imread(d["file_name"])
outputs = predictor(im)
v = Visualizer(im[:, :, ::-1], metadata=microcontroller_metadata, scale=0.8)
v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
plt.figure(figsize = (14, 10))
plt.imshow(cv2.cvtColor(v.get_image()[:, :, ::-1], cv2.COLOR_BGR2RGB))
plt.show()
您可以通过
访问边界框和类
outputs["instances"].pred_boxes.tensor.cpu().numpy()
outputs["instances"].pred_classes.cpu().numpy()
现在你要做的是:
- 根据图片进行推理
- 从您的 csv 文件加载图片的基本事实
- 将你推理的 类 和边界框与你的真实值 (= IoU) 进行比较
你需要按照亚历山大说的去做。
因此,假设对于给定的图像,您有地面实况框。这些你可以表示为一个 N,4
numpy 数组。我们称它为 bboxes_gt
。假设您的预测为您提供 M
个边界框。
现在您可以将 bboxes_gt
转换为 Box
对象,然后使用 structures.pairwise_iou()
以 pariwise 方式计算所有 IOU。这将为您提供一个包含所有这些 IOU 的 N,M
矩阵。它看起来像这样:
bboxes_gt = structures.Boxes(torch.Tensor(bboxes_gt))
bboxes_pred = outputs["instances"].pred_boxes
IOUs = structures.pairwise_iou(bboxes_gt, bboxes_pred)
我正在使用 Detectron2 进行对象检测。我已经注册了 pascalvoc 数据集并训练了一个检测模型。如何计算测试数据集的平均 IOU?我知道 detection2 有一个用于计算 IOU 的预定义函数,即 detectron2.structures.pairwise_iou
我在 csv 文件中有测试图像的地面实况边界框。 csv 文件包含(文件名、宽度、高度、class、xmin、ymin、xmax、ymax)。如何解析 IOU 函数中的两个边界框并将其显示在 google colab.
这是我生成预测边界框的代码
from detectron2.utils.visualizer import ColorMode
import random
dataset_dicts = DatasetCatalog.get('/content/test')
for d in random.sample(dataset_dicts, 5):
im = cv2.imread(d["file_name"])
outputs = predictor(im)
v = Visualizer(im[:, :, ::-1], metadata=microcontroller_metadata, scale=0.8)
v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
plt.figure(figsize = (14, 10))
plt.imshow(cv2.cvtColor(v.get_image()[:, :, ::-1], cv2.COLOR_BGR2RGB))
plt.show()
您可以通过
访问边界框和类outputs["instances"].pred_boxes.tensor.cpu().numpy()
outputs["instances"].pred_classes.cpu().numpy()
现在你要做的是:
- 根据图片进行推理
- 从您的 csv 文件加载图片的基本事实
- 将你推理的 类 和边界框与你的真实值 (= IoU) 进行比较
你需要按照亚历山大说的去做。
因此,假设对于给定的图像,您有地面实况框。这些你可以表示为一个 N,4
numpy 数组。我们称它为 bboxes_gt
。假设您的预测为您提供 M
个边界框。
现在您可以将 bboxes_gt
转换为 Box
对象,然后使用 structures.pairwise_iou()
以 pariwise 方式计算所有 IOU。这将为您提供一个包含所有这些 IOU 的 N,M
矩阵。它看起来像这样:
bboxes_gt = structures.Boxes(torch.Tensor(bboxes_gt))
bboxes_pred = outputs["instances"].pred_boxes
IOUs = structures.pairwise_iou(bboxes_gt, bboxes_pred)