Рубрики
Без рубрики

Обнаружение маски для лица с помощью Yolo V3

Хотите реализовать обнаружение маски лица в реальном времени ? . В этом посте вы увидите руку на тренировке yolo v3 с помощью google colab, чтобы определить, носит ли человек маску или нет .

Автор оригинала: GaneshRaj V.

Обнаружение маски для лица С помощью Yolo_v3 в Google Colab

Отлично, вы готовы реализовать практический проект ” Обнаружение маски лица “

Требования Windows или Linux CMake.12 CUDA 10.0 OpenCV.4 GPU с CC.0

Шаг 0: Примечание: Вы должны сделать эту часть в ПК Это самый трудоемкий шаг,создание набора данных Я рекомендую вам использовать инструмент LabelImg ,который можно использовать для создания ограничительных рамок Простая установка: pip install LabelImg После установки,

  • Создайте новую папку “Поезд” и создайте “class.txt” файл

  • В class.txt файл create the class label Example object-id center_x center_y width height Ниже приведен пример для 2 классов 1 0.25468 0.47586 0.1245875 0.3654985 0 0.2495 0.9875142 0.562366 0.5495326

  • Создайте файл obj.data и измените содержимое ниже /train.txt /train.txt /obj.names /

  • Классы: не представляют ни одного из классов

  • путь к обучающим данным

  • путь к тестовым данным ( если вы хотите, мы можем создать тестовые изображения и обязательно аннотировать их )

  • Создайте еще одну папку “Изображения” в папке “Поезд”

  • Переместите все изображения ( разных классов ) в папку “Изображения” .

  • Перейдите в cmd и измените каталог на Train Folder

  • введите команду “label Img [IMAGE_PATH] [ПРЕДОПРЕДЕЛЕННЫЙ ФАЙЛ КЛАССА]”

  • Пример, метка Img/Images/img1.jpg class.txt

Теперь вы увидите инструмент маркировки . Создайте ограничивающую рамку, выбрав каждое изображение по одному, Убедитесь, что вы сохранили изображение с ограничительной рамкой в той же папке “/train/images” и сохранили в формате YOLO

После создания файла аннотаций вы увидите в исходной папке Train/Images, что каждое изображение будет иметь соответствующий файл аннотаций . Пример , img1.jpg , img1.txt

как только файл аннотаций будет создан , сожмите его в виде zip-файла и загрузите на Google диск или аккаунт github Убедитесь, что у вас есть по крайней мере 200 изображений обучающих данных Поздравляю, один большой шаг сделан .

Шаг 1: Клонирование репозитория Darknet для архитектуры yolo с помощью команды !git clone ниже. Здесь мы клонируем архитектуру yolov3, которая используется для обнаружения . !git clone https://github.com/AlexeyAB/darknet.git

Шаг 2: Здесь мы собираемся внести некоторые изменения в MakeFile для дальнейших вычислений. 2.1 Измените каталог на папку Darknet 2.2 Убедитесь, что у вас установлен графический процессор 2.3 Внесите изменения в GPU и OPENCV от 0 до 1 ‘1’ представляет для активации или использования !sed – stream editor !cat – Makefile Cat(concatenate),он будет читать файл 2.4 После внесения изменений скомпилируйте файл Make , выполнив следующую команду !cat Makefile !сделайте Шаг 3: Загрузите предварительно обученный вес . Это необязательно !wget https://pjreddie.com/media/files/darknet53.conv.74 Загрузите соответствующий вес для соответствующего файла cfg , так как для yolov3 я использовал веса yolov3.cfg и darknet53.conv.74 . Для Yolov4 вы можете обратиться к странице Alexab github (https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects)

Мы можем даже обучить сеть с нуля , что не рекомендуется, потому что мы можем использовать предварительно обученные веса для быстрого обучения . ( ( Transfer Learning

Шаг 4: Загрузите созданный вами набор данных на Github или google Drive Убедитесь, что у вас есть ниже определенные файлы, 1.obj.data 2.obj.names 3.dataset ( изображения )

Шаг 5: Я загрузил набор данных на диск , поэтому давайте смонтируем диск Как только он будет смонтирован в Google colab распакуем его с помощью следующей команды, используя следующую команду !unzip data/custom.zip -d data/# отрегулируйте путь Шаг 6: Теперь мы внесем некоторые изменения в файл yolov3.cfg,доступный в папке Darknet/cfg В соответствии с набором данных,давайте сделаем random от 0 до 1 classes * 2000 filters=(classes + 5)x3 подразделения должны быть от 8 пакетов до 32 set network size или любое значение, кратное 32 change line to your number of objects So, if classes=1 then should be filters=18. Если классы=2 то напишите фильтры=21

Пример:

!sed-i/g’ cfg/yolov3.cfg !sed-i/g’ cfg/yolov3.cfg !sed-i/g’ cfg/yolov3.cfg !sed-i/max_batches/g’ cfg/yolov3.cfg !sed-i/g’ cfg/yolov3.cfg !sed-i/g’ cfg/yolov3.cfg !sed-i/g’ cfg/yolov3.cfg !cat cfg/yolov3.cfg

Шаг 7: ОБУЧЕНИЕ

Убедитесь , что вы указали правильный путь к изображениям, весам и файлу cfg ( команда обучения )

Darknet-это детектор, где он будет обучать данные со следующими файлами с весами и cfg Для Linux используйте следующую команду !./darknet detector train data/obj.data cfg/yolov3.cfg darknet53.conv.74-dont_show

Для использования в Windows , darknet.exe данные поезда детектора/obj.data yolo-obj.cfg yolov4.conv.137 -don’t_show

Для хорошего графического процессора потребуется минимум 2 часа, а для обучения в Colab-около 3 часов ( почти 1300 итераций )

Шаг 8: Когда я должен прекратить обучение ?

Еще раз поздравляю с приходом на тренировочную часть . В обучающей части вы увидите среднюю потерю ,IoU ,i-ю итерацию в качестве выходных данных

Обратите внимание на средний убыток , как только убыток начинает увеличиваться, а не уменьшаться непрерывно. Если ваши средние потери увеличиваются, то вам следует прекратить тренировку

После каждой 100 итерации вы увидите, что веса загружаются в папку darknet/backup, а после каждой 1000 итерации веса будут храниться в папке darknet/backup

Мы должны использовать лучший файл веса для нашей цели обнаружения , поэтому давайте теперь проверим точность наших весов с помощью индикатора карты

Для Windows , Пример у вас есть 3 разных файла веса ( 7000 , 8000 , 9000-й итерации )

darknet.exe данные карты детектора/obj.data yolo-obj.cfg backup\yolo-obj_7000.weights darknet.exe данные карты детектора/obj.data yolo-obj.cfg backup\yolo-obj_8000.weights darknet.exe данные карты детектора/obj.data yolo-obj.cfg backup\yolo-obj_9000.weights

Выберите weights-файл с самой высокой картой (средняя средняя точность) или Вы (пересечение над объединением)

Используйте лучший файл веса для обнаружения , например darknet.exe детектор train data/obj.data yolo-obj.cfg yolov4.conv.137 -карта

Для Linux используйте !./darknet, а не darknet.exe

Шаг 9: Обнаружение объекта

Дайте правильный путь к изображению, которое мы хотим обнаружить

Для Linux ,

!./darknet detector test data/obj.data cfg/yolov3.cfg/content/weights/yolov3_1300.weights/content/darknet/data/image_test01.jpg -dont_show

Для Windows , darknet.exe тестовые данные детектора/obj.data cfg/yolov3.cfg/content/weights/yolov3_1300.weights/content/darknet/data/image_test01.jpg -dont_show

Обнаружение видео: Загрузите видео в Colab используйте следующую команду !pwd !./darknet detector demo data/obj.data cfg/yolov3.cfg/content/weights/yolov3_1300.weights -dont_show MEE.mp4 -i 0 -out_filename me_06.avi -thresh 0.7

Установите порог больше 0,5

Вот и все . Поздравляю , вы сделали это .

Моя модель Резюме: Я обучил модель с 2 классами изображений [ Mask_detected и No_Mask detected] ,где я запустил свою модель в Google Colab до 1300 итераций, что дает мне самую высокую точность при обучении с 1100 изображениями .

Точность:

**class_id, ,.04%,)

class_id,,.70%,)

для.25,.96,.96,.96

for.25,,,, average.77 %

Вы %, используемая площадь под кривой для каждого уникального отзыва **средняя средняя точность.973706, или 97.37 ** Общее время обнаружения: 33 секунды

Пример Вывода:

Обнаружена маска

Обнаружена маска

Маска Не Обнаружена

Маска Не Обнаружена
Скриншот с 2020-07-15 19-46-13.png

Обнаружение Источника Видео:

Обнаружение Источника Видео:

Следуйте моему коду на github: https://github.com/Ganesh9100/Mask-Detection-YOLO_V3-

Будущая область применения: С большим количеством обучающих данных и различным классом модель может быть использована для многих приложений реального времени.

Спасибо, что прочитали мой пост .