В этой документации вы узнаете, как обучить обнаружение объектов с помощью даркнета YOLO и внедрить их в Студию Gravio.

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

Надеюсь, это поможет вам получить отсюда:

Сюда:

Предпосылки:

Даркнет:

Гравио Студио установлено:

Установлен Gravio HubKit:

Фотографии объекта в «разных» сценариях обучения (+100 фото)

Инструмент для маркировки изображений:

Подготовка обучающих данных

Получение данных

Во-первых, нам нужно получить обучающие данные, которые представляют собой просто набор картинок. Я могу получить фотографии автомобилей на автостоянках из 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 секунд.

И теперь, если мы оставим это на некоторое время, мы увидим, что наш вывод успешно обнаружил две машины на автостоянке!

Надеюсь, это было полезно! :)