AzoftR&DЛокализация объектов на изображении методом свёрточных нейронных сетей

Локализация объектов на изображении методом свёрточных нейронных сетей

Иван Ожиганов Февраль 25, 2016

Локализация объектов на изображении методом свёрточных нейронных сетей

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

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

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

Обзор проекта

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

Мы решили на практике убедиться, насколько эффективны свёрточные нейронные сети в локализации объектов на изображении на примере автомобильных номеров и дорожных знаков.

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

Ключевые этапы проекта:

1. Поиск ключевых точек автомобильных номеров с использованием свёрточной нейронной сети.

2. Поиск ключевых точек дорожных знаков с использованием свёрточной нейронной сети.

3. Поиск дорожных знаков с помощью полностью свёрточной нейронной сети.

4. Сравнение каскадных классификаторов со свёрточной нейронной сетью для поиска автомобильных номеров.

Первые три этапа осуществлялись параллельно, за каждый из них отвечал отдельный инженер. В завершение мы провели сравнительный анализ окончательной модели свёрточной нейросети, полученной на 1-ом этапе, с методами каскадных классификаторов по ряду параметров.

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

Реализация

Этап 1. Поиск ключевых точек автомобильных номеров с использованием свёрточной нейронной сети

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

Сначала мы решили натренировать свёрточную нейронную сеть на поиск ключевых точек автомобильных номеров. Это задача регреcсионного анализа. В нашем случае независимыми входными параметрами были пиксели изображения с объектом, а зависимыми выходными параметрами – координаты ключевых точек этого объекта. Пример поиска ключевых точек можно увидеть на рисунке 1. В результате ключевыми точками были выбраны углы номера.

Поиск ключевых точек автомобильного номераРис. 1. Поиск ключевых точек автомобильного номера

Чтобы обучить свёрточную нейронную сеть поиску ключевых точек, необходим набор данных с большим числом изображений нужного объекта (не менее 1000). Координаты ключевых точек должны быть размечены и расположены в одном порядке.

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

В процессе аугментации мы использовали следующие преобразования исходного изображения:

  • сдвиги;
  • изменение масштаба;
  • повороты относительно центра;
  • зеркальное отражение;
  • афинные преобразования (позволяют за одну операцию повернуть и растянуть изображение).

Также все изображения мы привели к формату 320х240 пикселей. На рисунке 2 можно увидеть пример аугментации с перечисленными преобразованиями.

Пример аугментации данныхРис. 2. Пример аугментации данных

Для этого этапа проекта мы выбрали фреймворк Caffe, поскольку он является одним из самых гибких и быстрых по скорости обучения фреймворков для работы со свёрточными нейронными сетями.

Задачу регрессии в Caffe можно решать при помощи специального формата файла HDF5. Выполнив нормализацию значения пикселей от 0 до 1 и значения координат от -1 до 1, мы упаковали изображения и координаты ключевых точек объектов в формат HDF5.

Вначале мы пробовали громоздкие архитектуры сети с числом свёрточных слоёв от 4-х до 6 и большим количеством ядер свёртки. Модели с такими громоздкими архитектурами работали хорошо, но их производительность была весьма низкой. Поэтому появилась задача увеличить производительность за счёт более простой архитектуры сети и не потерять в качестве.

Финальная архитектура свёрточной нейронной сети для поиска ключевых точек номера выглядела так:

Архитектура свёрточной нейронной сети для локализации ключевых точек автомобильного номераРис. 3. Архитектура свёрточной нейронной сети для локализации ключевых точек
автомобильного номера

В процессе обучения нейронной сети в качестве метода оптимизации мы использовали метод Adam. В сравнении с градиентным спуском Нестерова, который показывал большое значение ошибки даже после тщательного подбора параметров momentum и learning rate, Adam продемонстрировал лучшие результаты. С применением этого метода оптимизации свёрточная нейронная сеть обучалась быстрее и качественнее.

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

Поиск ключевых точек автомобильного номера при помощи полученной модели свёрточной нейронной сетиРис. 4. Поиск ключевых точек автомобильного номера при помощи полученной модели
свёрточной нейронной сети

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

Обученные ядра на первом и втором свёрточных слоях показаны на рисунках 5 и 6.

Полученное ядро первого свёрточного слоя 7х7
Рис. 5. Полученное ядро первого свёрточного слоя 7х7

Полученные ядра второго свёрточного слоя 5х5
Рис. 6. Полученные ядра второго свёрточного слоя 5х5

Что касается матриц откликов финальной модели, то для их изучения мы взяли изображение автомобиля (рис. 7), перевели его в изображение с градациями серого и посмотрели получившиеся матрицы после первого свёрточного слоя (рис. 8) и после второго (рис. 9).

Изображение, подаваемое в сеть для просмотра матриц откликовРис. 7. Изображение, подаваемое в сеть для просмотра матриц откликов

Матрица откликов после первого свёрточного слояРис. 8. Матрица откликов после первого свёрточного слоя

