Введение:

Вы очарованы невероятными возможностями компьютерного зрения и алгоритмов глубокого обучения? Вы задаетесь вопросом, как эти алгоритмы могут обнаруживать и классифицировать объекты на изображениях с поразительной точностью и скоростью? Если да, то вам захочется читать дальше.

В мире компьютерного зрения наборы данных изображений являются основой любого исследования или приложения. Они обеспечивают необходимую основу для обучения и тестирования моделей глубокого обучения, позволяя нам раскрыть потенциал этих алгоритмов.

Что, если бы мы могли взять невероятное богатство набора данных COCO и оптимизировать его для наших конкретных нужд? В этом посте я расскажу, как это сделать. Я покажу вам, как использовать возможности глубокого обучения для извлечения только соответствующих классов объектов из набора данных COCO, уменьшая вычислительную сложность и повышая точность последующих задач.

И не волнуйтесь, вам не понадобится докторская степень в области компьютерных наук, чтобы следовать этому курсу. Я предоставлю подробную разбивку кода с использованием Python и поделюсь репозиторием, содержащим все необходимые ресурсы для репликации этого репозитория. Итак, давайте погрузимся и узнаем, как мы можем заставить набор данных COCO работать на нас.

Что такое COCO API?

COCO (Common Objects in Context) — это крупномасштабный набор данных для обнаружения, сегментации и подписи объектов. Набор данных COCO широко используется в исследованиях компьютерного зрения и содержит более 330 тысяч изображений с более чем 2,5 миллионами экземпляров объектов, помеченных 80 различными категориями объектов.

COCO API — это библиотека Python, предоставляющая простой интерфейс для доступа и работы с набором данных COCO. API позволяет загружать набор данных, загружать аннотации и выполнять операции с изображениями и аннотациями.

Что такое формат YOLO?

YOLO (You Only Look Once) — это система обнаружения объектов в реальном времени, которая может обнаруживать несколько объектов на изображении за один прямой проход сети. Формат YOLO — это популярный формат для аннотаций обнаружения объектов, который состоит из текстового файла для каждого изображения, где каждая строка в файле представляет объект на изображении.

Формат YOLO содержит пять значений, разделенных пробелами в каждой строке:

  • Идентификатор класса объекта
  • Центр x-координаты ограничивающей рамки (относительно ширины изображения)
  • Координата Y центра ограничивающей рамки (относительно высоты изображения)
  • Ширина ограничивающей рамки (относительно ширины изображения)
  • Высота ограничивающей рамки (относительно высоты изображения)

Загрузка и обработка изображений с использованием COCO API и формата YOLO:

Чтобы загрузить и обработать изображения для обнаружения объектов с использованием COCO API и формата YOLO, я буду использовать библиотеку pycocotools, которая является оболочкой Python для COCO API.

Вот важная разбивка кода, которую можно использовать для обработки изображений для данного класса с помощью библиотеки pycocotools:

Импорт необходимых библиотек:

from pycocotools.coco import COCO
import requests
import os
import random
import argparse

Определение функции download_images:

def download_images(class_names, new_class_ids, num_images):
    # convert class_names and new_class_ids to lists if they are not already
    if not isinstance(class_names, list):
        class_names = [class_names]
    if not isinstance(new_class_ids, list):
        new_class_ids = [new_class_ids]
    downloaded_images_dir = 'dwn_img_labels'
    ...

Эта функция загружает указанное количество изображений для заданных имен классов и новых идентификаторов классов.

Создание каталогов:

for subset in ['train', 'test', 'validation']:
    subset_dir = os.path.join(class_dir, subset)
    os.makedirs(os.path.join(subset_dir, 'images'), exist_ok=True)
    os.makedirs(os.path.join(subset_dir, 'labels'), exist_ok=True)

Этот код создает три каталога для каждого класса для обучения, тестирования и проверки данных.

Загрузка изображений и аннотаций:

img_ids = coco.getImgIds(catIds=cat_ids)
images = coco.loadImgs(img_ids)
...
for i, im in enumerate(images):
    if i >= num_images:
        break
    ...
    img_data = requests.get(im['coco_url']).content
    with open(image_path, 'wb') as image_handler:
        image_handler.write(img_data)
    with open(os.path.join(class_dir, subset, 'labels', label_file_name), 'w') as label_handler:
        ...

Этот код загружает изображения и соответствующие им аннотации, используя свойство «coco_url» данных изображения. Он сохраняет изображения в соответствующем каталоге и создает файл метки в каталоге «этикетки» с аннотациями в формате YOLO.

Аргументы командной строки:

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Download and process images for a given class.')
    parser.add_argument('--class_name', type=str, required=True, help='Name of the class to download images for.')
    parser.add_argument('--new_class_id', type=int, required=True, help='New ID to assign to the class.')
    parser.add_argument('--num_images', type=int, required=True, help='Number of images to download.')
    args = parser.parse_args()
    coco = COCO('instances_train2017.json') #in the readme file the download link has been mentioned
    download_images(args.class_name, args.new_class_id, args.num_images)

Этот код определяет аргументы командной строки для имени класса, идентификатора нового класса и количества изображений. Затем он вызывает функцию «download_images» с этими аргументами.

Вывод:

В заключение, функция download_images() этого скрипта Python использует набор данных COCO для загрузки и обработки изображений и их аннотаций для указанного класса. Функция создает каталоги для подмножеств обучения, тестирования и проверки и случайным образом перемешивает изображения перед их загрузкой. Он также отфильтровывает другие классы, которые не упомянуты. Кроме того, можно указать общее количество загружаемых изображений.

Полный код этого скрипта доступен на GitHub по адресу https://github.com/rakeshwar07/COCO2YOLOv8-extractor. Он включает в себя дополнительные функции для создания разделов обучения/проверки и преобразования загруженных данных в формат YOLO. Пользователи могут изменять код в соответствии со своими конкретными потребностями, например загружать изображения для нескольких классов или изменять формат файла изображения. В следующей части я кратко объясню визуальный интерпретатор, который можно использовать для проверки изображений и соответствующих им аннотаций.