如何使用PyTorch __getitem__方法获取每个图像具有多个边界框的对象检测数据集?

时间:2018-11-10 19:22:26

标签: python dictionary pytorch

我正在尝试为对象检测任务覆盖PyTorch数据集抽象类中的__getitem__方法,其中数据集由多个图像组成,每个图像都有多个边界框。

https://pytorch.org/tutorials/beginner/data_loading_tutorial.html

边界框由5个参数定义:矩形的左上角坐标,矩形的右下角坐标以及在边界框内检测到的对象的类标签注释。

所以:x1, y1, x2, y2, class_label

当使用整数类型的索引调用PyTorch __getitem__方法时,该方法应该返回单个(image, set_of_bounding_box_and_annotations)。因此__getitem__(17)将返回第17张带有所有边界框和标签集的图像。

数据的格式是列表的字典,每个列表由一个字典组成。

例如:

my_dict =
{img_1.png: [{x1: 0, y1: 0, x2: 10, y2: 20, label: 'dog'},  {x1: 30, y1: 40, x2: 50, y2: 60, label: 'cat'}, ...],
{img_2.png: [{x1: 84, y1: 27, x2: 95, y2: 43, label: 'bird'}, {x1: 91, y1: 91, x2: 102, y2: 110, label: 'alligator'}, ...],
...
}

因此PyTorch要求__getitem__方法在将数据的索引传递给它时,返回一个图像盒装样本。
问题是字典在Python中没有固有的顺序,因此您不能只调用my_dict[0]。似乎OrderedDict可以在这里使用,但我们希望键值对的值成为boundingbox / label字典的集合/列表。

如何将数据转换为__getitem__方法可以返回示例(image, bbox_and_labels)的可索引格式?

0 个答案:

没有答案
相关问题