Как создать и развернуть рекомендатель на основе обнаружения объектов

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

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

Требования к программному обеспечению

Нам понадобится несколько библиотек для запуска нашей модели. В нашем проекте мы будем использовать Python 3. Мы будем развертывать нашу модель обнаружения объектов и рекомендаций с помощью Flask. Нам понадобится OpenCV для обработки данных изображения. И, наконец, нам нужен TensorFlow для запуска нашей модели обнаружения объектов.

Данные

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

Часть 1: Создание модели для развертывания

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

Получение изображений для маркировки

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

Добавьте ярлыки к изображениям

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

Обучение модели обнаружения объектов

Вы должны выбрать соответствующий алгоритм обнаружения объекта. Здесь мы будем использовать модель YOLO. Мы будем использовать Колаб для обучения нашей модели.

Во-первых, вам нужно запустить блокнот Jupyter в Colab. Вы можете сделать это, щелкнув файл и выбрав «Новый блокнот».

Выберите среду выполнения как «GPU» в раскрывающемся списке «Среда выполнения» в Colab.

Теперь нам нужно смонтировать диск с помощью Colab. Используйте приведенный ниже код в записной книжке для установки. Будет сгенерирован один URL-адрес - щелкните по нему, чтобы проверить процесс подключения.

Затем мы будем использовать приведенный ниже код для загружаемой модели даркнета для обучения нашего детектора объектов. Нам нужно включить GPU и CUDNN для более быстрого обучения модели, а затем сделать нашу (строительную) модель подходящей для GPU.

Теперь, исходя из количества классов, нам нужно внести изменения в конфигурационный файл модели даркнета. Здесь мы используем только один класс, то есть очки. Приведенный ниже код поможет нам внести необходимые изменения в файл конфигурации. Здесь max_batches должно быть max (6000, номер класса * 2000), а значение filter = (classes + 5) * 3, и последнее, что мы можем найти в файле yolov4.cfg, - это «шаги», где шаги должно составлять 80% и 90% от максимальной партии.

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

Теперь нам нужно определить .names, .obj-файл и место, где нам нужно сохранить нашу модель (файл .weight).

Загрузите предварительно натренированные веса.

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

Используйте приведенный ниже код для загрузки и упорядочивания данных. Я сохранил заархивированный файл в «/mydrive/Colab/yolov4/Glasses.rar». Соответственно, вы можете изменить путь в соответствии с расположением вашего заархивированного файла.

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

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

Итак, если вы добрались сюда, ура! Вы сделали большую работу. Вы готовы сдать свою модель в производство.

Преобразование из даркнета в TensorFlow

Для преобразования даркнета в TensorFlow вам необходимо клонировать этот каталог https://github.com/pranjalAI/tensorflow-yolov4-tflite. Вы можете клонировать его в любом месте вашего диска. После клона вам нужно войти в клонированный каталог с помощью командной строки.

Установка необходимых библиотек

Если на вашем компьютере установлена ​​Anaconda, вам необходимо выполнить следующие шаги, чтобы установить все необходимые библиотеки в среде. Это создаст новую среду. Имя среды можно изменить в файле .yml.

# Tensorflow CPU
conda env create -f conda-cpu.yml
conda activate yolov4-cpu
# Tensorflow GPU
conda env create -f conda-gpu.yml
conda activate yolov4-gpu

Если у вас не установлена ​​Anaconda, выполните следующие действия с помощью команды pip. Однако я бы посоветовал использовать Anaconda.

# TensorFlow CPU
pip install -r requirements.txt
# TensorFlow GPU
pip install -r requirements-gpu.txt

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

Введите следующую команду в командной строке.

conda activate yolov4-gpu

Здесь «yolov4-gpu» - имя среды. Вы можете изменить его в файле .yml.

Наконец, вам нужно внести два изменения в вашу клонированную папку «tensorflow-yolov4-tflite».

Сначала скопируйте и вставьте свой собственный файл .weights, который вы использовали для обучения модели YOLO, в папку «data», а затем скопируйте и вставьте свои собственные .names в папку «data / classes /».

Во-вторых, в строке 14 файла «core / config.py» обновите код, чтобы он указывал на ваш собственный файл .names, как показано ниже. Мой собственный файл .names называется obj.names, но ваш может называться иначе.

Вот так! Теперь нам нужна одна строка команды, чтобы код был совместим с TensorFlow.

python save_model.py — weights ./data/your_weight_file.weights — output ./checkpoints/“check_point_name” — input_size 416 — model yolov4

Здесь 416 - это размер изображения, который мы определили в нашем файле конфигурации в файле конфигурации darknet. После выполнения указанной выше команды вы получите файл .pb, который мы будем использовать в нашем веб-приложении.

Часть 2: Создание веб-приложения с помощью Flask

Использование Flask для обслуживания модели TensorFlow

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

После скачивания репозитория необходимо извлечь данные. Там вы получите файл GlassDetectorAndRecommender.py. Это ваш файл Flask, который будет использовать файл .pb для обнаружения объектов в Интернете. Мы использовали технику сопоставления изображений гистограммы в этом файле Flask, чтобы получить рекомендуемые похожие изображения.

Финальная демонстрация

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

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

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

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.