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

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

РАСПОЗНАВАНИЕ ЖЕСТОВОГО ЯЗЫКА С ПОМОЩЬЮ НЕЙРОННЫХ СЕТЕЙ

Артемов М.Д. 1, Воронова Л.И. 1
1Московский технический университет связи и информатики
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
В статье кратко описывается разработка системы распознавания дактилем жестового языка с применением искусственных нейронных сетей, в рамках курсового проекта «Machine Learning. Обучающиеся технические системы», научный руководитель – д. ф.-м. н., проф. Л.И. Воронова.

Жестовый язык – самостоятельный язык, состоящий из комбинации жестов, каждый из которых производится руками в сочетании с мимикой, формой или движением рта и губ, а также в сочетании с положением корпуса тела [3].

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

Различными положениями пальцев рук можно воспроизводить знаки, отдалённо напоминающие по очертанию буквы естественного языка. Такие знаки называются дактилемами, а набор таких знаков – дактильным алфавитом [4].

Дактильный алфавит содержит и русский алфавита, он представлен на рисунке 1.

Часть дактильного такого алфавита описывается статичными знаками, другая – динамическими. На рисунке 2 буквы, соответствующие дактилемам, распределены на статичные и динамические (24 статичных знака и 9 динамических).

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

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

Искусственная нейронная сеть – математическая модель, а также её программное или аппаратное воплощение, построенная по принципу организации и функционирования биологических нейронных сетей – сетей нервных клеток живого организма [1].

Рис. 1. Русский дактильный алфавит [5]

Буквы алфавита, соответствующие дактилемам

Категория

A, В, Г, Е, Ё, Ж, И, Л, М, Н, О, П, Р, С, Т, У, Ф, Х, Ч, Ш, Ы, Э, Ю, Я

Статичные

Б, Д, З, Й, К, Ц, Щ, Ь, Ъ

Динамические

Рис. 2- Категории дактилем

Самой простой нейронной сетью является перцептрон. Такая сеть имеет один слой нейронов на входе, один или несколько слоёв скрытых нейронов и выходной слой, как представлено на рисунке 3. Перцептрон используется для классификации и распознавания по набору признаков.

Рис.3: а) архитектура однослойного перцептрона,

б)- архитектура многослойного перцептрона

В задачах распознавания изображений хорошо себя зарекомендовала свёрточная нейронная сеть (СНС). В 2012 году эта сеть привлекла на себя большое внимание на конкурсе ImageNet, снизив имеющийся на тот момент рекордный показатель ошибки классификации с 26% до 15%, продемонстрировав при этом поразительное время обучения [6].

Используем СНС для распознавания дактилем жестового языка.

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

Первый внутренний слой в архитектуре сети – свёрточный, как показано на рисунке 6. Он принимает на вход вектор/матрицу значений, описывающий небольшую область исходного изображения, обычно имеющую форму квадрата (как показано на рисунке 4)., так называемое рецептивное поле. Передвигаясь по изображению с шагом 1 пиксель выделяются новые области тех же размеров и предаются на вход слоя. Это повторяется до тех пор пока не будет пройдено всё изображение.

Рис. 4. Область Рис. 5. Пример фильтра

выделения на изображении

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

(f ∗ g)[m, n ] = ∑ f [m − k, n − l] g [k,l]

k, l

Здесь f - исходная матрица изображения, g - ядро (матрица) свёртки - фильтр.

Фильтр выполняет поиск признаков на изображении. Признаком может быть прямая, кривая, простые цвета. Пример отображения фильтра изображён на рис. 5.

Неформально операцию свертки можно описать следующим образом - окном размера ядра g проходим с заданным шагом (обычно 1) всё изображение f, на каждом шаге поэлементно умножаем содержимое окна на ядро g, результат суммируется и записывается в матрицу результата. Полученное число передаётся на вход нелинейной функции – функции активации, которая может быть любой, но наиболее предпочтительны ReLU (функция «выпрямитель») или гиперболический тангенс. На выходе функции активации получаем число, которое становится ячейкой новой матрицы, называемой картой признаков. На одном свёрточном слое может быть несколько фильтров, которые формируют свои карты признаков.

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

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

Для уменьшения получаемых карт признаков между свёрточными слоями добавляют слои субдискретизации (как изображено на рисунке 6), которые выделяют из карты признаков элементы стоящие друг возле друга в форме прямоугольника или квадрата и ужимают их до меньшего размера. Для ужатия используют функцию максимума или расчёт среднего значения, или L2-нормирование и т.д.

