No Image

Распознавание лиц с помощью нейронных сетей

СОДЕРЖАНИЕ
428 просмотров
10 марта 2020

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Плотников Д.В., Сопов Е.А.

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Плотников Д.В., Сопов Е.А.

SOLVING THE FACE AND FACIAL EXPRESSION REGOGNITION TASKS USING CONVOLUTIONAL NEURAL NETWORKS

This paper performs experimental research of convolutional neural networks performance operated with face and facial recognition tasks.

Текст научной работы на тему «Решение задач распознавания лиц и мимики с помощью сверточных нейронных сетей»

Решетневские чтения. 2017

РЕШЕНИЕ ЗАДАЧ РАСПОЗНАВАНИЯ ЛИЦ И МИМИКИ С ПОМОЩЬЮ СВЕРТОЧНЫХ НЕЙРОННЫХ СЕТЕЙ

Д. В. Плотников*, Е. А. Сопов

Сибирский государственный университет науки и технологий имени академика М. Ф. Решетнева Российская Федерация, 660037, г. Красноярск, просп. им. газ. «Красноярский рабочий», 31

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

Ключевые слова: сверточная нейронная сеть, распознавание лиц, распознавание мимики.

SOLVING THE FACE AND FACIAL EXPRESSION REGOGNITION TASKS USING CONVOLUTIONAL NEURAL NETWORKS

D. V. Plotnikov*, E. A. Sopov

Reshetnev Siberian State University of Science and Technology 31, Krasnoyarsky Rabochy Av., Krasnoyarsk, 660037, Russian Federation Е-mail: Dmitry.plotnikov.1995@gmail.com

This paper performs experimental research of convolutional neural networks performance operated with face and facial recognition tasks.

Keywords: convolutional neural network, face recognition, facial expression recognition.

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

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

В качестве тестовых задач были выбраны следующие: «The ORL Database of Faces» и «The Facial Expression Recognition 2013».

База данных «The ORL Database of Faces». Первой тестовой задачей послужила проблема распознавания лиц. База данных представляет собой 400 фотографий сорока разных людей (рис. 1). Все фото представлены в градации серого. Формирование тестовой выборки происходит следующим образом: необходимо случайным образом выбрать по одной фотографии каждого человека. Разрабатываемый алгоритм должен на основе 360 обучающих фотоснимков классифицировать остальные 40, т. е. определить людей, изображенных на них.

База данных «The Facial Expression Recognition 2013». Второй тестовой задачей послужила проблема распознавания эмоций. БД представляет собой набор изображений людей с разными выражениями лиц. Человек на изображении может быть: сердитый, испытывающий отвращение, испытывающий страх, счастливый, грустный, удивленный или спокойный.

Рис. 1. Примеры фотографий, взятые из БД «The ORL Database of Faces»

Математические методы моделирования, управления и анализа данных

Рис. 2. Примеры фотографий, взятых из БД «The Facial Expression Recognition 2013»

Структура сверточной нейронной сети для работы с «The ORL Database of Faces»

Номер слоя Слой Параметры

Количество ядер Размер ядер Функция активации

1 Сверточный слой 1 20 5×5 Гиперболический тангенс

3 Сверточный слой 2 50 5×5 Гиперболический тангенс

Размер свертки Функция свертки

2 Субдискретизирующий слой 1 2×2 Функция максимума

4 Субдискретизирующий слой 2 2×2 Функция максимума

Количество нейронов Функция активации

5 Полносвязный слой 1 500 Гиперболический тангенс

6 Полносвязный слой 2 40 Гиперболический тангенс

Структура 1 Структура 2

Рис. 3. Динамика эффективности обучения CNN (Структура 1 и Структура 2)

Выборка состоит из 28709 обучающих и 7178 тестовых примеров. Каждое изображение имеет разрешение 48×48 пикселей.

Результаты экспериментов. База данных «The ORL Database of Faces». С принципом устройства работы CNN можно ознакомиться в [1].

