Может ли обученная машина отличить однояйцевых близнецов лучше, чем человек?

Опубликовано: 24/01/2021 Время на прочтение: 13 минут

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

Когда мой тождественны Twi н сыновья родились 13 лет назад, моя жена и я имел относительно легкое время , говоря Николас и Александр друг от друга. После 8 недель наблюдения за их ростом в отделении интенсивной терапии новорожденных (NICU) Калифорнийского Тихоокеанского медицинского центра в Сан-Франциско мы узнали, как сопоставить их индивидуальное поведение с именами на их инкубаторах. Мы получили ранний урок из того, что узнают большинство родителей однояйцевых близнецов: то, кем мы являемся, определяется не только тем, как мы выглядим, но и различиями в том, как мы ходим, говорим и во множестве манер, которые мы используем при взаимодействии с миром. . Обработка этого обширного набора данных позволяет людям мгновенно узнавать тех, кого мы знаем, включая однояйцевых близнецов. Но поскольку о распознавании лиц по-прежнему говорят в новостях как о серебряной пуле, подобной Матрице, во всем, от раскрытия преступлений до помощи нам в покупках, я задавался вопросом, насколько хорошо машины узнают, кто мы на самом деле, когда набор данных представляет лишь незначительные различия. как в случае с однояйцевыми близнецами.

Погружение в отличия

Когда мои сыновья подросли, мы подробно говорили об уникальной природе их генетической структуры — о том, что они, по сути, являются клонами одного и того же оплодотворенного яйца (примечание: это имеет очень высокий фактор «крутизны», поскольку они большие поклонники армии клонов в «Звездных войнах»). Для них совершенно очевидно, что они — идентичные люди, созданные по одной и той же схеме. Конечно, между ними есть различия, и когда они всплывают, они могут их сбить с толку, иногда меня, и — я предсказываю — машины тоже. Идентичная ДНК — это одно, но экспрессия генов и влияние окружающей среды играют большую роль в том, как мы меняемся и развиваемся с течением времени. Например, я недавно купил новый сотовый телефон со считывателем отпечатков пальцев и спросил своих сыновей, не хотят ли они провести небольшой эксперимент. Я хотел бы, чтобы один сын загрузил свой отпечаток пальца в телефон, а второй попытался бы его разблокировать. Не сработало! Оказывается, множество факторов окружающей среды, только один из которых — гены, вызывают образование отпечатков пальцев в утробе матери, поэтому у близнецов обычно разные отпечатки пальцев (подробнее).

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

Следующее ниже будет отчасти учебным пособием (для всех, кто хочет получить базовую настройку среды машинного обучения распознавания лиц дома) и отчасти экспериментом. Перейдите к РЕЗУЛЬТАТАМ и ЗАКЛЮЧЕНИЮ, если вы просто хотите увидеть, как машина опознала близнецов.

НАСТРОИТЬ

Для этого проекта я хотел построить самую дешевую компьютерную систему, которая была способна запускать все программное обеспечение, необходимое для выполнения и обучения моделей машинного обучения и распознавания лиц. Я остановился на Raspberry Pi из-за его чрезвычайной экономической эффективности, поддержки периферийных устройств и того факта, что он способен запускать стандартный дистрибутив Linux со всеми инструментами, необходимыми для компиляции программного обеспечения.

У меня уже было несколько Raspberry Pis, которые использовались для других проектов, поэтому я протестировал все три, чтобы увидеть, какие из них лучше всего подходят для этого приложения. В то время как Pi Zero действительно работал, он был действительно медленным, когда анализ кадров видеопотока и компиляция всего необходимого программного обеспечения занимали более 48 часов (да, 2 дня для компиляции программного обеспечения). Для всех, кто хочет запустить аналогичную среду, я определенно рекомендую Pi 4b (модель 8 ГБ) из-за более быстрого процессора, нескольких ядер и расширенной памяти. Детали высокого уровня и форм-фактор трех протестированных нами Pis показаны ниже. Остальная часть этого процесса настройки предполагает использование Pi 4b (8 ГБ).

