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

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

За последнее десятилетие появилось несколько алгоритмов обнаружения объектов, таких как Faster R-CNN, YOLO (You Only Look Once) и SSD (Single Shot Detector)разработаны исследователями.

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

YOLO - СМОТРЕТЬ ТОЛЬКО ОДИН РАЗ!

YOLO (You Only Look Once) — это современныйалгоритм обнаружения объектов в реальном времени, известный своей скоростью и точностью. Самая первая версия YOLO (известная как YOLOv1) впервые была представлена ​​Джозефом Редмоном и др. в 2016 году, и с тех пор появились различные другие версии он был разработан, последним из которых является YOLOv8.

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

Шаг 1: Аннотация данных

Первым шагом в тонкой настройке YOLOv5 для пользовательского набора данных является сбор и аннотирование данных. Он включает в себя определение интересующих объектов и их локализацию на изображениях или видео. Различные инструменты аннотации с открытым исходным кодом, такие как LabelImg, RectLabel, VGG Image Annotator (VIA) или LabelBox, можно использовать для маркировки ваших пользовательских данных.

Демонстрационное видео аннотации изображений с помощью инструмента LabelImg можно посмотреть здесь — Демо

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

Шаг 2: Настройте среду и установите YOLOv5

Следующим шагом будет настройка среды и установка YOLOv5. YOLOv5 можно установить с помощью pip. Вы также можете клонировать репозиторий YOLOv5 с GitHub и установить зависимости, используя файл requirements.txt.

Клонируйте репозиторий и установите requirements.txt в среде Python›=3.7.0, включая PyTorch›=1.7.

git clone https://github.com/ultralytics/yolov5  # clone
pip install -r yolov5/requirements.txt  # install

Шаг 3: Подготовка данных

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

Чтобы преобразовать аннотации в формат YOLO, вы можете изучить такие параметры, как изменить формат сохраненияt в инструменте LabelImg и установить для него формат YOLO во время аннотации или, если он есть в любом другом Например, COCO JSON, Pascal VOC XML, для каждого изображения необходимо создать файл .txt, который должен содержать метку класса и координаты граничной рамки объекта. Координаты ограничивающей рамки должны быть в нормализованном формате xywh (от 0 до 1). Номера классов должны иметь нулевой индекс (начиная с 0). Формат каждой строки в файле .txt должен быть следующим:

<class> <x_center> <y_center> <width> <height>

Координаты нормализованной ограничивающей рамки получаются путем деления x_center и width на ширину изображения, а y_center и height на высоту изображения.

Шаг 4: Организация каталогов

Train, val и тестовые изображения и метки должны быть организованы в соответствии с приведенным ниже примером. YOLOv5 предполагает, что набор данных находится внутри каталога /yolov5/datasets . YOLOv5 автоматически находит метки для каждого изображения, заменяя последний экземпляр /images/ в пути каждого изображения на /labels/. Например:

../datasets/custom_dataset/images/im0.jpg  # image
../datasets/custom_dataset/labels/im0.txt  # label

Следующим шагом является создание файла YAML, в котором указаны классы и пути для наборов для обучения, проверки и тестирования, и организация файла .yaml в каталоге /yolov5/data.

В файле YAML нам нужно указать пути к наборам для обучения, проверки и тестирования, а также количество классов и названия классов. Вот пример YAML-файла:

path: ../datasets/custom_dataset # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')
test: images/test # test images (relative to 'path')
nc: 2 # number of classes
names: ['dog', 'cat'] # class names

Шаг 4: Обучите модель

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

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

Команда для обучения модели выглядит следующим образом:

python train.py --img <image_size> --batch <batch_size> --epochs <num_epochs> --data <path_to_yaml_file> --weights <path_to_pretrained_weights>

Здесь <image_size> — размер входных изображений, например, --img 1024 установил бы размер входных изображений 1024x1024 пикселей, <batch_size> — количество изображений в каждом пакете, <num_epochs> — количество эпох обучения, <path_to_yaml_file> — путь к YAML файл, а <path_to_pretrained_weights> — путь к предварительно обученным весам yolov5.

Примером того же может быть -

python train.py --img 1024 --batch 16 --epochs 100 --data yolov5/data/dataset.yaml --weights yolov5m.pt

Все результаты тренировок сохраняются в yolov5/runs/train/ с увеличением каталогов прогонов, т.е. runs/train/exp2, runs/train/exp3 и т. д.

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

Шаг 5: Вывод

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

Вот пример команды для выполнения вывода с использованием detect.py:

python detect.py --weights <path_to_trained_weights> --img <image_size> --conf <confidence_threshold> --source <path_to_input_file> --output <path_to_output_file>

Здесь <path_to_trained_weights> указывает путь к обученным весам нашей тонко настроенной модели YOLOv5, <image_size> размер входных изображений, <confidence_threshold> устанавливает порог достоверности для обнаружения объекта (любая ограничивающая рамка с показателем достоверности ниже этого порога будет игнорироваться ), <path_to_input_file> указывает путь к входному изображению или видеофайлу, по которому мы хотим выполнить вывод, <path_to_output_file> указывает путь к выходному файлу, в котором будут сохранены обнаруженные объекты и их ограничивающие рамки.

Заключение — я надеюсь, что вы найдете эту статью полезной. Спасибо за прочтение!