system: [SYSTEM]

user: 4. 动态手势建模 如何从输入中获取关键信息作为手势的判别依据，是动态手势识别算法的研究核心。根据关键信息获取方式的不同，动态手势识别算法可以分成两大类：基于人工特征的机器学习算法 [ 41 ]、基于自主学习特征的深度学习算法 [ 42 ] [ 43 ]。 4.1. 基于人工特征的机器学习算法 经典的方法有规整动态时间(Dynamic Time Warping， DTW)算法 [ 44 ] [ 45 ]、隐马尔科夫模型(Hidden Markov Model， HMM) [ 46 ] [ 47 ]。DTW是一种衡量两个不同长度时间序列相似度的方法，最早用于语音识别，Corradinni等 [ 48 ] 第一次将其用于识别动态手势。基于DTW进行动态手势识别时，首先需要对训练集中的每个手势进行预处理，然后提取特征并将其归一化为序列模板，再对待测手势进行与训练手势一样的操作，最后将生成的结果与训练集中的每一个模板进行匹配分析，将距离最小模板的类别作为手势识别结果，具体流程如图3所示。DTW方法没有采用统计模型框架进行训练，也很难将上下文的各种知识用于图像识别算法中，因此在解决大数据量、复杂手势等问题时存在劣势。为了解决该问题，很多文献对DTW进行了改进。如张建荣 [ 49 ] 提出了一种改进的动态时间规整(Improve Dynamic Time Warping， iDTW)动态手势识别算法，它在DTW的基础上采用点和线相结合的范围来约束搜索路径以防止搜索不合理，并利用节点在运动序列中的距离方差对各节点进行权值动态分配。与DTW相比，iDTW在公开数据集上的精确度整体提高，并且运算量显著减少。HMM是一个经典的模型，它主要用于处理基于时间序列或状态序列的问题；在基于HMM的算法中存在两类数据，一类是可以观测到的数据，即观测序列；另一类是隐藏数据，即状态序列。在动态手势识别中，手部所做的一系列动作是观测序列，而手部所发生的动作为隐藏序列，HMM的任务就是从一系列可观测数据中确定隐藏数据中的内容。在动态手势识别中，每类手势对应一个隐马尔科夫模型；在训练时，首先将每个手势样本按类别划分，然后利用前向与后向算法为每类手势训练出对应的HMM模型。在测试时，待测样本利用前向算法与所有的HMM模型进行遍历，计算出每个HMM模型产生该手势序列的概率值，数值最大的HMM模型对应的类别便是待测样本的识别结果。Saha等 [ 50 ] 基于HMM算法完成了对60个不同主题下的12种动态手势的识别，每类手势都获得了将近90%的识别精度。 图3. 基于DTW算法的动态手势识别算法流程 基于人工特征的动态手势识别算法已经取得了较好的识别效果，但针对不同的环境、不同的运动角度，研究者很难设计出一种对所有样本都适用的特征提取方法，基于人工特征的动态手势识别算法仍然存在很大的挑战。 4.2. 基于深度学习的动态手势识别算法 近年来，随着深度学习的兴起，基于深度学习的动态手势识别得到了广泛的关注。其核心思想是首先搭建神经网络，对模型初始化，然后利用神经网络的前向传播、损失计算、后向反馈，从数据中学习网络参数。不同于人工特征已经固定好对输入的处理方式，神经模型的参数完全由数据的特性和神经网络的结构共同决定，直接影响手势识别的性能。因为输入数据是固定的，所以搭建鲁棒的神经网络是整个基于深度学习算法的关键。根据空间信息与时序信息的编码方式，当前常用的神经网络可以分成两大类：一类是基于2DCNNs的two stream网络 [ 51 ] [ 52 ] [ 53 ] [ 54 ]，另一类是3DCNNs [ 55 ]。 4.2.1. 基于Two Stream的算法 这种网络由空间网络(spatial network)和时序网络(temporal network)两个子网络组成，分别负责从RGB图片中挖掘出手部的空间信息和从堆叠的光流中挖掘出手部的运动信息，再将两种信息融合后构成时空信息用于视频分析任务。spatial network和temporal network结构相同，一般可以采用AlexNet、VGG、ResNet、Inception等经典的2DCNNs构成。2014年，Simonyan等 [ 51 ] 第一次提出two stream网络结构，并将其成功的应用于行为识别任务。该算法中子网络由VGG搭建而成，其工作流程如下：首先从视频序列中随机采样一帧RGB图片作为spatial network的输入，并取该帧随后的5帧光流图片作为temporal network的输入；单帧RGB图片和堆叠的光流图片经过两个子网络分别学习对输入类别的预测概率向量，最后将这两个概率向量在类别的维度上取均值，得到最终的识别结果。在公开数据集UCF-101 [ 56 ] 和HMDB-51 [ 57 ] 上与其它算法相比，该算法取得了当时最优效果。但由于该算法仅从序列中选取一帧图片和几帧光流图片为两个子网络的输入，只能理解行为的短期内容。然而在视频的理解中长期信息起着关键的作用，这些信息的丢失会大大影响识别效果。为解决该问题， Wang等 [ 52 ] 提出了时域分割网络(Temporal Segment Network， TSN)，该算法引入稀疏采样策略对长时间序列信息进行建模；为了获得更鲁棒的特征表达，TSN使用Inception v2 [ 58 ] 搭建子网络，其工作流程如下：首先将视频片段均匀分成N段，对每段进行如 [ 51 ] 的操作，得到算法对每个短期小片段的预测概率向量(RGB图片和堆叠的光流分别对两个子网络权值共享)；然后再将所有片段的概率得分取均值得到长期视频的预测结果。为了进一步提高two stream算法的性能，Feichtenhofer等 [ 53 ] 在TSN的基础上研究空间信息与时序信息的融合方式。实验证明，在卷积层融合两类信息不仅不会降低性能还会减少参数的数量；在网络高层卷积层上进行融合比在低层卷积层上效果要好；对类别得分进行融合可以提高性能，文献 [ 51 ] [ 52 ] 采用的是此种方法。在two stream算法中，手势的运动信息来自于光流图片，但是该图片的获取需要对邻近的RGB图片进行像素级别的计算，需占用大量内存空间，浪费了时间和存储资源。为解决该问题，Zhu等 [ 54 ] 提出通过训练一个卷积神经网络MotionNet做光流估计来代替光流计算。在该算法中，temporal network和MotionNet级联后以堆叠的数张RGB图片为输入。动态手势识别和行为识别的原理是相同的，都是利用算法理解出视频序列中人的肢体动作所要传达的语义信息。随着two stream算法在行为识别上的成功应用，国内外大量的研究者提出了基于two stream做动态手势识别。如Okan Köpük等 [ 22 ] 提出将若干帧光流图与单张彩色图像堆叠在一起后送入TSN的temporal network做动态手势识别。 4.2.2. 基于3DCNNs的算法 3DCNNs可以从序列中同时提取出空间与时序信息，它由多个3维卷积层、3维池化层以及激活函数组成。3维卷积层和3维池化层对特征图的操作分别与2维情形类似，仅有的差异在于2维卷积层和2维池化层只对一个特征图在宽和高的维度上进行操作，但3维卷积层和3维池化层对多个特征图同时在宽、高和时间维度上进行操作。因此3DCNNs可以从序列中同时捕捉空间与时序信息。最经典的3DCNNs是深度3维卷积神经网络(Deep 3 Dimensional Convolutional Network， C3D) [ 59 ]，其网络结构简单，只有8个卷积层、5个池化层、2个全连接层以及一个sotfmax层；每个卷积层后接一个relu激活函数实现对网络的非线性变换，除了第一个和第二个卷积层后面都连接一个池化层外，其余都采用每两个卷积层连接一个池化层，这种结构可以在不增加参数的同时增大神经网络的感受野，两个全连接层都设置Dropout = 0.3。C3D [ 39 ] 是第一个被验证具有有效性及高效性的空间时序特征提取器，被很多动态手势识别算法采用。如Liu等 [ 37 ] 提出基于C3D的动态手势识别。Zhu等 [ 28 ] 提出将金字塔输入和金字塔融合策略嵌入C3D模型，在该算法中，金字塔输入对每个手势序列进行金字塔式划分，并利用时间抖动对每个金字塔段进行均匀采样，该输入能够保持手势序列的多尺度上下文信息，金字塔融合放置在C3D最后一个全连接层的后面，在将金字塔段的特征融合后连接一个softmax层得到对手势的预测结果。Li等 [ 23 ] 提出基于C3D从一系列梯度图与深度图中识别驾驶员手势。Gupta [ 24 ] 提出一种具有连续时间分类(Connectionist Temporal Classification， CTC)的R3DCNN网络框架来进行手势识别，将3D卷积神经网络与循环卷积神经网络(Recurrent Neural Network， RNN)级联在一起，先用C3D学习序列短期的时序信息，在此基础上使用循环神经网络学习序列的长期时序信息。RNN的使用增强了时序信息前后文之间的联系，提高了整个视频序列时序特征的表达能力；但是由于梯度膨胀和梯度消失等问题，RNN容易丧失远距离学习信息的能力。为解决该问题，Zhu等 [ 21 ] 提出C3D和长短期记忆网络(Long Short Term Memory network， LSTM)级联的框架来提取动态手势的时序特征。Zhang等 [ 25 ] 提出使用C3D和双向长短期记忆网络(Bidirectional Convolutional Long-Short-Term-Memory Networks)来学习2D时空特征图，在此基础上进一步利用2DCNNS从2D特征图中学习更高级别的时空特征以用于最终手势识别。虽然基于C3D识别动态手势取得了较好的效果，但是简单的网络结构制约了其特征表达能力；加深网络深度是一种解决思路，可是无限制增加深度又会引起退化问题。为解决该问题，Tran等 [ 60 ] 提出ResC3D网络结构，将残差的概念引入到C3D中；ResC3D中的核心是残差块，它通过学习恒等函数使得网络深度加深时不至于降低性能，甚至能够提高性能。Li等 [ 26 ] 先是直接基于ResC3D做动态手势识别算法，后来为了能够充分利用关键信息，Li等 [ 27 ] 提出在对输入序列进行特征提取前，预先引入注意力机制，使网络的注意力集中在能够有效描述手势的视频帧上和执行者发生运动的区域。