+ ———— + ————— + —————— + — ————— +
| | Pi Zero W | Pi 3b + | Pi 4b (8 ГБ) |
+ ———— + ————— + —————— + — ————— +
| Стоимость | 10 долларов | $ 35 | 75 долларов |
| Процессор | 1 ГГц (1 ядро) | 1,4 ГГц (4 ядра) | 1,5 ГГц (4 ядра) |
| RAM | 512 МБ | 1 ГБ | 8 ГБ |
+ ———— + ————— + —————— + — ————— +
Pi Zero, Pi 3b + и Pi 4b — карандаш для масштабирования.

Также для этого проекта необходима веб-камера. У меня уже была веб-камера Logitech USB, которая хорошо работала без установки драйверов. Скорее всего, подойдет любая современная веб-камера Logitech или аналогичная. Если вы планируете использовать модуль камеры Raspberry Pi, то проверенное ниже приложение Python необходимо будет слегка настроить, чтобы распознать и использовать его (отправьте PR, если вы хотите добавить эту опцию).

НАСТРОЙКА: Шаг 1

Первым шагом в настройке Pi является установка ОС Raspberry Pi на карту micro SD и выполнение некоторых базовых настроек. Для этого загрузите и установите имидж-сканер Raspberry Pi на свою рабочую станцию. После установки вставьте карту micro SD (обычно с помощью адаптера), запустите имидж-сканер, выберите свою ОС и SD-карту и выберите «Запись». В качестве ОС выберите ОС Raspberry PI (32-разрядная версия) — это порт Debian Linux, в котором есть все необходимое для настройки среды машинного обучения. После того, как SD-карта была записана и проверена, не удаляйте ее, прежде чем вставлять ее обратно в Pi, необходимо выполнить три дополнительных настройки: настройка WiFi, SSH и вывода видео.

  • WiFi : когда Pi запущен, он должен быть подключен к локальной сети, поэтому нам нужно указать ему, к какой сети Wi-Fi присоединиться. Создайте файл с именем wpa_supplicant.conf со следующим содержимым и поместите его на верхний уровень SD-карты. Убедитесь, что файл отформатирован как обычный текст и имеет расширение .conf. Перед сохранением файла добавьте двухбуквенный код страны, соответствующий вашей географии, а также SSID и PSK для вашей сети Wi-Fi (оставьте двойные кавычки).

ctrl_interface = DIR = / var / run / wpa_supplicant GROUP = netdev
update_config = 1
country = <Вставьте здесь двухбуквенный код страны ISO 3166-1>
network = {
ssid = «<Имя вашей беспроводной локальной сети>«
psk = «<Пароль для вашей беспроводной локальной сети>«
}

  • SSH : поскольку мы настроим Pi для работы без монитора (без монитора), нам нужен способ подключения к нему для управления и настройки — для этого мы будем использовать SSH. Чтобы включить демон SSH в Linux и запустить его автоматически, поместите файл с именем ssh без содержимого и без расширения на верхний уровень SD-карты.
  • Видео : мы будем загружать Pi без подключенного монитора, но мы все еще хотим, чтобы видео было включено, когда мы дистанционно управляем им, поэтому нам нужно заставить дисплей HDMI быть активным, даже если он не обнаружен. Отредактируйте файл config.txt на верхнем уровне SD-карты и раскомментируйте строку hdmi_force_hotplut = 1.

Теперь извлеките карту micro SD, вставьте ее в Pi, подключите к источнику питания и включите. Примерно через одну минуту Pi должен полностью загрузиться и должен быть подключен к вашей сети Wi-Fi. Проверьте свой WiFi-роутер, чтобы узнать IP-адрес Pi.

Теперь убедитесь, что вы можете подключиться к Pi, открыв терминал (на Mac) или используя Putty (в Windows) и SSH для IP-адреса в качестве пользователя pi, который по умолчанию имеет пароль raspberry.

