В этой документации вы узнаете, как обучить обнаружение объектов с помощью даркнета YOLO и внедрить их в Студию Gravio.
Одной из многих функций Gravio Studio и Hubkit является возможность улучшить ваши устройства IoT с помощью функций искусственного интеллекта, таких как распознавание объектов. Это поможет вам обучить вашу собственную модель обнаружения объектов и внедрить ее в Gravio, чтобы вы могли в дальнейшем использовать ее для личного использования позже.
Надеюсь, это поможет вам получить отсюда:
Сюда:
Предпосылки:
Даркнет:
- https://github.com/pjreddie/darknet (linux, инструкция: https://pjreddie.com/darknet/install/)
- https://github.com/AlexeyAB/darknet (окна)
- Предварительно обученная сверточная модель https://pjreddie.com/media/files/darknet19_448.conv.23
Гравио Студио установлено:
- Windows: https://www.microsoft.com/en-us/p/gravio-studio/9n0d93kpvw3c?source=lp#activetab=pivot:overviewtab
- Mac OSX: https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1415598364&mt=12
- iOS: https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1415597644&mt=8
Установлен Gravio HubKit:
- Windows: https://download.gravio.com/release/windows/GravioHubKit.msi
- Mac OSX: https://download.gravio.com/release/macos/GravioHubKit.dmg
- Linux: https://download.gravio.com/release/linux/gravio_all.deb
Фотографии объекта в «разных» сценариях обучения (+100 фото)
Инструмент для маркировки изображений:
- https://github.com/HappehBunneh/yolo-labeller (самодельный, будет периодически обновляться)
Подготовка обучающих данных
Получение данных
Во-первых, нам нужно получить обучающие данные, которые представляют собой просто набор картинок. Я могу получить фотографии автомобилей на автостоянках из Google и использовать их для своих обучающих данных, однако, поскольку я хотел, чтобы это эффективно работало на автостоянках, откуда я могу видеть, я вместо этого написал скрипт для автоматического сохранения фотографий для меня; python3 pic.py
.
Этот скрипт будет делать снимок каждые 5 минут и сохранять его в папке, созданной в том же каталоге с именем «pic». Вы можете остановить это, когда захотите.
Маркировка данных
Для обучения обнаружению объектов нейронной сети необходимо знать, где находятся машины на картинках, и эта информация предоставляется нейронной сети через текстовый файл. Это был бы долгий и утомительный процесс, поэтому, чтобы сделать процесс менее утомительным, я написал сценарий маркировки; python3 label.py
Чтобы пометить автомобиль, просто нажмите и перетащите на него рамку, и он будет сохранен и появится в разделе «Автомобили». Чтобы удалить, просто нажмите на автомобиль в разделе, и он будет в разделе удаления. Затем просто нажмите кнопку «Удалить» или снова нажмите «Автомобиль» в разделе «Удалить», чтобы не удалять.
Используйте стрелки в нижней части изображения, чтобы перемещаться по всем фотографиям. После того, как вы пометили их все (как бы утомительно это ни было), нажмите «Ярлык (*)», и для каждого изображения будут записаны соответствующие текстовые файлы.
Группировка тестовых и обучающих данных
Наконец, после того, как для всех изображений были сгенерированы текстовые файлы меток, нам нужно сгруппировать их в две группы: группу для изучения нейронной сетью и группу для проверки нейронной сетью. Для этого просто запустите python3 group.py
и будут сгенерированы два текстовых файла; test.txt
и train.txt
.
Обучение в даркнете
Если вы еще этого не сделали. Установите даркнет в другой каталог и создайте его соответствующим образом, используя приведенные выше ссылки.
После того, как вы установили его, убедитесь, что он работает, запустив
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
Теперь пришло время обучить йоло распознавать наш объект. Сначала переместите test.txt
и train.txt
, которые мы сгенерировали с помощью `python3 group.py
, в папку даркнета.
Затем загрузим предварительно обученные сверточные веса (https://pjreddie.com/media/files/darknet19_448.conv.23) в основную папку даркнета, должно получиться вот так…
Теперь заходим в папку cfg
где нам нужно будет создать 2 файла и изменить 1.
Создайте obj.data:
- Этот текстовый файл должен выглядеть так… (где классы равны количеству различных объектов, которые мы обнаруживаем, в данном случае 1)
Создайте obj.names:
- Этот текстовый файл должен выглядеть так… (где классы равны количеству различных объектов, которые мы обнаруживаем, в данном случае 1)
Изменить yolov2-voc.cfg
- Измените
line 3
наbatch=64
- Изменить
line 4
наsubdivision=8
- Измените
line 237
наfilters=30
(рассчитывается поfilters = [no. of classes + 5]*5
) - Измените
line 244
наclasses=1
(рассчитывается по количеству классов, которые вы хотите обнаружить)
Наконец, вернитесь в основной каталог, откройте выбранный вами терминал и запустите…
./darknet detector train cfg/obj.data cfg/yolov2-voc.cfg darknet53.conv.23
И вы должны увидеть что-то вроде этого:
Обучение создает файл .weights, который используется для запуска обнаружения объектов, он будет сохранен в папке «резервная копия» после каждых 1000 итераций. Я рекомендую выполнить не менее 10 000 итераций, чтобы получить "хорошие" результаты. Больше всегда лучше.
Интеграция в Гравио
Для этого нам понадобится доступ к файлам Gravio (C:\ProgramData\Gravio), нашим файлам obj.names
, yolov2-voc.cfg
и последнему файлу весов, сгенерированному в результате тренировки.
В каталоге Gravio перейдите в edge, затем models, и здесь вы должны увидеть папку с названием NumberOfPeople-Lite. '. Мы создадим собственную папку и назовем ее Автомобили. Переместите obj.names
, yolov2-voc.cfg
и наш yolov2-voc_last.weights
в эту папку и переименуйте файлы так, чтобы они соответствовали имени папки, в которой они находятся (cars.names
, cars.cfg
, cars.weights
).
И теперь нам нужно добавить в него файл настроек. Создайте новый файл с именем `settings.config` и заполните его такими данными:
Этот параметр означает, что когда мы запустим наше обнаружение объекта, мы получим результат, который представляет собой значение, которое представляет собой количество всех обнаруженных нами автомобилей, в которых нейронная сеть уверена на 50% или более в том, что это автомобиль.
Включение в Гравио
В студии Gravio я создал новую комнату и добавил камеру, которую хочу использовать для наблюдения за своей парковкой с помощью обученной нами нейронной сети обнаружения автомобилей.
И нет, мы можем редактировать настройки этого устройства, и если мы посмотрим в раскрывающемся списке нашего вмешательства, у нас есть возможность выбрать тот, который мы создали; Cars
. Я установил это для запуска каждые 5 секунд.
И теперь, если мы оставим это на некоторое время, мы увидим, что наш вывод успешно обнаружил две машины на автостоянке!
Надеюсь, это было полезно! :)