论文:LipNet:END-TO-END SENTENCE-LEVEL LIPREADING 本人在对相关领域的内容进行调研时,由于缺乏指导,在中文网站上也很少见到有对Lipreading相关的文章进行详尽分析,因此也耗费了不少时间精力。这里对领域内的一篇Sentence Level的开山之作(文中自称)进行分析,介绍文章中的重点。在这篇文章之前,大多数Lipreading的工作集中在字母、单词、数字或者短语的识别上,具有一定的局限性。而这篇文章虽然使用的数据中的句式有限定,词汇量也比较小,但是不妨碍它是在语句的尺度上进行的识别,且取得了相当不错的成果。 首先介绍数据集。GRID数据集是一个Sentence-level的数据集,比较包含三万多条数据。每一个数据是一条视频,视频内容是一个人说出一条固定的句子,并对应一条文本标签,文本标签对每个单词的起始时间和终止时间都进行标注。句子的句式是进行了限制的,并不是具有逻辑性的自然语句,即:也就是说,每一条语句都是由6个固定类型的单词组成,上标表示了数据集中这种单词类型的种类数量,比如表示这个位置为一个颜色单词(如blue),而数据集中一共有4种颜色单词。 另外需要了解的是,数据集的视频一共有34个文件夹,对应了对34个不同的人所录制的视频。每一个文件夹包含上千个视频数据,都是对同一个人录制的。而在后期实验时,作者会采用两种不同的方式进行训练和测试:(1)用其中30个人的视频进行训练,而用另外4个人的视频进行测试,即Unseen Speakers;(2)从34个人的视频中,各随机抽取255个视频作为测试数据,其它的作为训练数据; 首先会按照先前在数据集部分的末尾所介绍分组方式将数据拆分为两种训练集和测试集。然后使用已有的面部识别检测器,将视频的每一帧都处理为大小的仅包含嘴部的帧。最后再将每一帧进行标准化。 (1)分别使用常规的图像序列和水平翻转的图像序列进行训练; (2)由于数据集提供了每一个单词的起始和终止时间,因此可以使用每一个单词所对应的图像帧序列来训练模型; (3)随机删除或复制某些帧,概率设置为0.05; 介绍完了数据的组织方式以后,大家也都知道了这是一个Seq2seq的问题,与语音识别的套路极其相似,因此Lipreading的套路很大程度上就是将CV的套路和机器翻译的套路进行整合。 这篇文章的模型结构也没什么特别的,文中的废话比较多,总结起来其实就是用3D卷积对图像帧进行特征提取,然后使用两层双向GRU作为Encoder-Decoder,输出一个预测值,最后再用全连接层输出预测的概率。总体上模型的结构并不复杂,也有一些可以改进的地方 。 此外,损失函数函数值得注意。本文使用的是CTC损失函数,这个损失函数是一个比较经典的用于语音识别相关问题的损失函数,避免了帧与字符进行对齐标注。具体地可以参考 这篇文章 。 指标WER和CER分别为word error rate 和 character error rate,即单词错误率和字符错误率,固然是越低越好。指标分为了两栏:Unseen Speakers和 Overlapped Speakers,对应于在数据集部分介绍的两种数据划分方式下的测试结果。可以看到,LipNet在GRID数据集上的各项指标都达到了当时的最好。后续的很多工作在GRID数据集上的WER已经来到1.0%~2.0%,但是在例如LRS数据集上的表现,远无法达到GRID数据集上的效果,因为GRID数据集中的句式单一,且人脸正对着镜头,只能作为一项基础研究,Lipreading在自然场景下的sentence-level的识别,仍然有很长的路要走。 水平有限,欢迎大家批评指正。有问题可以共同探讨。