ПРИМЕНЕНИЕ НЕЙРОННЫХ СЕТЕЙ ДЛЯ РАСПОЗНАВАНИЯ ЖЕСТОВ - Студенческий научный форум

X Международная студенческая научная конференция Студенческий научный форум - 2018

ПРИМЕНЕНИЕ НЕЙРОННЫХ СЕТЕЙ ДЛЯ РАСПОЗНАВАНИЯ ЖЕСТОВ

Ежов А.А. 1, Воронов В.И. 1
1Московский технический университет связи и информатики (МТУСИ)
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
В статье кратко описывается разработка и тестирование системы распознавания жестов с применением нейронных сетей, в рамках курсового проекта “Machine Learning. Обучающиеся технические системы”.

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

Один из способов решения данной задачи является использование нейронных сетей.

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

Описание модели нейронной сети

Жестовый язык — самостоятельный язык, который состоит из комбинаций жестов. Они производятся руками в сочетании с мимикой, формой или движением рта и губ, а также в сочетании с положением корпуса тела. Этот язык в основном используются глухими и слабослышащими для коммуникации. Использование жестовых языков людьми без нарушения слуха вторично, но довольно распространено, так как нередко возникает потребность в общении с людьми с нарушениями слуха, являющимися пользователями жестового языка [8].

Рис. 1. Дактильная русская (ручная) азбука для глухонемых.

В жестовом языке, как и в любом языке есть азбука, которая состоит из дактилей. Дактили – буквы алфавита жестового языка. Различные положения пальцев воспроизводят знаки, функционально аналогичные буквенному алфавиту; и по очертанию многие из них отдалённо напоминают буквы печатного шрифта (в частности, «о», «м», «г», «ш»). Каждое положение пальцев при этом означает букву. На рис. 1. представлена вся русская дактильная азбука.

Сурдоперевод – процесс перевода устной речи на жестовый язык и обратно. Сурдопереводчик весьма нераспространенная профессия. Нелегко найти человека, который поможет вам понять глухонемого или слабослышащего. Поэтому люди с дефектом речи или слуха испытывают трудности при походе в поликлинику, магазин или просмотре телепередач. А что, если ваше мобильное устройство или любой другой девайс сможет перевести сказанное на языке жестов. Для решения этой задачи разрабатывается программа по распознаванию жестового языка, а именно его упрощенный вариант – дактильная азбука.

Цель программы распознать дактиль (определить к какому классу он относится), увиденный на картинке, и используя ранее полученные знания выводит результат на экран.

Для этой цели мы создали обучающий набор, состоящий из 3000 фотографий с изображением жестов. Их поделили на 6 классов – «П», «Р», «И», «В», «Е», «Т», каждому из которых относится по 100 картинок на каждый класс. Для упрощения использовались статичные жесты на однородном фоне. Исходное разрешение фотографий 4к.

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

Рис. 2 Представление фрагмента серого изображения в виде матрицы

Для использования изображения необходимо его загрузить, перевести в черно-белое, уменьшить и разложить в вектор. Для этого используем программу Octave и загружаем встроенный пакет «image», позволяющий обрабатывать изображения.

Рассмотрим процесс подробней.

Загрузим изображение функцией «imread». Получим трехмерную матрицу размером 4032 на 3024 на 3 пикселей. Каждый «слой» представляет яркость одного из цветов RGB (R - красный, G - зеленый, B -синий). На рис. 3. изображен данный процесс.

Рис. 3. Процесс загрузка цветного изображения

(красными прямоугольниками выделены матрица и функция)

Использоваться будут черно-белые картинки, поэтому переведем исходные изображения в черно-белый формат. Для этого используем функцию «rgb2gray». После чего получим матрицу размером 4032 на 3024 пикселей. Это видно на рис. 4.

Рис. 4. Процесс перевода изображения в черно-белое

(красными прямоугольниками выделены матрица и функция)

Если использовать изображения с исходным размером, то вычисление станет крайне долгим из-за большого размера исходной матрицы изображений. Поэтому целесообразней уменьшить их до размера 60 на 80 пикселей. Функция «imresize» позволяет это сделать. Результат изображен на рис. 5.

Рис. 5. Процесс уменьшения изображения

(красными прямоугольниками выделены матрица и функция)

Получившуюся матрицу разложили в вектор размером 4800. Все вектора записали в одной переменной X, получили матрицу 3000 на 4800, что соответствует 3000 изображениям. Матрица X является входными данными для нейронной сети. Сохранили получившуюся матрицу в файл «Data.mat». На рис. 6 представлена часть обучающего набора.

