Начнем с самого простого вопроса.

Что такое глубокое обучение?

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

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

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

Давайте немного поговорим о вложениях лиц. Итак, что такое вложение лица? Каждое лицо компактно представлено 128-мерным байтовым вектором. Почему 128, а не 256 или 64? 128 выбрано, потому что, согласно статье [FaceNet], они проводили эксперименты с этими размерами, и ниже приведен результат.

Вышеуказанные различия в производительности статистически не значимы. Поэтому они выбрали 128. Однако возможно, что более высокое измерение требует большего обучения для достижения той же точности. Какие значения присутствуют в массиве встраивания 128D? Он содержит значения с плавающей запятой [0,03861399, -0,04976186,…, 0,09530648 -0,05199577].

Давайте посмотрим, как на самом деле выглядят числа.

Над каждым изображением находится изображение размером 8x16 пикселей, поэтому оно имеет в общей сложности 128 измерений, каждое из которых содержит значение одного конкретного пикселя. Вы можете немного отличить FaceID0 от FaceID1. Ниже показано представление 128D {высокой размерности} в 2D-измерении с использованием результата PCA (анализа основных компонентов), который фактически используется для уменьшения размерности набора данных. PCA использует собственные значения и собственные векторы матрицы данных. Эти собственные векторы ковариационной матрицы обладают тем свойством, что они указывают вдоль основных направлений изменения данных.

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

Давайте исследуем с помощью t-SNE (t-распределенные стохастические соседние объекты) трехмерное представление тех же вложений. t-SNE использует вероятностный подход вместо математического метода.

Сказав так много о встраивании лиц, давайте перейдем к созданию API

Интерфейс прикладных программ (API) - это набор процедур, протоколов и инструментов для создания программных приложений. По сути, API определяет, как должны взаимодействовать программные компоненты. RESTful API - это программный интерфейс приложения (API), который использует HTTP-запросы для данных GET, PUT, POST и DELETE. REST - это архитектурный стиль, REST - это RE презентационный S tate T ransfer. Это означает, что при вызове RESTful API сервер передает клиенту представление состояния запрошенного ресурса.

Есть несколько ключевых вариантов запроса REST API:

  • GET - наиболее распространенный вариант, возвращает некоторые данные из API в зависимости от конечной точки, которую вы посещаете, и любых предоставленных вами параметров.
  • POST - создает новую запись, которая добавляется в базу данных.
  • PUT - ищет запись по указанному вами URI. Если он существует, обновите существующую запись. Если нет, создайте новую запись
  • DELETE - удаляет запись по заданному URI
  • PATCH - обновить отдельные поля записи

Почему я выбрал Django REST Framework?

Потому что создавать API в Django так просто! DRF делает сериализацию очень простой!

Вот небольшой проблеск наследования представления DRF

Для получения более подробной информации ознакомьтесь с проектом на GitHub, ссылка на проект: https://github.com/pymit/Rekognition