论文笔记:Video-based Sign Language Recognition without Temporal Segmentation

        这篇文章解决的问题是对手语做识别和翻译。

一、手语识别任务分类:

  1. Isolated SLR:翻译单个词汇(字/词)
  2. Continuous SLR:翻译一整个句子。

        其中,C-SLR也包含了I-SLR,因为一般就包含了时间序列的分割(temporal segmentation)(目的在于将一整个视频中的手语动作根据每一个词汇对应的一连串动作对应的一系列帧分割出来以完成I-SLR的识别),之后就是基于识别出来的单个词汇进行句子合成。

        因此,以前的工作也就大概可以分为三个步骤

                1)进行视频(Video)时间序列分割得到若干片段(clips);

                2)对分割得到的视频片段做独立识别(I-SLR);

                3)句子合成(Sentences).

        但这样存在一个难题,就是时间序列的分割很难,而且加上视频的连续性,中间的分隔错误难免会影响到剩下视频的分割

      

二、本文贡献:

  1. 贡献了一个数据集(关于现代中国手语的视频集,在我国听障儿童数量是极其庞大的)
  2. 提出了一个不需要(精确的)时间分割的C-SLR网络框架——LS-HAN(the Hierarchical Attention Network with Latent Space)小编暂时翻译为:结合潜在空间的层次结构的注意力机制网络。

三、LS-HAN

  1. 包含了三个部分

        1)一个层次结构的注意力机制网络(HAN)——用来在潜在空间下对手语的识别。

        2)一个Latent space即潜在空间(LS)——用来建立视频内容与字母(文案)之间的关系;

        3)一个双流的3D卷积网络(2-Stream 3D-CNN)——用来提取视频的特征表示;

     2. 基本思路

        如下图所示,

                           

        1)我们先把视频预处理如下:通过自己与训练的和经过自己的数据集微调的Faster-RCNN,得到每一帧(frame)的双手的proposals

        2)将视频按照每16帧进行分割得到n个片段(clips)

        3)将每个片段取出,resize为;又把每个片段中,每一帧里的手的部分单独取出resize为,得到红、橙两个小的片段;送入双流的3D卷积网络,得到一个维度的向量(Global-local feature vector)

        4)最后我们可以得到n个4096维度的向量;

        5)然后我们把整个视频对应的句子按照每个词汇,分别用one-hot表示(已知我们有一个语言单位的库voc),于是我们得到另一组m维度的向量

        6)最后,我们输入map为了得到潜在空间的表示的有:

               

        7)最后,我们将映射得到的潜在空间的向量代入HAN计算得到最后的输出句子!

       从以上描述,我们就可以看出,这篇文章确实不需要做时间分割,因为他的分割是平均的(每16帧)!

3. 模块详细描述

1)2-stream 3D-CNN

              

       这一块主要是3D卷积、池化、全连接层的混合使用,没有什么好说的。不过这里之所以要使用双流,作者认为,上面的分支是为了剔除到全局的手的位置和运动信息,下面的分支是为了提取局部的手的详细的姿势(譬如手指的姿态等)。

       当然最后我们通过FC将全局和局部信息结合在一起。下面是小编画的另一个图,主要是解释了这个网络的结构——

              

2)LS(Latent Space)变换

       这里主要是将我们得到的映射到同一个潜在空间,如下:

              -

              -

       于是我们得到:

       我们通过构造在潜在空间的误差,可以拉近视频和表达的语义的距离;此外,由于,映射到统一空间有利于计算我们熟悉的L2距离。

       但我们考虑到n与m也不一定相等,于是作者这里使用了Windows-DTW(Dynamic Time Warping窗口动态时间规整)算法。

       首先有必要先理解DTW(动态时间规整算法),这是用于衡量两个不同长度的序列的相似度。基本原理与动态规划差不多。

       其形象上表示为:

       这里还有一篇写的不错的博客:

                     https://blog.csdn.net/gdp12315_gu/article/details/55667483

       DTW的结果是一个表征两个不同长度序列的相似度(可以理解为距离)的值,在本文递推公式如下:        

                     

       其中,D[i, j]表示两个序列{vi, vi+1, ..., vn}和{sj, sj+1, ..., sm}的DTW规整距离,d(i, j)是将vi和sj映射到潜在空间的欧几里得距离。我们会发现这个公式与我推荐的另一篇博客里的有些不同,即本应该是:

                     

       这里小编的理解是:通常来说一个句子对应的手语动作是比含有的词汇量多很多的!所以一般只存在多个动作对应一个词汇。

       于是这个距离也是我们的一个重要的损失——video-sentence relevance error:

                     

3)用HAN来识别手语

              

       首先我们理解这幅图就将发生了什么!

       首先要理解的是整一个HAN由两个encoder和一个decoder组成。两个encoders都是双向LSTM(Bidirectional LSTM),即在前向过程不仅考虑到过去的上下文信息,还考虑到未来的上下文信息。

       (1)我们看到最底下的clip输入的下标是:i1而不是1,说明这只是所有n个v的一个子序列!前面我们知道已经将v映射到了v’,数量还是n个。因为一般来说,n > m,即是说,应该是若干个连续的clips组成的子序列决定了一个word,于是这就引出了一个配对问题!即如何将n个clips划分为若干个子序列,使每一个子序列准确预测出一个其对应的word的权重w(w是灰色的部分,文章只是讲到了权重,没有做详细说明,但小编认为应该是下面的clip decoder的输出attention。因为从这个位置说明w会影响到最后我们选择的word! 此外,关于w的个数下标最大是L,小编猜测应该是子序列的个数!)

       (2)文章提到,在测试过程中,配对方式有以下三种,实验证明第三种是最合适的:

              ① 将n个clips直接均分为两个子序列;

              ② 每2个clips归为一个子序列去预测值;

              ③ 将n个clips均分为7个子序列(因为作者统计发现在数据集中平均每段视频代表的语句有7个词汇)

       * (b) 和 (c) 的区别在于一个是clipi-clipi+1,另一个是clipi+1-clipi+t,这里结合a)b)c)灰色部分的下标和三种匹配方式的描述的比较后我们可以猜测:L确实是子序列的个数,并且,在训练阶段,w下标从1遍历到L,因此在训练阶段是每一个clip作为一个子序列的,即

       那么同时我们也就有了:

              

       因此,对于上面两个encoders的使用我们在总结一下:我们将n个clips的经过Tv映射后的向量v’做分割成若干个子序列,子序列的个数对应word encoder的灰色输入w的个数;每一个子序列内部经过一次LSTM变换映射为一个attention作为word encoder的输入w(严格按照先后顺序);最后,经过word encoder映射为另一个attention,这个attention经过映射为latent vector,最后输入decoder。

       之后,经过HAN后我们可以得到:个隐藏层,再通过一个softmax层得到.

       最后我们就要试图构造一个损失函数,我们根据

              ,显然这是一个softmax函数,用来做概率求解。

       我们得到第二个损失为:. 文章中关于W只说了这是softmax的权重,并没有详细说明,但我们可以看到的就是,对应每一个voc的word,都有一个这样的W。(关于此,若其他同行们有更准确的见解,还请多多批评指正!)

 

       最后,整个网络的损失为:

              

       其中,N是训练样本的数据量,是在HAN(第三个模块)中将第二个输出的attention映射到另一个latent space的权重。

猜你喜欢

转载自blog.csdn.net/WinerChopin/article/details/81229781
今日推荐