Наука о данных в реальном мире
Как YOLOv5 разрешил двусмысленность, с которой столкнулся YOLOv3
Надежное обнаружение индийских номерных знаков с помощью YOLOv5
Для тех, кто не знает, новая версия YOLO (You Only Look Once) уже здесь, а именно YOLO v5. Большое спасибо Ultralytics за создание этого репозитория.
Проблема с YOLOv3
Вы только посмотрите один раз (YOLO) - это современная система обнаружения объектов в реальном времени. На Pascal Titan X он обрабатывает изображения со скоростью 30 кадров в секунду и имеет карту памяти 57,9% на COCO test-dev.
YOLOv3 работает очень быстро и точно. В MAP, измеренном на 0,5 IOU, YOLOv3 находится на одном уровне с Focal Loss, но примерно в 4 раза быстрее. Более того, вы можете легко найти компромисс между скоростью и точностью, просто изменив размер модели, без переобучения!
У YOLOv3 есть проблема, несмотря на то, что он настолько точен, но предвзят. Смещение в сторону размера объекта на изображении. Если во время обучения он сталкивается с более крупными объектами, он не может точно обнаружить тот же объект меньшего масштаба.
YOLOv3 обнаруживает особенности на изображениях и узнает, как распознавать объекты с помощью этой информации. Слои около начала, обнаруживающие действительно простые элементы, такие как края и более глубокие слои, могут обнаруживать более сложные элементы, такие как глаза, носы или все лицо. Затем он использует все эти функции, которым он научился, чтобы сделать окончательный прогноз. В этом и заключаются недостатки этой системы - в CNN нет пространства, которое используется где-либо, а функция объединения, используемая для соединения слоев, оказывается неэффективной.
YOLOv5
YOLOv5 состоит из трех частей:
- Модель Backbone
- Модель головы
- Модель шеи
Голова модели помогает в процессе извлечения признаков. Костяк модели состоит из сетей CSP, которые помогают извлекать важные особенности из тензора, проходящего через головку модели. CSPNets также обеспечивают более быстрый вывод. Тензор от основы модели проходит через шейку модели, которая имеет пирамиды признаков, которые пытаются устранить смещение относительно размера объектов.
Чтобы узнать больше о пирамидах функций, ознакомьтесь с этим
Чтобы узнать больше о YOLOv5, посмотрите это.
Посетите репозиторий YOLO v5 по адресу
Для нашего случая использования я создал аналогичный репозиторий по адресу
Клонировать репозиторий
git clone https://github.com/sid0312/anpr_yolov5 cd anpr_yolov5
Обнаружение номерных знаков
Чтобы обнаружить номерной знак на изображении автомобиля, сохраните его в папке sample_cars каталога. Назовите его example.jpg
python detect.py --source sample_cars/example.jpg --weights weights/best.pt --conf 0.4
Полученные результаты
Получите окончательное изображение в каталоге вывода / вывода. Чтобы получить представление о процессе обнаружения, ознакомьтесь со следующей записной книжкой.
Вот некоторые результаты
Мы замечаем, что номерной знак распознается правильно с помощью YOLOv5, чего вообще не делал YOLOv3.
Как я этого добился?
Этот репозиторий включал следующие изменения в исходный репозиторий utlralytics.
Созданные данные / license_plate.yaml
Подготовка данных
- Шаг 1. Загрузите стартовый набор данных в формате JSON из
Это служит нашим стартовым набором данных. Загрузите файл JSON на свой Google Диск
- Шаг 2- Преобразование начального набора данных JSON в формат YOLO
Следующий репозиторий - это сквозное обнаружение и распознавание индийских номерных знаков с использованием YOLO v3 Darknet и Pytesseract. Он служит предвестником нашего проекта. Это интересный индивидуальный проект!
- Создание структуры папок
- В папке data / images создайте две папки, а именно: train и valid.
- Папка поезда состоит из 201 изображения, полученного на шаге 2. Они используются для обучения.
- Действительная папка состоит из 36 изображений, полученных на шаге 2, которые должны использоваться для проверки.
Только изображения не подходят для обнаружения, поскольку нам нужны метки для ограничивающих рамок и классов для каждого изображения.
Формат YOLO для метки ограничивающей рамки одного класса следующий:
class_number x y width height
Этикетки уже получены из шага 2.
Папка меток состоит из поезда и действительной папки, состоящей из меток для обучающих и проверочных изображений соответственно.
Образец этикетки
Далее мы создаем файл data / train.txt
Чтобы получить содержимое этого файла, просто напишите следующее в командной строке или терминале. Убедитесь, что вы находитесь в каталоге anpr_yolov5
D:>git clone https://github.com/sid0312/anpr_yolov5 cd anpr_yolov5 python >>import os >>for image in os.list('data/images/train'): path = 'D:/anpr_yolov5/data/images/train' print(path+'/'+image)
Вы получите следующий результат
Скопируйте вывод в файл data / train.txt
Сделайте то же самое для valid.txt
Если вы собираетесь обучить Yolo v5 на Google Colab, зафиксируйте репозиторий в его текущем состоянии, не копируя приведенное выше содержимое. Зафиксируйте и отправьте текущее состояние вашего репозитория на GitHub.
git add . git commit -m"some msg" git push
Теперь следуйте следующей записной книжке и скопируйте содержимое журналов печати в файлы data / train.txt и data / val.txt соответственно.
- Измените параметр nc в yolov5s.yaml на 1
- Повторите команду git add, commit, push еще раз
- Просмотрите следующую записную книжку с описанием тренировочного процесса
Примечание. Вы также можете использовать веса yolo5s.pt. Я использовал случайно инициализированные веса и обучил модель для 100 эпох.
Вот некоторые из моих журналов тренировок
Мы достигаем отличной производительности с [email protected], равным 0,978 или 97,8%, что довольно круто!
После пробежки 100 эпох получаем
Точность 0,659
Напомним как 0,972
[email protected] как 0,978
map@0,5 с доверительной вероятностью 95% как 0,471
Используемые ресурсы
Связанные репозитории
Если вы пропустили обучающую часть и сразу пришли к выводу, у меня для вас есть кое-что еще. Найдя интересующую область номерного знака, мы можем использовать его для распознавания символов с помощью pytesseract.
Я делал это для предыдущего проекта. Вы можете проверить это здесь:
Примечание автора
Если вам нравятся мои статьи, ознакомьтесь с ними!
Если вы хотите связаться со мной в Linkedin, вот мой профиль
Через месяц попробую новые проекты.
Счастливого компьютерного зрения и счастливого глубокого обучения ❤.