В ходе работы также были использованы и другие структуры для работы с базой данных «The ORL Database of Faces». Однако они оказались неэффективны. С одной стороны, более сложные и ресурсоемкие для вычислений конфигурации не показывали лучший результат. А более простые структуры – не могли быть обучены вообще. Таким образом, наилучшим образом обученная структура достигает эффективности классификации 97,5 %.

База данных «The Facial Expression Recognition 2013». Поскольку размерность данной задачи сравнительно велика, принято решение уменьшить размерность (до 28×28). В данном случае на вход нейронной сети будет подано изображение меньшей размерности. Практика показала, что время обучения CNN при входных изображениях 48×48 пикселя в 4 раза дольше, чем при входных изображениях 28×28 пикселя. Более того, динамика обучения сети остается почти неизменной.

Читайте также:  Трейнер для splinter cell double agent

Следующий этап – проверка гипотезы о том, что значения гиперпараметров CNN влияют на скорость

обучения. Для решения задачи использовались две структуры: Структура 1 – идентична той, что была использована для работы с БД «The ORL Database of Faces».

Структура 2 – это Структура 1 с увеличенными значениями гиперпараметров (теперь количество ядер первого сверточного слоя = 50, второго сверточного слоя = 125) (рис. 3).

На рис. 3: ось абсцисс – итерации обучения сети, ось ординат – точность обучения. Видно, что на 125 итерации Структура 1 достигает своего уровня стагнации, в то время как Структура 2 продолжает увеличивать точность распознования.

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

Данное направление и будет являться объектом дальнейших исследований.

PewemHeecKye umeHUH. 2017

1. Face recognition: a convolutional neural-network approach / S. Lawrence, C. L. Giles, Ah Chung Tsoi, and A. D. Back // IEEE Trans. Neural Networks. 1997. Vol. 8, № 1. P. 98-113.

2. Krizhevsky A., Sutskever I., Hinton G. E. ImageNet Classification with Deep Convolutional Neural Networks, Adv. Neural Inf. Process. Syst. 2012. P. 1-9.

3. LeCun Y., Boser B., Denker J. S. et al. Backpropa-gation Applied to Handwritten Zip Code Recognition. Neural Comput. 1989. № 1 (4). P. 541-551.

4. Lin M., Chen Q., Yan S. Network In Network. arXiv Prepr. 2013:10.

5. Sopov E., Ivanov I. Design efficient technologies for context image analysis in dialog HCI using self-configuring novelty search genetic algorithm. Informatics Control Autom Robot (ICINCO), 2014. 11th Int Conf. 2014. № 2. P. 832-839.

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

Что собой представляет нейронная сеть

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

Рис. 1. Простейший перцептрон

Важной особенностью нейронной сети является её умение обучаться на примерах, это называется обучением с учителем. Нейронная сеть обучается на большом количестве примеров, состоящих из пар вход-выход ( соответствующие друг другу вход и выход). В задачах распознавания объектов такой парой будет входное изображение и соответствующий ему лейбл — название объекта. Обучение нейронной сети — итеративный процесс, уменьшающий отклонение выхода сети от заданного «ответа учителя» — лейбла, соответствующего данному изображению ( Рис. 2). Этот процесс состоит из шагов, называемых эпохами обучения ( они обычно исчисляются тысячами), на каждом из которых происходит подгонка «весов» нейронной сети — параметров скрытых слоёв сети. По завершении процесса обучения качество работы нейронной сети обычно достаточно хорошее для выполнения задачи, под которую она была обучена, хотя оптимальный набор параметров, идеально распознающий все изображения, часто подобрать невозможно.

Рис. 2. Обучение нейронной сети

Что такое глубокие нейронные сети

