0
点赞
收藏
分享

微信扫一扫

【Sign Language-2】——2020-WACV-Neural Sign Language Synthesis

总体评价,本论文主要讲的是弱监督背景下的模型;具体内容过多,没有特别突出解决的问题与创新点。

1.Abstract;

本文讨论的是 text-to-video的问题,并且关注skeletal models production的问题;在这里并不考虑使用其它的人工标签,直接使用电视节目中的手语、文本数据(?文本是从何而来的呢?ASR得到的?)本文提出一个前馈和反馈(recurrent)的transformer的架构;同时这里采用了非单调的软注意力机制(对谁?);同时这里利用character-level features和word-level features

注意,本文的实验是:convert an input Czech(捷克语) text into a sequence
of skeletal models representing corresponding SL utterance

2.Intro;

本文主要首先是从视频中提取高质量的skeletal model,然后再做一个端到端的生成。使用DTW或者非单调(为什么不是单调的?)的注意力机制来实现文本和骨架动作的对齐,但似乎并不必要。
首先使用OpenPose工具获得骨架信息,然后由于其中会出现一些骨架部分的缺失问题,因此这里设计了一种补齐方法。

  1. a simple but robust feed-forward translator;简单但鲁棒的翻译器
  2. presentation of new criteria for the end-to-end system training;新的训练指标,嵌入DTW方法的标准MSE。
  3. experiments with character-level features;(始终不懂什么是character-level feature)

3.Conclusion;

这里的结论都在列举main contribution。。。

本文主要提出了一个系统,rely on any explicit SL translation neither in a training nor production process.(?不需要训练是什么情况?)

  • 提出一个数据清洗方法,能用来correcting skeleton poses
  • 提出不需要进行自回归的、生成一系列skeletons的special layer;
    训练了一个 feed-forward translator,使得模型能够同时和SL producer训练。
  • 针对于小词典,将DTW和非单调的软注意力机制结合起来,并证明有用;
  • 比较了word-level和character-level的特征(捷克语有character-level嘛?)

4.Related works;

5. 模型

总的来说,这篇文章的解决问题不够集中,什么都提出了;顶多说是一个效果上可能有突破的系统。

主要分为几个部分:

  1. 数据清洗、生成,生成监督标签部分,这里采用一些物理约束建模,得到监督标签;
  2. 设计模型的输入,做了一部分的数据增强,增加了一个ID特征和另一个时间特征(日期?)
  3. 设计模型的架构:这里的DTW似乎是一个损失,而不是一个模型的模块?但看起来事实上又是个模块;模型整体分为encoder和decoder,先生成一个inner SL representation(作者文中这么说,其实也是个latent space的编码),最后生成skeleton;
  4. 设计模型的loss,这里采用了三种训练loss,DTW、单调的软注意力机制;
  5. 设计模型的输入的形式,有word level和character level,这里的character不懂是什么内容。。

注意一下这里的数据清洗方法,似乎还不错,其它另说:

5.1 预处理

5.1.1 骨架信息补齐

使用OpenPose提取二维的骨架信息,但是如果视频种动作太快,或者手看不到的时候,往往就没有骨架信息。这里典型的问题有,手指关节确实、手指关节重复、手掌缺失的问题;
因此这里需要进行矫正和插值,这里建立了一个物理模型,允许我们对数据进行离线处理。这里我们采用一个迭代的方法来估计骨架的3D位置。

首先认为骨头式定长的,并且最好使得一些骨头是对称(symmetrical)的(人体对称位置的骨头对称?)。这里认为骨长度、角度,头的位置都是待训练的参数,我们用2D投影的MSE作为训练的误差;注意骨架信息表达,头是根节点,然后骨架是用树结构表示的。

此外作者提到,迭代算法的初始值是很重要的,这里又三个步骤:

  1. 头部的三维位置,Z=0;
  2. 直接认为某个骨长为2D空间中看到的长度,因此这里使用骨长的平均值初始化骨头长度。
  3. 我们根据头部位置,和骨长,递归计算最小化之前提到的loss(有哪些啊?),得到各骨骼的位置,

但是作者没有说如何迭代的去求解参数呢。。

问题形式化如下:

我们已知杆子的一个端点 p 0 = ( x 0 , y 0 , z 0 ) p_0=(x_0,y_0,z_0) p0=(x0,y0,z0),另一个端点的x和y ( x t a r , y t a r ) (x_{tar},y_{tar}) (xtar,ytar),杆子长 L L L,我们需要使得 e = ( x 1 − x t a r ) 2 + ( y 1 − y t a r ) 2 e=(x_1-x_{tar})^2+(y_1-y_{tar})^2 e=(x1xtar)2+(y1ytar)2最小,此时我们需要重新估计另一个段点的位置,求得loss最小的点位置。

