Пандемия COVID-19 сделала маски для лица незаменимыми в нашей повседневной жизни. По мере того, как все больше и больше стран предписывают использование масок для борьбы с распространением вируса, становится все более важным обеспечить соблюдение людьми этих правил. Один из способов сделать это — использовать технологию обнаружения лицевых масок.

В этом блоге мы рассмотрим, как определить, носит ли человек маску, с помощью Машины опорных векторов (SVM) и оптимизированного Intel oneAPI. Библиотека Scikit-Learn.

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

Алгоритм находит наилучшую границу решения, которая разделяет точки данных на разные классы.

Простое объяснение того, как работает SVM:

  1. Точки данных нанесены на график, где каждая точка представляет собой наблюдение с несколькими функциями.
  2. Алгоритм пытается найти линию (или гиперплоскость в более высоких измерениях), которая разделяет два класса с максимально возможным запасом.
  3. Поле — это расстояние между границей решения и ближайшими точками данных из обоих классов.
  4. Точки данных, ближайшие к границе решения, называются опорными векторами, и они определяют положение и ориентацию границы.
  5. Как только граница найдена, алгоритм может классифицировать новые точки данных, определяя, по какую сторону границы они попадают.

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

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

Алгоритм SVM определен в пакете Scikit-learn. Scikit-learn – это модуль Python для машинного обучения. Intel® Extension for Scikit-learn плавно ускоряет ваши приложения scikit-learn для процессоров Intel и графических процессоров в конфигурациях с одним и несколькими узлами. Ускорение достигается за счет использования библиотеки Intel® oneAPI Data Analytics Library (oneDAL). Расширение Intel(R) для Scikit-learn содержит изначально доступные функции исправления scikit-learn. в пакете daal4py. Этот пакет расширения динамически исправляет scikit-learnоценщики, повышая производительность ваших алгоритмов машинного обучения.

Расширение является частью набора Intel® AI Analytics Toolkit (AI Kit), который обеспечивает гибкость использования инструментов машинного обучения с вашими существующими пакетами ИИ. Используя Scikit-learnс этим расширением, мы можем ускорить обучение и логические выводы до 100x с эквивалентным математическая точность.

Необходимые условия:

  • Python 3.7 или выше.
  • Требуемые пакеты: Numpy, Pandas, scikit-learn-intelex, scikit-learn, PIL, matplotlib

Установка библиотеки scikit-learn-intelex:

Вы можете создать виртуальную среду для установки этих пакетов. Запишите следующий код в ячейку Jupyter Notebook:

!pip install scikit-learn-intelex

Затем запустите:

from sklearnex import patch_sklearn
patch_sklearn()

Набор данных:

Набор данных был взят с сайта Kaggle. Он содержит фотографии с двумя разными ярлыками: один — с_маской, а другой — без_маски. Набор данныхWith_mask содержит 3725 изображений, а набор данных Without_mask — 3828 изображений.

Dataset Link: https://www.kaggle.com/datasets/omkargurav/face-mask-dataset

Импорт набора данных и преобразование его в массив NumPy:

Использовал библиотеки PIL и Numpy для импорта набора данных, а затем преобразовал его в трехканальный массив numpy.

with_mask_files = os.listdir(‘data/with_mask’)
print(with_mask_files[0:5])
print(with_mask_files[-5:])

without_mask_files = os.listdir(‘data/without_mask’)
print(without_mask_files[0:5])
print(without_mask_files[-5:])

Теперь мы будем хранить конвертировать его в файлы Numpy.

Изображения теперь преобразуются в 3-канальные массивы, каждый элемент массива содержит 3 параметра изображения (Значение RGB).

Предварительная обработка данных:

Теперь, прежде чем перейти к обучению модели, нам нужно изменить размеры массива с 3 каналов на один канал.

Теперь мы добавим все значения в один список, создадим еще один список меток, содержащих 0 и 1, и будем использовать train_test_split. для разделения набора данных на обучение и тестирование.

Обучение модели:

Мы будем использовать классификатор опорных векторов SVM, чтобы соответствовать нашей модели, а затем делать прогнозы.

Теперь мы можем делать прогнозы и проверять точность нашей модели.

Проверка матрицы путаницы:

Тестирование:

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

Давайте проверим еще одно изображение человека без маски.

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

Этот проект был продемонстрирован Рипаном Роем (я сам) на ENIGMA — хакатоне по машинному обучению на основе Intel oneAPI, организованном Студенческим клубом разработчиков Google Технологического университета Индиив партнерстве с Intel, GDG Cloud Kolkata и Hack4Bengal.

Спасибо за ваше время.