我如何计算Detectron2中的“交集相交”?

问题描述

我正在使用Detectron2进行对象检测。我已经注册了pascalvoc数据集并训练了检测模型。如何计算测试数据集的平均IoU?我知道detection2具有用于计算IoU的预定义功能,即detectron2.structures.pairwise_IoU

我在csv文件中有用于测试图像的地面真相边界框。 CSV文件包含(文件名,宽度,高度,类,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()[:,cv2.COLOR_BGR2RGB))
    plt.show()

解决方法

您可以通过以下方式访问边界框和类:

outputs["instances"].pred_boxes.tensor.cpu().numpy()
outputs["instances"].pred_classes.cpu().numpy()

现在您需要做什么:

  1. 对图片进行推断
  2. 从csv文件中加载图片的地面真相
  3. 将推论的类和边界框与地面号(= IoU)比较
,

您需要做亚历山大说的话。 因此,假设对于给定的图像,您具有地面真相框。这些可以表示为N,4 numpy数组。我们称之为bboxes_gt。假设您的预测为您提供了M边界框。

现在,您可以将bboxes_gt转换为Box对象,然后使用structures.pairwise_iou()以稀疏方式计算所有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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...