更新:
常用数据集介绍及网站链接:数据集
中文唇语识别方案概述:
在中文唇语识别研究中,通过对唇语识别本质和汉语语言发音规则的理解,将中文唇语识别过程划分为两个子问题过程:连续嘴唇图片帧映射为拼音语句的拼音序列识别,即”LipPic to Pinyin”(以下简称 P2P)和拼音序列翻译为汉字语句的汉字序列识别,即“Pinyin to Chinese-Character”(以下简称 P2CC),能够降低唇语识别问题难度。如下图所示中文语句唇语识别过程。
VGG-M 的网络输入是固定的 224224 尺寸大小的 RGB 的 2D 图像,接着便是核大小不一样的卷积层。每一个卷积层,命名为 conv。在第一个卷积层、第二个卷积层以及第五个卷积后面分别接入一个 Max pooling 层,用于保持网络的平移不变性,进行特征提取和更多的保留图像纹理信息,同时减少网络参数防止网络过拟合。经过多个堆叠的 conv 后的输出,会接入一个三层的 全连接(FullyConnection,以下简称 FC)网络。最后的分类输出是一个 softmax 多分类器。VGG-M网络模型如图所示。
在网络模型中,对每一个卷积层(conv)进行的操作并不完全相同。在第一层卷积层中,进行核大小为 77 步长为 2 的卷积运算,在第二层卷积层,进行核大小为 55 步长为 2 补偿为 1 的卷积运算,在余下三层卷积层,进行核大小为 33步长为 1 补偿为 1 的卷积运算。同时,对第一、二层卷积进行了 LRN(LocalResponse Normalization,以下简称为 LRN) 操作。LRN表示在网络卷积层进行非线性激活操作后,对输出进行局部响应归一化(Local Response Normalization,以下简称为 LRN)处理。
批度规范化 BN 是对深度网络中的每一个网络层(主要是卷积层)的输入数据进行规范化处理,即对卷积层的激活函数的输入进行处理,使得线性变换后非线性变换前的数据向量的各个维度符合标准正态分布。具体方法是:将特征数据的每一个维度减去数据同一维度的均值,然后再除以数据同一维度的标准差,因为使用的是批量梯度下降算法,均值和标准差通过当前迭代的批度(Batch)计算得到的。
假设有一个 d 维的输入向量X = x1,x2,x3,…xn每一维的数据使用 BatchNormalization 进行数据规范化处理(即使之服从标准正态分布),见公式:
在网络训练中,公式(4-1)容易造成梯度消散问题。通过对公式(4-1)的结果)进行放大和缩小操作,在一定程度能够缓解网络梯度消散。其计算方法见公式(4-2):
反向传播过程中,通过梯度下降算法进行学习、更新。批度规范化网络层前向传导过程见公式:
循环神经网络 RNN、长短时记忆网络 LSTM 和门控循环单元 GRU 均是自然语言处理中常见的深度学习模型。普通循环神经网络 RNN 能够解决短期时间依赖问题,而一旦问题信息时间步数变长,RNN 性能将会失效。为此,LSTM 应运而上,通过三个门–输入门、遗忘门和输出门的控制来细胞的状态,以达到解决长期的依赖关系。同时,也诞生了许多 LSTM 的变体网络,GRU是其中使用较多的一个网络单元。GRU 通过将遗忘门和输入门结合成一个更新门,且将细胞状态和隐藏状态合并在一起,减少了对门的控制。
Connectionist Temporal Classification(简称 CTC)是一种通用的损失函数,主要训练解决未知输入序列和输出序列对齐的网络系统。CTC 考虑了输出序列相对于输入序列的时间扭曲,但并没有对可能的重新排序进行建模。因此,CTC 广泛用于语音识别研究。给定一个长度为T 的输入序列 x ,CTC 假设一个长度为T 的字符序列c 的概率如公式:
其中,假定每个时步的字符输出在条件上是独立的,Ct表示第t 时步的输出字符, P(Ct |x)表示输出序列在第t 时步时输出字符Ct 的概率。CTC 假定真实输出序列长度为,其中t <= T。为了从长度为T 的字符序列中构建比更短的输出序列,CTC 引入空格和删除邻近相同字符的操作,定义一种多对一的映射,例如
因此,长度为t的输出序列 z 的概率如公式:
最终,CTC 的损失函数定义如公式:
其中,S 表示网络模型的数据集, (x,z)表示 x 表示一个输入数据, z 表示真实样本标签。
原 VGG-M 网络中,前两层卷积层 conv1和 conv2 的卷积核大小分别为 7x7 和 5x5。为了保留更多的图像特征,在改后的网络 ConvNet 中选取每一层卷积层的核大小为 3x3。在卷积神经网络中,池化操作不仅能够简化网络复杂度,还能够进行特征压缩,提取主要特征。而为了保存更多的图像特征信息,所以在第三卷积层 conv3使用 Max Pooling,而不是在第二卷积层 conv2 使用。此外,相比局部响应归一化LRN 数据处理方法,批度规范化 BN 能够使得网络拥有更高的学习率、加速网络训练以及防止过拟合等优点,所以对每一卷积层均使用BN操作,同时,取消dropout操作。同时,删除最后作为分类的全连接层,形成新的网络ConvNet,并在拼音序列识别中充当图像特征提取器的角色。
其模型的相关映射关系如下公式所示:
公式(4-11)表示对 ConvNet 网络提取的嘴唇图片Xi 的特征向量Yi 进行降维,生成维度为 d 特征向量
LSTM 单元的运算见公式(4-12)
整个 P2P 网络结构的损失函数如公式(4-13):
若集合 V 表示一个词汇集,对于一个由词汇 V 中的词构成的序列
则统计语言模型赋予这个序列一个概率 P(S),来衡量S 符合自然语言的语法和语义规则的置信度。在形式化上,统计语言模型主要是为一个长度为 N 的字符串确定一个概率分布
表示该字符串存在的可能性,其中,W1 到Wn 以此为这个字符串中的各个词。一般在实际求解过程中,通常采用以下公式(5-1)计算其概率值:
从语料中统计 N 个词同时出现的次数得到各个词出现的概率,整句的概率计算如公式(5-2):
在深度学习中,Encoder-Decoder 框架是一种概念模型,其中,Encoder 部分将输入序列转化成一个固定的长度向量,即编码;Decoder 部分用于将之前生成的固定向量再转化成输出序列。如下图所示 Encoder-Decoder 框架示例。
在 RNN 网络中,t 时刻的隐藏状态是由上一个时刻t1的隐藏状态和输入数据Xt-1 共同决定的,见公式(5-3):
在 RNN 组成的 Encoder 网络中,实际上的语义编码往往用最后时刻的隐藏状态代替,见公式(5-4):
Decoder 网络输出序列为Y = {Y1,Y2,Y3,…Yn} 的联合概率见公式(5-5):
最终,Encoder 模块的目标函数如下公式(5-3):
Decoder模块的目标函数如公式(5-4):
在 P2CC 序列对序列网络中,设定 Fe() 和 Fd() 分别表示 Encoder 和 Decoder模块的映射关系 如公式(5-5)所示:
将采集到的视频转换为图像序列。转换帧频为 25fps,由基于 OpenCV 的 C++程序完成转换。在每一个视频转换成为图像序列后,将每帧图像逐一进行关键点检测并记录检测结果,该工作部分通过 Face++完成。
唇语识别系统所使用特征包含 6 个:外唇高度 Ho、内唇高度 Hi、唇宽度 W 以及三者
随时间变化的一阶导数 ho,hi,w。
六个特征曲线如图 3.3、图 3.4 所示,特征值如图 3.5 所示。
根据以上公式所需,从检测数据中找到“mouth_upper_lip_top”、“mouth_upper_lip_bottom”、“mouth_lower_lip_top”、“mouth_lower_lip_bottom”、
“mouth_left_corner”、“mouth_right_corner”等 6 项,将其从每帧图像所得数据中提取出来,形成相应的坐标序列。
最终,模型训练及测试所用的数据为六维特征向量 F:
对于任意词汇,其通过口型表达的过程,可划分成若干时间片,每个时间片上的表达对应于 HMM 的一个观察状态,整个词汇表达的完整过程对应一个 HMM 的观察序列。如图所示:
每一个隐藏状态对应着一个视素(viseme),视素这个概念是参考传统的语音识别中将单词分解为音素(phoneme)的做法而提出的,它指唇形特征在一个单词的发音过程中用于识别的最小可区分单位。根据经验,此处设置 HMM 的隐藏状态数为 5,如图3.7 所示。视素同样需要使用数学模型进行拟合。传统的语音识别中,大多采用高斯混合模型 Gaussian Mixture Model,GMM对音素进行拟合。借鉴这一成熟技术,本文同样使用 GMM 对视素进行拟合;除此之外,本文提出另外一套方案,使用深度学习中的深度置信网络代替 GMM 进行拟合。
训练前对全部 HMM 统一初始化,设置其隐藏状态数为 5,具体如以下公式:
数据集基本要求主要如下:
从唇语识别的难点出发,针对当前主流算法的不足,本文提出一个新的算法模型 D3D,它主要通过:
在 3D 卷积(Convolution 3D, C3D)提出之前,RNN 是通用的时序建模结构,LSTM/GRU 通过门控机制,很好的解决了长时依赖导致的梯度弥散问题。在 C3D 提出之后,通过 CNN 进行时序建模的研究越来越多,证明了 CNN 在的时序建模能力甚至要优于 RNN,并且相对于 LSTM/GRU 而言,C3D 能够更好的捕获短时依赖。
本课题从唇语识别的难点出发,结合 DenseNet 和 C3D 的优势,提出了新的前端结构 D3D,其结构如图所示。
网络的核心部分参照了 DenseNet 的网络结构,这里将所有的空间卷积修改为时空卷积,让网络在前期同时学习图像特征和短时的时序依赖。每个 DenseBlock 包含若干个 DenseLayer,每个 DenseLayer 包含两层 3D 卷积,第一个卷积采用 1/1/1 的卷积核,目的是用来融合上一层的跨层特征,同时压缩特征通道数,减少计算量;第二个卷积采用常规的 3/3/3,用来学习特征上的短时依赖。
D3D 的后端采用了两种结构,分别在不同的训练阶段使用。因为诸如 D3D 这样的深层网络,直接端到端(end-to-end)训练会让模型陷入局部最优,不能学习到一个较好的图像特征表示。第一阶段的后端(后文简称 TemporalConv)和第二阶段的后端(后文简称 BackendGRU 与 TCN)结构如图所示。
开放场景下的唇语识别,会包含各种类型的复杂背景,这个背景对于唇语识别任务来说是极大的干扰和不利因素,如果网络过多的关注于这类噪声,会导致模型性能的急速下降,为了让网络更好的关注和任务相关的信息,从而忽略复杂场景内无关信息的干扰,本课题提出来了一个新的 residual-attention 机制,它是传统注意力机制在 CNN 领域的一个新的应用。(注意力机制的提出,主要是为了解决 Encoder-Decoder 结构中,长序列特征压缩导致的信息损失问题)
residual-attention 机制是注意力机制在 CNN 领域的应用,为了适应 CNN 的结构,相对于传统的 attention 在结构上做了一些调整,并取得了很好的效果。一言以蔽之,就是要求解一个经过 softmax 的归一化 mask,用该 mask 去告诉网络应该关注特征图的哪一部分。而这个求解 ask 的过程即是 attention 的过程。
residual-attention 不同于常规 attention 的地方在于:
中文简体汉字一般使用的是 GB2312 编码,采用的是 16 位编码方式,其中简体中文的编码范围是从 B0A1 开始,到 F7FE 结束。如果将该编码的每 8 位用 0—256的之间的十进制数字来表示,简体中文的范围就是[176|161]到[247|254],这样的话,对于其中的每一个汉字,我们都可以使用两个值来表示它,如“啊”就是[176|161],“我”则是[206|210]。
通过上述方法,可以通过一个矩形范围内的二维坐标来对每一个汉字进行定位。这时,我们可以先建立一个拼音音节表。这个表是一个一维的表,表里面是诸如"a", “ai”, “an”, “ang”, “ao”, “ba”, “bai”, “ban”, “bang”, “bao”, “bei”, “ben”, “beng”, “bi”, “bian”, “biao”, “bie”, “bin”, “bing”, "bo"等的拼音音节,里面覆盖了所有的音节组合情况。然后,我们通过建立一个与汉字二维坐标对应的二维数组,接着将汉字对应的音节的索引值存放进二维数组中。这样就可以完成简单的汉字转拼音了。举个例子,输入汉字“我”,它的二维坐标[206|210],该索引在二维数组中的值为”wo”,这样就得到了“我”的拼音。
以 LSTM 为核心,本节将构建唇语识别网络,在网络的输入端,人脸图像首先要经过前面的卷积神经网络。由最后一层神经网络所获取的特征信息将作为输入传到 LSTM 层,从而可以获取序列的时域信息。最后一层 LSTM 层所获得的最后的特征向量在经过多层感知机后将通过一个 softmax 分类器,从而可以生成相应的标签信息。下图是网络结构的大体示意图。
作为最简化版的时序网络,该网络能读取唇部序列图片,解码出对应的中文的标签,但也要求网络训练时的训练数据标签信息严格对齐,这对于自动收集的任意长度的中文数据集来说,显然是很难做到的事情,所以为了解决变长的唇部序列图片和变长的中文标签问题,本文引入了联结主义时间分类(CTC)来对输入的序列偏和标签进行有效的编码。
一般一个句子在自然语言处理过程中,并不会对一个单独的单词来进行识别处理,其每个单词一般都与在该句子中的前后单词有关系,即它们都有上下文的语义关联存在。不同于自然语言的处理,本文中的唇语识别研究不是句子级的,而是单独的单词或者一个短语,或者一串数字,所以他们并不存在上下文语义的关联。因此本文中,首先会将整个唇语视频序列分为若干个小的子序列,接着再将这些子序列输入到 Faster R-CNN 中进行处理。如下图所示将卷积神经网络 LSTM 相结合的唇语识别方法的结构。从图中可以看到,将 CNN和 LSTM 结合后的那部分称为深度神经网络,在该网络中,CNN 为 Faster R-CNN,其主要是用来提取唇语视频中子序列的唇部特征,然后将其特征输入到 LSTM 网络中,通过对提取到的特征进行特征编码,提取时序特征从而识别出语义信息,最后再使用 Softmax 来对唇语视频中说话者说话内容进行预判。
随着深度学习技术的发展,Faster R-CNN 在人脸检测领域取得了很好的效果。又因为 AlexNet 网络的提出推动了深度学习的进一步的发展,并且在ILSVRC12 比赛上,该网络模型获得了冠军,所以本章使用 AlexNet 网络来进行唇部关键点的检测。如下图所示为 AlexNet 结构,其中它的卷积层共有五层,该网络的最后三层为全连接层。
在进行人脸关键点检测中,训练网络模型时,首先根据检测到的人脸区域信息 {x,y,z,h} ,对人脸关键点的坐标进行规范化,如公式(4-8)所示:
其中检测到的人脸中心区域的坐标为 (x,y) ,人脸的宽和高分别是 w 和 h 。
在经过 Faster R-CNN 检测到唇部关键点过后,并通过关键点检测模型对检测到的关键点进行提取特征向量 (x1,x2,x3,…,xn)再将其输入到 LSTM 网络中,输出的则是唇语视频中的内容 y 。
LSTM 网络最早是由 S.Hochreiter 等人提出。当输入tx ,并且已知前一个隐藏层状态t−1h 以及在 t 时刻的记忆状态向量tc ,可以计算得到当前输出向量th ,计算如下:
在使用该模型时,每个序列输出的条件概率都对应着一个输入序列,其概率计算如式(4-15)与(4-16)所示:
如下图所示,为采用 LSTM 进行识别的流程图。训练阶段将卷积神经网络的学习率设为 0,并且将使用 Faster R-CNN 检测到的关键点提取出的特征向量输入到 LSTM 网络中,而 LSTM 的输出则为预测结果。其损失函数定义如式(4-17)所示:
在使用随机梯度下降法进行误差反向传播过程中,会出现**梯度弥散(梯度消失)**等问题,因此使用 LSTM 能够很好的解决该问题,并且能很清晰的记录下中间过程等信息,从而得到的隐藏层状态能够最优。最后,针对在训练过程中出现过拟合的问题,在 LSTM 网络的最后一层引入了 dropout 层,以此来提高识别效果。