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

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

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




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

    Детекция — обнаружение любых объектов.

    Идентификация — установление соответствия неизвестного объекта известному. Например, мистер X оказывается Васей Пупкиным.

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

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

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


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

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

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

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

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

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

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

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


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

    • Пекин – 470 тыс.;
    • Лондон – 420 тыс.;
    • Вашингтон – 30 тыс.;

    В Москве сейчас установлено около 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. Сам факт допуска к испытаниям дал компании право участвовать в гостендерах США и ряда других стран.


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

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


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


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



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


    Результат работы 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 извлекает черты лица и преобразует их в евклидово пространство, где расстояния между точками вектора напрямую соответствуют мере сходства лиц. Сравнивая два изображения с двух сетей во время обучения, коэффициенты меняются так, чтобы увеличить евклидово расстояние, если изображены разные люди, и минимизировать его, когда изображён один и тот же человек.

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

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

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


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

    Желающие протестировать модель могут заглянуть в этот репозиторий, а веса предварительно обученной сети можно скачать с google-диска.

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

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


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


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


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

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


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

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

    image



    SkillFactory
    Школа Computer Science. Скидка 10% по коду HABR

    Comments 26

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

      Защищает ли медицинская маска от распознавания?
        +3
        Увы нет. Системы машинного зрения уже достаточно хорошо развиты и теперь распознавание достаточно надёжно выполняется по половине лица или по области глаз (по половине лица уровень успешного распознавания составляет 90%). Новые формы распознавания лиц теперь могут распознавать не только людей в масках, закрывающих рот, но и людей в шарфах или с фальшивыми бородами.

        Плюс еще из-за коронавируса много граждан стали выходить на улицы в масках, это подтолкнуло китайских производителей SenseTime, FaceGo, Minivision внедрять эти технологии распознавания частично закрытых лиц в коммерческие модели видеокамер.
          +2
          по половине лица уровень успешного распознавания составляет 90%

          Московское метро в сутки перевозит около 8 млн. пассажиров. Т.е. можно ожидать, что каждое десятое распознавание в маске будет ошибочным (почти 800 тыс. человек).
          Допустим маски отменят, но даже один процент неточности даст 80 тыс. ложных распознаваний в сутки. Ок, возьмем референсную точность для Facenet — авторы заявляют 99.67%. Все равно выходит 21 тыс. ошибок каждый день.
          Интересно, как вообще планируется с этим разбираться, оспаривать ошибочные транзакции, в случае списания оплаты проезда в метро, например?
          А ведь есть уже и банковские приложения с биометрией.
            0
            Не забывайте тот факт что мы имеем дело с видео. а видео это отдельные кадры.
            А нейронка обрабатывает их по отдельности.
            Трекинг человека задача крайне простая, выдераем «лица» с кадров, детектим, допустим, каждый пятый, по итогу имеем что 6 из 10 это вот этот человек. Значит это действительно он.
            Таким образом 21 тыс. ошибок превращаются в… десятки, ну пускай даже сотни.
            PS:
            по поводу поста — mtcnn и facenet это уже сильно устарело. Кто захочет заниматься — смотрите в сторону RetinaFace и ArcFace, хотя не факт что и это уже не устарело.
              0
              Сколько кадров из видео на одного человека обработает нейронка? Ну, допустим, десять (хотя это потребует десятикратного увеличения требуемых вычислительных ресурсов).
              Усредним результаты этих десяти кадров. На сколько уменьшится вероятность ошибки? Интересуют конкретные цифры. Рассчитать тут сложно, потому что кроме ошибки для конкретного кадра из-за неудачного ракурса, есть еще просто очень похожие люди. Если ошибки неизбежны, кто и как будет их разгребать?
              Применительно к обслуживанию в банкоматах, например, даже десять ошибок в день — уже совершенно неприемлемо, на мой взгляд.
                0

                Пока не устарели ни Retinaface ни ArcFace. ArcFace вот на днях вообще новая модель вышла значительно более точная — Partial_FC.
                Единственное, как со многим опенсорсом придется потратить много времени чтобы из отдельных модулей собрать единое оптимизированное решение.

              0
              А маска с нанесённым орнаментом? И солнечные очки с ИК-фильтром?)
                0
                Китай отдельная история. Как насчет распознавания в Москве?
                С трудом верится, что можно провести распознавание по 15-20% лица (правильно надетая маска, шапка).
                  0
                  github.com/deepinsight/insightface/tree/master/detection/RetinaFaceAntiCov
                  opensource, проверьте.
                  есть еще алгоритмы face reconstruction, но они больше заточены работать по серии кадров + поиск похожих по «оставшимся частям» и там дальше цепочка всяких преобразований, на выходе чуть ли не 3d скан лица…
                +1
                За 2020 год был накоплен настолько обширный статистический материал, что теперь натаскать по нему нейросеть, думаю, не представляется проблемным. Если бы не было короны непонятно вообще как можно было бы получить такие объёмы «чистого» эталона для нейросетей — граждане получали цифровые пропуска однозначно связывая свои ПД с проездными, которыми авторизовались проходя турникеты, например, метро, будучи в масках напротив которых аккуратно висят камеры. Сами понимаете, насколько это подстегнуло увеличение точности распознавания по части лица.
                  0
                  Маска (носим правильно, на нос!) плюс солнечные очки плюс шапка.
                    0

                    И шапочка из фольги.

                    0
                    Конечно защищает.
                    Надо только понимать разницу между пиаром — распознавание ЛИЦА в маске, когда от лица остаются только глаза и брови — то есть распознавание по области глаз.
                    И распознавание объекта по совокупности и других черт — прическа, маска, одежда.
                    В условиях зимы-осени (шапка+маска) — псевдоалгоритмы почти не работают.
                      0
                      В условиях зимы-осени (шапка+маска) — псевдоалгоритмы почти не работают.


                      А походка? Кстати, а где можно посмотреть демки по этой теме?
                        0
                        достаточно много информации по запросу «обнаружение походки на изображении».
                        в первых трех запросах есть в том числе постановка задачи для диссертации (похоже, что магистр)
                        есть статья «Методика учета угла направления движения… при изучении… походки»
                    0

                    Ну подобные чудо из подручных средств собирается за месяц. Или вообще покупается

                      0
                      Широкой аудитории алгоритм был представлен в виде сервиса FindFace, который искал людей во Вконтакте по фотографии.

                      А сейчас остались какие-то сервисы такого типа?
                        0

                        Яндекс Поиск по картинкам

                        0
                        А можно немного лекбеза о том как все работает в комплексе?
                        1. Камера выделяет некие критерии (взаимное расположение ключевых точек) и по этим сведениям в центре производится поиск человека
                        2. Камера шлёт картинки на сервер, где и производится обработка?
                        Не может же сама камера хранить у себя всю базу для самостоятельного выявления человека, что попал в поле её зрения, а в центр слать только данные идентифицированного лица.
                          0

                          Можно придумать много разных способов, выбор зависит от бюджета.


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


                          Камеры подключены к хабу, хаб к устройству, которое со своих камер обрабатывает видео и шлет вектора в центр. (сложное обслуживание)


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


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

                          0
                          «так что те, кто на основе старых алгоритмов, бросайте это дело! » — это конечно цифрорабство, человек не идёт, он бежит к обрыву где у края нейросети уже пинками уже помогут сделать последний необратимый шаг
                            0

                            А есть какой-нибудь сервис для изменения лица для фотографий в соц.сетях? Какое-нибудь размытие по точкам

                              0
                              Нет такого понятия как «детекция» в отечественной литературе (детектирование — наиболее близкое по звучанию и по смыслу в латинском языке, но обозначает другое понятие).
                              Обнаружение — вполне нормальное слово, зачем его заменять суррогатом?

                              Изначально (независимо от того. что обнаруживается, определяется, идентифицируется) была разработана общая теория, — см. например. Ван Трис — Теория обнаружения, оценок и модуляции, 1972. Обнаружения сигналов, целей или объектов на изображении/в видеоряде — всего лишь тип параметра.
                                0

                                FaceNet уже года 2-3 как устарел в плане точности. Лучше посмотреть в сторону Deepinsight Insightface и их же детектор лиц Retinaface (писали тут уже в комментариях).
                                К тому же буквально на днях опубликовали обновленную модель предобученную на 500 тыс. уникальных персон и чуть меньше 20 млн. лиц.

                                  0

                                  поправка, 360 тысяч уникальных персон

                                  0
                                  Интересно, как идентификация регулируется законами о персональных данных. Можно ли что-то сделать, если я не хочу, чтобы меня распознавали?

                                  Only users with full accounts can post comments. Log in, please.