Как получить набор данных для обнаружения объектов с несколькими ограничивающими прямоугольниками для каждого изображения, которые можно проиндексировать с помощью метода PyTorch __getitem__? - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь переопределить метод __getitem__ в абстрактном классе набора данных PyTorch для задачи обнаружения объекта, в которой набор данных состоит из нескольких изображений, каждое из которых имеет несколько ограничительных рамок.

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)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...