Чтение пользовательского набора данных COCO для точной настройки ⇐ Python
Чтение пользовательского набора данных COCO для точной настройки
У меня есть задача по обнаружению объектов, для которой я подготовил изображения и аннотации*. Изображения (PNG) хранятся в той же папке, где хранятся аннотации COCO json. В аннотациях json используется формат COCO для обнаружения объектов:
"info": {...}, "изображений": [ { "идентификатор": 1, «ширина»: 4961, «высота»: 3508, "file_name": "somefile.png", «лицензия»: 1, «coco_url»: ноль, «date_captured»: ноль }, ... ], "аннотации": [ { "идентификатор": 1, «идентификатор_изображения»: 1, «идентификатор_категории»: 3, «сегментация»: [[4372,2830], [4803,2830],[4803,3131],[4372,3131]], "площадь": 129731, "bbox": [4587.5,2980.5431301], "искрауд": 0 }, ... ], "категории": [ { "идентификатор": 1, "name": "someCategoryName", "supercategory": "someSuperCategoryName" }, ... ], "лицензии": [...]
Мне нужно прочитать этот набор данных, чтобы уточнить существующую модель. Вот как я его открываю:
# По умолчанию определите преобразование для преобразования изображения PIL в тензор Факела. Transform = Transforms.Compose([transforms.PILToTensor()]) train_dataset = dset.CocoDetection(root=dataset_path, annFile=annotationFilePath, Transform=transform) Затем я определяю загрузчик данных следующим образом. Функция загрузчика данных next() работает нормально:
train_loader = DataLoader(train_dataset,atch_size=4, shuffle=True, num_workers=4,collate_fn=lambda package: tuple(zip(*batch))) images, target = next(iter(train_loader)) # проверяем, что `next()` работает Содержимое объектов images и targets выглядит следующим образом:
images: [tensor([[[255, 255, ...rch.uint8), tensor([[[255, 255, ...rch. uint8)] цели: [{'id': 265, 'image_id': 265, 'category_id': 2, 'сегментация': [...], 'area': 1726288, 'bbox': [...], 'iscrowd ': 0}] В частности, вы можете видеть, что объект targets представляет собой список словарей, где каждый словарь сохраняет форму записи annotations в json.
>
Наконец, я проверяю, что функция model действительно может работать, с помощью:
model = models.detection.fasterrcnn_mobilenet_v3_large_fpn(weights=torchvision.models.detection.FasterRCNN_MobileNet_V3_Large_FPN_Weights.COCO_V1) output = model(images, target) # проверяем, работает ли `model()` Однако это всегда вызывает:
TypeError: индексы списка должны быть целыми числами или срезами, а не строкой
Эта ошибка возникает из-за метода forward() файла generalized_rcnn.py, поскольку он ожидает ввода ключа «ящики» при итерации целей >.
Теперь я ожидал, что DataLoader соответствующим образом сформирует цели, чтобы они могли работать с методом forward(), учитывая, что Я использую набор данных COCO. Почему это не так? Что мне следует сделать, чтобы это сработало? Кажется, я ничего не нашел в документации.
* Для полноты: для аннотаций моей компании необходимо использовать специальный аннотатор PDF. Поэтому я написал свой собственный конвертер в набор данных COCO, чтобы использовать аннотированные изображения для точной настройки. Возможно, в аннотациях что-то не так, но лично я не думаю, что эта ошибка связана с этим.
У меня есть задача по обнаружению объектов, для которой я подготовил изображения и аннотации*. Изображения (PNG) хранятся в той же папке, где хранятся аннотации COCO json. В аннотациях json используется формат COCO для обнаружения объектов:
"info": {...}, "изображений": [ { "идентификатор": 1, «ширина»: 4961, «высота»: 3508, "file_name": "somefile.png", «лицензия»: 1, «coco_url»: ноль, «date_captured»: ноль }, ... ], "аннотации": [ { "идентификатор": 1, «идентификатор_изображения»: 1, «идентификатор_категории»: 3, «сегментация»: [[4372,2830], [4803,2830],[4803,3131],[4372,3131]], "площадь": 129731, "bbox": [4587.5,2980.5431301], "искрауд": 0 }, ... ], "категории": [ { "идентификатор": 1, "name": "someCategoryName", "supercategory": "someSuperCategoryName" }, ... ], "лицензии": [...]
Мне нужно прочитать этот набор данных, чтобы уточнить существующую модель. Вот как я его открываю:
# По умолчанию определите преобразование для преобразования изображения PIL в тензор Факела. Transform = Transforms.Compose([transforms.PILToTensor()]) train_dataset = dset.CocoDetection(root=dataset_path, annFile=annotationFilePath, Transform=transform) Затем я определяю загрузчик данных следующим образом. Функция загрузчика данных next() работает нормально:
train_loader = DataLoader(train_dataset,atch_size=4, shuffle=True, num_workers=4,collate_fn=lambda package: tuple(zip(*batch))) images, target = next(iter(train_loader)) # проверяем, что `next()` работает Содержимое объектов images и targets выглядит следующим образом:
images: [tensor([[[255, 255, ...rch.uint8), tensor([[[255, 255, ...rch. uint8)] цели: [{'id': 265, 'image_id': 265, 'category_id': 2, 'сегментация': [...], 'area': 1726288, 'bbox': [...], 'iscrowd ': 0}] В частности, вы можете видеть, что объект targets представляет собой список словарей, где каждый словарь сохраняет форму записи annotations в json.
>
Наконец, я проверяю, что функция model действительно может работать, с помощью:
model = models.detection.fasterrcnn_mobilenet_v3_large_fpn(weights=torchvision.models.detection.FasterRCNN_MobileNet_V3_Large_FPN_Weights.COCO_V1) output = model(images, target) # проверяем, работает ли `model()` Однако это всегда вызывает:
TypeError: индексы списка должны быть целыми числами или срезами, а не строкой
Эта ошибка возникает из-за метода forward() файла generalized_rcnn.py, поскольку он ожидает ввода ключа «ящики» при итерации целей >.
Теперь я ожидал, что DataLoader соответствующим образом сформирует цели, чтобы они могли работать с методом forward(), учитывая, что Я использую набор данных COCO. Почему это не так? Что мне следует сделать, чтобы это сработало? Кажется, я ничего не нашел в документации.
* Для полноты: для аннотаций моей компании необходимо использовать специальный аннотатор PDF. Поэтому я написал свой собственный конвертер в набор данных COCO, чтобы использовать аннотированные изображения для точной настройки. Возможно, в аннотациях что-то не так, но лично я не думаю, что эта ошибка связана с этим.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение