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

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

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

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

Демо

Но для начала пара демонстраций.

Обнаружение нескольких объектов на фотографиях…

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

Обнаружение нескольких объектов в видео…

Распознавание лиц на фото и видео

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

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

Большая картинка

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

Детектор множественных объектов - это компонент, который использует глубокое обучение, в частности, предварительно обученную глубокую сверточную нейронную сеть YOLO - для определения объектов и их местоположений на фото или видео. Для этого в системе используется фреймворк DarkFlow - реализация / порт TensorFlow от YOLO. У конвейера может быть несколько детекторов объектов, каждый из которых обучен идентифицировать разные наборы объектов. Предварительно обученная модель способна идентифицировать 80 типов объектов, перечисленных в этой статье (стр.14). Поскольку расположение лиц не указывается явно, системе нужен другой способ обнаружения лиц.

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

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

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

Кроме того, есть несколько компонентов outputter. Один из них генерирует отчеты в формате JSON, которые затем могут быть отправлены в базу данных или систему текстового поиска, такую ​​как Solr, формируя основу для многофункциональной системы запросов. Другие создают аннотированные изображения и видео.

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

Обзор шагов

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

Выберите ваше оборудование

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

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

RAM: если конвейер включает в себя детектор множественных объектов и развернут на 8-ядерном компьютере, он создает 8 различных детекторов множественных объектов, каждый из которых загружает свою собственную модель с большим объемом памяти. Если конвейер включает в себя два детектора объектов, мы говорим о 16 детекторах, каждый с ассоциированной памятью. Как правило, выбирайте экземпляры с большим объемом оперативной памяти (не менее 8 ГБ).

Хранение: программное обеспечение ожидает, что фотографии и видео будут в локальной файловой системе, и не может читать их из удаленных источников. Это означает, что на машине должно быть достаточно места для хранения не только для коллекции фотографий, которую вы хотите добыть, но и для хранения настроенных выходов конвейера, возможно, включая текстовые отчеты, аннотированные фотографии, аннотированные видеокадры и аннотированные видео (аннотированные видеокадры особенно тяжелы. хранилище - например, одно трехминутное видео с частотой 30 кадров в секунду дает 5400 аннотированных кадров, а если каждый кадр представляет собой изображение JPEG размером 50 КБ, общий объем хранилища составляет 260 МБ).

Я рекомендую начать с плана Linode 8GB для обычного конвейера с одним глубоким детектором или с высокой памяти Linode 60GB, если их несколько. Следуйте статьям Начало работы и Защита вашего сервера - последнее особенно важно, потому что вы будете загружать свои личные фотографии и видео на общедоступный сервер и не должны рисковать их кражей или неправомерным использованием.

Установить Docker

Затем установите Docker на эти машины. Прочтите раздел Установить Docker в документации проекта, чтобы получить подробные инструкции.

Но почему именно Docker? В этом проекте он используется как инсталлятор, не зависящий от дистрибутива. Поскольку это программное обеспечение зависит от многих низкоуровневых собственных библиотек, предварительно созданный образ Docker со всеми двоичными файлами и зависимостями, установленный в предсказуемых местах с фиксированными версиями в фиксированной среде ОС, означает, что он «просто работает» везде, где работает сам Docker (в том числе в Windows и MacOS).

Я создал общедоступные образы Docker для этого программного обеспечения. См. Пошаговые инструкции в разделе Загрузка образов Docker. Поскольку машины Linode обычно являются процессорами Haswell, вам следует загрузить оптимизированный образ deepvisualminer-haswell, содержащий оптимизированную сборку TensorFlow. Если вы хотите запустить его на своем ноутбуке или где-либо еще, начните с другого образа deepvisualminer - он наиболее совместим и должен работать на архитектурах с более низким процессором.

Также возможно создать эти образы с нуля самостоятельно, если вы не хотите использовать наши общедоступные образы или хотите развернуть программное обеспечение на других архитектурах ЦП, таких как ARM. См. Подробности в разделе Создание собственных образов Docker.

После загрузки или сборки запустите быстрый тест образов на целевой машине, на которой вы хотите запустить программное обеспечение. См. Тестовые образы Docker, чтобы узнать, как это сделать.

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

Загрузите свои фото и видео

Пришло время перенести ваши коллекции фотографий, где бы они ни находились, на целевые машины ...

Для передачи с локального ноутбука на ваш Linode эффективный способ - сжать или TAR вашу коллекцию фотографий и передать ее через rsync / SCP / SFTP.

