Компьютерное зрение произвело серию революций в таких областях, как самоуправляемые транспортные средства, медицинская визуализация и распознавание лиц. Это оказало большое влияние на то, как компьютеры могут идентифицировать и обрабатывать визуальные данные.
Обнаружение объектов — это процесс распознавания объектов на изображениях и видео, который является ключевой областью исследований в области компьютерного зрения. Используя передовые алгоритмы, обнаружение объектов можно использовать для точной идентификации объектов на изображении или видео. С помощью этой технологии компьютеры можно научить распознавать объекты, которые могут представлять интерес, такие как автомобили, люди и животные. Обнаружение объектов можно использовать для автоматизации таких задач, как отслеживание объектов на видео, позволяя машинам видеть окружающий мир и принимать решения на основе наблюдаемых данных.
За последнее десятилетие появилось несколько алгоритмов обнаружения объектов, таких как 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>
указывает путь к выходному файлу, в котором будут сохранены обнаруженные объекты и их ограничивающие рамки.
Заключение — я надеюсь, что вы найдете эту статью полезной. Спасибо за прочтение!