Пошаговая инструкция по обучению YOLOv3 на Goole Colab.

Обновлять:

Контур:

И. Введение
II. Подготовка набора данных
III. Настроить даркнет
IV. Измените файлы конфигурации
V. Разделить набор данных поезд / проверка
VI. Настроить среду COLAB
VII. Тренинг по COLAB
VIII. Прогнозирование с помощью YOLOv3 с помощью OpenCV

Введение

Можно сказать, что «Вы только посмотрите один раз» (YOLO) очень хорошо знакомы с исследователями и разработчиками, работающими над компьютерным зрением, особенно с системой обнаружения объектов. По словам авторов, YOLOv3 чрезвычайно быстр и точен по сравнению с другими системами обнаружения объектов, такими как SSD513, R-FCN, RetinaNet и т. Д. (Рис. 2).

Очень хорошо документированное руководство по обучению YOLOv3 обнаружению пользовательских объектов можно найти на Github от AlexeyAB. Тем не менее, если на вашем локальном компьютере нет графического процессора (GPU) или ваш графический процессор не поддерживается CUDA (проверьте совместимость вашего графического процессора с CUDA здесь), этот процесс может быть довольно болезненным. К счастью, вместо того, чтобы тратить сотни евро на покупку и установку графического процессора, мы можем обучить нашу YOLOv3 с помощью бесплатного, удобного и простого в использовании инструмента исследования машинного обучения - GOOGLE COLAB. Технические характеристики оборудования, представленные в среде GOOGLE COLAB, являются (исходными) :

  • Графический процессор: 1xTesla K80, вычисление 3.7, имеющий 2496 ядер CUDA, 12 ГБ видеопамяти GDDR5 (самое главное, он совместим с CUDA)
  • ЦП: 1x одноядерный гиперпоточный процессор Xeon @ 2,3 ГГц, т.е. (1 ядро, 2 потока)
  • Оперативная память: ~ 12,6 ГБ Доступно
  • Диск: ~ 33 ГБ Доступно

В этом руководстве вы получите пошаговые инструкции о том, как предварительно обработать / подготовить набор данных, а также обучить / сохранить модель с помощью YOLOv3 с помощью GOOGLE COLAB. Пример объекта, который мы попытаемся обнаружить в этом руководстве, - это пистолет (рис. 1).

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

Набор данных, необходимый для обучения детектора с помощью YOLOv3, содержит 2 компонента: изображения и метки. Каждое изображение будет связано с файлом метки (обычно это текстовый файл), который определяет класс объекта и координаты объекта на изображении, следуя синтаксису: ‹object-class› ‹x_center› ‹y_center› ‹width ›‹Height›

Для создания файлов этикеток из изображений я рекомендую вам использовать программное обеспечение с графическим интерфейсом для маркировки ограниченных рамок объектов и создания файлов этикеток, таких как Yolo_label, OpenLabeling, Yolo_mark, BBox-Label-Tool и т. Д. Это значительно упростит вашу жизнь, поскольку вам нужно всего лишь перетащить ограничивающую рамку вокруг вашего объекта на изображении, и программа автоматически создаст файл метки. Вы можете найти очень подробную инструкцию по установке и внедрению BBox-Label-Tool здесь.

Я подготовил набор данных для этого урока, который вы можете скачать здесь. Этот набор данных содержит около 3000 изображений пистолета с метками ограничивающей рамки, распределенными в 2 папки: изображения и метки (рис. 4).

III. Скачать Darknet

YOLOv3 был создан на платформе нейронной сети с открытым исходным кодом Darknet для обучения детекторов. Вы можете загрузить Darknet напрямую, используя ссылку выше (требуется разархивировать) или используя Git:

cd ~
git clone https://github.com/pjreddie/darknet

Теперь откройте Makefile в папке Darknet. Если ваша операционная система - Windows, вы можете открыть Makefile с помощью Блокнота. Если вы используете Ubuntu, откройте терминал в папке Darknet и введите (вы также можете открыть Makefile с любой доступной IDE, установленной в вашей системе):

gedit Makefile

Затем в Makefile измените GPU = 1, CUDNN = 1 и OPENCV = 1. Затем загрузите предварительно обученную модель в даркнете на Imagenet прямо отсюда (154Мб) ». Для Ubuntu вы можете загрузить его из терминала, как показано ниже:

cd darknet 
wget https://pjreddie.com/media/files/darknet53.conv.74

Наконец, скопируйте и перезапишите папку данных (включая папки с изображениями и ярлыками) из нашего набора данных о пистолете в папку даркнета.

IV. Изменить файл конфигурации

В каталоге darknet \ cfg создайте копию yolov3.cfg в той же папке и переименуйте ее в Yolov3_custom_train.cfg. Отредактируйте файл, как показано ниже (или загрузите его здесь), чтобы он соответствовал среде COLAB:

# Line 8 & 9: 
width = 416, height = 416 
# Line 20 
max_batches = 6000 
# Line 22 
steps = 5400 
#Line 603, 689, 776: 
filters = 18
#Line 610, 696, 783: 
classes = 1

Здесь мы применяем эту формулу: (Filters = (classes + 5) * 3) для вычисления количества фильтров. Например, если вам нужно обнаружить 2 объекта, тогда ваш фильтр будет: filters = (2 + 5) * 3 = 21 и classes = 2.

В папке darknet \ examples откройте файл «детектор .c». В строке 138 измените эту строку, как показано ниже:

