Автор: Василий МАМАЕВ, заместитель директора некоммерческого партнерства «Русское биометрическое общество» Юрий МИНАЕВ, старший научный сотрудник ФКУ НПО «СТиС» МВД России

Сверточные нейронные сети в биометрии


За последние несколько лет использование сверточных нейронных сетей (СНС) при распознавании биометрических характеристик человека дало примерно десятикратное увеличение качества распознавания.

Впервые нейронные сети [1] привлекли всеобщее внимание в 2012 году, когда Алекс Крижевски, благодаря им, выиграл конкурс ImageNet (ежегодная олимпиада по машинному зрению), снизив рекорд ошибок классификации с 26% до 15%, что тогда стало прорывом. Сегодня глубинное обучение лежит в основе услуг многих компаний: Facebook использует нейронные сети для алгоритмов автоматического проставления тегов, Google – для поиска среди фотографий пользователя, Amazon – для генерации рекомендаций товаров, Pinterest – для персонализации домашней страницы пользователя, а Instagram – для поисковой инфраструктуры.

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

Попробуем на основе статьи [1] кратко изложить принципы работы СНС.

Что делают слои ?
Первый cлой – математическая часть

Первый слой в СНС всегда свёрточный. Легче всего понять, что такое свёрточный слой, если представить его в виде фонарика, который светит на верхнюю левую часть изображения (допускаем, изображение это матрица 32 х 32). Допустим свет, который излучает этот фонарик, покрывает площадь 5 х 5 пикселей. А теперь давайте представим, что фонарик движется по всем областям вводного изображения. В терминах компьютерного обучения этот фонарик называется фильтром (иногда нейроном или ядром), а области, на которые он светит, называются рецептивным полем (полем восприятия). То есть наш фильтр – это матрица (такую матрицу ещё называют матрицей весов или матрицей параметров).

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

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

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

В конце сети, на выходе, работают уже так называемые «полносвязные слои». Полносвязный слой берёт вводные данные и выводит N-пространственный вектор, где N – число классов, из которых программа выбирает нужный. Например, если вы хотите использовать программу по распознаванию цифр, у N будет значение 10, потому что цифр – 10. Каждое число в этом N-пространственном векторе представляет собой вероятность конкретного класса. Например, если результирующий вектор для программы распознавания цифр это [0;1 0;1 0;75; 0;0; 0; 0; 0;5], значит, существует 10% вероятность, что на изображении «1», 10% вероятность, что на изображение «2», 75% вероятность – «3», и 5% вероятность – «9».

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

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

Как обучается (или настраивается ) СНС

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

Метод обратного распространения ошибки можно разделить на 4 отдельных блока: прямое распространение, функцию потери, обратное распространение и обновление веса. Во время прямого распространения берётся тренировочное изображение – в нашем примере, это матрица 32 х 32 – и пропускается через всю сеть. Например, ищем какую-то цифру. Если все веса или значения фильтра были инициализированы случайным образом, выходным значением будет что-то вроде [1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1 ;1], то есть такое значение, которое не даст предпочтения какому-то определённому числу. Сеть с такими весами не может найти свойства базового уровня и обоснованно определить класс изображения. Это ведёт к функции потери. У обучающих данных есть и изображение, и ярлык. Допустим, первое обучающее изображение – это цифра 3. Ярлыком изображения будет [0; 0; 0 ;1 ;0 ;0 ;0 ;0 ;0 ;0]. Функция потери может быть выражена по-разному, но часто используется среднеквадратическая ошибка (СКО):

Q = (R-P) 2/2
где:
Q – среднеквадратическая ошибка;
R – реальность;
P – предсказание.

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

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

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

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

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

Тестирование

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

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

В биометрии самые масштабные проверки (тестирование) проводит американский Национальный институт стандартов и технологий (NIST). Одно из последних тестирований было отображено в докладе NIST Interagency Report (NISTIR) 8238 и Ongoing Facial Recognition Vendor Test (FRVT) [2].

Результаты тестирования показывают [3], что в период с 2014 по 2018 год программное обеспечение для распознавания лиц стало в 20 раз лучше при поиске в базе данных для поиска подходящей фотографии, согласно оценке Национального института стандартов и технологий (NIST). Результаты указывают на быстро развивающийся рынок для алгоритмов биометрического распознавания лица. Новая публикация – NISTIR Межведомственный отчет (NISTIR) 8238, «Текущий тест поставщика распознавания лиц» (FRVT) – обновляет предыдущие оценки агентства по распознаванию лиц, NISTIR 7709 2010 года и NISTIR 8009 2014 года. Сравнение отчетов показывает, что область разработчиков выросла и что в целом программное обеспечение для распознавания лиц улучшается все более быстрыми темпами.

