Вместе с последней версией PyTorch 1.3 была произведена переработка следующего поколения предыдущей структуры обнаружения объектов, которая теперь называется Detectron2. Это руководство поможет вам начать работу с этой структурой, обучив модель сегментации экземпляра с вашими пользовательскими наборами данных COCO. Если вы хотите узнать, как создавать наборы данных COCO, прочтите мой предыдущий пост - Как создать собственный набор данных COCO для сегментации экземпляра.

Для быстрого начала мы проведем наш эксперимент в записной книжке Colab, чтобы вам не нужно было беспокоиться о настройке среды разработки на собственном компьютере, прежде чем освоиться с Pytorch 1.3 и Detectron2.

Установите Detectron2

В записной книжке Colab просто запустите эти 4 строки, чтобы установить последние версии Pytorch 1.3 и Detectron2.

Нажмите «RESTART RUNTIME» в выходных данных ячейки, чтобы установка вступила в силу.

Зарегистрируйте набор данных COCO

Чтобы сообщить Detectron2, как получить ваш набор данных, мы собираемся его «зарегистрировать».

Чтобы продемонстрировать этот процесс, мы используем набор данных сегментации фруктов и орехов, в котором всего 3 класса: данные, рис и фундук. Мы обучим модель сегментации на основе существующей модели, предварительно обученной на наборе данных COCO, доступном в зоопарке моделей detectron2.

Вы можете скачать набор данных вот так.

Или вы можете загрузить свой собственный набор данных отсюда.

Зарегистрируйте набор данных fruit_nuts в detectron2, следуя руководству по пользовательскому набору данных detectron2.

Каждый набор данных связан с некоторыми метаданными. В нашем случае он доступен по вызову fruits_nuts_metadata = MetadataCatalog.get("fruits_nuts"), вы получите

Metadata(evaluator_type='coco', image_root='./data/images', json_file='./data/trainval.json', name='fruits_nuts',
         thing_classes=['date', 'fig', 'hazelnut'], thing_dataset_id_to_contiguous_id={1: 0, 2: 1, 3: 2})

Чтобы получить фактическое внутреннее представление каталога, в котором хранится информация о наборах данных и о том, как их получить, вы можете вызвать dataset_dicts = DatasetCatalog.get("fruits_nuts"). Внутренний формат использует один dict для представления аннотаций одного изображения.

Чтобы проверить правильность загрузки данных, давайте визуализируем аннотации случайно выбранных выборок в наборе данных:

Одно из изображений может показать это.

Обучите модель

Теперь давайте настроим предварительно обученную кокосовую модель R50-FPN Mask R-CNN на наборе данных fruit_nuts. Обучение 300 итераций на графическом процессоре Colab K80 занимает ~ 6 минут.

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

Сделать прогноз

Теперь мы выполняем логический вывод с помощью обученной модели в наборе данных fruit_nuts. Во-первых, давайте создадим предиктор, используя только что обученную модель:

Затем мы случайным образом выбираем несколько образцов для визуализации результатов прогноза.

Вот что вы получите с образцом изображения с наложенным предсказанием.

Заключение и дальнейшие размышления

Возможно, вы читали мой предыдущий учебник по аналогичной структуре обнаружения объектов под названием MMdetection, также построенной на PyTorch. Так чем же Detectron2 по сравнению с ним? Вот несколько моих мыслей.

Обе структуры легко настроить с помощью файла конфигурации, который описывает, как вы хотите обучать модель. Конфигурационные файлы YAML в Detectron2 более эффективны по двум причинам. Во-первых, вы можете повторно использовать конфигурации, создав сначала «базовую» конфигурацию и построив окончательные файлы конфигурации для обучения на основе этого базового файла конфигурации, что сокращает количество дублированного кода. Во-вторых, файл конфигурации может быть загружен первым и позволяет при необходимости вносить любые дальнейшие изменения в код Python, что делает его более гибким.

А как насчет скорости вывода? Проще говоря, Detectron2 немного быстрее, чем MMdetection для той же модели Mask RCNN Resnet50 FPN. MMdetection показывает 2,45 кадра в секунду, а Detectron2 - 2,59 кадра в секунду, или 5,7% прирост скорости при выводе одного изображения. Бенчмарк основан на следующем коде.

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

Моя предыдущая статья - Как создать собственный набор данных COCO для экземпляра сегментации.

Мой предыдущий пост - Как обучить модель обнаружения объектов с помощью mmdetection.

Репозиторий Detectron2 GitHub.

Запускаемый Colab Notebook для этого поста.

Первоначально опубликовано на www.dlology.com.