Наука о данных в реальном мире

Как 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 состоит из трех частей:

  1. Модель Backbone
  2. Модель головы
  3. Модель шеи

Голова модели помогает в процессе извлечения признаков. Костяк модели состоит из сетей 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, вот мой профиль



Через месяц попробую новые проекты.

Счастливого компьютерного зрения и счастливого глубокого обучения ❤.