НАСТРОЙКА: Шаг 2

Второй шаг в процессе установки — установка и компиляция всего необходимого программного обеспечения. Для выполнения задачи распознавания лиц я решил использовать OpenCV (Open Source Computer Vision Library) и Dlib. OpenCV и Dlib имеют множество оптимизированных алгоритмов, включая распознавание лиц, широко используются в промышленности и академических кругах, пользуются большим уважением и поддержкой, а также имеют интерфейсы для языка программирования Python, которые будут использоваться для управления программой обучения и распознавания моделей. В Интернете есть несколько примеров установки OpenCV и Dlib на Raspberry Pi, но я не смог найти ничего простого и всеобъемлющего, поэтому я создал простую оболочку для установки всего необходимого программного обеспечения и для компиляции OpenCV и Исходный код dlib. Чтобы загрузить и запустить эту программу-оболочку, выполните следующие действия:

  1. Подключитесь к Pi через SSH как пользователь pi и убедитесь, что вы находитесь в домашнем каталоге пользователя pi: cd ~
  2. Клонируйте копию нашего репозитория распознавания лиц Raspberry Pi на Github: git clone https://github.com/tomalessi/pi-facial-recognition.git
  3. Выполните сценарий установки (это займет примерно 1 час): pi-facial-распознавание / pi-setup.sh

НАСТРОЙКА: Шаг 3

Теперь Pi готов делать фотографии и обучать модели распознавания лиц. Чтобы это работало, нам нужна оконная среда на Pi, поэтому мы подключимся к ней через VNC Viewer. Вам нужно будет включить сервер VNC на Pi и загрузить клиент на свою рабочую станцию, с которой вы будете подключаться. Выполните следующие шаги, чтобы заставить это работать:

  1. Настройка Pi : SSH к PI, выполните команду sudo raspi-config, прокрутите вниз до параметров интерфейса → VNC и включите его. После включения вам потребуется перезагрузка.
  2. Настройка рабочей станции : загрузите и установите VNC Viewer для своей платформы с RealVNC (бесплатная загрузка). После установки настройте новое соединение от VNC Viewer к Pi, используя его IP-адрес, и убедитесь, что вы можете войти в систему. После успешного входа в систему вы должны увидеть фон ОС Raspberry Pi.

РАСПОЗНАВАНИЕ ЛИЦА

Процесс распознавания лиц состоит из трех этапов: фотографирования, обучения модели и последующего анализа видео в реальном времени. Все три задачи могут быть выполнены с помощью программы Python face-req.py, которая была извлечена из нашего репозитория github выше (примечание: это первая ревизия без обработки ошибок или функций — отправьте PR, если вы хотите, чтобы мы улучшили Это). Шаги по фотографированию, обучению модели и анализу видео показаны ниже. Все три предполагают, что вы вошли в Pi через VNC, и у вас открыто окно терминала.

  1. Сделайте фотографии, выполнив следующую команду и нажав пробел, как только вы увидите живое видео: python pi-facial-распознавание / face-req.py -c photo -n Tom Продолжайте фотографировать других людей, заменив аргумент -n другим имя. Чтобы выйти, нажмите ctrl + c в окне терминала.
  2. Обучите модель: python pi-распознавание лиц / face-req.py -c train. Анализ каждой фотографии с последующей сериализацией результатов для использования при анализе видео займет около 10 секунд.
  3. Проанализируйте видео и примените модель распознавания лиц: python pi-распознавание лиц / face-req.py -c analysis. Примерно через десять секунд должна начаться прямая трансляция видео. Любые распознанные лица будут помечены именем этого человека, в противном случае лица будут помечены как нераспознанные. Нажмите q, чтобы выйти.
  4. Чтобы очистить среду и начать все заново, выполните следующее: python pi-facial-распознавание / face-req.py -c clean