在这里插入图片描述
有两种情况,左侧是 L ′ < L L'<L L<L的情况,右侧是 L ′ > L L'>L L>L的情况。
左侧的结果是:
x 1 = x 0 + L L ′ ( x t a r − x 0 ) y 1 = y 0 + L L ′ ( y t a r − y 0 ) z 1 = 0 x_1=x_0+{L \over L'}(x_{tar}-x_0)\\ y_1=y_0+{L \over L'}(y_{tar}-y_0)\\ z_1=0\\ x1=x0+LL(xtarx0)y1=y0+LL(ytary0)z1=0

右侧的结果是,作者这里默认取小值
x 1 = x 0 y 1 = y 0 z 1 = z 0 ± L 2 − ( x 0 − x t a r ) 2 − ( y 0 − y t a r ) 2 x_1=x_0\\ y_1=y_0\\ z_1=z_0 \pm \sqrt{L^2-(x_0-x_{tar})^2-(y_0-y_{tar})^2} \\ x1=x0y1=y0z1=z0±L2(x0xtar)2(y0ytar)2

但是仅仅依靠这种方法容易导致不正常(absurd)的骨长度;此外我们需要做速度正则化,避免预测的动作速度太快。

5.1.2 规范化

由于视频中的人还是在动的,而且不同视频中,不是同一个人;因此我们这里需要对骨架大小做规范化操作。
如果我们得到一组n个骨架的序列 ( x 1 i , . . . , x n i i ) (x^i_1,...,x^i_{ni}) (x1i,...,xnii),其中 i = 1 , . . . , n i=1,...,n i=1,...,n,我们使用某个放缩系数 s i s_i si,得到骨架的新序列 ( s i x 1 i , . . . , s i x n i i ) (s_i x^i_1,...,s_i x^i_{ni}) (six1i,...,sixnii)
这里我们的指标是最小化如下指标:
ϵ ( s 1 , s 2 , . . . , s n ) = 1 n ∑ i = 1 n ∣ ∣ s i μ i − μ ∣ ∣ 2 \epsilon(s_1,s_2,...,s_n)={1 \over n}\sum^n_{i=1}||s_i \mu_i-\mu||^2 ϵ(s1,s2,...,sn)=n1i=1nsiμiμ2
其中
μ i = ∑ j = 1 n i x j i n i \mu_i={\sum^{n_i}_{j=1}x_j^i \over n_i} μi=nij=1nixji
是一个骨架的质心,而 μ = ∑ i = 1 n ∑ j = 1 n i x j i ∑ i = 1 n n i \mu={\sum^{n}_{i=1}\sum^{n_i}_{j=1}x^i_j \over \sum^n_{i=1}n_i} μ=i=1nnii=1nj=1nixji是所有骨架的质心,因此我们这里的目标是想使得正规化后的各骨架质心都接近原本的全局质心。
实际上就是个多维的二次函数,我们可以方便的求得 s i = ( μ i μ T ) ∣ ∣ μ i ∣ ∣ − 2 s_i=(\mu_i\mu^T)||\mu_i||^{-2} si=(μiμT)μi2
不知道为何作者说用gradient descent计算,我认为是放缩的时候全局质心也变了,因此需要多次训练收敛。为了确保 s i > 0 s_i>0 si>0,这里训练的是一个 s ^ i = l o g ( s i ) \hat s_i=log(s_i) s^i=log(si)

5.1.3 确定ground-truth:

这里提到骨架的natural mutual position of bones比较重要,比directly coordinates要更好。这里有点没看懂是什么意思,因为我不知道骨架的位置评估是怎么评价的,我觉得就是看几个关节点对应坐标呀?

5.2 Sign language Synthesis

  • 本节说明的是模型的架构

吐槽一下,这篇文章的写作实在是令人看不懂,一个是整体结构颠三倒四,就连句子也是颠三倒四的:
The first part is SL production that produces a sequence of skeletal models from a
text and the second part is SL translation that translates text into inner implicit SL representation. 这难道不是先编码,后生成嘛?
The SL production is a simplified repository with constant length of sequences of skeletal models for each sign. The translator is simplified to produce an output text
with the same length as an input text.这里的生成骨架,要求是生成逐帧的定长的骨架(一般的S2S不都是?),而翻译部分从text到隐状态的text也要求是同样长度的。

5.2.1 Production:

  • 个人觉得要自己来人为发掘特征,还用神经网络可真是失策。。不过可谓是相当老实了。

本模型总体而言,采取S2S方法,将词语序列替换为一序列定长骨架模型组成的序列。经过计算,平均一个词语缩进过的时间是7帧。
在这里插入图片描述

此外,模型对特征进行一个“decomposition”操作,其实就是把特征重新排列,例如原本有m个Nn维度的特征,记作 [ X i , j ] j = 1 , 2 , . . . , N ∗ n i = 1 , 2 , . . . , m [X_{i,j}]^{i=1,2,...,m}_{j=1,2,...,N*n} [Xi,j]j=1,2,...,Nni=1,2,...,m,然后把他按维度折叠成一个矩阵。原本往往是个(m,Nn)大小的矩阵,现在变成(m*N,n)维的矩阵。如下所示:
在这里插入图片描述
这里原文提到一些初始化操作,有一说一没看明白。

由于我们认为所有词语对应的视频帧数都是相同的,这是不合适的。可以使用DTW同步(synchronization)方法,来进行最终结果的评价校正。
此外,Another characteristic of the proposed method is undesirable cuts on boundaries between words.(这个和上面的DTW有什么区别?这里的不合适切分指的是什么?前者矫正的是时间对应,这里是重新对边缘进行平滑,是这样嘛?)作者说这里可以使用1维卷积来平滑,此处窗口大小是21,即1维卷积左右各考虑10个词语。但是对于以上decomposition操作后的信息,不知道是不是认为一行就是一个“新词语”。

5.2.2 Sign language translation

这里所谓的translation,其实就是把输入编码为相同长度的。另外这里的时序建模也是用1D的CNN或者双向GRU,二者都能获得和输入相等长度的隐状态。结构图见上方;此外还是用了ReLu和dropout。

5.3 对齐

  • 这里的训练时是直接用MSE训练,而评价的时候,使用三种对齐后的损失评价。
  • 这里似乎是因为之前建模时认为,一个词对应7帧视频,所以产生的视频长度就很难说了。为什么不像正常的机器翻译那样子处理呢?

本节主要叙述的是如何把生成的结果再合适地处理。就是说本节提到的注意力相关的内容,并不是网络中的一个层次,而是用来评估loss的。 Note that
we strictly used MSE with DTW to evaluate our results in all experiments。 We want to emphasize now that this attention is not an attention layer in our models, but we applied attention mechanisms in our loss.

对于给定句子 a = ( a 1 , a 2 , . . . , a n a ) a=(a_1,a_2,...,a_{n_a}) a=(a1,a2,...,ana)以及句子 b = ( b 1 , b 2 , . . . , b n b ) b=(b_1,b_2,...,b_{n_b}) b=(b1,b2,...,bnb),可以把loss形式化为:
ϵ = ∑ i = 1 n a ∑ j = 1 n b w i , j ∣ ∣ a i − b j ∣ ∣ D 2 ∑ i = 1 n a ∑ j = 1 n b w i , j \epsilon={\sum^{n_a}_{i=1} \sum^{n_b}_{j=1} w_{i,j}||a_i-b_j||^2_D \over \sum^{n_a}_{i=1} \sum^{n_b}_{j=1}w_{i,j}} ϵ=i=1naj=1nbwi,ji=1naj=1nbwi,jaibjD2
其中,W参数时注意力矩阵;这里的注意力体现在,将序列a中的所有元素和序列b都做了交互。但是值得注意的是,这里的 w i , j w_{i,j} wi,j的内容相关性比较弱一些,既体现在取值上,又体现在距离上。

5.3.1 DTW