Применение набора свёрточных слоёв и слоёв субдискретизации приводит исходное изображение к небольшому набору данных, который передаётся на вход полносвязной нейронной сети (многослойный перцептрон), состоящей из нескольких слоёв, выполняющих распознавание класс изображения [6].

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

Метод обратного распространения ошибки заключается в последовательном применении блоков действий к изображениям из обучающего набора, а именно:

  1. Применение алгоритма прямого распространения;

  2. Расчёт функции потерь;

  3. Применение алгоритма обратного распространения;

  4. Обновление значений фильтров.

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

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

Для поставленной задачи спроектирована архитектура нейронной сети со следующей последовательностью слоёв (как изображено на рисунке 6):

  1. Свёрточный слой, принимающий на вход участок изображения размером , образующий 16 карт признаков;

  2. Слой субдискретизации;

  3. Свёрточный слой, принимающий на вход участок изображения размером , образующий 32 карты признаков;

  4. Слой субдискретизации;

  5. Свёрточный слой, принимающий на вход участок изображения размером , образующий 32 карты признаков;

  6. Слой субдискретизации;

  7. Свёрточный слой, принимающий на вход участок изображения размером , образующий 64 карты признаков;

  8. Полносвязные слои;

  9. Выходной слой.

Рис. 6. Архитектура СНС

Слой субдискретизации ужимает областью карты признаков размером с помощью функции максимума.

Обучения сети проходит в 3 эпохи.

Для экспериментальной реализации СНС выбран пакет прикладных программ MATLAB, из которого задействован пакет Neural Network Toolbox [10].

Разработанная архитектура СНС будет реализована при помощи набора настроек, который будет использоваться при запуске функции trainNetwork, выполняющей обучение сети.

На этапе подготовки произведена запись видео в формате mp4, на котором регистрируются руки разных людей на белом фоне, изображающие дактилемы. Для упрощения выбраны статичные дактилемы обозначающие буквы «А», «В», «Г», «Е», «Ж», «О» и «С».

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

Рис. 7. Папки с изображениями каждой категории

Буква обозначаемая дактилемой

Название папки

«А»

1

«В»

2

«Г»

3

«Е»

4

«Ж»

5

«О»

6

«С»

7

Рис. 8. Буквы обозначаемые дактилемами и названия папок, в которых они хранятся

Таким образом, имеем набор чёрно-белых изображений, содержащий по 300 изображений каждой дактилемы, который будет разделён и использован для обучения и тестирования нейронной сети.

Для распознавания дактилем жестового языка написан скрипт на языке MATLAB, который загружает все изображения дактилем из локальной директории на компьютере в переменную MATLAB; производит разделение изображений на два набора: обучающий и тестировочный; задаёт настройку и запускает процесс обучения свёрточной нейронной сети. Скрипт выполняющий все эти операции представлен на рисунке 9 [11].

Рис. 9. Скрипт на языке MATLAB выполняющий обучение и тестирование СНС

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

В блоке 1 данного скрипта выполняется загрузка изображений в переменную digitData при помощи функции imageDatastore. Данная функция извлекает изображения из папок в директории 'D:Dactilems' и для указания категории каждого изображения использует наименование папки, в которой оно находится.

Настройка 'IncludeSubfolders' установленная в значение true говорит MATLAB о том, что при считывании нужно учитывать содержимое папок, размещённых внутри директории 'D:Dactilems', а за счёт настройки 'LabelSource' установленной в значение 'foldernames' MATLAB понимает, что класс считываемых изображений определяется наименованием папки, в которой они находятся.

В блоке 2 происходит деление исходного набора изображений. При этом обучающий набор данных содержит 70% исходного набора изображений каждой категории, а тестировочный – 30%.

Деление выполняется функцией splitEachLabel, для которой первым параметром указывается источник данных, а вторым – количество извлекаемых изображений.

Перед делением изображения перемешиваются в пределах каждой категории исходного набора. Это происходит благодаря тому, что последним параметром в функции splitEachLabel указано значение 'randomize'.

