Регионы с CNN, приступим к обнаружению объектов!

Это вторая история «Глубокого погружения в мир компьютерного зрения», и полный набор серии выглядит следующим образом:

  1. Начиная с VGG, ResNet, Inception Network и MobileNet
  2. Регионы с CNN, приступим к обнаружению объектов
  3. YOLO, SSD и RetinaNet, побольше унифицированных
  4. От обнаружения объекта до сегментации экземпляра (TBU)

В предыдущем посте мы обсудили пять популярных сетей: VGG, ResNet, Inception Network, Xception и MobileNet. Эти сети сейчас являются основным компонентом современных сетей, поэтому необходимо знать их архитектуру.

Теперь мы переходим к следующей странице. От классификации изображений до обнаружения объектов. До сих пор мы обсуждали одну большую сверточную нейронную сеть. Хотя у них много слоев, в конце они представляют собой одну сеть. Но R-CNN и его варианты, которые будут в центре нашего внимания, имеют эту сеть как часть. CNN теперь является частью целой «системы», обрабатывающей более сложные задачи, такие как обнаружение объектов и сегментация изображений. Начиная с R-CNN, мы собираемся увидеть, как эти сети были преобразованы, и основную идею этих изменений.

От классификации изображений до обнаружения объектов

Прежде чем мы перейдем непосредственно к «семейству» R-CNN, давайте кратко проверим основную идею классификации изображений и их обнаружения. В чем разница между ними? Какую дополнительную работу нам нужно проделать для обнаружения объектов на изображении?

Во-первых, какое бы количество классов у нас ни было, будет дополнительный класс - фон. Детектор объектов необходим для ответа на вопрос «есть ли объект?», Что не относится к классификации изображений. Во-вторых, когда есть объект, недостаточно просто сказать «да, есть!» (Довольно смешно представить ...) Он также должен сказать нам, «где находится объект?» Нам нужно положение обнаруженных объектов. Это может показаться простым, но реализация - нет. А когда мы принимаем во внимание проблемы скорости и эффективности, все становится еще сложнее.

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

R-CNN

R-CNN отвечает на вопрос: «в какой степени результаты классификации CNN в ImageNet могут быть обобщены на результаты обнаружения объектов?» Таким образом, эту сеть можно назвать началом генеалогического дерева обнаружения объектов, которое имеет большое значение в применении нейронной сети. Базовая структура состоит из трех этапов: извлечение предложений по регионам, вычисление CNN и классификация.

Сначала мы извлекаем некоторые области, которые кажутся многообещающими для объекта из входного изображения. R-CNN использовала выборочный поиск для получения этих областей интереса (ROI). Выборочный поиск - это алгоритм предложения области, который сегментирует изображение на основе интенсивности пикселей. Если вы хотите получить более полное представление о выборочном поиске, вот исходная статья. Основная идея показана ниже. Сначала он начинается с чрезмерно сегментированного изображения и рисует ограничивающую рамку вокруг каждого сегмента. И на основе их сходства по цвету, текстуре, размеру и совместимости формы, он продолжает группировать соседние и формировать более крупные сегменты. R-CNN извлекает этим методом около 2000 предложений по регионам и передает их в CNN. По этой причине он назван R-CNN, Регионы с функциями CNN.

После получения кандидатов второй шаг - вход в большую сверточную нейронную сеть. Каждое предложение изменяется до фиксированного размера и вводится в CNN отдельно. R-CNN использовала AlexNet (это был 2014 год, в то время не было ни ResNet, ни InceptionNet), и мы получаем 4096-мерный вектор признаков из каждого предложения.

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

Стоит упомянуть одну интересную часть: как он решил проблему нехватки данных. Перед исследователями стояла задача обучить такую ​​большую сеть с использованием лишь небольшого количества помеченных данных. И решение заключалось в предварительном обучении CNN на других данных с метками (что является контролируемым обучением), а затем в выполнении точной настройки с исходным набором данных.

Возможно, вы заметили некоторые неэффективные части, которые можно улучшить. Выборочный поиск требует больших вычислений. И обработка CNN для каждого ROI была повторяющейся работой, которая снова требует огромных затрат на вычисления. Необходимость предтренировочного процесса и отдельных классификаторов была малопривлекательной. И память для этих моделей великовата. Хотя R-CNN был важным достижением, у него было несколько недостатков, которые нужно было улучшить.

Быстрый R-CNN

