Назад в библиотеку

ОБУЧЕНИЕ СЕТИ YOLO ДЛЯ РАСПОЗНАВАНИЯ ОТХОДОВ В ГОРОДСКОЙ СРЕДЕ

Автор: Горелов А.И. Email: Gorelov663@scientifictext.ru
Источник: кафедра информационных системы и телекоммуникаций, Московский государственный технический университет им. Н.Э. Баумана, г. Москва

Аннотация

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

Ключевые слова:

свёротчные нейронные сети, CNN, YOLO.

YOLO, сокращение от You Only Look Once – это свёрточная архитектура нейронной сети, предназначенная для обнаружения объектов. Существует 3 версии YOLO, а именно версия 1, версия 2 и версия 3. Последние две версии являются улучшениями первой .

До YOLO классификаторы изображений использовались для выполнения задачи обнаружения объекта путем сканирования всего изображения, чтобы определить местонахождение объекта. Процесс сканирования всего изображения начинается с предварительно определенного окна, которое выдает логический результат, который имеет значение true, если указанный объект присутствует в отсканированном разделе изображения, и значение false, если это не так. После сканирования всего изображения с окном размер окна увеличивается, что используется для повторного сканирования изображения. Методы на основе деформируемых моделей частей для обнаружения объектов (DPM), используют эту технику, которая называется скользящим окном.

Другие способы обнаружения, такие как R-CNN и Fast R-CNN , в основном представляют собой сети классификаторов изображений, которые используются для обнаружения объектов с помощью следующих этапов:

  • Использование метода Region Proposal для создания потенциальных ограничивающих рамок на изображении;
  • Запуск классификатора на ограничивающих рамках;
  • После классификации выполнение постобработки, чтобы ужесточить границы ограничивающих рамок, удалить дубликаты.

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

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

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

Обучение сети YOLO

Для обучения используются сверточные веса, которые предварительно обучены на Imagenet (веса от модели darknet53).

Требования:

  • Linux
  • CMake для поддержки современных CUDA (версия не ниже 3.8)
  • CUDA 10.0
  • OpenCV (версия не ниже 2.4)
  • cuDNN для CUDA 10.0 (версия не ниже 7.0)
  • GPU с CC (версия не ниже 3.0)
  • GCC или Clang
  • Установка darknet (https://github.com/pjreddie/darknet)
  • Предварительно подготовленный файл весов (https://pjreddie.com/media/files/yolov3.weights)

Подготовка набора данны

Необходимо создать .txt-файл для каждого изображения в том же каталоге и с тем же именем, но с расширением .txt, и поместите в файл: номер объекта и координаты объекта на этом изображении, для каждого объекта в новом строка: [object-class] [x] [y] [width] [height], где:

  • [object-class] – целое число объектов для распознавания от 0 до (N-1)
  • [x] [y] [width] [height] – значения с плавающей запятой относительно ширины и высоты изображения, могут быть равны от 0,0 до 1,0
  • [x] [y] – это центр прямоугольника (не верхний левый угол)

Например, для изображения img1.jpg нужно создать img1.txt, содержащий:

1 0.716797 0.395833 0.216406 0.147222

0 0.687109 0.379167 0.255469 0.158333

1 0.420312 0.395833 0.140625 0.166667

Подготовка файлов конфигурации YOLO

YOLO нужны определенные файлы, чтобы знать, как и что обучать. Для этого необходимо создать три файла (.data, .names и .cfg) [2].

cfg/obj.data

cfg/obj.names

В файле obj.data содержится информация о количестве классов, ссылки на файлы train.txt, test.txt, obj.names.

Пример:

classes= 4

train = train.txt

valid = test.txt

names = obj.names

backup = backup/

В backup будет сохраняться файл весов yolo. В obj.names хранятся названия классов. Каждая новая категория должна находиться на новой строке, ее номер должен совпадать с номером категории в файлах .txt, которые создавались ранее.

Пример:

graygarbage

whitegarbage

browngarbage

other

Теперь перейдем к созданию .cfg для выбора архитектуры yolo. Для этого в файле yolov3.cfg, нужно изменить следующие значения:

  • установить batch = 24, это означает, что мы будем использовать 24 изображения для каждого этапа обучения
  • установить subdivisions = 8, партия будет разделена на 8, чтобы уменьшить требования к GPU VRAM.
  • установить filters = 27 (filters=(classes + 5)*3)

После всех изменений необходимо ввести команду для получения новых весов для текущих классов объектов:

./darknet detector train cfg/obj.data cfg/yolov3.cfg darknet53.conv.74

Результаты распознавания

Для запуска детектора необходимо ввести в терминал следующую команду:

./darknet detect cfg/yolov3.cfg yolov3.weights data/test.jpg

В результате Darknet распечатывает обнаруженные объекты, их достоверность и время, необходимое для их поиска:

Loading weights from yolov3.weights...Done!

data/img1.jpg: Predicted in 9.436504 seconds.

graygarbage: 99%

graygarbage: 97%

graygarbage: 66%

browngarbage: 100%

browngarbage: 99%

А также результат распознавания будет сохранён как файл predictions.png. Пример распознавания представлен на рисунке 1.

Результаты распознавания сети YOLO

Рисунок 1 – Результаты распознавания сети YOLO

Оригинальное изображение представлено на рисунке 2.

Оригинальное изображение

Рисунок 2 – Оригинальное изображение

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

1. YOLO v1: Part 1 [Электронный ресурс]. Режим доступа: https://medium.com/adventures-with-deep-learning/yolo-v1-part-1-cfb47135f81f/ (дата обращения: 14.05.2019).
2. YOLO: Real-Time Object Detection [Электронный ресурс]. Режим доступа: https://pjreddie.com/darknet/yolo/ (дата обращения: 14.05.2019).