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

в 12:15, , рубрики: machine learning, python, skillfactory, Алгоритмы, Блог компании SkillFactory, видеонаблюдение, машинное обучение, нейросети, Урбанизм

Алгоритмы по детекции лиц плотно вошли в нашу жизнь, хотя и не все это замечают. Началось всё в 2015 году со сферы развлечений. Стартап Looksery, занимающийся разработкой AR-фильтров, был куплен Snapchat. Приложение распознавало лицо человека на фотографии и накладывало на него весёлые рожицы. Чуть позже, в начале 2016 года, Facebook купил белорусский стартап MSQRD и запустил маски в Facebook Stories. Но это можно считать только обкаткой таких технологий.

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

Нейросети в большом городе. Разбираемся, как они помогают идентифицировать людей, и запускаем собственную нейросеть - 1



Прежде чем продолжить, чтобы не запутаться, дадим определения некоторым терминам.

Детекция — обнаружение какого-либо класса объектов, например лица.

Идентификация — обнаружение определённого объекта, например лица Васи Пупкина.

Дальнейшее развитие нейронных сетей подняло точность идентификации, достаточную для решения таких задач, как защита и безопасность. В 2017 году Apple представила FaceID — сканер, позволяющий разблокировать телефон по лицу владельца. Появился новый способ оплаты покупок по биометрии. Летом 2020 года сеть московских кафе Prime начала тестировать систему оплаты по лицу клиента. Вместо использования пропусков для турникетов начинают идентифицировать человека через видеокамеру.

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

Распознавание с помощью алгоритмов


В 2001 году Пол Виола и Майкл Джонс предложили метод детекции объектов, который широко использовался для определения лиц. В 2005 году Навнит Далал и Билл Триггс показали свои гистограммы направленных градиентов (Histogram of Oriented Gradients, HOG), с помощью которых также можно было детектировать лица.

К сожалению, качество данных подходов оставляло желать лучшего. Был высок уровень срабатывания ошибок первого и второго рода. 

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

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

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

  • Плохой уровень освещённости (света от монитора в тёмной комнате достаточно для распознавания);
  • Голова наклонена или слегка повёрнута в сторону;
  • Лицо не полностью попадает в кадр или частично прикрыто ладонью;
  • Борода, очки — не проблема.

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

Распознавание лиц в городах


По состоянию на 2019 год, количество камер с системой распознавания лиц, установленных в крупных городах:

  • Пекин – 470 тыс.;
  • Великобритания – 420 000 тыс.;
  • Вашингтон – 30 000 тыс.;

В Москве на данный момент установлено около 193 тыс. HD-камер. Расположение камер можно посмотреть на сайте data.mos.ru.

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

Цели развёртывания систем распознавания


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

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

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

Как обрабатываются такие данные


Ряд компаний на протяжении более 40 лет активно разрабатывает системы распознавания человеческих лиц. В их числе даже знаменитый производитель оружия Smith & Wesson со своей системой ASID — Automated Suspect Identification System. А полиция Лондона сейчас тестирует похожую систему в сотрудничестве с японской компанией NEC. Но лидером в данной области можно смело назвать российскую компанию NtechLab. В 2015 году алгоритм распознавания лиц от NtechLab был признан лучшим на организованном Вашингтонским университетом международном конкурсе The MegaFace Benchmark. В мае 2016 NtechLab в числе трёх российских компаний была допущена к официальному тестированию технологий биометрии, проводимому NIST. Сам факт допуска к испытаниям дал компании право участвовать в гостендерах США и ряда других стран.

Нейросети в большом городе. Разбираемся, как они помогают идентифицировать людей, и запускаем собственную нейросеть - 2

Широкой аудитории алгоритм был представлен в виде сервиса FindFace, который искал людей во Вконтакте по фотографии. После своего запуска сервис наделал много шума в соцсетях, а также спровоцировал несколько скандалов с деаноном. По всей видимости, сервис был маркетинговым приёмом, призванным показать возможности платформы потенциальным приобретателям технологии. Вскоре после этого разработчики закрыли сервис, и компания начала оказывать услуги государству и различным отраслям бизнеса. В частности стало известно, что мэрия Москвы заплатила NtechLab не менее $3,2 млн за использование её технологии распознавания лиц в городской системе видеонаблюдения.

Собственная система слежения в домашних условиях на основе нейронных сетей

MTCNN — нейронная сеть для детекции лиц

MTCNN — это каскад свёрточных нейронных сетей. В модели используются 3 сети: P-Net, R-Net и O-net. Каждая последующая нейронная сеть увеличивает точность предсказания.

Нейросети в большом городе. Разбираемся, как они помогают идентифицировать людей, и запускаем собственную нейросеть - 3

Первая P-Net на выходе выдаёт координаты ограничивающих прямоугольников предполагаемых лиц. Далее R-net отсекает менее вероятные области лиц и добавляет уровень достоверности к тем, которые остались. В третьей сети мы снова избавляемся от прямоугольников с более низким уровнем достоверности и добавляем координаты 5 лицевых ориентиров.

Нейросети в большом городе. Разбираемся, как они помогают идентифицировать людей, и запускаем собственную нейросеть - 4

Результат работы mtcnn

Для тех, кто хочет поэкспериментировать, нейронная сеть упакована в Python-библиотеку с одноимённым названием MTCNN. Для запуска достаточно создать объект MTCNN и вызвать метод detect_face.

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

import cv2
from mtcnn import MTCNN
 
detector = MTCNN()
image = cv2.cvtColor(cv2.imread("ivan.jpg"), cv2.COLOR_BGR2RGB)
result = detector.detect_faces(image)
bounding_box = result[0]['box']
keypoints = result[0]['keypoints']
cv2.rectangle(image,
          	(bounding_box[0], bounding_box[1]),
       	   (bounding_box[0]+bounding_box[2], bounding_box[1] + bounding_box[3]),
          	(0,155,255), 2)
cv2.circle(image,(keypoints['left_eye']), 2, (0,155,255), 2)
cv2.circle(image,(keypoints['right_eye']), 2, (0,155,255), 2)
cv2.circle(image,(keypoints['nose']), 2, (0,155,255), 2)
cv2.circle(image,(keypoints['mouth_left']), 2, (0,155,255), 2)
cv2.circle(image,(keypoints['mouth_right']), 2, (0,155,255), 2)
cv2.imwrite("ivan_drawn.jpg", cv2.cvtColor(image, cv2.COLOR_RGB2BGR))
print(result)

У меня были проблемы с зависимостями пакетов. Если у вас появляются ошибки, скопируйте в файл requirements.txt следующие пакеты:

opencv-python==4.2
tensorflow==1.12.3
keras==2.2.4
numpy == 1.16
protobuf==3.6.0
mtcnn

Если tensorflow не устанавливается тогда обновите setuptools командой:

pip install setuptools --upgrade --ignore-installed

FaceNet

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

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

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

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

Нейросети в большом городе. Разбираемся, как они помогают идентифицировать людей, и запускаем собственную нейросеть - 5

Принцип работы faceNet

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

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

Слабые места подобных систем


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

Нейросети в большом городе. Разбираемся, как они помогают идентифицировать людей, и запускаем собственную нейросеть - 6

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

Нейросети в большом городе. Разбираемся, как они помогают идентифицировать людей, и запускаем собственную нейросеть - 7

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

Перспективы развития систем видеонаблюдения


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

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

image

Автор: Александр

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js