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

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

Обнаружение объекта

Обнаружение объекта - это способность алгоритма правильно идентифицировать объект внутри изображения и находить этот объект в определенной области исходного изображения. Тот факт, что алгоритм может определять местоположение, делает обнаружение объекта задачей особенно актуальной для многих практических случаев использования:

  • Есть дети, переходящие дорогу?
  • Сколько машин стоит в очереди перед светофором?
  • Системы наблюдения в сценарии Интернета вещей
  • Айтрекинг для рекламной аналитики
  • Анализ медицинских изображений

Идея этого проекта состоит в том, чтобы применить обнаружение с помощью CORe50 к исходным изображениям в формате 350x350. Мы хотим доказать, что CORe50 можно использовать в качестве набора данных на конкретном примере. Более того, уметь различать 50 объектов, безусловно, непростая задача.

Мы использовали API обнаружения объектов Tensorflow и обучили обнаружению SSD_MobileNet_v1. MobileNets - это новая глубокая архитектура, недавно представленная Google, которая может легко найти компромисс между эффективностью и точностью, просто установив два гиперпараметра. Таким образом, одна и та же нейронная сеть может применяться для большого количества устройств, которые обычно являются встроенными системами. Однако мобильные сети не подходят для обнаружения. Их можно использовать только для классификации. По этой причине мы решили использовать SSD_MobileNet, который представляет собой мета-архитектуру: SSD (Single Shot Detector) - одна из самых быстрых нейронных сетей, специально разработанная для обнаружения, и мы использовали MobileNets как модуль извлечения функций. . Конечным результатом является гибридная модель под названием SSD_MobileNet.

Мы начали с предварительно обученного SSD_Mobilent на наборе данных COCO и переобучили только последние уровни сети. Результаты достаточно хороши, точность достигает 70%:

Вот некоторые визуальные результаты:

Сегментация объекта

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

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

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

Теперь мы хотим удалить руку. Окончательное изображение приведет к сегментированному объекту. Мы собираемся использовать простой классификатор SVM. Я выбираю несколько случайных снимков, сделанных с CORe50, и вручную сегментирую руку. После этого я написал простой алгоритм, который сохраняет в массиве numpy все пиксели, представляющие руку, с использованием упомянутой выше сегментации. Теперь, когда мы достигли этой точки, процесс довольно прост. Я использовал эти пиксели для обучения классификатора SVM. После этапа обучения я сохранил модель на диске, а затем перезагружаю модель для этапа вывода. Таким образом, я смог удалить руку почти со всех изображений CORe50.

Это конечный результат:

Краткое резюме:
1. Сначала я удаляю фон, определяя оптимальный порог для значений глубины.
2. Я обучил классификатор SVM определять пиксели, принадлежащие руке, держащей руку.
3 Запускаю обученную модель по удалению пикселей руки.

Все файлы и скрипты, используемые для этих экспериментов, доступны через репозиторий Github. Более того, если вы хотите протестировать обнаружение объектов, мы уже можем предоставить вам все файлы для настройки конвейера обучения в соответствии с API обнаружения объектов Tensorflow:

Выводы

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

📚 Ссылки