Рис. 6. Обучающий набор данных

Создали матрицу выходных значений y, в которую записали номер класса, к которому относится изображение. В результате этого получили вектор размером 3000. Далее сохранили его в файл «Data.mat».

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

Рис. 7. Многослойный персептрон с обратным распространением ошибок

Нейронная сеть может страдать от «переобучения», тогда она теряет способность к обобщению. Из-за этого программа не способна распознать новый материал, который не входит в обучающий набор. Для предотвращения этого разделили обучающие данные на 2 части: 70% случайно отобранных данных используются для обучения, а остальные 30% для тестирования.

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

Где m – количество обучающих примеров, x – входные признаки, y – выходные переменные, () – i - ый обучающий набор, - параметры (веса) сети.

Достигается это путем изменения весов θ нейронной сети. Перед обучением инициализируем их случайным образом. Обучения останавливается, когда разница между значениями функции на предыдущей и текущей итерации меньше заданной погрешности. В результаты обучения получаем оптимальные значения весов . Записали их в переменные «Theta1» и «Theta2» и сохранили в соответствующие файлы: «DataTheta1.mat» и «DataTheta2.mat». Чтобы в дальнейшем использовать для классификации новых изображений.

Тестирование разработанной нейронной сети

Для тестирования выбрали 6 фотографий, которые отображают слово «привет». Данные фотографии не относятся ни к обучающему набору, ни к тестовому. Они отображены на рис. 8.

Рис. 8. Фотографии для тестирования разработанной программы

Способом, описанным выше в статье, загрузили данные фотографии в переменную Test. Получили матрицу размером 6 на 4800. Что соответствует 6 векторам с изображениями. Затем загрузили веса нейронной сети из файлов «DataTheta1.mat» и «DataTheta2.mat». Получили две матрицы Theta1 и Theta2. Для классификации использовали функцию «predict», которой на вход подали матрицу Test и матрицы с весами. На выходе нейронной сети получаем вероятности того, что изображение относится к данному классу. Выбрали максимальную из них, так как это значит, что вероятнее всего изображение относится к этому классу.

Результат тестирования изображен на рис. 9.

Рис. 9. Результат работы разработанной программы

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

Программа распознала данные жесты как слово «тривет». Из чего следует вывод, что сеть не идеальна.

Заключение

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

  • нейронную сеть с более сложной структурой, например – сверточные;

  • синтаксический анализ для выявления ошибок в распознаваемых словах, на случай, когда сеть ошибется;

  • методы по ускорению вычислений;

  • улучшить обучающий набор, увеличить при надобности;

  • и многое другое.

Например, можно использовать библиотеку от Alex Krizhevsky, находящаяся в открытом доступе. Она реализует сверточные сети с использованием DropOut (исключение), предназначенного для предотвращения переобучения сети. Интерфейс написан на языке Python, ядро Cuda, которое позволит ускорить вычисления. С использованием этой библиотеки было выиграно несколько конкурсов Kaggle и достигнут лучший результата на ImageNet [9].

Список литературы

  1. Fjodor Van Veen (2016). The Neural Network Zoo (https://habrahabr.ru/company/ wunderfund/blog/313696/)

  2. Л.И.Воронова, В.И.Воронов. Machine Learning: регрессионные методы интеллектуального анализа данных: учебное пособие / МТУСИ.– М., 2017.- 92с.

  3. В. А.Терехов, Д. В. Ефимов, И. Ю. Тюкин Нейросетевые системы управления. — 1-е. — Высшая школа, 2002. — С. 184.

  4. Статья «Нейронные сети – от теории к практике» https://www.mql5.com/ru/articles/497

  5. Официальный сайт программного обеспечения Octave (GUI) – https://www.gnu.org/software/octave/

  6. KDnuggets (2016). Это нужно знать: Ключевые рекомендации по глубокому обучению (Часть 2). Перевод Станислава Петренко (http://datareview.info/article/eto-nuzhno-znat-klyuch..)

  7. Онлайн - курс на тему «Machine learning» https://www.coursera.org/learn/machine-learning/home/welcome автор: Standford University

  8. http://encyclopaedia.bid/википедия/Язык_жестов

  9. Библиотека, реализующая сверточные сети с использованием DropOut http://www.cs.toronto.edu/~kriz/

Просмотров работы: 422