Извлечение ограничивающих рамок и меток категорий в наборе данных MS-COCO

Я работаю с набором данных MS-COCO и хочу извлечь ограничивающие рамки, а также метки для изображений, соответствующих категориям рюкзак (ID категории: 27) и ноутбук (ID категории: 73), и сохранить их в различных текстовых файлах для обучения модель на основе нейронной сети позже.

Я уже извлек изображения, соответствующие вышеупомянутым двум категориям, и создал пустые файлы аннотаций в отдельной папке, в которой я хочу сохранить аннотации вместе с метками (формат файла аннотации выглядит примерно так: метка x y w h, где w и h указывают ширина и высота обнаруженной категории). Я использовал COCO-API (точнее, coco.py) для извлечения изображений и создания пустых файлов текстовых аннотаций.

Ниже приводится основная функция, которую я написал поверх coco.py сделать так:

if __name__ == "__main__":
    littleCo = COCO('/home/r.bohare/coco_data/annotations/instances_train2014.json')
    #id_laptop = littleCo.getCatIds('laptop')

"""Extracting image ids corresponding to backpack and laptop images."""
    bag_img_ids = littleCo.getImgIds(catIds=[27])
    laptop_img_ids = littleCo.getImgIds(catIds=[73])
    #print "IDs of bag images:", bag_img_ids
    #print "IDs of laptop imgs:", laptop_img_ids

"""Extracting annotation ids corresponding to backpack and laptop images."""
    bag_ann_ids = littleCo.getAnnIds(catIds=[27])
    laptop_ann_ids = littleCo.getAnnIds(catIds=[73])
    #print "Annotation IDs of bags:", bag_ann_ids
    #print "Annotation IDs of laptops:", laptop_ann_ids

"""Extracting image names corresponding to bag and laptop categories."""
    bag_imgs = littleCo.loadImgs(ids=bag_img_ids)
    laptop_imgs = littleCo.loadImgs(ids=laptop_img_ids)
    #print "Bag images:", bag_imgs
    #print "Laptop images:", laptop_imgs

    bag_img_names = [image['file_name'] for image in bag_imgs]
    laptop_img_names = [image['file_name'] for image in laptop_imgs]
    print "Bag Images:", len(bag_img_names), bag_img_names[:5]
    print "Laptop Images:", len(laptop_img_names), laptop_img_names[:5]

"""Extracting annotations corresponding to bag and laptop images."""
    bag_ann = littleCo.loadAnns(ids=bag_ann_ids)
    laptop_ann = littleCo.loadAnns(ids=laptop_ann_ids)
    bag_bbox = [ann['bbox'] for ann in bag_ann]
    laptop_bbox = [ann['bbox'] for ann in laptop_ann]
    print "Bags' bounding boxes:", len(bag_ann), bag_bbox[:5]
    print "Laptops' bounding boxes:", len(laptop_bbox), laptop_bbox[:5]

"""Saving files corresponding to bags and laptop category in a directory."""
    import shutil
    #path_to_imgs = "/export/work/Data Pool/coco_data/train2014/"
    #path_to_subset_imgs = "/export/work/Data Pool/coco_subset_data/"
    path_to_ann = "/export/work/Data Pool/coco_subset_data/annotations/"
    dirs_list = [("/export/work/Data Pool/coco_data/train2014/", "/export/work/Data Pool/coco_subset_data/")]

    for source_folder, destination_folder in dirs_list:
        for img in bag_img_names:
            shutil.copy(source_folder + img, destination_folder + img)
        print "Bag images copied!"
        for img in laptop_img_names:
            shutil.copy(source_folder + img, destination_folder + img)
        print "Laptop images copied!" 

"""Creating empty files for annotation."""
    for f in os.listdir("/export/work/Data Pool/coco_subset_data/images/"):
        if f.endswith('.jpg'):
            open(os.path.join(path_to_ann, f.replace('.jpg', '.txt')), 'w+').close()
    print "Done creating empty annotation files." 

Я предоставил здесь только основную функцию, так как остальная часть кода - это файл coco.py в COCO-API.

Я отладил код и обнаружил, что существуют разные структуры данных:

  • cats словарь, который отображает идентификаторы категорий на их суперкатегории и названия категорий (метки).
  • imgToAnns также словарь, который отображает каждый идентификатор изображения на его основную правду сегментации, ограничивающую правду основания, идентификатор категории и т. д. Из того, что мне удалось узнать до сих пор, я думаю, что мне нужно использовать этот словарь, чтобы каким-то образом сопоставить имена изображений, которые у меня есть в списках bag_img_names и portable_img_names их ярлыки и ограничивающие рамки, но я не могу думать в правильном направлении, как получить доступ к этому словарю (ни один метод в coco.py не возвращает его напрямую).
  • imgs другой словарь, который предоставляет метаинформацию обо всех изображениях, например, имя изображения, URL-адрес изображения, дату съемки и т. д.

Наконец, я знаю, что это очень специфический вопрос. Не стесняйтесь сообщить мне, если это принадлежит сообществу, отличному от stackru (например, stats.stackexchange.com), и я удалю его. Кроме того, возможно, я пропустил некоторую важную информацию. Я предоставлю это, если я могу думать об этом, или если кто-то спрашивает.

Я только начинающий в Python, поэтому, пожалуйста, прости меня, если я мог пропустить что-то очевидное.

Любая помощь очень ценится. Благодарю вас.

0 ответов

Прошло 2 года. Теперь coco.py уже может делать то, что вы делали, добавив в конце некоторые функции для сопоставления аннотаций, преобразованных в формат RLE, с изображениями. взгляните на это cocoapi.

Другие вопросы по тегам