Автор: Горелов А.И. 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 , в основном представляют собой сети классификаторов изображений, которые используются для обнаружения объектов с помощью следующих этапов:
Эти системы оказываются сложными, громоздкими и их трудно оптимизировать, так как каждый компонент необходимо обучать отдельно .
YOLO отличается от других сетей тем, что рассматривает проблему обнаружения изображений как проблему регрессии, а не как проблему классификации, и поддерживает одну свёрточную нейронную сеть для выполнения всех вышеупомянутых задач. Объединение всех независимых задач в одну сеть имеет следующие преимущества:
Для обучения используются сверточные веса, которые предварительно обучены на Imagenet (веса от модели darknet53).
Требования:
Необходимо создать .txt-файл для каждого изображения в том же каталоге и с тем же именем, но с расширением .txt, и поместите в файл: номер объекта и координаты объекта на этом изображении, для каждого объекта в новом строка: [object-class] [x] [y] [width] [height], где:
Например, для изображения 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 нужны определенные файлы, чтобы знать, как и что обучать. Для этого необходимо создать три файла (.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, нужно изменить следующие значения:
После всех изменений необходимо ввести команду для получения новых весов для текущих классов объектов:
./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.
Оригинальное изображение представлено на рисунке 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).