在这里,如果元素 ( i , j ) (i,j) (i,j)在最佳路径上, w i , j = 1 w_{i,j}=1 wi,j=1;否则 w i , j = 0 w_{i,j}=0 wi,j=0
然后距离度量如下所示:
∣ ∣ a i − b j ∣ ∣ D 2 = ∑ k = − 5 + 5 α k ∣ ∣ a i + k − b j + k ∣ ∣ 2 ||a_i-b_j||^2_D=\sum^{+5}_{k=-5} \alpha_k||a_{i+k}-b_{j+k}||^2 aibjD2=k=5+5αkai+kbj+k2
,其中 α k \alpha_k αk是一个超参数,这里启发式的如下设置:
α k = s o f t m a x ( − 0.1 ∗ k 2 ) \alpha_k=softmax(-0.1*k^2) αk=softmax(0.1k2)
还有一种方法是所谓的“ standard delta and delta-delta acceleration coefficients”。
由于在 w i , j w_{i,j} wi,j这里对于原本的参数不可微分,因此学习比较困难(那么事实上如何优化参数的呢?

5.3.2 软注意力

这里提出的注意力不是单调的,作者给出的解答是如下:incorrect signs order might yell the same error as generating completely incorrect signs in this approach,因此作者想要体现排序的糟糕性与否。(为何不考虑最小编辑距离呢?)
w ( a , b ) = s o f t m a x ( − D ^ ) + s o f t m a x ( − D ^ T ) T D ^ = M ( n a , n b ) ⊙ D ( a , b ) D ( a , b ) = [ ∣ ∣ a i − b j ∣ ∣ D 2 ] j = 1 , . . . , n b i = 1 , . . . , n a w(a,b)=softmax(-\hat D)+softmax(-\hat D^T)^T\\ \hat D=M(n_a,n_b) \odot D(a,b) \\ D(a,b)=[||a_i-b_j||^2_D]^{i=1,...,n_a}_{j=1,...,n_b} w(a,b)=softmax(D^)+softmax(D^T)TD^=M(na,nb)D(a,b)D(a,b)=[aibjD2]j=1,...,nbi=1,...,na
其中 ⊙ \odot 是哈达玛积,距离和loss都和前面一样。
然后 M ( n a , n b ) = q 1 + q 2 ⋅ d ( n a , n b ) , q 1 = 32 , q 2 = − 31 M(n_a,n_b)=q_1+q_2 \cdot d(n_a,n_b),q_1=32,q_2=-31 M(na,nb)=q1+q2d(na,nb),q1=32,q2=31,其中
d ( n a , n b ) = [ e − 4 ( i n a − j n b ) 2 ] j = 1 , . . . , n b i = 1 , . . . , n a d(n_a,n_b)=[e^{-4( {i \over n_a}-{j \over n_b})^2}]^{i=1,...,n_a}_{j=1,...,n_b} d(na,nb)=[e4(nainbj)2]j=1,...,nbi=1,...,na
这里的 i n a i \over n_a nai j n b j \over n_b nbj表达的是,位置线性接近的,此时d取值大,相应的M就接近于1了,边缘就接近 q 1 q1 q1
如下所示,是一个na=4,nb=6的例子:

[[ 1.84926121  1.84926121  7.85717572 16.52009455 24.05235154 28.73262404]
 [12.12340796  4.25998118  1.          4.25998118 12.12340796 20.59573732]
 [24.05235154 16.52009455  7.85717572  1.84926121  1.84926121  7.85717572]
 [30.07252776 26.76058722 20.59573732 12.12340796  4.25998118  1.        ]]

这里的软注意力的mask矩阵,还是希望注意力分数接近对角线,就是说比例附近的位置还是希望高一点。但是式子(8)确实没看懂,原文表述不清,一会儿标量一会儿矩阵。这里应该是W而不是单个元素,猜测是对矩阵的纵、横分别做softmax,原文给出的理解如下:
前一项:ensure that a model produces as many targets as possible and
后一项:ensure that the model uses as many inputs as possible

5.3.3 混合注意力:

将二者加起来。有点点奇怪啊。。

5.4 Word and Character Level Features

这里提出Character Level的特征是为了解决词语很可能出现OOV词表的问题,尤其是捷克语是一种屈折语(词语会有时态变化等等变化)。
作者认为:Because numbers of characters are close to the numbers of frames in a video, special layers for words decomposition seems to be irrelevant

  • 不是很理解,字符数目怎么会和视频的帧数一样呢?
    这里的模型见最上方的模型图b,主要是把CNN的滑动窗口变大了,此外将embedding层变为了CNN层。
    此外,对于文本输入做一些特殊的处理,所有的用数字书写的数字,用0扩展到7位数字,并且特殊的7个字符长的词语被加到text的首部和尾部。

6.Experiment;

CSE:捷克手语
数据:主要关注的是 天气预报,每一段视频大约半分钟长。
Our corpus contains 947 videos (from September 2015 to July 2018) of forecast in CSE performed by five different CSE speakers.
验证集:36 videos (cca 20,000 frames, cca 1500 words) are reserved for development tests,;
测试集:36 videos tests and the remaining 875 videos (cca 500,000 frames, cca 40,000 words) constitute our training dataset

输入的词语都已经进行词干化(lemmatized )。包括句子首位的特殊词语,词典大小为598. 文本含有58个字符。

实验中采用了一个RNN+注意力的baseline:如下所示:
在这里插入图片描述

  • 这里就不分析实验了,主要有一个很迷惑的地方就是之前提到的对齐,那个究竟是用来计算loss的还是用来干什么的?
举报

相关推荐

0 条评论