Для загрузки с Google Диска установите инструмент командной строки, например gdrive на целевой компьютер, и загрузите свои коллекции прямо на целевую машину.

Обучите распознаватель лиц

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

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

Сводка шагов описана здесь, а подробные команды и предостережения - в разделе Обучить распознаватель лиц:

  • Просмотрите свои коллекции фотографий и выберите подмножество фотографий, содержащих всех людей, лица которых вы хотите, чтобы система распознала.
  • Части лица людей должны быть вырезаны из этих изображений с помощью графического редактора, такого как GIMP или Photoshop. Люди могут быть любого вида, но это программное обеспечение имеет готовую поддержку только для лиц людей и кошек, в то время как для поддержки других видов требуется дополнительное обучение детектора лиц.
  • Если этот этап кадрирования кажется трудоемким, то это потому, что это действительно так! Будьте готовы потратить на это хотя бы несколько часов. Вот коллаж моих усилий:

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

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

Настроить систему

Теперь пора настроить один или несколько конвейеров.

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

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

Если вы хотите изменить / включить / отключить какой-либо из форматов вывода, вы должны создать свой собственный файл конвейера.

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

Начать майнинг

Наконец, все готово для реального визуального анализа.

См. Запуск Visual Mining для получения информации о синтаксисе команд и примерах.

Постобработка

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

Текстовые отчеты в формате JSON. См. Пример отчета для фото и пример отчета для видео.

Затем они могут быть перенаправлены непосредственно в базу данных с поддержкой JSON, такую ​​как PostgreSQL или MongoDB, или перенаправлены в систему текстового поиска, такую ​​как Solr или ElasticSearch.

Представление

Коллекция фотографий размером 580 МБ с включенными всеми компонентами конвейера, включая детектор множественных объектов с глубоким обучением, детектор человеческого лица, детектор кошачьего лица, распознаватель кошачьего лица, средство записи отчетов JSON, Создание аннотированных фото, аннотированных видео и даже аннотированных видеокадров - потребовалось около 2 часов на машине Linode 8GB с 4 ядрами и 8GB RAM с использованием оптимизированного изображения deepvisualminer-haswell. Избавление от аннотированных писателей и сохранение только автора отчетов JSON и остальных должно занять около 1 часа.

ОЗУ, ЦП и нагрузка оставались в пределах установленных ограничений на всех этапах обнаружения и распознавания.

Детектор глубины очень работает даже на центральном процессоре. Фактически, это главная особенность YOLO - то, что он может обнаруживать несколько объектов в режиме реального времени.

На 4800-кадровом видео - с конвейером обнаружения нескольких объектов, определения лица кошки, распознавания лица кошки и отчетности JSON - контейнер deepvisualminer-haswell, содержащий оптимизированную версию TensorFlow, выполнил свою работу. за 59 минут, что составляет половину времени, затраченного на неоптимизированный контейнер deepvisualminer, который занял 110 минут. Настоятельно рекомендуется использовать оптимизированное изображение.

Хотя обучение нейронной сети глубокого обучения для повышения точности и эффективности обучения на Linode - это то, что меня интересует, это достаточно сложно, чтобы оправдать собственный мини-проект. Я решил пока оставить тренировки вне рамок данного исследования.

Повышение точности

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

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

Другие приложения

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

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

Кредиты

Спасибо всем исследователям и разработчикам за их работу с открытым исходным кодом, которая сделала такой инструмент возможным:

  1. Джозеф Редмон и Али Фархад за детектор объектов в реальном времени YOLO (https://pjreddie.com/darknet/yolo/)
    Статья:

@article {redmon2016yolo9000,
title = {YOLO9000: Better, Faster, Stronger},
author = {Редмон, Джозеф и Фархади, Али},
journal = {arXiv preprint arXiv: 1612.08242} ,
год = {2016}
}

2. Трин Хоанг Триу для проекта Darkflow (https://github.com/thtrieu/darkflow)

3. Филипп Вагнер для компонентов распознавания лиц OpenCV (http://bytefish.de)

4. Проект OpenCV и все его участники (http://opencv.org/)

Благодарим Дэйва Роша и Кейта Крейга за предоставленную инфраструктуру Linode и предложения, которые сделали эту статью возможной.

Обо мне: я консультант по программному обеспечению и архитектор, специализирующийся на больших данных, науке о данных и машинном обучении, с 14-летним опытом. Я руковожу Pathbreak Consulting, которая предоставляет консалтинговые услуги в этих областях для стартапов и других предприятий. Я веду блог здесь и на GitHub. Вы можете связаться со мной через мой сайт или LinkedIn.

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