摘要
世界上具有上百万的聋哑患者使用手语进行交流,因此,实现从手语到自然语言的翻译是一件非常有意义的事情。目前,手语识别(SLR)问题主要由两量子问题组成:逐个单词进行识别的独立SLR、对整个句子进行翻译的连续SLR。 目前现有的连续SLR方法基本上都是用独立SLR作为基本模块, 同时结合额外的预处理和后处理操作来实现, 这里的预处理一般是指时域分割,后处理指句子合成. 但是, 时域分割问题本身的误差不可避免就会不断的传递给后续的步骤, 更糟糕的是, 这种独立SLR模块需要经过十分费劲的标注过程来使得一段视频中每一个动作都有与之对应的单词标签. 光这一点就对数据集的获取造成了不小的阻碍.
为了解决这些困难和挑战, 作者就提出了一种新的连续手语识别模型框架, 将其命名为Hierarchical Attention Network with Latent Space(LS-HAN)(基于隐式空间的多级注意力网络), 这个网络框架可以免去时域分割的预处理过程.
LS-HAN有三部分组成:
- 一个双流卷积神经网络: 用于生成视频的特征表示.
- 隐式空间: 用于建立视频与自然语言之间的语义联系(semantic gap)
- 多级的注意力网络: 基于隐式空间的识别网络
介绍——Introduction
在SLR问题中的一个关键挑战在于表示肢体运动、手势和面部表情的关系描述器的设计。目前主要有两类:手工设计特征 和 基于CNN和特征提取方法。 本文欲计划设计一个双流的3D-CNN模型,用于对视频特征进行提取。
时域分割问题在连续SLR中是一个十分困难的问题。 普遍的解决思路是将连续的SLR解析成独立的单词进行识别,这样就需要解决时域分割问题。 由于需要翻译的动作十分多样,因此很难进行检测,同时,时域分割作为一个预处理步骤,会将分割误差传递给后续步骤。并且,对每个动作打标签也是一项很耗时的任务。
受到基于LSTM的视频描述工作的启发,我们利用一个等级式的注意力网络(Hierarchical Attention Network HAN)规避了时域分割问题。HAN是在考虑结构信息和注意力机制之后,对LSTM的一个扩展。大体思路是将整个视频流送入的HAN中,然后一个单词一个单词的将句子输出。 但是,HAN仅仅是通过前一个单词,来预测后一个单词的最大可能性,忽略了video和句子之间的关系。最终结果是,它可能会出现鲁棒性问题。
为了改善这个问题,本文引入隐式共建模型来挖掘视频和句子之间的关系。
一句话总结,本文主要的贡献点有以下三个:
- 一个新的双流3D CNN,用于生成全局和局部的视频特征表征
- 一个新的LS-HAN框架,可以规避连续SLR中的时域分割问题
- 对提出的LS-HAN框架中的相关性损失函数和分辨损失函数进行联合优化
- 编辑了目前最大的针对连续SLR问题的现代汉语手语识别数据集
相关工作
连续SLR
大多数现有的SLR研究都是针对独立SLR来做, 有点类似于动作识别。更具挑战性的问题是连续SLR的研究。大多数现有的连续SLR方法都将句子级别的识别分为以下三个阶段:视频时域分割,独立单词识别,基于语言模型的句子融合。例如,DTW-HMM提出了一个基于粗粒度时域分割的阈值矩阵。2017年提出了一个新的基于HMM的语言模型。最近,transitional movements吸引了很多的关注,因为它们可以当作时域分割的基础。
尽管采用时域分割很普遍,但是时域分割问题本质上是很难解决的:因为手语之间的过度动作transitional movements在识别时,依然显得很脆弱和混乱。更糟糕的是, 将连续的SLR任务转化为独立的SLR任务, 需要对大量的数据进行标注, 这是很耗时耗力的.
视频描述生成
图像描述生成是一个相关的研究领域,它通过描述视频序列中的场景/物体/动作来生成一段简单的话。一个流行的方法是序列到序列,视频到文本的方法,它将两个LSTM置于CNN之上。 还有的文章使用注意力机制来自动选择可能性最大的帧. 还有其他更多关于LSTM的扩展。
抛开视频描述生成和手语翻译在目标和技术手段上的一些相似之处,二者依然是两个完全不同的任务。前者仅仅是对输入视频的一个简单的总结, 但是后者必须要在语义层面上建立视频与自然语言之间的联系. ( 如对于同一段视频, 前者输出一个人在比划手势是正确的输出, 而后者必须输出这个人比划的收拾的具体含义)
基于潜在空间的学习
潜在空间模型是一个用来在不同模态的语义鸿沟之间建立联系的流行的工具。 例如, 有文章使用隐式空间和LSTM结合进行联合学习, 将其用于生成视频描述.
手语视频特征表示
手语视频主要由身体的上半部分决定,尤其是手势动作。识别手势动作的主要挑战是手的形态和方向具有很强的不确定性, 由此会组合出大量不同的手势动作。
受到最近深度学习技术在目标检测任务上的进展,我们提出了一个双流的3D CNN模型,用于生成视频特征的表征。这个3DCNN模型会同时接受整个视频帧和剪裁后的手势图像,并且独立的送到两个流中去,最终会通过一个融合机制,将它们融合在一起。因此,这个模型可以提取出整体信息和局部信息的特征编码。
手势检测和跟踪
我们首先用fasterrcnn预训练了VOC2007数据,然后,从CSL中选取了400帧进行finetune。之后,所有的视频都逐帧处理。
当手的性状变化很大, 或者被衣服遮挡时, faster rcnn的检测可能会失败, 因此,使用了compressive tracking
双流3D CNN
本文基于 C3D(Tran et al 2015) 设计了一个3D CNN双流模型, 该模型将一段手语动作等分成16帧, 并从中提取相应的时序特征. 模型的输入是一串视频截图(16帧)。模型中的上行流被设计用来提取全局手部位置和移动(global hand locations/motions), 缩放到227×227. 下行流关注局部手势信息, 输入是剪裁后的图片(227×227). 这里的这个局部信息就是跟踪两只手, 然后在两只手上画bounding box, 最后将两只手的特征信息按照多通道的方式添加在一起, 送入网络当中. 不管是上行流还是下行流, 他们的网络结构都是一样的, 包含8个卷积层和5个池化层. 最后是两个全连接层, 上行流和下行流的特征图谱会在这里结合.
双流CNN模型首先会对独立的SLR数据集进行预训练。训练完以后会把网络的softmax和最后一层fully connected layer都拿掉. (也就是说我们要的只是前面的卷积网络特征提取器, 深度学习, 说白了, 就是特征学习, 留下最后一层全连接层, 主要是为了将多维度的卷积特征图谱转换成一个一维向量, 方便后面的流程). 这个全连接层上面有4096个神经元, 因此, 最后输出的就是一个4096长度的一维向量.
上面的整个过程就可以看做是用一个滑动窗口在时间维度上对视频流不断的截图, 然后将截图源源不断的送入到神经网络当中, 目的是为了获取每一种视频截图的特征表征, 由于采用了这种双流结构, 因此这种特征表征结合了全局和局部信息(全局就是手移动的轨迹和位置, 局部就是手具体做了什么动作), 某种程度上可以认为是将当前的视频截图编码成了一个4096维的特征向量, 这个特征向量可以高度概括这一帧当中的信息, 最终, 一整段视频就会被编码一连串的4096为的向量, 最终就成了一个n×4096为的特征矩阵, n就是总共截取的帧数.
LS-HAN Model
HAN(Hierarchical Attention Network) 是LSTM的一种扩展, 主要针对输入数据使用了注意力机制. 模型的损失函数同时考虑了视频与句子之间的相关性误差 $E_r$, 以及HAN的识别误差 $E_c$.
上式中, N 代表了训练集中的实例数量, $V^{(i)},S^{(i)}$ 代表第 $i$ 个视频实例(注意这里不是截图)和句子, $\theta_r, \theta_c$ 分别代表隐式空间和HAN的参数. R是正则项. $\lambda_1, \lambda_2$ 用于调节这三项的权重占比. 下面对这个损失函数的每一项具体介绍
视频和句子之间的隐式空间
如图2所示,我们模型框架的输入是视频和对应标注好的句子。视频用提取到的global-local特征表示,句子中的每一个单词都用one hot向量表示。我们令视频为 $V=(v_1,v_2,…,v_n)$, 令句子为 $S=(s_1,s_2,…,s_m)$, 这里每一个 $v_i$ 都代表的是视频中的一个截图的特征向量, n表示总共的截图数量, $s_i$ 表示句子中的每一个单词的one-hot向量,m为单词数目.
隐式空间的目标就是构建一个”空间”, 在这个空间里面, 可以建立起视频截图特征向量和句子单词onehot向量之间的联系, 也就是说, 我们要将 $V$ 和 $S$ 映射到同一个隐式空间中去, 于是, 映射后的视频截图和句子可以表示成: $f_v(V) = (v_1’, v_2’, …,v_n’)$ 和 $f_s(S) = (s_1’, s_2’,…,s_m’)$ 这里, $f_v$ 和 $f_s$ 分别对应这一个映射函数, 可以用矩阵表示:
其中, 权重矩阵 $T_v \in R^{D_s\times D_c}$, $T_s \in R^{D_s\times D_w}$, $D_s$ 就是隐式空间的维度.
接下来, 我们就需要衡量 $f_v(V)$ 和 $f_s(S)$ 之间的相关程度. 用DTW(Dynamic Time Warping)算法来找到最小的累加和距离,同时还会考虑时域的路径. (因为视频片段和word基本是一一对应的)
上式中, $D[i,j]$ 代表了 $(v_1’,…v_i’)$ 和 $(s_1’,…s_j’)$ 的距离, 而$d(i,j)$ 则代表了 $v_i’$ 和 $s_j’$ 之间的距离(二范式).
于是, 我们将视频实例和一个句子之间的损失定义为:
上面的DTW算法有一个假设前提, 那就是如果句子中的单词出现在前面, 那么与这个单词对应的视频片段也应该出现在前面. 正常来说这样的假设不是特别合理, 比如说对于视频描述这个任务来说, 这个假设就很不合适, 但是手语识别他有自身的特殊性, 在进行短句子的手语动作时, 这种假设是可行的, 而这篇文章使用的数据集中的句子都不超过10个词, 所以这里我们就暂时认为这个假设是对的吧.
上面还有个warping path的概念, 实际上就调整视频和句子之间的对齐程度.
上面公式的具体实现不是贪心, 而是基于回溯的, 所以最后找到的就是最小的.
隐式空间的目标是建立连接语义鸿沟的空间。 将视频截图和句子映射到同一个隐式空间中。
Dynamic Time Warping(DTW)算法:衡量 $f_v 和 f_s$之间的相关性。
Recognition with HAN
受到最近sequence to sequence模型的启发,识别问题可以看作是在给定video的情况下,求句子的log条件分布率的估计。(LSTM)。
首先,输入帧序列通过隐式空间进行编码,然后,根据每一个帧序列的特征向量来预测对应的单词。 扩展HAN中的编码器使其能够反应多级结构(从clips到word, 或者从word到clips),同时引入注意力机制。
如图4所示, 蓝色的输入分别代表隐式空间中的clips序列特征和words序列特征. 可以看出, 该模型包含两个编码器和一个解码器。每一个编码器都是一个带有注意力机制的 bidirectional LSTM,而解码器一个单独的LSTM。 clip编码器将视频截图编码,使其对齐到单词向量上。如图5所示, 本文在经验上选取了3种对齐机制:(实验证明3比较好,因为本文选择3)
- 将clips分成两个子序列 (总共就两个word)
- 每两个clips分出一个子序列 (总共有L/2个word)
- 均分出7个子序列(因为在训练集中的句子平均含有7个单词)。
经过编码以后, 会生成对应的特征表示向量, 然后就需要进行解码, 在解码的时候我们是知道标注的真实句子信息的, 首先 #START 表示开始符号, 根据隐式向量的特征表示, LSTM会先预测第一个单词 $y_1$, 然后, 继续用LSTM在当前处的输出 $h_t$ 和第一个真实单词’the’的onehot向量来预测第二个单词, 就是这样一直下去, 直到遇到#END为止. 用Softmax函数在输入为 $h_t$ 下条件下输出 $y_t$ 的概率 (概率最大的那个就是当前cell的输出):
这一部分的损失函数为(这里这个是log损失函数, 如果预测结果是正确项的条件概率越接近于1, 则log对应项就越小):
Learning and Recognition of LS-HAN Model
最终, 我们的损失函数可以写成下面这样:
在进行训练优化时, 分别对隐式空间的参数 $T_v, T_s$ 和HAN的参数 $\theta$ 求偏导
实验
数据
总共有两个开源数据,一个是CSL,另一个是德国手语数据集RWTH-PHONEIX-Weather。
CSL包含25k个标注的视频实例,总共超过100小时,共50位手语者。17K用于训练,2K用于验证,6K用于测试。每一个视频实例都会与一个完整的句子相关联.
RWTH-PHONEIX-Weather包含7K天气预测的句子,共9位手语者。
所有的视频均为25帧每秒,分辨率为210×260 。 5672用于训练, 540用于验证, 629用于测试.
实验设置
每一段视频都会被分成16帧, 要么缩放, 要么裁剪, 输入大小为 227×227. 输出是4096长度的一维向量, 正如前面介绍的那样.
Evaluation Metircs 评价标准
上式中, SID分别代表将预测句子转换成真实句子所需要的最少的替换(substitution), 插入(insertion)和删除(deletion)操作, N代表句子的真实长度. 注意, 由于这三种操作都会降低准确率, 因此准确率是有可能为负值的
(顺便我还感觉这个评价标准也太粗糙了, 感觉不是精心设计过的标准, 但是貌似还有人用, 而且一般好的实验都是会用很多不同标准横向纵向去比较的, 所以我感觉作者只用这一个评价标准, 要么就是手语识别没有特别好, 特征规范的通用标准, 要么就是作者在别的标准上表现不好, 这个表现我也没太查到, 所以也只是猜测.).
实验结果和分析
先来看表2, 因为本文的方法主要是基于LSTM来做的, 因此, 第一部分是各种LSTM的变种方法, 这些变种方法基本都不是用来解决手语识别问题的, 所以精度差是自然的(我也不知道作者为啥要这么比, 感觉有点不公平).
再看第二部分, 第二部分确确实实都是针对手语识别问题, 而且都是针对连续手语识别问题, 但是这些方法居然比第一部分的还低, 这我就有点搞不懂了, 然后我看到这个年份, 我就感觉这个数据怎么这么奇怪啊, 07年到14年这都7年的时间就提升了0.01, 我就感觉匪夷所思. 我感觉这篇文章整个的模型结构和设计思路还是挺不错的, 但是这个实验部分就真的支撑数据让人有点不信服.
表3: 这个表3看起来勉强还行, 是和最近发表的paper方法比较的, 这个精度提升确实不高.