В этой статье я представляю приложение последней версии популярного алгоритма глубокого обучения YOLO, то есть YOLOv5, для обнаружения товаров на полке розничного магазина. Это приложение можно использовать для отслеживания инвентаря предметов, просто используя изображения предметов на полке.

Введение

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

Джозеф Редмон и др. первоначально разработанные модели YOLOv1, v2 и v3, которые выполняют обнаружение объектов в реальном времени. YOLO «You Only Look Once» - это современный алгоритм глубокого обучения в реальном времени, используемый для обнаружения, локализации и классификации объектов в изображениях и видео. Этот алгоритм очень быстрый, точный и является передовым в проектах, основанных на обнаружении объектов.

Каждая из версий YOLO продолжала улучшать предыдущую по точности и производительности. Затем появился YOLOv4, разработанный другой командой, что еще больше повысило производительность модели, и, наконец, модель YOLOv5 была представлена ​​Гленном Джохером в июне 2020 года. Эта модель значительно уменьшает размер модели (YOLOv4 в Darknet имел размер 244 МБ, тогда как самая маленькая модель YOLOv5 - 27 МБ) . YOLOv5 также заявляет о более высокой точности и большем количестве кадров в секунду, чем YOLOv4, как показано на графике ниже, взятом с веб-сайта Roboflow.ai.

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

Задача

Чтобы использовать YOLOv5 для рисования ограничивающих рамок над розничными товарами на изображениях, используя набор данных SKU110k.

Набор данных

Для выполнения этой задачи я сначала загрузил набор данных изображений SKU110k по следующей ссылке:

Http://trax-geometry.s3.amazonaws.com/cvpr_challenge/SKU110K_fixed.tar.gz

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

имя_изображения, x1, y1, x2, y2, класс, ширина_изображения, высота_изображения

где x1, y1 - координаты верхнего левого угла ограничивающего прямоугольника, а x2, y2 - нижние правые координаты ограничивающего прямоугольника, остальные параметры не требуют пояснений. Пример параметров изображения train_0.jpg для одного ограничивающего прямоугольника показан ниже. Для каждого изображения есть несколько ограничивающих рамок, по одной рамке для каждого объекта.

train_0.jpg, 208, 537, 422, 814, объект, 3024, 3024

В наборе данных SKU110k у нас есть 2940 изображений в тестовом наборе, 8232 изображения в наборе поездов и 587 изображений в наборе для проверки. Каждое изображение может иметь различное количество объектов, следовательно, различное количество ограничивающих рамок.

Методология

Из набора данных я взял только 998 изображений из обучающего набора и перешел на веб-сайт Roboflow.ai, который предоставляет онлайн-сервис аннотации изображений в различных форматах, включая формат, поддерживаемый YOLOv5. Причина выбора только 998 изображений из обучающего набора заключается в том, что служба аннотации изображений Roboflow.ai бесплатна только для первых 1000 изображений.

Предварительная обработка

Предварительная обработка изображений включает изменение их размера до 416x416x3. Это делается на платформе Roboflow's. Аннотированное изображение с измененным размером показано на рисунке ниже:

Автоматические аннотации

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

Создание данных

Roboflow также дает возможность генерировать набор данных на основе определяемого пользователем разделения. Я использовал сплит наборов обучающих-проверочных тестов 70–20–10. После создания данных в Roboflow мы получаем исходные изображения, а также все местоположения ограничивающих рамок для всех аннотированных объектов в отдельном текстовом файле для каждого изображения, что удобно.

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

Используемое оборудование

Модель обучалась на ноутбуке Google Colab Pro с видеокартой Tesla P100 16GB. Он стоит 9,99 доллара и годится для использования в течение месяца. Также можно использовать блокнот Google Colab, который является бесплатным, но время сеанса использования ограничено.

Код

Я рекомендую использовать записную книжку Google Colab, предоставленную Roboflow.ai по адресу
www.models.roboflow.ai/object-detection/yolov5
Изначально он обучен для набора данных COCO, но может быть настроен для пользовательских задач. что я и сделал. Я начал с клонирования YOLOv5 и установки зависимостей, упомянутых в файле requirements.txt. Кроме того, модель построена для Pytorch, поэтому я импортирую ее.

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

Этот файл сообщает модели путь расположения образов обучающего и проверочного набора, а также количество классов и имена классов. Для этой задачи количество классов равно «1», а имя класса - «объект», поскольку мы только хотим предсказать ограничивающие рамки. Файл data.yaml можно увидеть ниже:

Сетевая архитектура

Теперь давайте определим сетевую архитектуру для YOLOv5. Это та же архитектура, которую автор Гленн Джохер использовал для обучения работе с набором данных COCO. В сети ничего не менял. Тем не менее, потребовалось несколько настроек, чтобы изменить размер, цвет ограничивающей рамки, а также удалить метки, иначе метки будут мешать изображению из-за большого количества прямоугольников. Эти настройки были сделаны в файлах detect.py и utils.py. Сеть сохраняется как файл custom_yolov5.yaml.

Обучение

Теперь приступаю к тренировочному процессу. Я определил размер изображения (img) как 416x416, размер пакета 32, и модель запускается для 300 эпох. Если мы не определяем веса, они инициализируются случайным образом.

Обучение на графическом процессоре Tesla P100 16 ГБ, предоставленном Google Colab Pro, заняло 4 часа 37 минут. После завершения обучения веса модели сохраняются на Google Диске как last_yolov5_results.pt.

Наблюдения

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

Следующие 3 параметра обычно используются для задач обнаружения объектов:

· GIoU - это обобщенное пересечение по объединению, которое показывает, насколько близка к истинной действительности наша ограничивающая рамка.

· Объективность показывает вероятность того, что объект существует на изображении. Здесь она используется как функция потерь.

· mAP - это средняя средняя точность, показывающая, насколько верны в среднем наши прогнозы по ограничивающей рамке. Это область под кривой кривой точности-отзыва.

Видно, что потеря обобщенного пересечения по объединению (GIoU) ​​и потеря объектности уменьшаются как для обучения, так и для проверки. Средняя средняя точность (mAP), однако, составляет 0,7 для порогового значения IoU ограничивающего прямоугольника, равного 0,5. Напоминание составляет 0,8, как показано ниже:

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

Полученные результаты

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

Время вывода составило всего 0,009 секунды, а файл весов оказался всего 13,9 МБ.

Ссылка на репозиторий

Следующая ссылка содержит репозиторий проекта. Убедитесь, что вы скопировали код из записной книжки jupyter в Google Colab в том виде, в каком он был там изначально написан.

Https://github.com/shayanalibhatti/Retail-Store-Item-Detection-using-YOLOv5

Файлы utils.py и detect.py в репозитории настроены для удаления меток объектов и создания тонких зеленых ограничивающих рамок.

Заключение

Не говоря уже о спорах о названиях, YOLOv5 работает хорошо и может быть настроен в соответствии с нашими потребностями. Однако обучение модели может потребовать значительных ресурсов графического процессора и времени. Рекомендуется использовать как минимум Google Colab с графическим процессором 16 ГБ или, предпочтительно, TPU, чтобы ускорить процесс обучения большого набора данных.

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