Fast R-CNN - это следующая версия предыдущей работы. Какие изменения были здесь внесены? Улучшена повторяющаяся обработка сверточного отображения. Первое изменение произошло на повторяющихся сверточных слоях.

Предположим, что для вычисления одной сверточной сети требуется N секунд. Поскольку R-CNN вводит 2000 RoI в сеть отдельно, общее время обработки будет 2000 * N секунд. Вместо того, чтобы обрабатывать CNN по отдельности, теперь мы делаем это только один раз, разделяя свертку с предложениями в целом.

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

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

Теперь в эту модель внесены изменения, чтобы разделить свертки и отсоединить дополнительные классификаторы. Объединив «несколько тел» в одно и убрав «тяжелый хвост», мы смогли добиться меньшего объема вычислений и хранения. Эта архитектура позволяет нам тренировать все веса вместе, включая даже вес классификатора softmax и множественные регрессоры. А это означает, что распространение будет происходить взад и вперед, обновляя все веса. Потрясающий прогресс! Однако у нас все еще есть шанс улучшить производительность.

Быстрее R-CNN

Тем не менее, Fast R-CNN было трудно использовать для обнаружения в реальном времени. И основная причина такой задержки - выборочный поиск. У него было узкое место в вычислениях, и его нужно было заменить более эффективным способом. Но как? Как мы могли бы получить предложения по регионам без выборочного поиска? Как насчет максимального использования ConvNet? Исследователи обнаружили, что карты функций в Fast R-CNN также можно использовать для создания предложений по регионам. Таким образом, избавившись от выборочного поиска, можно создать гораздо более эффективную сеть.

Faster R-CNN состоит из двух модулей: Region Proposal Network (RPN) и Fast R-CNN. Сначала мы вводим изображение в «мини-сеть», и она выводит карты характеристик. Перемещая небольшое окно по картам характеристик, мы извлекаем предложения регионов. И каждое предложение передается в два родственных слоя, классификатор softmax и регрессор ограничивающей рамки.

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

Мы берем только те предложения, оценки которых превышают пороговое значение, и вводим их вместе с картой функций в Fast R-CNN. Следующие шаги такие же. Они вводятся в сверточную сеть и уровни пула RoI. И тогда последними слоями будут классификатор и регрессор, который, наконец, предсказывает реальные объекты на изображениях.

Одним из важных свойств этой сети является инвариант перевода, который достигается с помощью якорей и того, как они вычисляют предложения относительно якорей . Что такое инвариант перевода? Проще говоря, это означает, что мы можем обнаружить объект независимо от его поворота, перемещения, изменения размера и прочего. Объект на изображении может находиться в центре или в верхнем левом углу. Один и тот же объект может быть в широком или большом масштабе в зависимости от ракурса. Чтобы модель не могла найти объект из-за перемещения, мы делаем якорные блоки с несколькими масштабами и пропорциями, как на изображении, показанном выше. Эти коробки помещаются в центр раздвижного окна. Таким образом, если в определенной позиции есть K прямоугольников, мы получаем 2K баллов и 4K координаты K. коробки.

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

Более того, эта модель оптимизирована в 4 этапа альтернативного обучения путем тонкой настройки слоев, уникальных для RPN и Fast R-CNN, отдельно при фиксации общих слоев. Это позволяет модели разделять веса, образуя единую сеть, и обеспечивает более высокую производительность как с точки зрения эффективности, так и с точки зрения точности. Для сравнения производительности время для предложений Faster R-CNN составляло 10 миллисекунд на изображение (5 кадров в секунду для всего процесса), а время выборочного поиска с использованием ЦП - 2 секунды.

Забрать

С R-CNN на Faster R-CNN сети были преобразованы, избавившись от зависимости от других компонентов. R-CNN можно улучшить, отказавшись от линейных SVM и совместных вычислений свертки. И Fast R-CNN также изменился, чтобы использовать свертку для удаления выборочного поиска. Объединив весь процесс в одну сеть, мы смогли добиться как более высокой точности, так и более высокой скорости.

использованная литература

Вам понравилась эта история? Пожалуйста, поделитесь с нами своим мнением. Я всегда открыт для общения, поэтому не стесняйтесь оставлять комментарии ниже и делиться своими мыслями. Я также делюсь интересными и полезными ресурсами в LinkedIn, так что не стесняйтесь следить за мной и обращаться ко мне. В следующий раз я расскажу еще одну интересную историю. Как всегда, следите за обновлениями!