Разработка модели распознавания изображений для американского языка жестов (ASL)

Способность эффективно общаться является важным аспектом человеческого существования, однако она остается проблемой для людей с нарушениями слуха или речи. К счастью, американский язык жестов (ASL) служит мостом, который соединяет этих людей с более широким обществом, позволяя им выражать себя и устанавливать значимые связи.

Цель проекта — научить модель распознавать язык жестов в режиме реального времени, используя веб-камеру в качестве источника ввода.

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

Моделирование данной проблемы как проекта глубокого обучения

Любой проект глубокого обучения можно сравнить с аналогией с 6 банками, каждая из которых представляет отдельный аспект проекта. В состав этих банок входят:

  1. Данные. Какие данные используются?
  2. Задача — Какова цель проекта?
  3. Модели. Какие модели будут использоваться в обучении?
  4. Потери показатели функции и производительности. Каков критерий оценки эффективности модели?
  5. Обучение и обучение. Как модели будут обучаться и учиться на данных?
  6. Тестирование. Насколько хорошо модель работает на тестовых данных?

Давайте рассмотрим эти банки один за другим

1. Что такое данные?

Набор данных, который мы собираемся использовать, — это набор данных Kaggle ASL Alphabet. Набор данных представляет собой набор изображений алфавитов американского языка жестов, разделенных на 29 папок, которые представляют различные классы.

Набор обучающих данных содержит 87 000 изображений размером 200x200 пикселей. Существует 29 классов, из которых 26 предназначены для букв от A до Z и 3 класса для ПРОБЕЛ, УДАЛЕНИЕ и НИЧЕГО. Эти 3 класса очень полезны в приложениях и классификации в реальном времени. В тестовых данных всего 29 изображений, но в этом проекте мы будем давать входные изображения напрямую через веб-камеру и предсказывать классы.

Визуализация некоторых обучающих примеров

Визуализация количества изображений для каждого класса

Из приведенной выше диаграммы видно, что мы имеем дело с проблемой сбалансированной многоклассовой классификации.

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

Чтобы предоставить изображения в качестве входных данных для модели глубокого обучения, нам необходимо выполнить некоторую предварительную обработку. Мы конвертируем входные изображения в тензоры после изменения их размера. Мы разделяем набор данных на наборы для обучения и проверки в соотношении 80:20, чтобы предотвратить переоснащение. Наконец, мы создаем пакеты из 32 изображений, чтобы ввести их в модель.

2. Какова задача?

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

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

3. Какие модели мы будем обучать?

Поскольку это проблема классификации изображений, у нас есть два варианта.

  1. Определите нашу пользовательскую модель и обучите модель с нуля
  2. Используйте трансферное обучение и загрузите предварительно обученную модель, измените последний слой модели в соответствии с заданным набором данных и обучите только параметры последних слоев.

Вот код, который мы написали для предварительно обученной модели

4. Функция потерь и показатель эффективности

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

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

5. Обучение модели и обучение

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

Мы обучили модель на бесплатном графическом процессоре (Kaggle P100 и Google Colab’s Tesla K80) в течение 10 эпох с использованием оптимизатора Adam с размером пакета 32, и вот результаты, которые мы получили.

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

6. Вывод

Во время обучения модели мы сохраняем обученные веса модели. Во время вывода мы загружаем эти веса непосредственно в модель.

Мы также используем библиотеку cv2 для чтения изображения с веб-камеры и выполняем те же преобразования тестового изображения, которые мы использовали для изображений поезда, прежде чем вводить данные в модель. Наконец, мы отображаем предсказанный класс в качестве вывода.

Вот результаты

Будущие работы

  1. Добавьте в эту модель RNN, LSTM и сети Attention, чтобы сделать ее сквозным приложением для обнаружения ASL, которое может предсказывать слова.

2. Добавьте лучшие методы для вывода изображения в режиме реального времени.

Ссылки

  1. Репозиторий Github — https://github.com/mishra-kunal1/ASL_classification
  2. https://www.kaggle.com/datasets/grassknoted/asl-алфавит
  3. https://www.guvi.in/