Информационно-образовательный сайт интеллектуальных программных
разработок кафедры программной инженерии
А.С.Медведев, О.И.Федяев
Донецкий национальный технический университет
wwwalex_96@mail.ru
fedyaev@donntu.ru
Введение
Проблема распознавания[1] лиц очень актуальна на данный момент. Этой теме посвящено
множество работ. Основные трудности состоят в том, что бы распознать человека по изображению при
различных изменениях, связанных с освещением, ракурсом, возрастом, мимикой, прической и т.д.
Существуют различные способы решения проблемы распознавания лиц, но все они не идеальны.
Свѐрточная нейронная сеть[2] — архитектура искусственных нейронных сетей, которая нацелена
на эффективное распознавание изображений[1]. Входит в состав технологий глубинного обучения.
Использует особенности зрительной коры[3], в которой были открыты клетки, реагирующие на прямые
линии под разными углами, и сложные клетки, реакция которых связана с активацией определѐнного набора
простых клеток. Идея СНС заключается в чередовании свѐрточных слоев и субдискретизирующих слоев.
Структура сети многослойна и не содержит обратных связей. Чаще всего для обучения используется метод
обратного распространения ошибки [4].
Сверточная нейронная сеть является одним из лучших алгоритмов по распознаванию и
классификации изображений. Ее преимущество в удобном распараллеливании вычислений, что
предоставляет возможность реализации алгоритмов работы и обучения сети на графических процессорах.
Так же СНС относительно устойчива к повороту и сдвигу распознаваемого изображения. К недостаткам
можно отнести трудность настройки сети, т.к. имеется большое количество настраиваемых параметров.
На данный момент существует множество архитектур сверточных нейронных сетей, которые решают
задачи распознавания изображений с высокой степенью точности:
AlexNet [5];
семейство моделей VGG [6];
Google Inception [7];
ResNet [8] и др.
Указанные выше модели являются достаточно затратными с вычислительной точки зрения, так как в
них имеется большое число обучаемых параметров, что делает выбор архитектуры СНС для решения
разного класса задач распознавания образов достаточно сложной задачей. Однако, такие сети не требуют
ручной подготовки данных для дальнейшей работы, что является важным преимуществом перед
классическими методами классификации.
Метод обратного распространения ошибки — метод обучения многослойного перцептрона.
Многослойный перцептрон — частный случай перцептрона Розенблатта, в котором один алгоритм
обратного распространения ошибки обучает все слои. Это итеративный градиентный алгоритм, который
служит для минимизации ошибки работы многослойного перцептрона и получения желаемого выхода.
Идея этого метода заключается в распространении сигналов ошибки от выходов сети к еѐ входам, в
направлении, обратном прямому распространению сигналов в обычном режиме работы.
Постановка задачи распознавания лица
Для начала обучения сети нужно определиться с тем, как измерять качество распознавания. Для
этого строится функция оценки. Она, явно зависит от выходных сигналов сети и неявно — от всех еѐ
параметров. Самый распространенный пример оценки — сумма квадратов расстояний от выходных
сигналов сети до их требуемых значений [9] показана на рисунке 1:
Рисунок 1 - Формула суммы квадратов расстояний от выходных сигналов сети до их требуемых
значений
,где Z(t) — требуемое значение выходного сигнала. Задача обучения так настроить веса, чтобы они
для любой обучающей пары давали минимальную ошибку H. Чтобы посчитать ошибку для всей обучающей
выборки берется среднее арифметическое по ошибкам для всех обучающих пар.
Теперь необходимо выполнить обратное распространение через сеть. Это определит, какие веса
оказали большее влияние на потери, поможет найти способы, как их настроить, чтобы уменьшить потери.
После вычисления производной осуществляется обновление весов показано на рисунке 2. Берутся все
фильтрованные веса и обновляются так, что они менять в направлении градиента.
Рисунок 2- Обновление весов
Скорость обучения — это параметр, который выбирается программистом. Высокая скорость
обучения означает, что в обновлениях веса делались более крупные шаги, поэтому образцу может
потребоваться меньше времени, чтобы набрать оптимальный набор весов. Слишком высокая скорость
обучения может привести к большим и менее точным скачкам, которые помешают достижению
оптимальных показателей.
Архитектура сверточной нейронной сети
Свѐрточные нейронные сети
(СНС) очень похожи на обычные нейронные сети. Они также
построены на основе нейронов, которые обладают изменяющимся весом и смещениями. Каждый нейрон
получает некоторые входные данные, выполняет скалярное произведение информации и в отдельных
ситуациях сопровождает это нелинейностью. Здесь также присутствует функция потери на последнем
(полностью подключенном) слое.
В свѐрточных нейронных сетях вводные данные состоят из изображений, и они ограничивают
построение сети более разумным путем показано на рисунке2 и рисунке3. В отличие от обычной нейронной
сети, слои СНС состоят из нейронов, расположенных в 3-х измерениях: ширине, высоте и глубине, т.
е. измерениях, которые формируют объем.
Рисунок 2 - Расположение нейронов в НС
Рисунок 3 - Расположение нейронов в СНС
Выше было показано, что СНС использует последовательность слоев. Каждый слой преобразует
один активационный объем в другой. Для организации свѐрточной нейронной сети применяется 3 основных
слоя показано на рисунке 4:
1. свѐртки,
2. пулинга,
3. полносвязный слой.
Рисунок 4 - Архитектура СНС
Слой свертки (convolutions) служит для умножает значения фильтра на исходные значения пикселей
изображения, после чего все эти умножения суммируются. Каждая уникальная позиция введенного
изображения производит число.
Слой пулинга
(pool) выполняет операцию по понижающей дискретизации пространственных
размеров, в результате чего объем может сократиться до двух раз. На этом этапе выполняется нелинейное
уплотнение карты признаков. Логика работы: если на предыдущей операции свертки уже были выявлены
некоторые признаки, то для дальнейшей обработки изображение уплотняется до менее подробной картинки.
Полносвязный слой
(full connection) выводит N-мерный вектор
(N — число классов) для
определения нужного класса. Работа организуется путем обращения к выходу предыдущего слоя
и определения свойств, которые наиболее характерны для определенного класса.
Разработка программной модели многослойной сети
На этапе объектно-ориентированного анализа и проектирования использован язык моделирования
UML для описания моделей программной системы [9]. Для программной реализации данной системы
выбран язык программирования C++ из-за его связи с библиотекой ConvNet. Помимо этого в нѐм есть
различные библиотеки для работы с изображениями.
ConvNet - это библиотека C ++, реализующая распространение данных в сверточных нейронных
сетях. ConvNet предоставляет эффективный и простой в использовании реализации сверточных нейронных
сетей на C ++.
Система состоит из нескольких модулей: модуль выделения лица, модуль распознавания и модуль
идентификации. Первый модуль отвечает за выделение лиц в видеопотоке. Другими словами создает
обучающую выборку для СНС. Второй модуль отвечает за распознавание лиц в видеопотоке. Третий модуль
отвечает за идентификацию.
Заключение
Анализ сверточной нейронной сети показал хороший результат по распознаванию и классификации
изображений. Преимущество СНС заключается в удобном распараллеливании вычислений, что
предоставляет возможность реализации алгоритмов работы и обучения сети на графических процессорах.
Так же СНС относительно устойчива к повороту и сдвигу распознаваемого изображения. К недостаткам
можно отнести трудность настройки сети, т.к. имеется большое количество настраиваемых параметров.
Большое количество неприятностей приносит долгий процесс обучения. В сложных задачах для обучения
сети могут потребоваться дни или даже недели. Существует риск, что СНС вообще не обучится. Несмотря
на это, алгоритм хорошо себя зарекомендовал в ходе экспериментов, поэтому он будет использован в
системе распознавания лиц человека.