Спроектированная архитектура свёрточной сети программируется массивом настроек представленным в блоке 3 скрипта, изображённого на рисунке 9. Используются следующие настройки:

  • imageInputLayer – описывает размерность изображения на входе сети (длина, ширина, размерность);

  • convolution2dLayer – описание свёрточного слоя. Определяет размер фильтра (первый параметр), количество карт признаков на слое (второй параметр), размер дополнительных нулевых отступов по краю вектора данных на входе слоя – 'Padding',1 (третий и четвёртый параметры);

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

  • reluLayer – настройка, которая определяет функцию активации на свёрточном слое (ReLU);

  • maxPooling2dLayer – описание слоя субдискретизации, использующего функцию максимума. Определяет размер области субдискретизации (первый параметр), шаг субдискретизации – 'Stride',2 (второй и третий параметры);

  • fullyConnectedLayer – количество выходов сети;

  • softmaxLayer – функция активации на полносвязном слое;

  • classificationLayer – настройка, которая указывает, что на выходе сети должна производится классификация [12] .

В блоке 4 задаются параметры обучения СНС при помощи функции trainingOptions, которая возвращает настройку для обучения сети.

Функция trainingOptions принимает:

  • Количество эпох обучения – 'MaxEpochs',3 (второй и третий параметры);

  • Источник данных для тестирования сети – 'ValidationData',testDigitData (четвёртый и пятый параметры);

  • Частоту проверки точности предсказания сети – 'ValidationFrequency',30 (шестой и седьмой параметры)

  • Настройки отображения статистики обучения – 'Verbose',false (восьмой и девятый параметры) и 'Plots','training-progress' (десятый и одиннадцатый параметры). 'Verbose' определяет нужно ли подробная статистика, а 'Plots' указывает, что нужен график с изменениями показателей сети в ходе обучения.

Процесс обучения запускается функцией trainNetwork, как показано в блоке 5 скрипта на рисунке 9.

Функция trainNetwork принимает:

  • Набор обучающих данных (первый параметр);

  • Настройку с описанием архитектуры сети (второй параметр);

  • Настройку с описанием параметров обучения сети (третий параметр).

Во время обучения сети формируется статистика. На рисунке 10 изображённая статистика для уже обученной сети.

На верхнем графике рисунка 10 отображается динамика изменения точности сети. За первую эпоху обучения сеть превзошла 80% точность и на второй и третьей эпохах достигла 100% точности.

На нижнем графике рисунка 10 отображается динамика изменения ошибки сети. К концу первой эпохи обучения ошибка приблизительно составляла 0.25, а за время второй и третьей эпохи достигла нуля.

Обучение сети продолжалось 17 минут 56 секунд и в результате она обрела 100% точность.

Рис. 10. Статистика обучения СНС

Выводы

В статье рассмотрено применение свёрточной нейронной сети (СНС) для классификации дактилем.

Спроектирована архитектура СНС и описан набор её слоёв.

Описан процесс получения исходного набора изображений.

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

Выполнено обучение СНС продолжавшееся 17 минут 56 секунд, в результате которого сеть обрела 100% точность.

Представлена статистика обучения включающая: статистику изменения точности предсказания сети, статистику изменения ошибки предсказания сети.

Список источников и литературы
  1. Искусственные нейронные сети: https://ru.wikipedia.org/wiki/Искусственная_нейронная_сеть

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

  3. Жестовый язык: https://ru.wikipedia.org/wiki/Жестовые_языки

  4. Зайцева Г.Л. Жестовая речь. Дактилология: Учеб. для студ. высш. учеб. заведений. — М.: Гуманит. изд. центр ВЛАДОС, 2000. — 192 с. — (Коррекционная педагогика).

  5. Дактилемы русского языка: https://sites.google.com/site/daktilologia/daktilemy

  6. Adit Deshpande (2016). A Beginner's Guide To Understanding Convolutional Neural Networks: https://adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/

  7. Воронова Л.И., Генчель К.В., Воронов В.И. Проектирование архитектуры программного комплекса на основе нейросетевых технологий для распознавания жестового языка инвалидов с нарушением слуха. Москва, 2017.- 6с.

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

  9. Пак Гу Вон. О создании программного комплекса для распознавания эмоций с использованием методов машинного обучения. Москва, 2017.-7с.

  10. Официальный сайт Neural Network Toolbox MatLab: https://www.mathworks.com/products/neural-network.html

  11. Создание простой сети глубокого обучения для классификации: https://www.mathworks.com/help/nnet/examples/create-simple-deep-learning-network-for-classification.html

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