ПОЛУЧЕННЫЕ РЕЗУЛЬТАТЫ

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

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

РЕЗУЛЬТАТЫ: Тест 1

Тест 1 был я и Александр. Машина правильно опознала нас обоих.

РЕЗУЛЬТАТЫ: Тест 2

Тест 2 был я и Николас. Машина правильно опознала нас обоих. В этот момент я начал думать, что ошибался — может быть, машина все-таки выиграет.

РЕЗУЛЬТАТЫ: Тест 3

Тест 3 был большим испытанием — мы все трое вместе. Машинка вышла из строя! Очевидно, что нет двух версий Николаса. Мы обнаружили, что если дети немного передвигались, идентификация переключалась взад и вперед, но редко машина могла правильно идентифицировать обоих близнецов одновременно. По подсчетам, примерно в 5% случаев он правильно опознал и близнецов, и меня одновременно.

РЕЗУЛЬТАТЫ: Тест 4.

Я хотел посмотреть, насколько хорошо работает модель машинного обучения на фотографии близнецов, которым было 10 лет (в то время им было 3 года) — фотография была поднесена к камере. Я должен отдать должное машине, она правильно опознала Николаса на фотографии (в первый раз), но не Александра. Я немного изменил ориентацию и расстояние фотографии от камеры, и затем она неправильно опознала Александра и не смогла опознать Николаса. Тем не менее, впечатляет, потому что лица детей с тех пор значительно изменились.

Александр слева, Николай справа Александр слева, Николай справа

РЕЗУЛЬТАТЫ: Тест 5.

Я попробовал немного более новое, цветное фото (детям, наверное, 4 года), и машина снова вышла из строя. Он неправильно идентифицировал Николаса как детей.

РЕЗУЛЬТАТЫ: Тест 6.

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

Примечание: даже на статичной фотографии 12-летней давности мне и моей жене очень легко сразу идентифицировать близнецов.

Александр, Том, Николас (около 2009 г.)

ВЫВОДЫ

Первый вывод здесь очевиден. Тот факт, что можно создать полнофункциональную компьютерную систему, способную запускать современные алгоритмы распознавания лиц и машинного обучения, за 75 долларов впечатляет (10 долларов, если вы не против, чтобы это было немного медленно). Если на мгновение отложить в сторону более сложную задачу по идентификации близнецов, машина на 100% успешно распознала не-близнецов по прямой видеотрансляции. Каждый не-близнец, на котором была обучена система, дал 100% успешную идентификацию (мы провели другие тесты, не связанные с двойником, которые здесь не показаны). В то же время, как профессионалу в области конфиденциальности, это заставляет меня задуматься. Эта технология мощная, очень доступная и, вероятно, будет развернута там, где мы не ожидаем, поскольку мы ведем нашу повседневную жизнь — мы должны гарантировать, что технология не используется неправильно.

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

Наконец, что наиболее важно, я заметил, что машинам трудно идентифицировать однояйцевых близнецов, даже тех, у которых есть заметные различия, как у моих детей. Система определенно боролась, особенно когда один из близнецов двигался в кадре видео — это часто приводило к неправильному переключению идентификации. Из этих простых тестов мы должны сделать вывод, что люди намного лучше идентифицируют других людей, чем машины (на данный момент). В этом нет ничего удивительного, поскольку мы развивались и совершенствовали свои чувства в течение 6 миллионов лет. Я не могу сказать вам, почему я могу легко отличить своих детей, я просто знаю, что это очень легко. Машины со временем догонят, но не сегодня.

ЧТО ДАЛЬШЕ?

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

Чтобы повысить точность системы, я хотел бы попробовать несколько различных методов распознавания лиц, возможно, используя сверточную нейронную сеть (CNN), которую поддерживает Dlib (хотя Raspberry Pi ограничен своей вычислительной мощностью), или заставив Pi делать вызовы к общедоступным сервисам в GCP, AWS или Azure для распознавания лиц.

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



прокрутка вверх