标题:EMO: Emote Portrait Alive - Generating Expressive Portrait Videos with Audio2Video Di ffusion Model under Weak Conditions
作者:Linrui Tian, Qi Wang, Bang Zhang, Liefeng Bo
单位:Institute for Intelligent Computing, Alibaba Group
项目地址:https://humanaigc.github.io/emote-portrait-alive
GitHub:https://github.com/HumanAIGC/EMO (7.5k 🌟)
原文:https://arxiv.org/pdf/2402.17485
被引:13
报告所使用ppt:
EMO_ Emote Portrait Alive.pdf
报告讲稿(部分为语音转文字):
大家好,今天我要为大家介绍的是阿里巴巴团队推出的一款名为“EMO”的大模型。这款模型的创新应用主要集中在图像和声音生成视频方面,做的是我们给一个照片,一个人的头像或者生成的图片啥的。然后再给一段音频,它就可以驱动这个人讲话的这样的一个事儿。我们先来看一看它的效果。这里有一段视频,我们可以一起看一下,注意观察他的嘴巴的动作什么的。我不是小黑子 (doge)
演示视频:
Alibaba presents EMO AI - All Demo Clips Upscaled to 4K (720p).mp4
怎么样?是不是还不错呢?对,包括像rap这样非常快速的,它也能生成一个很好的效果。下面,我将带大家详细了解这一大模型的工作原理和实际应用。
这篇文章的作者是来自阿里巴巴的团队,我把项目地址和github都放在这里了。不过不幸的是目前还没有开源。最近许多阿里的工作都做的其实非常棒,但是因为各种原因都没有开源。即使没有开源,收获了7.5K的star,可以看到大家对这个方向还是非常关注的。
我自己呢是对这个方向比较感兴趣,去读了读论文,然后也发现其中有很多涉及到深度学习的一些常见的概念和一些训练方法,觉得也挺有意思的,就把它作为自己的期末报告来做了。然后因为有些过于专业的内容自己没有相关专业的基础,于是整个阅读过程是在大模型辅助的情况下进行的,边读边学。这次是简单做了一个PPT来讲,PPT我觉得相比论文本身可能还是更直观一点,不过它的细节可能就会缺少一点。大家如果对细节感兴趣的话,可以去看一下原文。
一、EMO模型简介
首先,让我们了解一下什么是EMO模型。EMO的全称是Emote Portrait Alive。这款模型的核心任务是根据一张人物头像照片和一段音频,生成一个能够驱动人物说话并且口型与音频同步的视频。这一技术的实现得益于深度学习和计算机视觉的进步,尤其是在图像和视频生成领域。
二、模型的输入与输出
因为是要给定一个人的图像,然后再给定一段音频来生成这种视频。所以它天然一定就会有两个输入,一个是我们的输入的这张图片,一个是我们的音频。大家可以看到也就是这个图片上红框中的这个reference image的这个部分和这个audio的这个部分。
除此之外,模型还引入了一些用来辅助的相对较弱的控制,如Face Region,这个东西其实就是把你脸上这个部位给它圈出来。对,有多少帧你就可能打多少个这样的这个mask (在图像分割任务中,mask(掩码)通常是一个与输入图像相同尺寸的二进制矩阵,用来指示图像的哪些部分属于感兴趣的区域(比如前景)以及哪些部分是背景。掩码值为1的像素表示它们属于目标区域,而值为0的像素表示它们属于背景)上面会有这种bounding box,去把它圈圈出来,来作为这个脸部区域的一个控制。对,这种控制其实相对于常用的,比如说用骨架或者什么3D模型,它是相对比较弱的。所以认为这样能够避免一些可能因为控制太强而导致的什么体型错误,比例不协调,生成的质量不高的情况出现。
然后还有一个输入,叫Head Speed,认为我们的头在这种说话的时候,他的转动的角度其实是会不一样的。对他就额外的把这个信息也编码进来,作为一个上面的控制信息的一个补充,这样的话你就可以让它生成,比如说符合特定的head speed的这样的一个视频。以提高生成视频的质量和连贯性。
三、模型的工作原理
backbone部分
1、特征对齐与生成
为了生成连贯的视频,EMO模型采用了多种Attention机制(深度学习或计算机视觉中常见,具体来说,注意力机制通过赋予输入数据的不同部分不同的权重,使得模型在进行预测或生成输出时,可以更有选择性地聚焦于更为重要的部分。)
(1) Self-Attention(蓝色):用于处理视频生成过程中每一帧的自相关性。这个模块从Stable Diffusion 1.5模型得到的结果继承而来,确保了模型能够高效地利用已有的图像生成技术。(Stable Diffusion 是一种基于扩散模型的生成技术,主要用于静态图像生成任务。Stable Diffusion 1.5 是其版本之一,这一过程可以理解为一个逆向的扩散过程,逐步减少噪声,直到得到清晰的图像。扩散模型通过模拟物质扩散的过程,从随机噪声开始,逐步去噪,逐步生成清晰的图像。)
(2) Reference Attention(橙色):用于将图像特征对齐到视频生成过程中。他主要做的任务就是去和我们的这个reference image做对齐。
(3) Audio Attention(白色):第三个部分是叫做audio attention。Audio attention它主要是为了和我们这个audio做一个对齐。
(4) 然后最后一个就是我们的temporal module,现在做视频生成一般都会有的一个模块。一般它的初始值都是从animate diff那边给继承过来。(Animate Diffusion 则是基于扩散模型的动画生成技术,专注于生成连续的帧。通过考虑前后帧的运动特征,模型能够生成自然流畅的动画效果。)
所以这整个Backbone结构还是相对来说比较清晰的,两个需要对齐的和一个来控制这个视频能够产生连贯性的结果的一个模块。
接下来,我们再来细看reference的部分(橙色)
3、通过reference注入特征:
(1) 然后我们再来细看对reference这个部分,它是怎么得到要注入的这个reference的特征。它是过了一个叫做reference net的东西。这个reference net它其实本身的结构和SD是一模一样的,对,因此我们可以用它来提取我们reference image的特征。但这个时候可能有小朋友会发问了,说为什么我这儿除了reference image还有几个什么motion frames呢?这其实是因为在过去我们来生成视频的时候,如果我们这个中间的这个backbone,它是在可能16帧上训练的那它就只能生成16帧的视频,对吧?那如何让它生成连贯的视频呢?有一个办法就是我们把前一段视频的最后一帧拿出来,作为一个motion提示,然后再来生成后续的。这样的话我们把它一段一段拼接到一起就可以生成连续的了,不过它可能没有用到一帧,而是用到好几帧,也就是我们这儿的motion frames,它提示的其实是我们要去衔接的那部分动作,之后我们之后产生动作必须和这个部分动作是协调的,不能有个突变的。所以他这里是把两个绑在到一起,再送到这个reference net里,然后产生这样的一组。其中第一它的第一帧,我们刚刚提到reference image,它会被拿出来放到这个reference attention里。然后后续的这个motion frames所提出出来的这个特征,再被送到我们后面可能管运动的模块,就是我们的temporal module里面,我们后面再细说。
(2) 再来看audio部分(白)
音频部分则通过V2V(Voice to Vector)方法将音频数据编码成特征向量,这些向量将用于生成与音频同步的口型变化。但这个方法他就没有去做训练了,直接是冻结住了它的参数。(通过冻结前面几层的参数,我们可以保留模型中已经学习到的通用特征,提高模型在新任务上的泛化能力。)跟图像处理的motion frame一样,他认为我们的audio其实也是有一个前后相关性的。所以他会把前面M帧和后面M给拼的到一起,和这个一起送进来。
(3) 连贯视频生成
我们再来看temporal module部分(黄1)
跟我们之前提到的一样,Temporal Module从Animate Diff的权重继承而来,确保了视频生成的稳定性。
然后还有一个控制,就是这个head speed。对它这个部分它自己设计了一个speed encoder这样的一个结构。大致的思想就是我们会把这个speed分为很多个bucket(bucketing桶化:将头部运动的速度范围划分为多个区间。例如,假设速度的范围是从 0 到 10,可以将其划分为 5 个区间:0-2、2-4、4-6、6-8、8-10。然后去分别的做激活)这个我理解的是如果他的这个动的速度很大,那它的这个embedding就会呈现出白的部分,被激活的部分很多。然后如果他的这个speed很小,就会呈现出被激活的部分很少的这样的一个状态。然后在多次重复之后在这个self attention里去和这个self attention的feature做一个交叉。把前面的控制加进来做一个交叉的控制。然后这样的话就可以同时把这个head speed的控制和前面的这个motion frames的控制给它加进来,让它产生一个我满足我们需要的想法的这样的一个运动。
通过这些Attention机制,模型能够在生成每一帧视频时,综合考虑当前帧的图像特征和音频特征,从而生成与音频同步的动态口型。
四、弱控制的优势与弊端:
之前相关模型的训练一般都会采用一些更稠密的控制。比如说会把骨架五官啥都标出来。对,这样控制可能确实就会让他有的时候产生一些比如说体型或者脸型的不协调。但是如果像我们现在控制太弱了的话,他可能也会有一个问题,就是他可能会产生我们不想要的部位。比如说不只是脸的,可能也会产生肩膀的、手的等各种的我们原本不想要的部位。
五、训练过程:
EMO模型的训练过程分为三个阶段:
(1) 第一个阶段是训练我们中间的这个,你可以看作它是纯图像生成,把我们那些motion module什么都去掉。对这个部分它就是backbone network和这个reference net,还有这个face locator的一个训练。对它会采取先读一个单张的一个图片进来,然后这个reference net他也不去管什么motion frames,他只采一张我们的这个从视频中采一张我们的人的图像,来这里做一个训练。
(2) 然后第二个部分就是作为一个video的训练。对,这个部分训的就是这个temporary module和这个audio,主要为主要目的是产生满足这个audio驱动的视频。
(3) 然后第三个部分就是同时是这temporary module和这个speed encoder,它的目的是产生满足我们这个speed控制的一个视频。有同学可能会问,为什么我们的这个audio和speed它不一起去呢?因为作者发现可能在训练的过程中,他们两个会有一个纠缠的情况。如果一起训的话,这个视频就很有可能只是被这个speed的驱动,而不是这个audio驱动了。对,这不是我们想要的结果。所以在训练第三个阶段的时候,我们会把这个部分的参数就给冻结住了。(通过冻结前面几层的参数,我们可以保留模型中已经学习到的通用特征,提高模型在新任务上的泛化能力。)
总的来说,阿里巴巴的EMO模型是一项非常有前景的技术创新。尽管目前模型还没有完全开源,但其在学术界和工业界都引起了广泛关注。未来,随着技术的不断完善和应用场景的扩展,我们可以期待看到更多基于这项技术的创新应用。(⁎⁍̴̛ᴗ⁍̴̛⁎)