Привет!

Вы когда-нибудь задумывались, как ваше лицо может разблокировать ваш мобильный телефон?

Хорошо!

Это связано с новейшей технологией под названием Распознавание лиц.

Если вам достаточно любопытно, чтобы узнать, как создать его для вас

Продолжить чтение.

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

Что такое распознавание лиц?

Проблема машинного обучения распознавания человека на основе его лица известна как распознавание лица. Это просто подмножество классификации изображений, отвечающее на вопрос «кто этот человек и как его зовут?» на основе черт лица.

Распознавание лиц в интимных зонах может помочь вам улучшить качество жизни различными способами:

  • Дома. Голосовые помощники, системы домашней автоматизации и другие подобные персональные цифровые помощники могут использовать распознавание лиц и искусственный интеллект для настройки взаимодействия и поведения для каждого пользователя.
  • Здравоохранение. Устройства могут предоставлять индивидуальные рекомендации по здоровью или индивидуальное лечение в зависимости от человека, с которым они взаимодействуют.
  • Помощь в проживании: люди с деменцией или болезнью Альцгеймера могут использовать технологию распознавания лиц, чтобы помочь им вспомнить имена своих родственников без необходимости спрашивать неудобно.
  • Образование. Используя распознавание лиц, обучающие голосовые помощники дома или в школе могут узнавать ребенка и общаться по-разному в зависимости от стиля обучения ребенка.
  • Идентификация предков. Распознавание лиц может использоваться на исторических фотографиях для определения родословных и давно потерянных родственников. Даже когда личность человека неизвестна, все системы распознавания лиц способны сопоставлять лица и оценивать сходство лиц.

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

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

Концепции распознавания лиц с использованием глубокого обучения

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

  • Распознавание лиц. Связывание имени или другого ярлыка с лицом. Верификация лица — это задача определить, принадлежат ли две фотографии лица одному и тому же человеку, не зная идентификации каждого из них.
  • Распознавание лиц с закрытым набором: почти все лица, которые система будет просматривать, уже обучены этому. * Распознавание лиц с открытым набором: большинство лиц, с которыми система столкнется, не были обучены этому. Он может только выполнять проверку лица и оценку сходства лица между текущим лицом и предыдущими лицами.
  • Распознавание лиц. Обнаружение присутствия одного или нескольких лиц на изображении.
  • Сверточная нейронная сеть (CNN): тип архитектуры глубокого обучения, который специализируется на проблемах компьютерного зрения.
  • Сиамская сеть: тип нейронной сети, состоящий из двух идентичных и соединенных сетей, которые оценивают изображения попарно. Они пригодятся для работы по сопоставлению изображений.
  • Контрастные потери. Функция потерь, используемая во встраиваемой грани для группировки похожих граней рядом друг с другом и оптимизации их расстояний от разных граней. Когда нужно распознать огромное количество лиц, этот метод особенно эффективен для надежного распознавания лиц.
  • Потеря троек. Функция потерь, используемая, когда единственными доступными обучающими данными являются сходства пар. Каждая обучающая выборка состоит из пары фотографий с единственной информацией о том, похожи они или нет. Triplet Loss, основанный на этих данных, уменьшает расстояние между якорем и позитивным изображением, которые в реальности имеют одинаковую идентичность, при этом максимально увеличивая расстояние между негативным изображением и якорем с другим идентификатором.

Распознавание лиц TensorFlow

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

Вот несколько хороших примеров готовых к использованию предварительно обученных моделей:

  • Keras-vggface: этот пакет распространяет предварительно обученные модели Keras на основе трех различных базовых архитектур: почтенный VGG-16, гибкий ResNet и эффективный SENet. Модели предварительно обучены на наборе данных VGGFace2 и реализуют работу 2015 года по глубокому распознаванию лиц. Код сейчас немного устарел и не поддерживается, но его достаточно легко понять и легко обновить до новых версий TensorFlow.
  • FaceNet: статья Google FaceNet 2015 года реализована в этом популярном проекте, который включает в себя две предварительно обученные модели, одна из которых основана на мощной архитектуре Inception-ResNet-v2, а другая — на эффективной архитектуре SqueezeNet.

В этом руководстве мы начнем с keras-vggface, так как он является базовым и подходит для небольших закрытых систем распознавания лиц, которые мы хотим развернуть в наших домах или других частных помещениях.

Настройка

GitHub — это место, где вы можете получить модель машинного обучения keras-vggface. Установите MTCNN для распознавания лиц. Импортируйте все, что нам нужно.

Загрузить предварительно обученные модели

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

Мы можем обнаружить следующее, когда изучаем сводку каждой модели, загруженные веса, ввод и вывод:

  • VGG-16: эта модель имеет 145 миллионов параметров, файл модели размером 500 МБ и была обучена на наборе данных 2622 человек.
  • ResNet50: он в 3 раза легче с 41 миллионом параметров и моделью на 160 МБ, но при этом может распознавать в 4 раза больше людей (8 631 человек).
  • SENet50: с 43 миллионами параметров, моделью 170 МБ и таким же количеством пользователей (8 631 человек) он эквивалентен ResNet50.

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

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

Модели узнают лицо на невидимой фотографии?

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

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

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

Он точно распознает лицо на фотографии, которую никогда раньше не видел, менее чем за две секунды.

Перенос обучения и точная настройка

Предварительно обученные модели, которые мы наблюдали, были обучены распознавать лица от 2600 до 8600 популярных личностей. Однако только примерно 20% данных в этих моделях связаны с этими 2600–8600 лицами. Остальные 80% информации в этих моделях предназначены для извлечения общих черт лица, которые одинаково хорошо работают на всех 8 миллиардах человеческих лиц.

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

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

Подготовьте свой набор данных

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

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

Крайне важно сгруппировать их все в такой структуре каталогов:

  • Создайте каталог обучения высокого уровня.
  • Имя/метка каждого человека должна быть вложенной папкой.
  • Фотографии лица каждого человека должны быть помещены в отдельную подпапку. Все фотографии должны быть того же размера, что и «model.inputs».
  • Все случайные фотографии должны храниться в одной подпапке, чтобы служить неизвестным или неправильным набором изображений.

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

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

Настройка дополнения данных

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

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

Загрузить предварительно обученную базовую модель

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

Настройка пользовательской модели для трансферного обучения

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

  • Входные изображения. Первое входное изображение такое же, как и в исходной модели.
  • За ними следует стек увеличения данных для генерации вариантов изображения во время обучения.
  • Затем есть предварительно обученная базовая модель, которая представляет собой не что иное, как основные разделы экстрактора исходной модели. Для трансферного обучения индикатор «обучаемый» имеет значение false. Это называется «замораживанием» базовой модели. Мы указываем TensorFlow игнорировать весь этот набор слоев при обучении на свежих данных.
  • Сведение слоя. Этот слой просто сводит все трехмерные сверточные карты из базовой модели в длинный одномерный вектор, поскольку этого требует следующий слой.
  • Слой классификации. Наш замещающий слой классификации является последним. Это уже не размер оригинальной модели 2622 или 8631. Вместо этого мы делаем его того же размера, что и количество людей, которых мы хотим идентифицировать, плюс один для неизвестных и недействительных фотографий.

Обратите внимание, что этой модели нужно обучить только 6147 сетевых весов для новой коллекции лиц, оставив остальную часть базовой модели в покое. Это примерно 0,026% информации, даже не 20%. Тем не менее, он оказывается адекватным.

Обучение пользовательской модели с помощью трансферного обучения

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

Распознавание лиц с помощью пользовательской модели

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

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