Кража посылки - это разочарование. Как продемонстрировал Марк Робер, это может довести людей до безумия. Но что, если бы вы могли построить свою собственную модель обнаружения пакетов, используя исключительно синтетические данные? Мы обрисовали в общих чертах несколько коротких шагов, которые мы сделали, чтобы перейти от генерации синтетических данных к работающему детектору.

Создание синтетических данных

Синтетические данные генерируются из симуляции или симуляции - обычно сцены, созданной из пользовательских или стандартных 3D-моделей. Симы могут работать в облаке параллельно, создавая практически бесконечное количество обучающих данных. Я создал симуляцию для обнаружения пакетов с помощью программного обеспечения для 3D-графики с открытым исходным кодом Blender и zpy [1]. В этом симуляторе создаются разные 3D-пакеты, а угол обзора камеры и условия освещения выбираются случайным образом. Результирующий синтетический набор данных визуально разнообразен и отлично помечен.

Рисунок 1: Синтетические образы пакетов, сгенерированные из симулятора.

Соберите тестовые данные

Чтобы протестировать нашу модель, обученную на синтетических данных, нам нужно собрать несколько реальных изображений. Мы нашли некоторые из них в Интернете и вручную пометили их, используя платформу самодельной маркировки под названием RoboFlow [2]. Попробуйте. Потратив час на рисование ограничивающих рамок на изображениях, найдите момент, чтобы понять, что почти все данные обучения должны быть тщательно вручную помечены таким образом. Это такая утомительная работа, за которую людям в развивающихся странах платят гроши. Поговорим о антиутопическом будущем ...

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

Вооружившись нашим синтетическим набором данных для обучения и нашим набором реальных тестовых данных, мы готовы провести некоторое обучение модели. Мы использовали вариант resnet, реализованный в PyTorch, из репозитория Detectron2 на github [3]. Эта сеть была предварительно обучена на Imagenet, поэтому нам нужно только немного настроить ее на нашем синтетическом наборе данных, прежде чем она сможет делать приличные прогнозы. Неплохо для такого небольшого набора данных (1000 синтетических изображений) и такого короткого времени обучения (30 минут).

Рисунок 2: Прогнозы нашей нейронной сети, обученной на синтетических данных. Ложные срабатывания показаны для контекста.

Заключительные мысли

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

Для вашего следующего проекта компьютерного зрения, будь то хобби или ваша работа, пощадите этих плохих ручных этикетировщиков данных и подумайте о том, чтобы попробовать синтетический подход. Мы облегчили вам задачу: мы выпустили наш набор инструментов для разработки данных zpy [1] под лицензией с открытым исходным кодом. Теперь все необходимое для создания и повторения синтетических данных для компьютерного зрения доступно бесплатно. Ваши отзывы, коммиты и запросы функций будут неоценимы, поскольку мы продолжаем создавать более надежный набор инструментов для генерации синтетических данных. Между тем, если вы могли бы помочь в решении особенно сложной проблемы, пожалуйста, протяните руку!

Ссылки

[1] zpy (github.com/ZumoLabs/zpy)

[2] RoboFlow (roboflow.com)

[3] Detectron2 (github.com/facebookresearch/detectron2)

Первоначально опубликовано на https://www.zumolabs.ai 20 мая 2021 г.