Транспорт существует уже давно. От верховых лошадей 🐎 до первого автомобиля, выпущенного в 1885 году, до современных автомобилей - транспорт является неотъемлемой частью нашего образа жизни.

Если вы посмотрите на автомобили сегодня, подумайте, как мы сюда попали.

  • Конец 1800-1900-х годов: появились автомобили, работающие на бензине ⛽
  • Пришли электромобили ⚡
  • Теперь о беспилотных автомобилях 🚗.

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

Как?

Компьютерное зрение 🤖.

Краткий обзор компьютерного зрения

Если вы не знакомы с этой областью, это круто! Я кратко объясню это:

Компьютерное зрение направлено на обучение компьютеров более глубокому пониманию изображений и видеоклипов. Возьмем такой пример:

В среде высокого уровня цель состоит в том, чтобы научить компьютер распознавать, что некоторые объекты на картинке - деревья, люди и собаки. Это делается путем предоставления компьютеру тысяч изображений деревьев, людей и собак для обучения / дрессировки, прежде чем дать ему изображение, которого он никогда не видел!

Вы можете увидеть, как это СУПЕР полезно во время вождения.

Однако на изображении, подобном приведенному выше, вычисления затрудняются для компьютеров с таким количеством присутствующих объектов.

Возможность идентифицировать и распознавать то, что мы видим, - это здорово, но как сделать это более эффективным / масштабируемым и практичным?

Что ж, есть много новых подходов, но я реализовал сеть от FaceBook под названием Mask R-CNN.

Давай посмотрим на это.

Вот как работают Mask R-CNN

Маски R-CNN предназначены для сегментации на уровне экземпляра.

Что это обозначает?

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

Принимая во внимание, что семантический уровень будет рассматривать все эти стулья как один и тот же класс.

В масках R-CNN мы будем выполнять те же функции, что и Faster R-CNN (другая сеть, которая выполняет обнаружение объектов), но с добавленным компонентом, позволяющим добавлять маски сегментации для каждого объект.

Если вы не знакомы с Faster R-CNN, вот мое объяснение (объяснение): Faster R-CNN обнаруживает объекты, помещает рамку вокруг каждого объекта и выводит прогнозируемую метку (т.е. , это стул, давайте им это расскажем и тоже поставим коробку вокруг стула).

Теперь в Mask R-CNN для стула, который мы только что нашли, мы также закрасим стул цветом. Другими словами, мы добавим маску к пространственному расположению каждого объекта.

Что такого особенного в масках?

Использование масок и Mask R-CNN, как правило, является хорошей практикой по следующим причинам:

  1. Простая и гибкая структура (помните, как мы говорили о масштабируемости?)
  2. Многоцелевой и способный распознавать разные позиции (что также делает его очень практичным)
  3. Превосходит все существующие одномодельные записи по задачам COCO

Прежде чем писать код…

Теперь, когда вы понимаете, что Mask R-CNN в значительной степени является ветвью Faster R-CNN, давайте поговорим об архитектуре!

Более быстрый R-CNN разбит на два компонента: магистраль и головку.

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

Итак, где же часть маски?

Прогнозирование маски для каждого класса выполняется отдельно от ограничивающей рамки и классификации.

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

Как вы находите эти маски?

Применяя Выравнивание области интереса (RoIAlign), сеть лучше понимает пространственное расположение объектов.

Как?

Получая набор значений пикселей, RoI может извлечь карты объектов меньшего размера из этого ввода (мы будем называть это нашей картой объектов ввода). Затем производятся причудливые математические вычисления, и мы получаем нашу карту целевой функции. Поскольку эти карты не всегда выравниваются, задача RoIAlign - заставить цель перестроиться с вводом. Использование RoIAlign повышает общую точность предсказания классов и масок.

Как Mask R-CNN так хорошо обнаруживает объекты?

Как и люди, компьютеры учатся на своих ошибках ❌.

Мы определяем эти ошибки как функцию потерь при выполнении нескольких задач, L, как:

Вы можете думать об этом как о ошибках с разных точек зрения и сложении их вместе. Cls, box и mask - это ошибки, связанные с классификацией, ограничивающей рамкой и маской, соответственно.

Как мы узнаем, близки мы или нет?

Функции активации! (подождите, что это? 🤷)

Функции активации - это вывод одного узла на основе входных данных, поступающих на THAT узел.

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

Как я сказал ранее, ветвь маски отделена от другой сети, и поскольку ее цель - научиться создавать маску для каждого класса, вы либо нарисовали маску верно, сделал это неправильно или где-то посередине. Это проблема двоичной классификации, и мы будем использовать сигмовидную функцию, которая выводит числа от 0 (продолжайте улучшаться) до 1 (вы все сделали правильно 🎉).

Обучение маске R-CNN

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

Сначала изображения были изменены до 800 пикселей, и модель была обучена на 8 графических процессорах в течение 160 000 итераций. Скорость обучения составила 0,02, снижение веса - 0,0001, а импульс - 0,9. Каждая мини-партия имеет 2 изображения на графический процессор.

Вот как я реализовал свой детектор объектов:

Что в результате?

После 4 часов работы моего компьютера я наконец-то смог получить результат! Как это выглядело? Посмотрите это ниже 👇

TL;DR

  • Просто и быстро
  • Только добавляет немного больше вычислительной мощности, чем Faster R-CNN
  • Более высокая точность, чем у всех других существующих записей по одной модели

Если вам понравилась моя статья или вы узнали что-то новое, обязательно:

  • Загляните на мой сайт!
  • Свяжитесь со мной через LinkedIn
  • Отправьте отзыв (я всегда открыт для предложений!)

Ресурсы: