Обнаружение маски для лица С помощью 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 секунды
Пример Вывода:
Обнаружена маска
Маска Не Обнаружена
Обнаружение Источника Видео:
Обнаружение Источника Видео:
Следуйте моему коду на github: https://github.com/Ganesh9100/Mask-Detection-YOLO_V3-
Будущая область применения: С большим количеством обучающих данных и различным классом модель может быть использована для многих приложений реального времени.
Спасибо, что прочитали мой пост .