Матрицы откликов после второго свёрточного слояРис. 9. Матрицы откликов после второго свёрточного слоя

В конце, получив координаты ключевых точек, мы отметили их и пришли к ожидаемому результату – изображению на рисунке 10.

Размеченное изображение после прямого прохода свёрточной нейронной сетьюРис. 10. Размеченное изображение после прямого прохода свёрточной нейронной сетью

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

Этап 2. Поиск ключевых точек дорожных знаков с использованием свёрточной нейронной сети

Одновременно с экспериментом по поиску автомобильных номеров, мы тренировали свёрточную нейронную сеть для нахождения дорожных знаков ограничения скорости. Опыты проводились также на базе фреймворка Caffe. Для обучения этой модели использовался набор данных, включающий в себя около 1700 изображений знаков, которые были аугментированы до 35000.

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

Основные проблемы возникли при попытках обнаружения знаков разного размера. В связи с этим были проведены эксперименты с максимально упрощенными условиями. Сеть должна была найти белый круг на черном фоне. Размер изображения мы также оставили неизменным - 200х200 пикселей. Были заданы фиксированные размеры круга с вариацией до 3-х раз (т.е. минимальный и максимальный радиусы кругов в наборе данных различались в 3 раза).

В итоге приемлемый по точности результат сохранялся только при изменении радиуса не более чем на 10%. Опыты на серых кругах (диапазон серого от 0.1 до 1) также показали допустимый по качеству результат. В связи с этим вопрос о поиске на изображении объектов разного масштаба остался для нас открытым.

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

Группа изображений, демонстрирующих результаты обучения сети - 1

Группа изображений, демонстрирующих результаты обучения сети - 2Рис. 11. Группа изображений, демонстрирующих результаты обучения сети

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

Этап 3. Поиск дорожных знаков с помощью полностью свёрточной нейронной сети

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

В выходном изображении, там, где находится объект, значение яркости пикселей равняется 1. В любом месте не на объекте значение яркости пикселей равно 0. Таким образом, значение яркости пикселей выходного изображения – это вероятность принадлежности данного пикселя к объекту.

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

Для обучения нами была выбрана следующая архитектура сети: 4 свёрточных слоя, макс-пулинг (понижение размерности путём выбора наибольшего из всех) осуществлён только на 1-м слое. Мы тренировали нейросеть на наборе данных, полученных из снимков со знаками ограничения максимальной скорости. После того как сеть была обучена и применена к набору данных, мы сделали бинаризацию изображений и нашли связные компоненты. Каждая компонента – это гипотеза о положении знака. Результаты представлены в следующей серии кадров:

Примеры успешно найденных знаковРис. 12. Примеры успешно найденных знаков

На рисунке 12 изображения объединены в группы по три. Изображение слева – входное изображение. Справа – выходное. Центральное изображение размечено вручную и показывает то, что хотелось бы получить в идеале.

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

Этот метод показал не только хорошие результаты, но и ложные срабатывания:

Примеры ложных срабатыванийРис. 13. Примеры ложных срабатываний

В целом, мы оцениваем использование данного метода положительно. Полностью свёрточная нейронная сеть дала около 80% корректно найденных знаков на независимой тестовой выборке. Отдельное достоинство метода в том, что теоретически с его помощью можно найти сразу 2 одинаковых знака и каждый из них обозначить прямоугольником. Если же знака в кадре не будет, то сеть ничего не обозначит.

Этап 4. Сравнение каскадных классификаторов со свёрточной нейронной сетью для поиска автомобильных номеров

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

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

Характеристики методов локализации объектов

Уровень точности и полноты

Свёрточные нейронные сети наряду с каскадным классификатором с признаками Хаара показывают высокий уровень точности и полноты при поиске объектов на изображении. В то же время каскадный классификатор LBP хотя и даёт высокий уровень полноты, то есть объект находится достаточно часто, но имеет высокий уровень ложных срабатываний и низкую точность.

Инвариантность к масштабу

Тогда как каскадные классификаторы с признаками Хаара и LBP демонстрируют высокую устойчивость к изменению масштаба объектов на изображениях, свёрточная нейросеть в отдельных случаях не справляется и показывает низкую инвариантность к масштабу.

Число попыток до получения рабочей модели

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

Процессорное время (затрачиваемое на обработку)

Большой плюс работы со свёрточной нейросетью – она не требует много процессорного времени. Также немного процессорного времени уйдет при использовании каскадного классификатора LBP. При этом каскадный классификатор с признаками Хаара занимает достаточно много процессорного времени.

Среднее время, затрачиваемое на обработку одного кадра в секундах (за исключением времени на захват и отображение видео):

Среднее время на обработку кадра

Устойчивость к объектам с наклоном

Устойчивость к объектам с наклоном – ещё одно неоспоримое достоинство свёрточной нейросети. Оба вида каскадных классификаторов неустойчивы к наклонённым объектам на изображении.

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

Заключение

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

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

Комментарии

комментарии