Цель работы - LMS - Высшая школа экономики

advertisement
Правительство Российской Федерации
Федеральное государственное автономное образовательное
учреждение высшего профессионального образования
"Национальный исследовательский университет
"Высшая школа экономики"
Факультет Компьютерных наук
Департамент программной инженерии
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА
по направлению 09.03.04 «Программная инженерия»
подготовки бакалавра
Программа классификации психофизиологической двигательной
активности человека, основанная на нейронной сети глубокого обучения
Студента группы № _____ ______________
Подпись
______________________
(Ф.И.О.)
________________
(Дата)
Научный руководитель
______________________
(должность, ученая степень)
______________
Подпись
______________________
( Ф.И.О.)
________________
(Дата)
Москва, 2015
Аннотация
Распознавание действий человека является актуальной задачей компьютерного зрения
и машинного обучения. Программы, решающие данную задачу, имеют широкое применение
в
создании
новых
интерфейсов
взаимодействия
человек-компьютер,
системах
сопровождения и интеллектуальных системах слежения. Благодаря новым технологиям
качество и скорость разработки подобных программ растёт.
Целью выпускной квалификационной работы является разработка программы
классификации психофизиологической активности человека, основанной на нейронной сети
глубокого обучения.
В работе предлагается решение задачи классификации психофизиологической
активности человека без учета внешней среды при помощи сенсора Kinect. Роль
классификатора играет свёрточная нейронная сеть, архитектура которой основана на
известной сети LeNet-5. В качестве данных для классификации используется Motion History
Image, построенный из силуэтов человека с датчика глубины сенсора Kinect.
В работе
экспериментально подобраны характеристики нейронной сети, обеспечивающие лучшее
качество работы программы.
Отчёт 39 страниц, 3 главы, 8 иллюстраций, 1 таблица, 51 источников, 5 приложений
Ключевые слова – распознавание действия человека, глубокое обучение, свёрточная
нейронная сеть, Kinect, Motion History Image
2
Annotation
Human action recognition (HAR) is a topical problem of computer vision and machine
learning fields of computer science. This kind of software has applications in many aspects of our
lives: human interaction interfaces, video surveillance systems, ambient-assisted living, etc. With a
new technologies the quality and the speed of development of HAR applications are increased.
The aim of this work is to develop a human action recognition based on deep neural
network.
This paper proposes a solution of the human action recognition without interactions with an
external environment with a usage of the Microsoft Kinect sensor. As a classifier the Convolutional
Neural Network is used. The architecture of the network is based on LeNet-5 Convolutional Neural
Network. Motion History Image is used to represent the human actions and classified by neural
network. Several experiments on network characteristics are provided to ensure the best quality of
the application.
Keywords – human action recognition, deep learning, convolutional neural network, Kinect,
Motion History Image
3
Основные термины, определения и сокращения
API (Application Programming Interface) – набор готовых элементов программного
кода, предоставляемый библиотекой стороннему разработчику.
CNN (Convolutional Neural Network) – свёрточная нейронная сеть. Один из
распространенных видов глубоких нейронных сетей, специализирующихся на работе с
изображениями.
DBN (Deep Belief Network) – генеративная модель и известная глубокая нейронная
сеть.
Deep learning (глубокое обучение) – общее название для набора алгоритмов
машинного обучения для моделирования сложных абстракций из входных данных.
GUI (Graphical User Interface) – графический интерфейс пользователя.
Kinect v2 (он же Kinect for Xbox One) – бесконтактный сенсорный игровой
контроллер последней версии, выпущенный для игровой приставки Xbox One. Для работы с
персональным
компьютером
на
операционной
системе
Windows
дополнительно
используется адаптер.
MEI (Motion History Image) – изображение, построенное суммированием разниц
последовательных бинарных изображений. Предложено для хранения и представления
действия человека.
MHI (Motion History Image) – модификация MEI. Интенсивность пикселя зависит от
времени возникновения действия в этом пикселе.
PIL (Python Imaging Library) – библиотека для работы с изображениями на языке
Python.
RGB-камера – камера, предоставляющая изображение в трёх цветовых компонентах
– красном, зеленом и синем. Некоторые камеры оснащены инфракрасным датчиком глубины
и имеют название RGB-D.
SIFT (Scale Invariant Feature Transform) -- известный алгоритм для выделения и
построения локального дескриптора для изображения. SURF (Speeded Up Robust Feature)
является модификацей алгоритма SIFT.
Theano – библиотека на языке Python для решения задач машинного обучения и
глубокого обучения.
Глубокие нейронные сети -- нейронные сетями глубокими нейронными сетями
называются сети, имеющие несколько скрытых слоёв нейронов.
4
Содержание
Аннотация...................................................................................................................................... 2
Annotation ...................................................................................................................................... 3
Основные термины, определения и сокращения ........................................................................ 4
Содержание................................................................................................................................... 5
Введение ....................................................................................................................................... 6
Цель работы .............................................................................................................................. 7
Задачи ........................................................................................................................................ 7
1.
2.
3.
Обзор методов распознавания действий человека ............................................................. 8
1.1.
Программы распознавания действий человека ............................................................ 8
1.2.
Классификаторы ........................................................................................................... 13
1.3.
Базы данных видео действий людей ........................................................................... 14
1.4.
Выводы по главе 1 ........................................................................................................ 16
Модель нейронной сети глубокого обучения ..................................................................... 17
2.1
Структура свёрточной нейронной сети ........................................................................ 17
2.2
Обучение свёрточной нейронной сети ........................................................................ 19
2.3
Построение MHI ............................................................................................................ 22
2.4
Используемая структура нейронной сети .................................................................... 23
Разработка программы распознавания движений ............................................................. 24
3.1
Инструменты разработки.............................................................................................. 24
3.2
Работа с Kinect и построение MHI ............................................................................... 25
3.3
Классификация MHI ...................................................................................................... 26
3.4
Особенности Theano..................................................................................................... 28
3.5
Свёрточная нейронная сеть ......................................................................................... 29
3.6
Выбор характеристик нейронной сети ......................................................................... 31
Заключение ................................................................................................................................. 34
Список источников ...................................................................................................................... 35
5
Введение
Задача распознавания действий человека с видеопотока (камера, видео или набор
последовательных изображений) на данный момент является актуальной и развивающейся
областью компьютерной науки. Несмотря на это, сама по себе данная тема не является
новой и представляет собой логическое обобщение задачи распознавания жестов. Данная
работа фокусируется только на действиях человека без учета внешней среды и
взаимодействия с окружением, а также на действиях с участием тела человека, что
исключает сужения данной работы до задачи распознавания жестов.
Задача распознавания действий человека с видеопотока лежит в смежной области
двух дисциплин компьютерной науки: компьютерного зрения и машинного обучения.
Процесс
решения
задачи
представляет
собой
определение
типа
действия
из
последовательности изображений при известном наборе возможных действий. При помощи
алгоритмов компьютерного зрения из видеопотока выделяются особенности (features),
которые передаются в обученный классификатор, где происходит выявление класса
переданных данных. Доступные публикации предлагают широкий выбор различных
подходов для решения этой задачи [6, 7, 8]. Ранее изменениям и модификациям подвергалась
часть, связанная с выделением особенностей из видеопотока (последовательности
изображений), однако в последнее время больший упор стал делаться на улучшение
классификации, в частности, использование искусственных нейронных сетей [12, 34].
Интерес к последним возрос после различных публикаций об эффективности глубоких
нейронных сетей [29]. Например, свёрточные нейронные сети благодаря своему строению
могут классифицировать изображения с учётом различных трансформаций, таких как
поворот, масштабирование, шумы и искажения [18].
Развитие технологий и их доступность позволяют улучшать производительность
существующих программных решений и открывают возможности реализации ранее
разработанных теоретических подходов. Так же различные задачи, которые раньше
приходилось решать программным путем, в настоящее время решаются на аппаратном
уровне. Хорошим примером касательно данной работы является появление видеокамер со
встроенным инфракрасным сенсором глубины. С такой камерой уже нет необходимости в
наличии нескольких простых камер и программной реализации алгоритмов для получения
карты глубины, все данные доступны разработчику сразу в режиме реального времени.
Развитие аппаратных средств пошло дальше, сейчас доступны технологические продукты,
которые предоставляют программистам высокоуровневое API. Например, Leap Motion
6
позволяет разработчикам получать информацию о различных жестах, а Kinect предоставляет
информацию о построенном скелете [42, 46].
Интерес к данной теме обусловлен широкой применимостью подобных решений.
Новые интерфейсы взаимодействия человек-компьютер; системы слежения, реагирующие
на подозрительную активность и предупреждающие оператора об этом; системы
сопровождения, наблюдающие за состоянием людей и предупреждающие об опасности и
многое другое, уже создаются при помощи использования подобных технологий [5, 9, 12].
Цель работы
Целью
данной
работы
является
разработка
программы
классификации
психофизиологической двигательной системы человека, основанной на нейронной сети
глубокого обучения.
Разрабатываемая программа должна предоставлять пользователю возможность
определения следующих действий: хлопки в ладони, прыжки на месте, взмахи двумя руками,
взмахи правой рукой и взмахи левой рукой. Программа должна работать с сенсором Kinect
v2, выбранным в силу подходящих характеристик.
Помимо использования по прямому назначению программа позволит менять
реализации модели нейронной сети сторонними разработчиками для расширения и/или
тестирование своих моделей.
Задачи
Для достижения поставленной цели необходимо решить следующие задачи:

Рассмотреть существующие подходы в области определения действий человека;

Изучить способы построения и обучения искусственных глубоких нейронных
сетей;

Найти обучающие выборки;

Определить данные для тестирования нейронной сети;

Выбрать программные средства реализации;

Разработать архитектуру программы и пользовательский интерфейс;

Разработать программу и провести тестирование;

Разработать техническую документацию.
7
1. Обзор методов распознавания действий человека
1.1.
Программы распознавания действий человека
Как было написано ранее, задача распознавания действий человека лежит на
пересечении двух областей компьютерной науки, поэтому программу можно поделить на две
части:
1. Преобразование видеопотока или последовательности изображений в вид, который
будет приниматься классификатором;
2. Классификация данных, полученных из первой части программы;
Помимо этого, необходимо разработать GUI, который будет отображать результат
работы программы.
Первую часть программы можно разделить на два этапа: получение видеопотока
(последовательности изображений) и выделение особенностей из входных данных. Далее в
работе видеопоток и последовательность изображений применяются как взаимозаменяемые
термины.
1.1.1. Работа с видеопотоком
В настоящее время доступно множество различных видеокамер. Они бывают как
отдельными периферийными устройствами, так и встроенными (например, в ноутбуках). У
каждого устройства есть характеристики: разрешение, угол обзора, формат. Помимо
привычных RGB камер становятся доступны камеры с различными встроенными датчиками.
Очевидно, что писать для каждой из камер свою программу для работы с видеопотоком
затратно. Известная библиотека OpenCV [47] предоставляет возможность работы с
различными источниками данных (от видеопотоков до файлов), скрывая от разработчика
детали работы с камерой. Так же новая и развивающаяся библиотека OpenNI [48]
фокусируется на работе с сенсорами современных видеокамер. Для видеокамеры Kinect есть
официальная библиотека Microsoft Kinect SDK [46].
a) OpenCV
OpenCV (Open Source Computer Vision) – библиотека с открытым исходным кодом, в
которой реализовано более 2500 классических и современных алгоритмов компьютерного
зрения и машинного обучения с различными оптимизациями для GPU (графический
процессор) и CPU (центральный процессор). Она распространяется под свободной лицензией
BSD, что позволяет изменять и использовать её в коммерческих целях. Библиотека
поддерживает языки программирования C++, C, Python, Java и Matlab, и операционные
8
системы Windows, MacOS, Linux и Android. Так же существует обёртка EmguCV для работы
с платформой .NET, разработанная открытым сообществом программистов.
В OpenCV изображения хранятся в структуре Mat [39], которая представляет собой
массив массивов чисел с плавающей точкой. Например, если исходное изображение является
цветным (в RGB формате), то в структуре Mat оно будет представлено массивом массивов
размера три, в каждом из которых будет храниться нормализованное значение
соответствующей цветовой компоненты для каждого пикселя. Работа с видео в OpenCV
представляется в виде работы с каждым отдельным кадром данного видео в формате Mat.
Последняя актуальная версия на момент написания работы – 2.4.9.
В EmguCV для работы с изображениями используется специальный класс
Image<TColor, TDepth>, где TColor – класс цвета изображении, а TDepth – глубина
цвета. Версионность данной обёртки копирует версионность библиотеки OpenCV.
b) OpenNI
OpenNI (Open Natural Interaction) – библиотека с открытым исходным кодом,
предоставляющая стандартизированный API для работы с различными датчиками (RGB,
глубины, инфракрасные, аудио датчики). Так же сообществом поддерживаются и
распространяются библиотеки, созданные разработчиками на основе OpenNI [45].
При работе с источником данных в OpenNI можно указать, данные с какого датчика
следует использовать. Выбранные данные предоставляются пользователю покадрово в виде
экземпляра
информацию
класса
о
VideoFrameRef
хранимом
кадре.
[44],
Данные
который
из
содержит
объекта
класса
всю
необходимую
VideoFrameRef
конвертируются в структуру Mat без каких-либо трудностей [41]. Последняя актуальная
версия на момент написания работы – 2.1.
c) Kinect SDK
Kinect SDK – официальная библиотека для работы с сенсорами Kinect от компании
Microsoft. Библиотека предоставляет разработчику как низкоуровневые функции для работы
с данными с датчиков, так и высокоуровневые функции для работы с абстракциями, такими
как объекты на изображении. Библиотека работает только на операционной системе
Windows.
Сенсор Kinect имеет инфракрасный датчик, RGB и датчик глубины. Для каждого вида
данных имеется свой класс для предоставления данных разработчику. В случае данных с
сенсора глубины используется класс DepthFrame[]. Данные в нём представлены в виде
9
массива целочисленных значений каждого пикселя полученного изображения. Последняя
актуальная версия на момент написания работы – 2.0.
1.1.2. Выделение особенностей из видеопотока
Выделение особенностей из видеопотока (построение дескриптора для видеопотока)
является серьёзной математической задачей, так как необходимо учитывать множество
нюансов (разрешение изображения, яркость картинки, устойчивость к шумам и прочее), в то
же время сохраняя общность подхода. Некоторые решения подразумевают построение
дескриптора для всей последовательности изображений на основе пространственных и
временных измерений, другие выделяют особенности для каждого кадра, перекладывая
ответственность за связь со временем на последующие этапы обработки данных или
классификатор.
В своем обзоре Ronald Poppe разделяет способы представления изображения на две
категории: глобальную и локальную [26]. В случае глобального представления при помощи
различных техник (например, вычитание фона или слежения за объектом) выделяется
область интереса, которая и является дескриптором изображения. Плюс данного подхода в
том, что дескриптор сохраняет полезную информацию, которую можно интерпретировать
различными способами, однако он является слабо устойчивым к искажениям и требует
аккуратного вычисления. Локальное представление, в противоположность глобальному,
является подходом, при котором выделяются и отслеживаются какие-либо независимые
точки на изображении (points of interest). Данный подход более устойчив к искажениям и
шуму, но может потребовать дополнительной обработки входных данных.
Рассмотрим
самые
популярные
подходы
в
построении
дескрипторов
для
последовательности изображений.
a) Выделение силуэта
Выделение силуэта является одним из примеров глобального представления
изображения. Несмотря на такие минусы, как зависимость от наличия шумов, искажений и
ракурса съемки, силуэт сохраняет в себе много полезной информации. Существует
множество публикаций, в которых описаны способы построения дескрипторов видеопотоков
при помощи силуэтов.
Bobick и Davis в своей работе [4] предложили выделять силуэт из каждого кадра,
получать изображения разницы между соседними кадрами и строить окончательное
изображение, накладывая полученные изображения друг на друга. Полученное изображение
получило название Motion Energy Image (MEI, рис. 1). Помимо этого, вводится понятие
10
Motion History Image (MHI, рис. 2) – изображение, интенсивность каждого пикселя которого
зависит от времени возникновения действия в данной точке.
MEI и MHI могут быть использованы как вместе, так и по отдельности. Как можно
заметить, MHI сохраняет в себе информацию о времени для каждого кадра. Минусом
использования MHI является то, что такое изображение не подходит для продолжительных
действий или последовательности действий, так как такой алгоритм работает только со
статичными камерами, что, как следствие, будет вызывать накладывание изображений друг
на друга. Опубликованы работы, в которых для дальнейшей обработки полученных
изображений считаются Hu-моменты [4] или применяется преобразование Радона [32], что
позволяет добавить инвариантность к переносу и масштабированию у полученных
изображений.
Другой подход в работе с силуэтами для отражения
временного
пространства
представлен
в
работе
Blank
[2].
Выделенные силуэты складываются в фигуру в трехмерном
пространстве, где роль третьего измерения играет время. Затем
особенности из полученной фигуры выделяются при помощи
решения приведённого в [2] уравнения. Как и для подсчета MEI и
Рисунок 1
MHI, данный подход предполагает вычитание фона для каждого
кадра, что накладывает некоторые ограничения на работу алгоритма.
Yan Ke с коллегами в своей работе описывают улучшенный
алгоритм,
основанный
на построении
объёмной
фигуры
из
изображений силуэтов человека и времени в роли третьего
измерения, который позволяет работать без покадрового вычитания
Рисунок 2
фона [19].
b) Построение оптического потока
Построение оптического потока (рис. 3) является одним из известных и старейших
подходов в компьютерном зрении. Данный подход является примером способа построения
глобального представления изменения изображения с учетом времени. Для каждого пикселя
вычисляется его скорость и направление изменения физического положения. Такой подход
чувствителен к изменению изображения (помехи, изменение освещения), однако широко
используется для различного рода задач. Обзор по использованию и модификациям
оптического потока представлен в работе Denis Fortun, Patrick Bouthemy, Charles Kervrann
[13]. Учет физических способностей человека для улучшения работы алгоритма определения
11
действий представлено в работе [10], где авторы предлагают разделить регионы интереса на
три горизонтальные части (для головы, тела и туловища).
с) Выделение точек интереса
Выделение
изображении
локальных
позволяет
точек
интереса
абстрагироваться
на
от
изображений, тем самым делая выделение объекта на
изображении необязательным этапом. К тому же
добавляется некоторая инвариантность к трансляции,
масштабированию,
подходе
ракурсу.
видеопоток
локальных
Обычно
описывается
дескрипторов,
которые
при
таком
коллекцией
подвергаются
Рисунок 3
классификации в дальнейшем.
Laptev и Lindeberg в работе [24] модифицировали алгоритм детектора углов Харриса
для работы с 3D. Для пикселя на изображении вводится понятия соседа, который
подразумевает соответствующие пиксели в соседних кадрах. Алгоритм рассматривает кубы
из пикселей определённого размера и выделяет те регионы, где происходит наибольшее
изменение как в пространственном, так и во временном измерении, далее в этих кубах
выделяются точки интереса. Одним из недостатков такого подхода является относительно
небольшое количество полученных стабильных точек интереса. Так же есть и другие
подходы для выделения точек интереса при рассмотрении видео как 3D объекта. Rapantzikos
в работе [27] использует 3D дискретные вейвлеты для выделения регионов интереса. Wong и
Cipolla
[35]
рассматривают
подпространства
в
пространстве
видео,
объединяя
коррелирующие между собой части в одно общее, тем самым определяя место нахождения
точек интереса, связанных с движением.
Для
работы
с
точками
интереса
существует
множество различных алгоритмов. Некоторые из них
вдохновлены алгоритмами определения точек интереса в
статических
изображениях.
Существует
множество
различных модификаций алгоритма SIFT (Scale Invariant
Feature Transform) [23] и SURF (Speeded Up Robust Features)
[33].
Рисунок 4
12
d) Другие подходы
Другим распространённым подходом является построение скелета человека.
Алгоритмы подобного рода делятся на две группы: подход на основе шарнира (joint-points) и
на основе частей тела человека. В первом случае скелет рассматривается как набор
отдельных точек, которые задают движение изменением своего положения [17]. Во втором
случае подход основывается на том, какие части тела участвуют в движении. Это позволяет
моделировать движения отдельных частей тела и их взаимодействие [30].
Jhuang в работе [25] опирался на исследования работы зрительной системы человека и
представил алгоритм, работающий в несколько этапов, обеспечивающий некоторую
инвариантность к положению объекта на изображении.
1.2.
Классификаторы
В данной работе в роли классификатора будет использована глубокая искусственная
нейронная сеть. Однако прежде чем перейти к обзору, следует ответить на вопрос, чем
глубокая нейронная сеть отличается от обыкновенной. В публикации [1] LeCun даёт
определение глубоким архитектурам как каскадам параметризированных нелинейных
модулей, имеющих обучаемые параметры на всех уровнях. Первая искусственная нейронная
сеть (перцептрон, 1960 год) [28] представляла собой сеть из входного, выходного и одного
скрытого слоя. Несмотря на простое строение, такая сеть была способна обучаться и
различать разные простые объекты.
Позже рассматривались перцептроны, имеющие несколько скрытых слоев. Для их
обучения использовался известный алгоритм обратного распространения ошибки [11]. Затем
интерес к нейронным сетям угас, так как сети со скрытыми слоями требуют долгого
обучения, к тому же были разработаны новые методы классификации, которые показывали
хорошие результаты и были удобнее в обучении (например, метод опорных векторов).
В последние два десятилетия глубокие нейронные сети вновь возродили интерес к
нейронным сетям, показывая хорошие результаты при решении таких задач, как определение
объекта на изображении [37, 38], работа с аудио [14] и других [36].
Из глубоких нейронных сетей популярными на данный момент являются свёрточные
нейронные сети (Convolutional Neural Network, CNN) и сети глубокого доверия (Deep
Belief Network, DBN).
13
a) Свёрточная нейронная сеть
Структура свёрточной нейронной сети вдохновлена изучением зрительной коры
мозга кошачьих. Благодаря перенятым особенностям, CNN имеет устойчивость к шумам
входных данных и их трансформации. Особенность строения сети, уменьшающая
количество обучаемых параметров, улучшает скорость обучения данной сети в сравнении с
другими подходами. Структура глубокой CNN была представлена в 1998 году в работе
LeCun [20]. CNN является нейронной сетью прямого распространения. Обучение сети
происходит
с
учителем
при
помощи
модифицированного
алгоритма
обратного
распространения ошибки. В 2010 году свёрточная нейронная сеть заняла первое место в
ежегодном соревновании определения объектов на изображении ImageNet LSVRC-2010.
Детали архитектуры и обучения сети освещены в публикации победителей соревнования
[22]. Помимо работы с изображениями уже существуют модификации сети для работы с
видео. Одним из примеров является свёрточная нейронная сеть, получившая название 3D
CNN, которая используется для распознавания действий человека [37].
b) Сеть глубокого доверия
DBN является не только нейронной сетью, но и порождающей моделью (то есть
может использоваться для генерации данных). Впервые DBN упоминается в 2006 году в
публикации Hinton [15]. Как и другие глубокие нейронные сети, DBN имеет несколько
скрытых слоёв, которые состоят из стохастических переменных. Помимо архитектуры сети
Hinton предложил быстрый способ обучения DBN, который заключается в поочередном
обучении скрытых слоев сети на первом этапе (скрытые слои представляют собой скрытые
слои отдельных простых ограниченных машин Больцмана – стохастической рекуррентной
искусственной нейронной сети[]). Для финального обучения в сеть добавляется ещё один
слой нейронов, играющий роль выходного, и к получившейся модели применяется метод
обратного распространения ошибки. После обучения добавленный слой убирается. Как
можно заметить, DBN может обучаться как с учителем, так и без учителя. Существуют
публикации для определения изображения [15] и действия человека[12] на основе DBN.
1.3.
Базы данных видео действий людей
Данные для обучения и тестирования программы крайне важны, так как качество
полученного программного продукта полностью зависит от качества данных для обучения.
14
Тема данной работы накладывает следующее требование на существующие базы данных –
наличие видеозаписи (последовательности изображений с временными метками) с датчика
глубины. Рассмотрим три существующие базы данных: MHAD, MIVIA и UTKinect. Все три
базы предоставляют доступ к записанным действиям человека с видеокамеры Kinect вместе с
данными с датчика глубины.
a) MHAD
MHAD (Multimodal Human Action Database) – база данных университета Беркли [40],
созданная специально для распознавания действий человека. База предоставляет большой
объем разных данных с различных датчиков. В состав базы входят записи 11 различных
действий. В записи каждого из них принимали участие 12 человек разного пола и
комплекции. Так же, каждое действие с каждым участником записано 5 раз. Во время записи
человек повторяет заданное действие несколько раз (от двух до пяти).
База данных предоставляет записи не только с обычных камер, но и с нательных
датчиков,
микрофона,
двух
камер
Kinect
(направленных
друг
против
друга
и
синхронизированных по времени между собой). Данные с датчика глубины сенсора Kinect
имеют формат PGM с разрешением 640x480 и отдельными текстовыми файлами с
покадровыми временными метками. Стоит отметить удобство использование сайтом,
который предоставляет возможность отдельно выбирать действие, субъект, количество
повторов, источники данных.
b) MIVIA
MIVIA база данных предоставляет записи семи различных действий, записанных с
участием 14 человек (7 мужчин и 7 женщин) [43]. Каждое действие записано по два раза. Так
же, как и в MHAD базе данных, действия представляются в виде последовательности
изображений глубины. Доступ к материалам выдаётся только по запросу.
c) UTKinect
UTKinect база данных создана специально для исследований в области определения
действий человека из последовательности изображений глубины [48]. Создатели базы
данных записали 10 действий, совершенных 10 субъектами. Каждый субъект совершает
действие на записи дважды. База предоставляет данные с датчика глубины, RGB
изображение и данные о покадровом нахождении шарниров скелета (skeleton joint locations).
15
Формат данных изображений глубины представляет собой сохраненные при помощи
библиотеки OpenCV изображения в разрешении 320х240 в формате XML.
1.4.
Выводы по главе 1
В данной работе выделение особенностей в видеопотоке будет происходить в виде
вычисления MHI, так как данный подход прост в реализации и хорошо комбинируется со
способностями свёрточной нейронной сети. Для этого будет использована официальная
библиотека Kinect SDK.
Свёрточная нейронная сеть будет использоваться в роли классификатора в силу своих
свойств (некоторая инвариантность к положению, масштабированию входных данных) и
скорости обучения.
Для обучения модели искусственной нейронной сети будет использоваться база
данных MHAD, так как она предоставляет большой выбор данных, собранных при помощи
сенсоров Kinect, для составления обучающей и тестирующей выборки.
16
2. Модель нейронной сети глубокого обучения
2.1 Структура свёрточной нейронной сети
Свёрточная нейронная сеть впервые была представлена в публикации Fukushima в
1980 году [38] под названием Неокогнитрон. Позже Yann LeCun [20], известный своими
работами по распознаванию рукописных цифр (LeNet [21]), возродил интерес к CNN и внёс
свой вклад в их развитие. В настоящее время множество публикаций, связанных с
распознаванием образов/объектов/паттернов в изображении и видео, используют CNN и
демонстрируют хорошие результаты по сравнению с другими подходами [41, 43].
CNN представляет собой искусственную нейронную сеть прямого распространения.
Структура сети создана на основе исследований зрительной коры мозга [16] 1969 года, в
ходе которых выяснилось, что в данной части коры существует иерархия нейронов.
Особенностью строения является то, что каждый нейрон соединен лишь с небольшим
регионом нейронов из предыдущего слоя.
2.1.1. Свёрточный слой нейронов
В связи с открытием иерархии нейронов в зрительной коре было решено перенести
эту структуру в искусственную нейронную сеть. В типичной искусственной нейронной сети
все нейроны из предыдущего слоя имеют соединение с нейронами следующего. В
свёрточной нейронной сети нейрон высшего слоя имеет соединения только с определенной
группой нейронов предыдущего слоя. Так как CNN обычно работает с изображением, то в
качестве группы нейронов рассматривается набор соседних пикселей на изображении. Такая
группа нейронов называется восприимчивым полем (receptive field), и их соединения с
нейроном высшего слоя называются выделителем признаков
(feature extractors). Например, на рис. 5 изображена простая
нейронная сеть, где восприимчивое поле имеет размер 3х1 (как
для слоя m-1, так и для слоя m). Выбор шага применения
определителя признаков задаётся исходя из здравого смысла, в
Рисунок 5
примере он равен 1, для изображений большого разрешения можно рассматривать вариант с
шагом 2 или 3. Уменьшение количества соединений в сети улучшает скорость и простоту
обучения.
Другой важной особенностью CNN является наличие общих весов для всех
определителей признаков. Матрица весов, называемая ядром свертки, применяется ко всем
восприимчивым полям предыдущего слоя, таким образом образуя следующий слой – карту
признаков (feature map). Естественно, для определенного слоя возможно наличие
17
нескольких
ядер
свертки,
каждое
из
которых
будет
образовывать свою карту признаков для следующего слоя. На
рис. 6 соединения с одинаковым весом выделены одним
цветом.
Как
можно
заметить,
для
построения
карты
Рисунок 6
особенности слоя m-1 при заданном восприимчивом поле необходимо только 3 параметра
веса и один параметр порогового значения нейрона.
Объединяя две особенности, описанные выше, получим так называемый свёрточный
слой – основу свёрточной нейронной сети.
2.1.1. Pooling слои
Pooling – способ уменьшить размерность определённого слоя в CNN, оставив только
необходимую информацию [3]. Благодаря способу построения карт признаков различные
особенности могут быть выявлены на всем изображении, однако они не будут инвариантны к
собственному положению. Благодаря pooling слоям происходит уменьшение размерности
слоя, что добавляет некоторую инвариантность к положению особенностей на изображении.
Pooling-слой определяется собственной функцией. Карта особенностей разбивается на
заданное количество одинаковых регионов, к каждому из которых применяется poolingфункция, и, в зависимости от функции, на следующий слой передаются значения размером
одного региона.
Распространенными pooling-функциями являются так называемые max-pooling и
average-pooling. Как понятно из названия, max-pooling функция выбирает регион на карте
особенностей с суммарным максимальным значением. Минусом такой функции является то,
что не максимальные выходные значения нейронов будут игнорироваться полностью.
Average-pooling функция считает среднее значение соответствующих нейронов во всех
регионах. Минус такого подхода в том, что он может работать некорректно в том случае,
когда выходные значения нейронов будут отрицательными или небольшими. Особых
предписаний по использованию определенного pooling слоя нет.
2.1.2. Функции активации искусственного нейрона
Значение искусственного нейрона определяется применением функции активации к
входным данным. Некоторые функции позволяют перейти к работе с непрерывными
значениями (в отличие от бинарных со значениями 0 и 1), что позволяет обучать
искусственную нейронную сеть алгоритмами градиентного спуска. Распространенными
18
функциями активации является сигмоида (рис. 7а), гиперболический тангенс (рис. 7б) и
кусочно-линейная функция (рис. 7в).
а)
б)
𝑓 𝑥 = tanh 𝑥
1
𝑓 𝑥 =
1 + 𝑒 −𝑥
в)
𝑓 𝑥 = max 0, 𝑥
Рисунок 7
Специальных предписаний по поводу использования той или иной функции
активации нет. Обзор со сравнением различных функций активаций [18] показывает, что
комбинация функций в разных слоях может привести к улучшению результатов работы сети
в целом.
2.2 Обучение свёрточной нейронной сети
2.2.1. Градиентный спуск
В основе обучения нейронных сетей используется метод, который называется
методом градиентного спуска. Метод находит локальный экстремум функции при
итеративном вычисления градиента и перемещения вдоль него. Градиент – вектор, который
в заданной точке в n-мерном пространстве (n – количество параметров функции) показывает
направление наибольшего возрастания значения функции. Модуль градиента показывает на
скорость возрастания значения. В прямоугольных системах координат формула градиента
определяется следующим образом (1):
∇𝑓 𝑥1 , … , 𝑥𝑛 =
𝜕𝑓
𝜕𝑥1
𝑒1 + ⋯ +
𝜕𝑓
𝑒
𝜕𝑥𝑛 𝑛
(1)
где 𝑒1 , … , 𝑒𝑛 − единичный вектор
Пример градиента (3) для функции (2) в 3-хмерном пространстве:
𝑓 𝑥, 𝑦, 𝑧 = 2𝑥 + 𝑦 3 − ln 𝑧
1
∇𝑓 𝑥, 𝑦, 𝑧 = 2 + 3𝑦 2 − 𝑧
(2)
(3)
где 𝑒1 , … , 𝑒𝑛 − единичный вектор
2.2.2. Алгоритм обратного распространения ошибки
Для обучения свёрточной нейронной сети используется известный алгоритм
обратного распространения ошибки. Алгоритм решает задачу минимизации значения
19
функции потерь, обновляя все веса искусственной нейронной сети при помощи метода
градиентного спуска. Работа алгоритма имеет следующие требования: необходимо знать
правильный ответ во время обучения, функция активации искусственного нейрона должна
быть дифференцируемой.
Работу алгоритма можно разделить на два этапа: на первом этапе в нейронную сеть
подаются данные для обучения, на втором считается расхождение между ожидаемым и
реальным значением на каждом искусственном нейроне в обратном направлении сети.
Перед началом обучения веса сети задаются случайными значениями. После
вычисления результата работы сети на обучающих данных сначала считается ошибка на
нейронах выходного слоя. Ошибка считается как произведение частной производной
функции активации данного нейрона на разницу между ожидаемым и полученным
значением. Для случая, когда функцией активации является сигмоида, вычисление ошибки
производится по формуле
𝛿𝑖 = 𝑜𝑖 1 − 𝑜𝑖 𝑜𝑖 − 𝑒𝑥𝑝𝑖 ,
(4)
где 𝑖 – индекс нейрона в выходном слое, 𝑜𝑖 – полученное значение на 𝑖-том нейроне, 𝑒𝑥𝑝𝑖 –
ожидаемое значение на 𝑖-том нейроне. Новое значение веса считается по формуле
𝑤𝑘𝑖 = 𝑤𝑘𝑖 + 𝛼𝛿𝑖 𝑜𝑘 ,
(5)
где 𝑘 – индекс нейрона из предыдущего слоя, 𝑜𝑘 – полученное значение на 𝑘-том нейроне,
𝑤𝑘𝑖 – вес соединения между 𝑘 -тым и 𝑖 -тым
нейроном, 𝛼 – коэффициент обучения. Для
обучения скрытых слоев формула выглядит иначе, так как неизвестно ожидаемое значение
нейрона. Новая формула примет вид
𝛿𝑖 =𝑜𝑖 1 − 𝑜𝑖
𝑗 𝛿𝑗 𝑤𝑖𝑗 ,
(6)
где 𝑖 и 𝑗 – индексы нейронов из соседнего слоя.
2.2.3. Пример применения алгоритма
Рассмотрим следующую сеть, изображенную на рис. 8. Входной слой образуют два
нейрона 𝑖𝑛1 и 𝑖𝑛2, скрытый слой представлен в виде двух нейронов 𝑛1 и 𝑛2, выходной слой
состоит из одного нейрона 𝑜𝑢𝑡 . Заданные изначально веса указаны на ребрах графа. В
качестве примера будет показан один цикл алгоритма.
20
Рисунок 8
Пусть ожидаемое значение на выходе равно 0.4. Пусть на вход в 𝑖𝑛1 и 𝑖𝑛2 поступают
значения 0.15 и 0.72 соответственно. Вычислим значение, которое получится на выходе в
представленной выше сети. Примем коэффициент обучения 𝛼 равным единице для удобства.
𝑛1 = 0.15 ∗ 0.2 + 0.72 ∗ 0.8 = 0.606
𝑛2 = 0.15 ∗ 0.2 + 0.72 ∗ 0.5 = 0.39
𝑜𝑢𝑡 = 0.3 ∗ 𝑛1 + 0.9 ∗ 𝑛2 = 0.3 ∗ 0.606 + 0.9 ∗ 0.39 = 0.5328
Вычислим значение ошибки и распространим её обратно по сети.
𝛿 = 0.5328 ∗ 1 − 0.5328 ∗ 0.4 − 0.5328 ≈ −0.033
𝑤𝑛1𝑜𝑢𝑡 = 0.3 + −0.033 ∗ 0.606 ≈ 0.28
𝑤𝑛2𝑜𝑢𝑡 = 0.9 + −0.033 ∗ 0.39 ≈ 0.88,
где 𝛿 – ошибка на выходном нейроне, 𝑤𝑛1𝑜𝑢𝑡 и 𝑤𝑛2𝑜𝑢𝑡 – обновленные веса соединений
между нейроном 𝑜𝑢𝑡 и нейронами 𝑛1 и 𝑛2 соответственно. Распространим ошибку далее по
сети:
𝛿𝑛1 = 0.606 ∗ 1 − 0.606 ∗ 0.28 ∗ −0.033 ≈ −0.0022
𝛿𝑛2 = 0.39 ∗ 1 − 0.39 ∗ 0.88 ∗ −0.033 ≈ −0.0069
𝑤𝑖𝑛1𝑛1 = 0.2 + −0.0022 ∗ 0.15 ≈ 0.2
𝑤𝑖𝑛1𝑛2 = 0.2 + −0.0069 ∗ 0.15 ≈ 0.199
𝑤𝑖𝑛2𝑛1 = 0.8 + −0.0022 ∗ 0.72 ≈ 0.798
𝑤𝑖𝑛2𝑛2 = 0.5 + −0.0069 ∗ 0.72 ≈ 0.495,
где 𝛿𝑛1 и 𝛿𝑛2 – ошибки на нейронах 𝑛1 и 𝑛2 соответственно, а 𝑤𝑖𝑛1𝑛1 , 𝑤𝑖𝑛1𝑛2 , 𝑤𝑖𝑛2𝑛1 и 𝑤𝑖𝑛2𝑛2
– обновлённые веса соединений входного нейрона 𝑖𝑛1 с нейронами 𝑛1 и 𝑛2 и входного
21
нейрона 𝑖𝑛2 с нейронами 𝑛1 и 𝑛2 соответственно. Посмотрим на значение выходного
нейрона после обновления весов.
𝑛1 = 0.15 ∗ 0.2 + 0.72 ∗ 0.798 = 0.60456
𝑛2 = 0.15 ∗ 0.199 + 0.72 ∗ 0.495 = 0.38625
𝑜𝑢𝑡 = 0.28 ∗ 𝑛1 + 0.88 ∗ 𝑛2 = 0.28 ∗ 0.60456 + 0.88 ∗ 0.38625 ≈ 0.509
Как можно заметить, полученное значение после одной итерации алгоритма обратного
распространения ошибки ближе к ожидаемому результату 0.4.
2.3 Построение MHI
2.3.1. Выделение контура из изображения и определение движения
Выявление человеческого силуэта в данной работе происходит при помощи
встроенной возможности сенсора Kinect, которая предоставляет бинарное изображение
силуэта. Сенсор предоставляет возможность получать обработанные данные напрямую
вместе с другими видами данных (цветное изображение, изображение глубины). В данном
случае используются изображения глубины и соответствующие изображения с силуэтом
человека. Благодаря тому, что разрешения этих изображений одинаковые, возможно
построить новое изображение, используя только те пиксели из изображения глубины,
которые имеют ненулевое значение на изображении силуэта.
Определение движения работает следующим образом – соседние кадры вычитаются
друг из друга, образуя новое изображение. К данному изображению применяется размытие
широкого радиуса. После этого определяется максимальное значение пиксела полученного
изображения. Если оно превышает определенный настраиваемый порог, то данное
изображение считается как изображение с движением, и оно сохраняется с пометкой
времени в список изображений. MHI строится из изображений из этого списка с учетом
времени после того, как 10 изображений подряд окажутся без движения.
2.3.2. Построение изображения MHI
Значение пикселя MHI задаётся функцией, которая учитывает историю движений в
заданной точке. Чем позже в данном пикселе происходило движение, тем ярче становится
полученный пиксель в итоговом изображении (7). 𝑡𝑖𝑚𝑒𝑠𝑡𝑎𝑚𝑝 – временная метка кадра,
𝑑𝑢𝑟𝑎𝑡𝑖𝑜𝑛 – общая продолжительность MHI, 𝑖𝑚𝑔 – исходное изображение, 𝑖𝑚𝑔 𝑥, 𝑦 –
пиксел изображения с координатами 𝑥 и 𝑦.
𝑡𝑖𝑚𝑒𝑠𝑡𝑎𝑚𝑝
𝑀𝐻𝐼 𝑥, 𝑦 =
𝑑𝑢𝑟𝑎𝑡𝑖𝑜𝑛
, 𝑖𝑚𝑔 𝑥, 𝑦 ≠ 0
0, 𝑖𝑚𝑔 𝑥, 𝑦 = 0
(7)
22
2.4 Используемая структура нейронной сети
С точки зрения архитектуры искусственные нейронные сети являются интересным
примером того случая, когда строгих рекомендаций для построения подходящей сети для
решения поставленной задачи нет. Поэтому довольно широкой практикой является либо
подбор «на ощупь», либо построение сети на основе архитектур, которые проявили себя
хорошо в схожей задаче.
С точки зрения распознавания изображений большую известность как своими
результатами, так и использованным подходом (использование свёрточной нейронной сети)
известен французский ученый Yann LeCun [50]. В ходе работ над искусственной нейронной
сетью для распознавания рукописных цифр (на основе базы рукописных цифр MNIST[49]),
была предложена архитектура свёрточной нейронной сети, которая получила название
LeNet-5, показавшая лучшие на момент публикации результаты по распознаванию цифр, и
дала старт дальнейшим исследованиям [20].
В данной работе архитектура искусственной нейронной сети позаимствована из сети
LeNet-5, которая состоит из пяти слоев. Первые два слоя являются свёрточными слоями с
pooling функциями. Последние три слоя являются обычными слоями нейронной сети,
имеющие все соединения между соседними слоями. Точные настройки сети, такие как
разрешение входного изображения, размер восприимчивых полей, количество ядер свёртки,
количество нейронов в скрытых слоях, определятся во время тестирования сети и описаны в
главе 3.
23
3. Разработка программы распознавания движений
3.1 Инструменты разработки
Приложение состоит из двух частей, каждая из которых реализована в виде
отдельных модулей. Взаимодействие между модулями реализовано при помощи сокетов.
Первая программа работает с сенсором Kinect и формирует MHI для полученного
видеопотока с помощью камеры. Вторая программа представляет собой искусственную
нейронную сеть. Получая по UDP (User Datagram Protocol) на определенном порту путь к
MHI, данное изображение классифицируется нейронной сетью, результат классификации
передаётся по UDP в первую программу.
Для работы с сенсором Kinect в данной работе используется официальная библиотека
Kinect SDK от компании Microsoft. Выбор обосновывается тем, что данная библиотека
позволяет пользоваться функциями сенсора Kinect без различных ограничений за
исключением операционной системы. Альтернативой может являться библиотека OpenNI,
которая поддерживает не все версии выпущенных сенсоров и имеет проблемы с
производительностью. Используемый сенсор Kinect for Xbox One накладывает следующие
ограничения для работы с ПК: операционная система от Windows 8 и новее, Visual Studio
2012 и новее, .NET framework 4.5 и выше. Программа разработана на языке
программирования C# в Visual Studio 2013 Community Edition.
Для описания модели нейронной сети используется библиотека Theano [31] на языке
Python. Она является библиотекой с открытым исходным кодом. Основанная на NumPy,
разработка Theano направлена на решение задач машинного обучения и техник глубокого
обучения. Выбор Theano обоснован наличием удобных реализованных методов для работы
со свёрточными нейронными сетями. Так же плюсом является компиляция в С и
возможность работы с GPU. Минусом является трудность отладки приложения из-за
особенности работы с библиотекой – в Theano работа с математическими выражениями
происходит как с последовательностью символов. Theano является простым и доступным
инструментом по сравнению с другими библиотеками [51]. Для работы на платформе
Windows самым простым способом установки необходимых библиотек и интерпретатора
языка
Python
является
установка
WinPython
[49].
Способы
установки
других
дополнительных компонентов (поддержка CUDA, другие операционные системы) подробно
описаны на странице документации [44].
24
3.2 Работа с Kinect и построение MHI
В работе в качестве видеокамеры используется многофункциональный сенсор Kinect
v2 от компании Microsoft. Вся работа с сенсором в проекте вынесена в отдельный
пользовательский класс KinectHelper в namespace ImageAcquiring. При помощи
определенного в пространстве имен интерфейса INewImageAcquired
происходит
рассылка полученных из сенсора изображений разного типа: изображение глубины, цветное
изображение, бинарное изображение силуэта и изображение глубины с удаленным фоном.
Получение кадров с сенсора Kinect в библиотеке Kinect SDK реализовано в виде
событийной модели. KinectHelper во время инициализации подписывается на событие
объекта
MultiSourceFrameArrived
MultiSourceFrameReader,
объект
которого
библиотечного
получается
путём
класса
вызова
метода
OpenMultiSourceFrameReader объекта класса KinectSensor.
Кадр глубины представляется в виде библиотечного класса DepthFrame. Объект
данного класса предоставляет доступ как к описанию данного кадра, так и к данным кадра –
в данном случае значение каждого пикселя представляется в виде целочисленного
беззнакового 16-битного числа, означающего глубину изображения в миллиметрах.
Конвертация этих данных в изображение автоматически не производится. Описание кадра
позволяет получить минимальное и максимальное поддерживаемые расстояния, зная
которые не составляет труда построить изображение из полученных данных.
Изображения
силуэта
представляется
в
виде
библиотечного
класса
BodyIndexFrame. Объект данного класса так же предоставляет доступ к описанию
данного кадра и к значению пикселов исходного изображения, которое кодируется
следующим образом – у пиксела значение 0 в том случае, если это фоновое изображение, и
любое другое значение, если пиксел имеет отношение к силуэту тела. Так как изображения
классов DepthFrame и BodyIndexFrame имеют одинаковое разрешение, то возможно без
лишних вычислений легко строить изображение глубины именно для силуэта тела,
игнорируя фоновое изображение. Полученные изображения конвертируются в класс
WritableBitmap для его отображения в GUI.
Далее
изображения
передаются
в
пользовательский
класс
ImageSequenceProcessing определенный в пространстве имён ImageProcessing.
При помощи библиотеки EmguCV, являющейся интерфейсом для известной библиотеки
OpenCV для платформы .NET, происходит подготовка изображений и построение MHI.
Сначала полученное изображение конвертируется в базовый для библиотеки EmguCV класс
25
для представления изображения Image<Gray, Byte>. Затем при помощи функции
AbsDiff класса Image считается разница между полученным и предыдущим кадром. Для
определения наличия изменения на кадре используется обычное размытие изображения. В
случае, если после размытия на изображении есть пиксели, значения которых больше
заданного порогового значения, изображение с меткой времени сохраняется для
дальнейшего построения MHI. В ином случае, если это n-ное изображение без изменений,
где n задаётся в программе, из имеющегося списка изображений с метками времени строится
MHI при помощи библиотечного метода cvUpdateMotionHistory.
Построенное MHI сохраняется в папку images в формате JPG, название изображения
формируется из текущей метки времени. Информация о построенном изображении в
классификатор передаётся через UDP по заданному в конфигурационном файле порту при
помощи класса UDPService. Результат классификации полученного изображения
прослушивается так же на заданном порту в том же классе.
GUI реализовано при помощи WPF приложения.
3.3 Классификация MHI
Классификатор реализован в отдельной программе по нескольким причинам:

Используемая библиотека написана на языке программирования Python, отличным от
языка реализации первой программы;

Отсутствие интерфейса у используемой библиотеки для языка C#;

Классификация может быть логически отделена от остальной части программы.
Структура сети и основные настройки приложения задаются в конфигурационном
файле config.ini, который оформлен в стиле конфигурационных файлов Windows и
поддерживается реализацией парсера в языке Python (ConfigParser [44]).
Благодаря
наличию
конфигурационного
файла
предоставляется
возможность
обучения новой модели искусственной нейронной сети с заданными входными данными и
характеристиками (за исключением архитектуры сети). Обучить сеть возможно при помощи
train_net.bat, предварительно заполнив необходимые поля в файле конфигурации.
Запуск сети для работы с первым приложением происходит при запуске load_net.bat.
Файл конфигурации разбит на секции. Каждое поле в каждой секции является
обязательным к заполнению. В случае, если какие-то параметры будут упущены, возникнет
соответствующая ошибка при построении сети. Общей для всей сети является секция Global.
26
Здесь находятся такие параметры, как коэффициент обучения сети, количество итераций для
обучения, размер групп изображений для обучения, путь к данным для обучения и семя для
генератора случайных чисел. За обучение отвечают две секции – Dimensions и ModelSuffixes.
Для данной программы принято следующее правило – в папке с данными для обучения,
указанной в секции Global, каждый отдельный класс изображений должен находиться в
своей папке. В секции Dimensions в качестве ключа указывается название папки, следующее
за ним число – ожидаемый результата работы нейронной сети. Так же есть правило
относительно наборов данных для тестирования, проверки и обучения. В ModelSuffixes для
каждого из наборов задается суффикс названия изображения (с расширением файла).
Пример перечисленных секций в произвольном конфигурационном файле:
[Dimensions]
A01: 0
A05: 1
A06: 2
A06_FLIPPED: 3
A07: 4
[ModelSuffixes]
train: _1.jpg
validate: _2.jpg
test: _3.jpg
[Global]
batch_size: 20
learning_rate: 0.02
number_of_epochs: 100
random_seed: 42
data_path: MHI
Характеристика искусственной нейронной сети задаётся послойно. У каждого слоя
есть свой набор изменяемых характеристик. Пример настройки характеристик сети:
[Layer1]
input_size_x: 34
input_size_y: 28
receptive_field_size_x: 5
receptive_field_size_y: 5
pooling_size_x: 2
pooling_size_y: 2
features_count: 6
[Layer2]
receptive_field_size_x: 2
27
receptive_field_size_y: 2
pooling_size_x: 2
pooling_size_y: 2
features_count: 16
[Layer3]
hidden_neurons_num: 120
[Layer4]
hidden_neurons_num: 84
[Layer5]
output_neurons_num: 5
В секции UDP указываются два порта. С первого программа будет ожидать получения
пути для изображения, а на второй отправлять результат классификации. Для удобства
использования программой так же есть секция ActionsMapping, где для каждого значения
классификации задаётся произвольная строка на английском языке, которая будет
отправляться как результат классификации. Пример оставшихся секций:
[ActionsMapping]
0: Jumping
1: Both hands waving
2: Right hand waving
3: Left hand waving
4: Claps
[UDP]
listener_port: 5005
publisher_port: 5006
3.4 Особенности Theano
Прежде чем перейти к описанию построения и работы с моделью нейронной сети
отметим особенности библиотеки Theano. Данная библиотека развивается с целью стать
стандартной библиотекой для работы с алгоритмами глубокого обучения. Это накладывает
следующие требования к самой библиотеке: скорость работы, легкость использования,
лёгкий переход с уже известных инструментов. Библиотека Theano тесно связана с известной
библиотекой для математических вычислений на языке Python NumPy. Так же реализована
кодогенерация на языке С для улучшения производительности. Помимо этого, развивается
поддержка вычислений на GPU, что является актуальной задачей в наше время, ускоряя
обучение глубоких нейронных сетей в десятки раз в сравнении с CPU.
28
Все это возможно благодаря тому, что в библиотеке модель описывается
выражениями. Иными словами, построение модели становится подобным написанию
формулы, в которую во время выполнения будут подставлены значения. На основании
модели строится граф, который оптимизируется и обеспечивает расчёт производной и
других вычислений для выражения [44]. Пример такого выражения:
import theano.tensor as T
from theano import function
x = T.dscalar('x')
y = T.dscalar('y')
z = x + y
f = function([x, y], z)
f(2, 3) # 5
При помощи функции function описанные выражения возвращаются в виде реальной
Python функции. Так же возможно использовать общие переменные между несколькими
функциями, которые необязательно должны быть символьными. Для их создания
используется функция shared.
3.5 Свёрточная нейронная сеть
Как было написано ранее, архитектура сети основана на свёрточной нейронной сети
LeNet-5. В данной сети используются следующие типы слоёв – свёрточный, pooling,
обычный скрытый слой и слой линейной регрессии. Каждый тип слоя реализован в
отдельном классе в пакете convneuralnet.
Класс ConvolutionPoolLayer представляет собой описание модели двух слоёв:
свёрточного и pooling-слоя. Решение объединить их было обоснованно удобством
использования, так как раздельно слои не используется в выбранной архитектуре. Данный
класс содержит shared переменные с весами и смещениями W и b. В конструктор класса
передаются такие параметры, как размер входных данных, размер восприимчивого поля,
количество ядер свёртки, размер pooling-а. Для построения модели свёрточного слоя в
библиотеке Theano реализована функция conv.conv2d, которая принимает на вход
символьную
переменную
входных
данных,
веса
соединений,
характеристики
восприимчивого поля и ядер свёртки. На выходе функции получаются вычисленные карты
признаков для данного слоя.
Реализация
pooling-функции
представлена
в
библиотеке
в
виде
функции
downsample.max_pool_2d, которая принимает на вход результат работы свёрточного
29
слоя и характеристику pooling-слоя. В переменной output хранится результат применения
функции активации к полученным результатам pooling-функции.
Класс HiddenLayer представляет собой реализацию скрытого полносвязного слоя
искусственных нейронов. Так же, как и в предыдущем случае, в данном классе есть shared
переменные, описывающие веса соединений и смещения нейронов. В переменную output
записывается результат применения функции активации к сумме скалярного произведения
весов с входным значением и смещениями. Параметрами данного слоя является количество
входных и выходных нейронов и источник входных данных.
В классе LogisticRegression
реализован слой нейронной сети, который
классифицирует просчитанный результат при помощи линейной регрессии. Параметрами
данного слоя являются количество входных нейронов, выходных нейронов и источник
данных. В данном классе определяется результат работы нейронной сети выбором
наибольшего значения нейрона в выходном слое. Так же здесь определена функция потерь,
которая является отрицательным значением логарифма функции правдоподобия.
Определение модели сети происходит в классе CNN. Во время инициализации объекта
все характеристики, такие как размер входных данных, путь к обучаемой выборке и прочее,
загружаются из конфигурационного файла, структура которого описана выше. В этом же
классе описан метод для обучения сети train_network. В методе данные для обучения
подаются в построенную модель нейронной сети. Для расчёта градиента в библиотеке
используется функция grad, которая оперирует символьными переменными и является
эффективным способом подсчёта градиента. Так же в класс CNN определен метод
classifyImage, который в качестве параметра принимает объект класса Image из
библиотеки PIL и возвращает результат классификации в данной нейронной сети.
Класс NetworkHolder отвечает за работу с нейронной сетью. Вызов команды
python
network_holder без параметра запустит программу, которая загрузит
сохраненную модель нейронной сети и будет ожидать сообщения с путем до изображения
для выдачи результата классификации. Если вызвать команду python network_holder
--train, то новая модель будет обучена и сохранена в папке models. Модель нейронной
сети сериализуется при помощи библиотеки cPickle, входящей в поставку языка
программирования Python.
30
3.6 Выбор характеристик нейронной сети
Как было сказано ранее, строгих рекомендаций для построения подходящей сети для
решения поставленной задачи нет. На работу сети влияют такие характеристики, как
разрешение входящего изображения, размеры восприимчивого поля, количество ядер
свёрток, размер pooling-а и количество скрытых нейронов.
В качестве результата тестирования рассматривается количество верно распознанных
действий из 10 из списка обученных (взмахи руками, взмахи правой рукой, взмахи левой
рукой, прыжки на месте, хлопки). Отправной точкой в подборе характеристик сети являются
оригинальные
характеристики
сети
LeNet-5.
Было
принято
решение
проводить
эксперименты с использованием разных настроек, задаваемых в файле конфигурации сети.
Результаты работы программы с различными конфигурациями сети представлены в таблице
1. Эксперимент выглядит следующим образом: перечисленные выше действия повторяются
по 10 раз с трёх ракурсов – центр кадра, правый край кадра, левый край кадра. Результаты
экспериментов для каждого ракурса заносятся в таблицу. В таблице представлены
конфигурации, показавшие одни из лучших результатов при тестировании. В колонке
характеристики приняты следующие сокращения: rf1 и rf2 – размер восприимчивого поля
первого и второго слоев сети соответственно, p1 и p2 – размер pooling-а в первом и втором
слое соответственно, fm1 и fm2 – количество карт особенностей в первом и втором слое
соответственно, inp – разрешение входящего изображения, nh1 и nh2 – количество скрытых
нейронов в первом и втором слое скрытых нейронов соответственно.
Таблица 1
Результаты работы программы с различными конфигурациями нейронной сети
№
Характеристики
нейронной сети
Положение камеры
Количество верно распознанных действий / 10
Взмахи
руками
1
inp
34x28
fm1, fm2 6, 16
rf1, rf2 5x5, 2x2
p1, p2 2x2, 2x2
nh1, nh2 120, 84
2
inp
34x28
fm1, fm2 6, 54
rf1, rf2 5x5, 5x5
p1, p2 2x2, 2x2
Центр
10/10
Слева
8/10
Справа
7/10
Центр
6/10
Слева
8/10
Взмахи
правой
рукой
Центр
8/10
Слева
8/10
Справа
9/10
Центр
10/10
Слева
5/10
Взмахи
левой
рукой
Центр
6/10
Слева
6/10
Справа
7/10
Центр
9/10
Слева
6/10
Хлопки
Прыжки
на месте
Центр
7/10
Слева
7/10
Справа
8/10
Центр
8/10
Слева
6/10
Центр
9/10
Слева
7/10
Справа
8/10
Центр
8/10
Слева
8/10
31
№
Характеристики
нейронной сети
Положение камеры
Количество верно распознанных действий / 10
Взмахи
руками
nh1, nh2 120, 84
3
inp
34x28
fm1, fm2 6, 30
rf1, rf2 5x5, 3x3
p1, p2 2x2, 2x2
nh1, nh2 120, 84
4
inp
34x28
fm1, fm2 10, 60
rf1, rf2 5x5, 4x4
p1, p2 2x2, 2x2
nh1, nh2 260, 120
5
inp
64x53
fm1, fm2 6, 20
rf1, rf2 5x5, 3x3
p1, p2 2x2, 2x2
nh1, nh2 180, 100
Справа
7/10
Центр
9/10
Слева
8/10
Справа
8/10
Центр
10/10
Слева
9/10
Справа
10/10
Центр
9/10
Слева
9/10
Справа
7/10
Взмахи
правой
рукой
Справа
8/10
Центр
8/10
Слева
9/10
Справа
7/10
Центр
8/10
Слева
7/10
Справа
7/10
Центр
7/10
Слева
8/10
Справа
5/10
Взмахи
левой
рукой
Справа
8/10
Центр
7/10
Слева
8/10
Справа
9/10
Центр
9/10
Слева
7/10
Справа
6/10
Центр
6/10
Слева
9/10
Справа
7/10
Хлопки
Прыжки
на месте
Справа
7/10
Центр
8/10
Слева
9/10
Справа
9/10
Центр
9/10
Слева
10/10
Справа
8/10
Центр
9/10
Слева
8/10
Справа
8/10
Справа
7/10
Центр
9/10
Слева
8/10
Справа
9/10
Центр
9/10
Слева
9/10
Справа
10/10
Центр
10/10
Слева
9/10
Справа
7/10
Изменение количества нейронов в скрытых слоях не приводят к значительным
изменениям работы сети, поэтому такие примеры в таблице не приведены. Влияющими
факторами являются разрешение входного изображения, количество карт особенностей и
размеры восприимчивых полей. Размер pooling-а, как правило, не меняется.
Одной из немногих рекомендаций для выбора количества карт особенностей является
соблюдение примерно одинакового количества нейронов в каждом из слоев, чтобы не терять
информацию о входном изображении. Такой подход заметен в трёх различных
конфигурациях, где менялось только количество карт признаков во втором слое и размер
восприимчивого поля второго слоя. Конфигурация номер 3 показывает лучший результат,
так как размер восприимчивого поля второго слоя покрывает полностью карты
особенностей, в отличие от примера 2.
Характеристика 4 показывает более стабильную работу в центре, но по краям кадра
результат нестабилен. Причина нестабильности на краях кадра -- большое восприимчивое
поле второго слоя и недостаток данных для обучения. Из примера 5 видно, что увеличение
разрешения не дает улучшения качества сети. Однако это один из примеров, когда на
обучаемых данных процент ошибки равен 0.
32
Лучший
результат
продемонстрировала
нейронная
сеть,
обученная
с
характеристиками №3. Качество работы сети зависит не только от тонкой настройки её
характеристик, но и от качества и количества данных, которые используются для обучения
нейронной сети.
33
Заключение
В ВКР разработана программа классификации психофизиологической двигательной
активности человека, основанная на нейронной сети глубокого обучения – свёрточной
нейронной сети. Программа показывает хорошие результаты классификации заданных
действий человека – взмахи двумя руками, взмахи правой и левой руки, хлопки руками и
прыжки на месте.
Kinect SDK предоставляет богатый API для работы с сенсором Kinect, что позволяет
без лишних трудностей работать с входными изображениями, накладывая ограничение
только на операционную систему и среду разработки. Motion History Image имеет как плюсы,
так и минусы. MHI вычисляется быстро и легко, но не может быть использовано для
продолжительных действий и случаев взаимодействия с окружающей средой.
Свёрточная нейронная сеть является лучшей глубокой нейронной сетью, работающей
с изображениями. Объясняется это тем, что структура и некоторые концепции сети были
переняты исследованиями
зрительной коры головного мозга.
Библиотека Theano,
разрабатываемая специально для машинного обучения и алгоритмов глубокого обучения,
предоставляет готовые функции для моделирования нейронных сетей.
Дополнительно
пользовательскими
реализована
характеристиками
возможность
для
обучения
тестирования
и
сети
отладки.
с
любыми
При
помощи
конфигурационного файла можно корректировать количество нейронов в скрытых слоях,
разрешения изображений, количество ядер свертки и прочее.
Данная работа позволяет продолжить исследование по следующим направлениям:
изменение архитектуры нейронной сети, построение нового дескриптора для видеопотока и
реализацию кроссплатформенной версии с поддержкой других камер с датчиком глубины.
34
Список источников
1. Bengio Y., LeCun Y. Scaling Learning Algorithms towards AI, Large-Scale Kernel
Machines, 2007, С. 1–41
2. Blank M., Gorelick L., Eli Shechtman, Irani M., Basri R., Actions as space–time shapes,
Proceedings of the International Conference On Computer Vision, 2005, С. 1395– 1402
3. Boureau Y.L., Ponce J., LeCun Y. A theoretical analysis of feature pooling in visual
recognition. Proceedings of the 27th International Conference on Machine Learning, 2010,
С. 111–118
4. Bobick A., Davis J. The recognition of human movement using temporal templates, IEEE
Transactions on Pattern Analysis and Machine Intelligence, 2001, С. 257–267
5. Chaaraoui A., Pau Climent-Pérez, Flórez-Revuelta F. A review on vision techniques
applied to Human Behaviour Analysis for Ambient-Assisted Living, Expert Systems with
Applications, 2012, С. 10873–10888
6. Chaaraoui A., Pau Climent-Pérez, Flórez-Revuelta F., Silhouette-based human action
recognition using sequences of key poses, Physical Review Letters, 2013, С. 1799-1807
7. Chen L., Wei H., Ferryman, James M. ReadingAct RGB-D action dataset and human action
recognition from local features, Physical Review Letters, 2014, С. 159-169
8. Chen Xi, Koskela M. Skeleton-based action recognition with extreme learning machines,
Neurocomputing, 2013, С. 387–396
9. Cristani M., Raghavendra R., Alessio Del Bue, Murino V. Human behaviour analysis in
video surveillance: A Social Signal Processing perspective, Neurocomputing, 2013, C. 86–
97
10. Efros A., Berg A., Mori G., Malik J. Recognizing action at a distance, Proceedings of the
International Conference on Computer Vision, 2003, С. 726–733
11. Erhan D., Szegedy C., Toshev A., Anguelov D. Scalable Object Detection using Deep
Neural Networks, Google, Inc, 2014
12. Foggia P., Saggesse A., Strisciuglio N., Vento M. Exploiting the deep learning paradigm for
recognizing human actions, Advanced Video and Signal Based Surveillance, 2014, С. 93-98
35
13. Fortun D., Bouthemy P., Kervrann C. Optical flow modeling and computation: a survey,
2015
14. Hinton G., Li Deng, Dong Yu, Dahl G., Abdel-rahman Mohamed, Navdeep Jaitly, Senior
A., Vanhoucke V., Nguyen P., Sainath T., Kingsbury B. Deep Neural Networks for
Acoustic Modeling in Speech Recognition, IEEE Signal Processing Magazine, 2012, C. 8297
15. Hinton G, Osindero, S., Teh, Y. A Fast Learning Algorithm For Deep Belief Networks,
Neural Computation, 2006
16. Hubel D., Wiesel T. Receptive fields and functional architecture of monkey striate cortex,
Journal of Physiology, 1986
17. Hussein M., Torki M., Gowayyed M., El-Saban M. Human Action Recognition Using a
Temporal Hierarchy of Covariance Descriptors on 3D Joint Locations, IJCAI, 2013
18. Joost van Doorn, Analysis of Deep Convolutional Neural Network Architectures, University
of Twente, 2014
19. Yan Ke, Sukthankar R., Hebert M. Spatio-temporal shape and flow correlation for action
recognition, Proceedings of the Workshop on Visual Surveillance at the Conference on
Computer Vision and Pattern Recognition, 2007, С. 1–8.
20. LeCun Y., Bottou L., Bengio Y., Haffner P. Gradient-Based Learning Applied to Document
Recognition, Proceedings of the IEEE, 1998, C. 2278-2324.
21. LeCun Y., Generalization and Network Design Strategies, Elsevier, 1989
22. Krizhevsky A., Sutskever I., Hinton G., ImageNet Classification with Deep Convolutional
Neural Networks, Advances in Neural Information Processing Systems, 2012
23. Laptev I., Lindeberg T. Local descriptors for spatio-temporal recognition, Workshop on
Spatial Coherence for Visual Motion Analysis, 2004, C. 91-103.
24. Laptev I., Lindeberg T., Space–time interest points, Proceedings of the International
Conference on Computer Vision, 2003, C. 432–439.
36
25. Jhuang H., Serre T., Wolf L, Poggio T. A Biologically Inspired System for Action Recognition,
Proceedings of the International Conference on Computer Vision, 2007
26. Poppe R. A survey on vision-based human action recognition, Image and Vision Computing,
2010
27. Konstantinos Rapantzikos, Yannis S. Avrithis, Stefanos D. Kollias, Spatiotemporal saliency
for event detection and representation in the 3D wavelet domain: potential in human action
recognition, in: Proceedings of the International Conference on Image and Video Retrieval
(CIVR’07), July 2007, Amsterdam, The Netherlands, 2007, C. 294–301.
28. Rosenblatt, Frank, The Perceptron: A Probabilistic Model for Information Storage and
Organization in the Brain, Cornell Aeronautical Laboratory, Psychological Review, 1960 ,
C. 386–408
29. Schmidhuber J. Deep Learning in Neural Networks: An Overview, Neural Networks, 2015,
C. 85-117
30. Evan A. Suma, David M. Krum, Belinda Lange, Sebastian Koenig, Albert Rizzo, Mark
Bolas, Adapting user interfaces for gestural interaction with the flexible action and
articulated skeleton toolkit, Computers & Graphics, 2013, C. 193–201
31. Bastien F., Lamblin P., Pascanu R., Bergstra J., Goodfellow I., Bergeron A., Bouchard N.,
Warde-Farley D., Bengio Y. “Theano: new features and speed improvements”, NIPS 2012
32. Ying Wang, Kaiqi Huang, Tieniu Tan, Human activity recognition based on R transform,
Proceedings of the Workshop on Visual Surveillance at the Conference on Computer Vision
and Pattern Recognition, 2007, С. 1–8
33. Willems G., Tuytelaars T., Luc J. Van Gool, An efficient dense and scale-invariant spatiotemporal interest point detector, Proceedings of the European Conference on Computer
Vision, 2008, С. 650–663
34. Zhibin Yu, Minho L. Human motion based intent recognition using a deep dynamic neural
model, Robotics and Autonomous Systems, 2015
35. Shu-Fai Wong, Cipolla R. Extracting spatiotemporal interest points using global
information, Proceedings of the International Conference on Computer Vision, 2007, C. 1–8
37
36. Tao Liu, A Novel Text Classification Approach Based on Deep Belief Network, Neural
Information Processing. Theory and Algorithms Lecture Notes in Computer Science, 2010,
C. 314-321
37. Shuiwang Ji, 3D Convolutional Neural Networks for Human Action Recognition, Pattern
Analysis and Machine Intelligence, 2012, С. 221-231
38. Fukushima K. Neocognitron: A self-organizing neural network model for a mechanism of
pattern recognition unaffected by shift in position. Biological Cybernetics, 1980, С. 93-202
39. Basic Structures [Электронный ресурс] / Режим доступа:
http://docs.opencv.org/2.4.9/modules/core/doc/basic_structures.html (дата обращения:
25.05.2015)
40. Berkeley Multimodal Human Action Database (MHAD) [Электронный ресурс] / Режим
доступа: http://tele-immersion.citris-uc.org/berkeley_mhad (дата обращения: 25.05.2015)
41. Capture RGB from Kinnect with Openni and show with OpenCV [Электронный ресурс] /
Режим доступа: http://stackoverflow.com/questions/15966722/capture-rgb-from-kinnectwith-openni-and-show-with-opencv (дата обращения: 25.05.2015)
42. Developer Portal [Электронный ресурс] / Режим доступа:
https://developer.leapmotion.com (дата обращения: 25.05.2015)
43. Mivia Action Dataset [Электронный ресурс] / Режим доступа:
http://mivia.unisa.it/datasets/video-analysis-datasets/mivia-action-dataset/ (дата
обращения: 25.05.2015)
44. OPENNI::VIDEOFRAMEREF CLASS REFERENCE [Электронный ресурс] / Режим
доступа: http://www.openni.ru/wpcontent/doxygen/html/classopenni_1_1_video_frame_ref.html (дата обращения:
25.05.2015)
45. The OpenNI framework [Электронный ресурс] / Режим доступа: http://openni.ru (дата
обращения: 25.05.2015)
46. Technical documentation and tools [Электронный ресурс] / Режим доступа:
https://www.microsoft.com/en-us/kinectforwindows/develop/downloads-docs.aspx (дата
обращения: 25.05.2015)
38
47. Reading and Writing Images and Video [Электронный ресурс] / Режим доступа:
http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html
(дата обращения: 25.05.2015)
48. UTKinect-Action Dataset [Электронный ресурс] / Режим доступа:
http://cvrc.ece.utexas.edu/KinectDatasets/HOJ3D.html (дата обращения: 25.05.2015)
49. WinPython [Электронный ресурс] / Режим доступа: http://winpython.sourceforge.net/
(дата обращения: 25.05.2015)
50. Yann LeCun’s blog [Электронный ресурс] / Режим доступа: http://yann.lecun.com/ (дата
обращения: 25.05.2015)
51. Сравнение библиотек глубокого обучения на примере задачи классификации
рукописных цифр [Электронный ресурс] / Режим доступа
http://habrahabr.ru/company/itseez/blog/254747/ (дата обращения: 25.05.2015)
39
Download