Это серия из нескольких частей, аналогичная написанной мною серии YOLO, которая будет охватывать Распознавание жестов рук с 3D CNN, созданное исследовательской группой NVIDIA. Я стремлюсь пройтись по различным разделам статьи и объяснить в них основные положения. В этой части будет рассмотрена архитектура и работа CNN с кратким объяснением разницы между 2D и 3D CNN.

Вступление

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

До появления этой нейронной сети было разработано множество алгоритмов распознавания динамических жестов рук на основе зрения. Ранние алгоритмы использовали определенные пространственно-временные дескрипторы для распознавания жестов. За ними последовали классификаторы жестов, такие как скрытые марковские модели и машина опорных векторов (SVM). Однако оба этих подхода страдают общим недостатком, который заключается в недостаточной надежности распознавания жестов при различной интенсивности света.

Для повышения устойчивости моделей были приняты методы с мультимодальными датчиками. Например, Неверова и др.. объединили данные RGBD из области руки с движениями верхнего скелета. Однако их система должна была работать только в помещении. Молчанов и др. объединила информацию жестов от датчиков глубины, цвета и радара, что дало многообещающие результаты с различной интенсивностью света, что вдохновило разработку этой нейронной сети. Система распознавания жестов руки 3D CNN использует каналы интенсивности и глубины с нейронной сетью для выполнения трехмерных сверток. Данные создаются путем чередования этих двух каналов для обучения сети, которая состоит из двух подсетей.

2D и 3D свертки

В случае двумерных сверток ядро, которое используется для выполнения сверток на карте признаков, имеет два измерения: длину и ширину. Ядро сканирует изображение или карту функций слева направо и сверху вниз. Это означает, что ядру разрешено двигаться только в двух измерениях, а именно в горизонтальном (ось x) и вертикальном (ось y). Результатом свертки является двухмерная карта функций, как показано на изображении ниже.

В случае трехмерных сверток ядро, которое используется для выполнения сверток на изображении или карте признаков, имеет дополнительное измерение, а именно глубину. Ядро выполняет свертки, перемещаясь по всем трем измерениям, то есть по осям x, y и z. Результатом является трехмерная карта объектов, как показано на изображении ниже:

Обычно третьим измерением считается время, поскольку трехмерные свертки используются в основном для классификации видео. Для получения дополнительной информации о типах сверток обратитесь к этому сообщению: https://stackoverflow.com/questions/42883547/what-do-you-mean-by-1d-2d-and-3d-convolutions-in-cnn

Сетевой дизайн

3D CNN распознавания жестов рук состоит из двух подсетей, а именно сети высокого разрешения (HRN) и сети низкого разрешения (LRN). Каждая сеть имеет собственный набор параметров Wh и Wl соответственно. Каждая сеть со своим собственным набором параметров W производит вероятности членства в классе для класса при условии, что жест распознан. Эта условная вероятность обозначается как:

P(C|x, W)

где C - класс действия, а x - наблюдение жеста, выполняемого подсетью с параметрами W.

Вероятность окончательного класса вычисляется путем объединения результатов подсетей HRN и LRN следующим образом:

P(C|x) = P(C|x, Wh) * P(C|x, Wl)

где P (C | x, Wh) - вероятность класса, вычисляемая HRN, а P (C | x, Wl) - вероятность класса, вычисляемая LRN.

Последняя метка класса (c *), которая является предсказанием сети, вычисляется следующим образом:

c * = arg max P (C | x)

Обе подсети состоят из серии сверточных, объединяемых и полностью связанных слоев и слоев softmax. Все слои используют функцию активации ReLU, кроме слоев softmax. Вся сеть показана ниже.

Сеть высокого разрешения (HRN)

HRN состоит из следующих слоев:

  1. Четыре сверточных 3D-слоя
  2. За каждым сверточным слоем следует слой максимального объединения.
  3. Два полностью связанных слоя с 512 и 256 узлами соответственно, следующие за четвертым сверточным слоем
  4. Слой Softmax в конце для прогнозирования вероятностей классов для 19 классов жестов

Вход в 3D CNN и HRN - изображение 57x125x32, а выход - P (C | x, Wh).

Сеть низкого разрешения (LRN)

LRN состоит из тех же слоев, что и HRN. Однако вход слоя - это пространственно субдискретизированный объем 28x62x32 чередующихся градиентов и глубины изображения. На выходе получается P (C | x, Wl).

Обучение

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

  1. И HRN, и LRN обучаются независимо.
  2. Результаты двух сетей объединяются на самом последнем этапе путем поэлементного умножения во время прямого распространения.
  3. Функция стоимости, используемая для данных, представляет собой отрицательное логарифмическое правдоподобие.
  4. Оптимизация выполняется с помощью стохастического градиентного спуска (SGD) с минипакетами 40 и 20 для LRN и HRN соответственно.
  5. Веса обновляются с использованием Ускоренных градиентов Нестерова на каждой итерации.

На этом завершается первая часть этой серии. Я расскажу о деталях и важности этапов предварительной обработки и увеличения данных, выполняемых перед обучением сети, в части 2. Итак, ждите выхода следующей части серии :)

Если вам понравился этот пост или он был полезен, пожалуйста, оставьте аплодисменты!

Если вы обнаружите какие-либо ошибки или проблемы в этом сообщении, свяжитесь со мной по адресу [email protected], и я исправлю их.

использованная литература

[1] https://i.stack.imgur.com/hvMaU.png

[2] https://i.stack.imgur.com/IvDQP.png

[3] http://research.nvidia.com/sites/default/files/pubs/2015-06_Hand-Gesture-Recognition/CVPRW2015-3DCNN.pdf