Глубокие, или глубинные, нейронные сети — это нейронные сети, состоящие из нескольких скрытых слоёв ( Рис.3). Данный рисунок представляет собой изображение глубинной нейронной сети, дающее читателю общее представление о том, как выглядит нейронная сеть. Тем не менее, реальная архитектура глубинных нейронных сетей гораздо сложнее.

Рис. 3. Нейронная сеть с множеством скрытых слоёв

Создатели свёрточных нейронных сетей, конечно, сначала вдохновились биологическими структурами зрительной системы. Первые вычислительные модели, основанные на концепции иерархической организации визуального потока примата, известны как Неокогнитрон [1] Фукушимы ( Рис.4). Современное понимание физиологии зрительной системы схоже с типом обработки информации в свёрточных сетях, по крайней мере, для быстрого распознавания объектов.

Рис. 4. Диаграмма, показывающая связи между слоями в модели Неокогнитрон [1].

Читайте также:  Глисты в морском окуне

Позже эта концепция была реализована канадским исследователем Яном ЛеКуном в его свёрточной нейронной сети, созданной им для распознавания рукописных символов [2]. Данная нейронная сеть состояла из слоёв двух типов: свёрточных слоев и субдискретизирующих ( subsampling) слоёв ( или слоёв подвыборки-pooling). В ней каждый слой имеет топографическую структуру, то есть каждый нейрон связан с фиксированной точкой исходного изображения, а также с рецептивным полем ( областью входного изображения, которая обрабатывается данным нейроном). В каждом месте каждого слоя существует целый ряд различных нейронов, каждый со своим набором входных весов, связанных с нейронами в прямоугольном фрагменте предыдущего слоя. Разные входные прямоугольные фрагменты с одинаковым набором весов связаны с нейронами из разных локаций.

Общая архитектура глубинной нейронной сети для распознавания образов представлена на рисунке 5. Входное изображение представлено в виде набора пикселей или небольших участков изображения ( например, 5-на-5 пикселей)

Рис. 5. Диаграмма свёрточной нейронной сети

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

Сферы применения глубинных нейронных сетей, в том числе свёрточных сетей, не ограничиваются распознаванием лиц. Они широко используются для распознавания речи и аудио-сигналов, обработки показаний с разного типа сенсоров или для сегментации сложных многослойных изображений ( таких как спутниковые карты [3]) или медицинских изображений ( рентгеновские снимки, снимки фМРТ- см. здесь).

Нейронные сети в биометрии и распознавании лиц

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

Рис. 6. База данных MegaFace содержит 1 млн. изображений более 690 тыс. людей

После того, как сеть обучена распознавать лица, процесс распознавания лица может быть описан следующим образом ( рис.7). Сначала изображение обрабатывается с помощью детектора лица: алгоритма, который определяет прямоугольный фрагмент изображения с лицом. Этот фрагмент нормализуется для того, чтобы легче обрабатываться нейронной сетью: наилучший результат будет достигнут, если все входные изображения будут одинакового размера, цветности Нормализованное изображение подаётся на вход нейронной сети для обработки алгоритмом. Данный алгоритм обычно является уникальной разработкой компании для повышения качества распознавания, однако существуют и «стандартные» решения для данной задачи. Нейронная сеть строит уникальный вектор признаков, который затем переносится в базу данных. Поисковая система сравнивает его со всеми векторами признаков, хранящихся в базе данных, и даёт результат поиска в виде определённого числа имён или профилей пользователей со схожими лицевыми признаками, каждому из которых присваивается определённое число. Это число представляет собой степень схожести нашего вектора признаков с найденным в базе данных.

Рис. 7. Процесс распознавания лица

Определение качества алгоритма

Точность

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

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

Как правило, работа любой нейронной сети может быть измерена с точки зрения точности: после настройки параметров и завершения процесса обучения сеть проверяется на тестовом множестве, для которого мы имеем отклик учителя, но который отделён от обучающего набора. Как правило, этот параметр является количественной мерой: число ( часто в процентах), которое показывает, насколько хорошо система способна распознавать новые объекты. Еще одна типичная мера — это ошибка ( может быть выражена как в процентах, так и в числовом эквиваленте). Тем не менее, для биометрии существуют более точные меры.

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

