Face Mask Detection - это проект, основанный на искусственном интеллекте. В нем мы обнаруживаем людей с маской или без нее.

В создании этого проекта у нас есть два этапа.

  • Обучите модель с помощью свертки или любой предварительно обученной модели, которая обнаруживает маски лица на изображениях.
  • Затем обнаруживайте лица на видео или изображениях и получайте прогнозы от нашей обученной модели.

В этом проекте я использовал трансферное обучение для обучения модели на наборе данных, в котором я использовал предварительно обученную модель MobileNetv2. Теперь вопрос в том, что такое MobileNetV2? что это за структура?

MobileNetV2

Мобильные сети - это небольшие модели с малой задержкой и низким энергопотреблением, параметризованные для соответствия ограничениям ресурсов в различных сценариях использования. Они могут быть построены для классификации, обнаружения, встраивания и сегментации, аналогично тому, как это делают другие популярные крупномасштабные модели. MobileNetv2 является значительным улучшением по сравнению с MobileNetV1. Структура MobileNetV1 и V2 представлена ​​ниже.

Теперь переходим к объяснению кода и данных

Набор данных

В наборе данных у нас есть два типа изображений: одно с маской, а другое без маски.

Набор обучающих данных состоит из 4296 изображений, в которых 2455 изображений имеют метку с маской, 1841 изображение - без лица маски, а набор данных проверки состоит из 300.

Импортировать :

Сначала я импортирую необходимые модули, такие как тензорный поток, керас, оптимизатор, слои и предварительно обученная модель (MobileNetV2).

Загрузка данных и увеличение изображения:

Теперь я загружаю все изображения для обучения и предварительной обработки с помощью MobileNetv2 «preprocess_input», через который изображения готовы, как того требует mobilenetv2.

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

После этого шага у нас есть пакеты фигур для обучения и проверки, которые требуются для mobilenetv2 в качестве входных данных.

Загрузка предварительно обученной модели:

Как я уже писал ранее, я использовал MobileNetV2. Итак, я загружаю веса модели и создаю объект типа MobileNetV2 после того, как мы замораживаем слои нашей предварительно обученной модели, через которые веса слоев не могут быть изменены, когда наша модель обучается.

Добавление еще нескольких слоев к модели:

Добавление слоя в конце модели для достижения хорошей точности или сохранения модели от переобучения.

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

Теперь наша структура модели готова.

Скомпилировать и обучить:

Пришло время обучить модель, но перед обучением мы должны определить функцию потерь и оптимизатор, то есть составить модель.

После Hypertuning параметров я обнаружил хорошие результаты с Learning Rate 0.00001. Итак, я использовал Adam Optimizer со скоростью обучения 0,00001 и функцией потерь binary_crossentropy. затем после того, как я обучил модель 15 эпохам и проверил ее на данных проверки (которые содержат 300 изображений).

Фаза тестирования:

Теперь нам нужно протестировать модель на тестовых данных, благодаря которым мы получили хорошее представление о том, будет ли модель погоды работать с данными в реальном времени или нет. Итак, у нас есть 74 изображения 2 классов в качестве тестового набора данных после его оценки на тестовом наборе данных, я получил хорошие результаты.

Убыток: 0,058

Матрица неточностей:

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

После построения матрицы путаницы то, что я вижу, моя обученная модель неверно предсказывает только одно изображение, в противном случае все изображения предсказываются правильно. так что модель будет работать хорошо в реальном времени.

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

В следующей части я напишу о том, как реализовать это с помощью Opencv.

Ссылка на репозиторий Github: