ОБУЧЕНИЕ СЕТИ YOLO ДЛЯ РАСПОЗНАВАНИЯ ОТХОДОВ
В ГОРОДСКОЙ СРЕДЕ Горелов А.И. Email: [email protected]
Горелов Антон Игоревич - студент, кафедра информационных системы и телекоммуникаций, Московский государственный технический университет им. Н.Э. Баумана, г. Москва
Аннотация: обнаружение объекта - это проблема локализации и классификации конкретного объекта в изображении, состоящем из нескольких объектов. Обнаружение, скорее всего, является наиболее глубоким и сложным аспектом компьютерного зрения в виду огромного количества практических случаев. В настоящее время существует ряд различных методов для распознавания объектов на изображении. Одним из наиболее популярных методов являются свёрточные нейронные сети, а также их модификации. В настоящей статье представлено краткое описание сети YOLO, приведён пример обучения и результаты работы. Ключевые слова: свёротчные нейронные сети, CNN, YOLO.
YOLO NETWORK TRAINING FOR WASTE RECOGNITION IN URBAN ENVIRONMENTS Gorelov A.I.
Gorelov Anton Igorevich - student, DEPARTMENT OF INFORMATION SYSTEMS AND TELECOMMUNICATIONS BAUMAN MOSCOW STATE TECHNICAL UNIVERSITY, MOSCOW
Abstract: object detection is a problem of localization and classification of a specific object in an image consisting of several objects. Detection, most likely, is the most profound and complex aspect of computer vision in view of the huge number ofpractical cases. Currently, there are a number of different methods for recognizing objects in an image. One of the most popular methods is convolutional neural networks, as well as their modifications. This article provides a brief description of the YOLO network, an example of training and the results of work.
Keywords: convolutional neural networks, CNN, YOLO.
УДК 004.932
YOLO, сокращение от You Only Look Once - это свёрточная архитектура нейронной сети, предназначенная для обнаружения объектов. Существует 3 версии YOLO, а именно версия 1, версия 2 и версия 3. Последние две версии являются улучшениями первой [1].
До YOLO классификаторы изображений использовались для выполнения задачи обнаружения объекта путем сканирования всего изображения, чтобы определить местонахождение объекта. Процесс сканирования всего изображения начинается с предварительно определенного окна, которое выдает логический результат, который имеет значение true, если указанный объект присутствует в отсканированном разделе изображения, и значение false, если это не так. После сканирования всего изображения с окном размер окна увеличивается, что используется для повторного сканирования изображения. Методы на основе деформируемых моделей частей для обнаружения объектов (DPM), используют эту технику, которая называется скользящим окном.
Другие способы обнаружения, такие как R-CNN и Fast R-CNN , в основном представляют собой сети классификаторов изображений, которые используются для обнаружения объектов с помощью следующих этапов:
1. Использование метода Region Proposal для создания потенциальных ограничивающих рамок на изображении;
2. Запуск классификатора на ограничивающих рамках;
3. После классификации выполнение постобработки, чтобы ужесточить границы ограничивающих рамок, удалить дубликаты.
Эти системы оказываются сложными, громоздкими и их трудно оптимизировать, так как каждый компонент необходимо обучать отдельно [1].
YOLO отличается от других сетей тем, что рассматривает проблему обнаружения изображений как проблему регрессии, а не как проблему классификации, и поддерживает одну свёрточную нейронную сеть для выполнения всех вышеупомянутых задач. Объединение всех независимых задач в одну сеть имеет следующие преимущества:
1. Скорость: СетьYOLO чрезвычайно быстра по сравнению со своими предшественниками, поскольку он использует единую сеть свертки для обнаружения объектов. Свертка выполняется для всего входного изображения только один раз, чтобы получить предсказания.
2. Меньше фоновых ошибок: 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> - это центр прямоугольника (не верхний левый угол) [2] Например, для изображения 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) [2]
После всех изменений необходимо ввести команду для получения новых весов для текущих классов объектов:
./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.
Рис. 1. Результаты распознавания сети YOLO
Оригинальное изображение представлено на рисунке 2.
Рис. 2. Оригинальное изображение Список литературы /References
1. YOLO vl: Part 1 [Электронный ресурс]. Режим доступа: https://medium.com/adventures-with-deep-learning/yolo-vl-part-1 -cfb47135f81f/ (дата обращения: 14.05.2019).
2. YOLO: Real-Time Object Detection [Электронный ресурс]. Режим доступа: https://pjreddie.com/darknet/yolo/ (дата обращения: 14.05.2019).