Часто помимо непосредственно результата сравнения, требуется оценить уровень «уверенности» системы в своём решении. Такое значение называют термином «уровень сходства» ( или подобия, similarity score). Больший показатель сходства указывает на то, что два сравниваемых биометрических образца более похожи.

Читайте также:  Wd purple intellipower wd20purx

Существует ряд методов для оценки качества работы системы ( как для задачи верификации, так и идентификации). О них мы расскажем в следующий раз. А вы оставайтесь с нами и не стесняйтесь оставлять комментарии и задавать вопросы.

Распознавание лица — последний тренд в авторизации пользователя. Apple использует Face ID, OnePlus — технологию Face Unlock. Baidu использует распознавание лица вместо ID-карт для обеспечения доступа в офис, а при повторном пересечении границы в ОАЭ вам нужно только посмотреть в камеру.

В статье разбираемся, как сделать простейшую сеть распознавания лиц самостоятельно с помощью FaceNet.

Немного о FaceNet

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

Триплет потерь

FaceNet использует особую функцию потерь называемую TripletLoss. Она минимизирует дистанцию между якорем и изображениями, которые содержат похожую внешность, и максимизирует дистанцую между разными.

  • f(a) это энкодинг якоря
  • f(p) это энкодинг похожих лиц (positive)
  • f(n) это энкодинг непохожих лиц (negative)
  • Альфа — это константа, которая позволяет быть уверенным, что сеть не будет пытаться оптимизировать напрямую f(a) — f(p) = f(a) — f(n) = 0
  • […]+ экиввалентено max(0, sum)

Сиамские сети

FaceNet — сиамская сеть. Сиамская сеть — тип архитектуры нейросети, который обучается диффиренцированию входных данных. То есть, позволяет научиться понимать какие изображения похожи, а какие нет.

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

В FaceNet это делается путем вычисления расстояния между двумя выходами.

Реализация

Переходим к практике.

В реализации мы будем использовать Keras и Tensorflow. Кроме того, мы используем два файла утилиты из репозитория deeplayning.ai, чтобы абстрагироваться от взаимодействий с сетью FaceNet.

  • fr_utils.py содержит функции для подачи изображений в сеть и получения кодирования изображений;
  • inception_blocks_v2.py содержит функции для подготовки и компиляции сети FaceNet.

Компиляция сети FaceNet

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

Мы начнем инициализпцию нашей сети со входа размерности (3, 96, 96). Это означает, что картинка передается в виде трех каналов RGB и размерности 96×96 пикселей.

Теперь давайте определим Triplet Loss функцию. Функция в сниппете кода выше удовлетворяет уравнению Triplet Loss, которое мы определили в предыдущей секции.

Если вы не знакомы с фреймворком TensorFlow, ознакомьтесь с документацией.

Сразу после того, как мы определили функцию потерь, мы можем скомпилировать нашу систему распознавания лиц с помощью Keras. Мы будем использовать Adam optimizer для минимизации потерь, подсчитанных с помощью функции Triplet Loss.

Подготовка базы данных

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

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

Для каждого изображения мы преобразуем данные изображения в 128 float чисел. Этим занимается функция img_path_to_encoding. Функция принимает на вход путь до изображения и «скармливает» изображение нашей распознающей сети, после чего возвращают результаты работы сети.

Как только мы получили закодированное изображения в базе данных, сеть наконец готова приступить к распознаванию!

Распознавание лиц

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

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

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

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

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

На GitHub есть демо работы полученной сети, с входом от простой вебкамеры.

Заключение

Теперь вы знаете, как работают технологии распознавания лиц и можете сделать собственную упрощенную сеть распознавания, используя предварительно подготовленную версию алгоритма FaceNet на python.

Комментировать
428 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock
detector