我正在尝试为对象检测任务覆盖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)
的可索引格式?