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

Кто-то вспомнил о сериале «Интересное» - научно-фантастической криминальной драме, которая на самом деле основана на искусственном интеллекте. Это заинтриговало меня, и мне захотелось узнать больше.

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

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

Через несколько дней я наткнулся на интересный проект под названием Facenet. Этот проект посвящен распознаванию лиц - задаче компьютерного зрения по идентификации и проверке личности человека по фотографии его лица.

Ознакомившись с деталями этого проекта, я смог связать его с сериалом "Интересные люди". Я попытался построить то же самое, но добавив в проект свое собственное изображение интересующего человека.

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

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

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

Чтобы построить модель машинного обучения, нам нужны данные, и они должны пройти следующие шаги:

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

А теперь пора погрузиться в практическую деятельность 🙃

Я загрузил проект Facenet в свою учетную запись Github, чтобы проводить свои эксперименты. Кроме того, я поместил его в контейнер с помощью Docker для более быстрого запуска и упрощения управления. Эти два шага, конечно, необязательны, но я обнаружил, что это очень удобно для меня.

Как только это будет сделано, вы тоже можете приступить к созданию своей версии этого приложения:

Настройка рабочей среды

Убедитесь, что на вашем компьютере установлены Git и Docker.

Откройте терминал и клонируйте проект в свое рабочее пространство.

$ git clone https://github.com/rajivmanivannan/facenet
$ cd facenet

Используйте приведенную ниже команду docker compose для создания образа докера.

$ docker-compose build

Чтобы запустить докеризованное приложение, выполните следующую команду

$ docker-compose run --rm cli bash

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

$ mkdir models mkdir -p datasets/lfw/raw mkdir -p datasets/my_dataset/{train,test}

Шаг 1. Сбор данных и создание набора данных

Я собрал изображения себя и одной знаменитости из Интернета. Затем я организовал его в две отдельные папки. В каждой папке было около 15 изображений. Затем я переместил папки по следующему пути / app / datasets / lfw / raw.

В этом проекте они использовали многозадачные каскадные сверточные нейронные сети (MTCNN) для обнаружения лица на изображении и кадрирования его в изображения размером 160x160. Выровненные и обрезанные изображения (набор данных) будут храниться в / datasets / lfw / lfw_mtcnnpy_160. Чтобы создать набор данных, выполните следующую команду.

for N in {1..4}; do python src/align/align_dataset_mtcnn.py /app/datasets/lfw/raw /app/datasets/lfw/lfw_mtcnnpy_160 --image_size 160 --margin 32 --random_order; done

Шаг 2. Обучение модели машинного обучения

Нам нужно разделить набор данных - 80% для обучения и 20% для тестирования. Я взял 3 изображения в качестве тестового набора из 15 изображений и отложил в сторону. Затем поместил набор данных в папку train и test по следующему пути / datasets / my_dataset / train.

А затем загрузите предварительно обученную модель 20180402–114759, распакуйте ее в папку моделей в проекте. Эта модель была обучена на наборе данных VGGFace2, состоящем из ~ 3,3 млн лиц и ~ 9000 идентификаторов (классов) .

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

python src/classifier.py TRAIN ./datasets/my_dataset/train/ ./models/20180402-114759.pb ./models/my_classifier.pb --batch_size 1000

После завершения обучения он создаст новую модель с нашим набором данных с именем my_classifer.pb. Вы можете найти в пути / models.

Шаг 3. Протестируйте модель машинного обучения с помощью тестового набора данных

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

python src/classifier.py CLASSIFY ./datasets/my_dataset/test/ ./models/20180402-114759.pb ./models/my_classifier.pb --batch_size 1000

Вывод

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

Кредиты:

Проект Дэвида Сэндберга Распознавание лиц с помощью Tensorflow

Арвинд Сукумар - Спасибо за наставничество с первого дня.

Джахангир Анвари - Спасибо за помощь в создании контейнеров для этого проекта.

Пожалуйста, если вам понравился этот пост! Сообщите мне свои мысли в 💬 ниже 👇🏻