Тест, проведенный в оценках 2010, 2014 и 2018 годов, показал, насколько хорошо алгоритм может сопоставить фотографию человека с другой фотографией того же человека, хранящейся в большой базе данных. Этот тип поиска «один – ко многим» часто используется для проверки лица, которое может подать заявление на получение визы или водительских прав под другим именем. Было проверено 127 алгоритмов программного обеспечения от различных разработчиков – основных представителей этой части отрасли. Тестирование показало, что в 2018 году провалилось всего 0,2% поисков по сравнению с 4% отказов в 2014 году и 5% в 2010 году. Отказ означает, что когда изображение лица человека передается в программное обеспечение для распознавания, оно не может вернуть соответствующее изображение лица, которое находится в базе данных.

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

«Смысл того, что количество ошибок упало так далеко, заключается в том, что конечные пользователи должны будут обновить свою технологию, – отмечает Гротер. – Тест показывает, что индустрия сверточных нейронных сетей, которой еще не было пять лет назад, приобрела массовый спрос. Около 25 разработчиков имеют алгоритмы, которые превосходят самый точный, о котором мы сообщали в 2014 году». Но потенциальные пользователи должны остерегаться: не все новые алгоритмы работают одинаково, а лучшие алгоритмы – далеко впереди.

«В отрасли остается очень широкое распространение возможностей, – подчеркивает Гротер. – Это означает, что вам нужно правильно учитывать точность при выборе программного обеспечения нового поколения».

Оценочные программы NIST использовали базу данных из 26,6 миллионов фотографий для тестирования программного обеспечения, представленного компаниями и одной университетской командой. Участники не имели доступа к базе данных, которую NIST держал в секрете от разработчиков. Отчет NIST включает результаты по эффектам старения на лицах, масштабируемости для больших баз данных, идентификации близнецов и использования изображений низкого качества.

Этот отчет показывает эффективность алгоритмов распознавания лиц, представленных для оценки на наборах данных изображений, поддерживаемых в NIST. Алгоритмы реализуют идентификацию лиц «один – ко многим», появляющуюся на двухмерных изображениях. Основной набор данных состоит из 26,6 млн. Достаточно хорошо контролируемых естественных портретных фотографий 12,3 млн. человек. Также используются три меньших набора данных, содержащих больше фотографий без ограничений: 3,2 миллиона изображений с веб-камеры; 2,5 миллиона фотографий фотожурналистов и фотографов-любителей; а также 90 тысяч лиц, вырезанных из видеороликов в стиле наблюдения.

Отчет детализирует точность распознавания для 127 алгоритмов от 45 разработчиков, связывая производительность с именами участников. Алгоритмы представляют собой прототипы, представленные в феврале и июне 2018 года научно-исследовательскими лабораториями коммерческих поставщиков систем распознавания лиц и одним университетом.

Основной результат оценки заключается в том, что за последние пять лет (2013–2018 гг.) были достигнуты значительные успехи в точности, и они намного превосходят улучшения, достигнутые в предшествующий период (2010–2013 гг.). Несмотря на то, что отраслевые достижения велики – по крайней мере, 28 алгоритмов разработчиков в настоящее время превосходят самый точный алгоритм с конца 2013 года – остается широкий спектр возможностей. С портретными фотографиями хорошего качества наиболее точные алгоритмы найдут подходящие изображения в галереях, содержащих 12 миллионов человек, с величиной ошибок ниже 0,2%. Остальные ошибки в значительной степени связаны с длительным старением и другими дефектами.

Российские фирмы, участвующие в данном тестировании: NtechLab; ТРИДИВИ (3DiVi Inc.); Технологии видеоанализа; Вокорд; VisionLabs, – заняли по результатам тестирования первые места в различных категориях.

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

Литература
[1] Что такое свёрточная нейронная сеть https://habr.com/ru/post/309508/
[2] Patrick Grother, Mei Ngan, Kayee Hanaoka,
NISTIR 8238 Ongoing Face Recognition Vendor Test (FRVT) Part 2: Identification
National Institute of Standards and Technology.
[3] NIST Evaluation Shows Advance in Face Recognition Software’s Capabilities
https://www.nist.gov/news-events/news/2018/11/nist-evaluation-shows-advance-face-recognitionsoftwares-capabilities


Внимание! Копирование материалов, размещенных на данном сайте допускается только со ссылкой на ресурс http://www.tzmagazine.ru