Распознавание лиц: сверточная нейронная сеть в действии

автор Анна Рассыпнова

14 мая 2015

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

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

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

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

Мы опробовали несколько вариантов нормализации имеющихся данных. Система находит черты лица: глаза, нос, подбородок и скулы, — используя классификатор Хаара. Анализируя угол между глазами, мы можем компенсировать поворот головы и выделить интересующую нас область. Информация о наклоне головы в предыдущем кадре позволяет удерживать регион лица при изменении положения, поворачивая изображение с камеры на нужный угол до передачи классификатору.

Распознавание лиц: Выравнивание лица

Выравнивание лица

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

Распознавание лиц: Приведенные к одной гистограмме изображения с искажениями

Приведенные к одной гистограмме изображения с искажениями

Как инструмент для непосредственного распознавания мы используем внутреннюю реализацию Convolutional Neural Networks (Сверточные Нейронные Сети) — один из наиболее актуальных сейчас вариантов нейронных сетей, который уже зарекомендовал себя в классификации изображений и распознавании символов.

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

Распознавание лиц: Структура нашей нейронной сети

Структура нашей нейронной сети

Для того, чтобы видеть влияние этих параметров на работу сети, мы сделали Debug-вывод изображений, формируемых при распознавании. Это направление можно расширить, применив De-Сonvolutional Neural Network — технику, которая позволяет визуализировать вклад разных частей входного изображения в карты характерных черт.

Распознавание лиц: Фрагмент Debug-вывода

Фрагмент Debug-вывода

Наш текущий прототип системы распознавания лиц обучен на распознавание "неизвестных" системе лиц, а также 10 сотрудников компании.
В качестве обучающего сета "неизвестных" была использована база данных Labeled Faces in the Wild, а также 6 сетов лиц сотрудников. Тестирование проводилось с использованием камеры D-Link DCS 2230 с расстояния 1-4м.

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

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

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

Еще одно препятствие, которое предстоит преодолеть, — долгое время обучения сверточной сети. Даже для скромных по размеру сетов данных оно может приближаться к суткам. В ближайших планах — перенос обучения сети на GPU. Это позволит гораздо быстрее получать и анализировать результаты изменений в архитектуре и данных. За счет этого мы сможем провести больше экспериментов, ведущих к оптимальному соотношению формата данных и архитектуры сети.

  • 0 Репосты

Комментарии

Фильтр

Закрыть

Технологии

Индустрии