唇语识别-训练策略汇总

引言

什么叫唇语识别呢?

简单来说就是你把你说话的视频去掉声音,然后这个机器光看图片就知道你在说啥。这个东西用英文讲就有几种说法:Visual Speech Recognition(VSR)-视觉语音识别、Lip-reading-唇读。不过这两个说法都是同一个东西。

为啥要做这个东西呢?

可能有人会说了,这不是有语音识别吗?我干嘛用图片识别别人说了啥?说到点子上了,这主要是为了照顾那些“不能发声”的朋友的。你想,假如你有一个特别爱吹牛、摆龙门阵的哥们,突然有一天声带出现了问题,变成了“不能发声”的人,但是他嘴巴还是能动啊,这个时候有一个能实现唇语识别的家伙事,是不是能让这个哥们生活方便些了呢?

训练模型

这个唇语识别就鄙人看到的通常有几个门派吧,一个是把音频和视频都当作深度学习模型输入的多模态派;还有一个是只把视频当作输入的单模态派。前者主要是觉得两者同时输入模型进行训练可以减少相同的唇形产生不同音素的歧义从而提升精度。后者认为唇读本身就是依靠图像进行识别,引入其他特征向量会干扰模型对于图像高维特征的提取。

上面这两个分别是单模态和多模态的出自论文[1][2],大多数的唇语识别模型都会采用ResNet-18+Conv3d的前端组合,上面的两个模型也不例外。

训练策略

一般情况下,针对模型整体训练过程的三个部分:模型框架、数据增强、细节Tricks来制定相对应的训练策略。

模型架构

这个部分的训练策略,本质就是搭建合适的训练模型框架,其中包含了模型网络的前端、后端和损失函数。

数据增强

1.  随机裁剪:比如从每一帧的图像中按照region-of-interest (ROI)裁剪出88*88的嘴部图片patch

2.  水平翻转:以0.5的概率去翻转一个视频中的所有帧,就是这个视频中的每一帧都有50%的可能性被水平或者垂直翻转

3.  图像混合:通过线性组合两个输入视频序列及其对应的目标来创建新的训练样本,简单的说就是:从几个个视频里面选两个视频,把他们加分别乘以λ和1-λ,再加起来

4.  时间掩码:对于一个视频序列,通过把其中的N帧用视频的平均帧替代从而生成一个掩码视频序列

细节Tricks

1.  脸部对齐:可以使用RetinaFace跟踪器实现人脸和人脸的对齐,同时生成嘴部landmark,可以脸部对齐的代码库(安装其中:ibug.face_detection 和ibug.face_alignment)

2.  字边界:在后端输入一个字边界指示符,这个指示符长度和视频帧长一致,关于字存在的帧都设置为1,其他部分都设置为0.

3.  知识蒸馏:有很多相同架构的模型,然后有一个已经训练好的“教师”模型,然后由教师模型提供带有额外监督信号的类间相似度信息,每轮迭代都会让比”教师”模型更加优秀的”学生”模型成为”教师”模型,直到”学生”模型没有变化。

4.  学习率调度器:常用的由余弦学习率调度器和指数型学习率调度器,其中指数型学习率调度器是在每次迭代(一个epoch)的时候把学习率乘0.95;余弦学习率调度器的公式如下:

其中η是初始的学习率,T是迭代的总数(epoches),t是当前的迭代数

总结

通过对唇语识别概念、训练模型种类进行介绍,层层递进为后面的训练策略详细解释做铺垫,希望读者能更好的理解。

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYvUNmiP' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片