if(i%1000==0 || (i < 1000 && i%100 == 0)){

Эта модификация указывает вашей программе сохранять вес вашей модели каждые 100 эпох, если количество эпох меньше 1000, с другой стороны, сохранять вес каждые 1000 эпох. Это очень важно, потому что COLAB позволяет тренироваться не более 12 часов с открытым браузером, поэтому важно, чтобы вы сохранили вес на Диске до того, как сервер будет выключен и все файлы в каталог времени выполнения удаляется. Позже вы все еще можете загрузить сохраненный предварительно натренированный вес и снова тренировать модель.

V. Разделить набор данных для обучения и проверки, инициализировать путь обучения и объявить метку объекта

Чтобы избежать переобучения и добиться объективной оценки нашей модели, нам необходимо разделить наш набор данных на обучающий набор и набор проверки. В зависимости от количества изображений в вашем наборе данных, ваш набор для проверки может быть извлечен примерно от 5% (небольшой набор данных) до 30% (большой набор данных) от общего набора данных. Мы будем использовать файл «train.txt» и «val.txt», чтобы определить путь к каталогу наши обучающие и проверочные изображения, как показано ниже:

data/images/armas (2976).jpg
data/images/armas (419).jpg
data/images/armas (1416).jpg
data/images/armas (1591).jpg
data/images/armas (1227).jpg
data/images/armas (1509).jpg
data/images/armas (407).jpg
data/images/armas (2956).jpg
data/images/armas (2843).jpg
data/images/armas (1510).jpg

Вы можете создать скрипт Python для чтения всех путей к каталогам, разделить их с желаемым соотношением и сохранить как файлы .txt. Однако это выходит за рамки данного руководства, поэтому вы можете напрямую загрузить файлы train.txt и val.txt, которые я уже выложил, и поместить их в каталог darknet \ data .

На следующем этапе нам нужно создать файл yolo.names в каталоге darknet \ data с именами объектов в каждой новой строке. Например, в нашем случае нам нужно обнаруживать только пистолет, поэтому первая строка должна быть пистолет или пистолет (вы можете скачать файл-пример здесь).

Наконец, создайте файл yolo.data в каталоге darknet \ data, содержащий (вы можете скачать файл здесь) :

classes= 1 #number of objects, in our case is 1
train  = data/train.txt
valid  = data/val.txt
names = data/yolo.names
backup = backup

VI. Настройте среду COLAB

Чтобы тренироваться в COLAB, вы должны сначала загрузить свой набор данных и папку darknet на Google Диск. Я предполагал, что вы знакомы с Google Диском, в противном случае вы можете обратиться к этому руководству. Теперь ваш каталог darknet должен содержать:

  • Папка images в каталоге darknet \ data содержит 3000 изображений.
  • Папка labels в каталоге darknet \ data содержит 3000 файлов .txt.
  • train.txt, val.txt, yolo.data, yolo.names в каталоге darknet \ data
  • yolov3_custom_train.cfg в каталоге darknet \ cfg

Затем заархивируйте папку darknet и загрузите ее на свой Google Диск (убедитесь, что ваш файл имеет формат darknet.zip). Создайте новую папку на вашем Диске и назовите ее резервная копия. Затем перейдите на https://colab.research.google.com/ и войдите в свою учетную запись Google (ту же учетную запись, в которую вы загружаете свой darknet.zip ). Выберите Файл - ›Новая записная книжка Python 3 (рис. 5).

Чтобы включить графический процессор, выберите Время выполнения - ›Изменить тип времени выполнения, в Аппаратный ускоритель выберите Графический процессор (рис. 6).

VII. Обучение на COLAB

В записной книжке ниже приведена пошаговая процедура обучения и объяснение каждой ячейки кода. Убедитесь, что вы выполняете каждую ячейку кода по порядку, нажимая значок воспроизведения слева или нажимая Shift + Enter и прочтите инструкции перед запуском записной книжки .

Вы можете сослаться на мою записную книжку COLAB здесь, чтобы получить визуализацию вывода каждой ячейки.

VII: Прогнозирование с помощью YOLOv3 с использованием OpenCV

После получения тренировочного веса вы можете использовать OpenCV для загрузки архитектуры YOLOv3 и использовать этот вес для прогнозирования. Вы можете сослаться на мою записную книжку здесь, чтобы увидеть код, который я использовал для выполнения этих шагов, и нарисовать ограничивающую рамку вокруг предсказанных объектов на изображении и видео, существующих в начале этой статьи.

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

COLAB NOTE:

  • Подключите COLAB к Google Drive:

  • Код авторизации должен быть примерно таким:

  • Загрузите набор данных и папку darknet в рабочее пространство COLAB, разархивировав файл «darknet.zip»
  • Используйте синтаксис ! Unzip + ‹path_to_darknet.zip_in_your_GDrive› для извлечения папки darknet. В моем случае ”darknet.zip” находится в Мой диск / Sharing_storage1.

  • Сохраняйте вес во время тренировки на вашем Google Диске

Этот шаг важен, поскольку среда COLAB будет переработана через 12 часов, и все файлы, находящиеся в ее рабочем пространстве, будут удалены. Здесь мы определяем символическую ссылку для сохранения веса непосредственно в нашу папку резервных копий, которую мы создали в нашем GDrive ранее. В моем случае каталог моей папки резервных копий - Мой диск / YOLOv3_weight / backup.

Ресурсы

Предварительно натренированный вес и соответствующие файлы этого проекта

Развертывание кода для этого проекта

ЙОЛОв3 Бумага

Домашняя страница Yolov3

Github-репозиторий даркнета