亚马逊AWS官方博客

会说话的头像:用 AI 创建脱口秀

现代 AI 模型可以轻松生成文本,口头音频,图像,甚至视频。开发者的主要挑战是找到将这些工具结合在一起以构建真实应用的方法。

在这篇博客里,我们使用亚马逊服务和开源工具的组合,构建了一个由 AI 生成的电视脱口秀节目。读完这篇文章后,你将能够创建一段 1-2 分钟的视频,话题可自选,表现形式是一位男主持人和一位女主持人的对话,语音和视频都将又由 AI 工具生成。

我们将使用以下工具来实现这一目标:

Amazon SageMaker 是一个全面的机器学习服务,旨在让开发者和数据科学家能够快速构建、训练和部署机器学习模型。通过提供一系列完整的工具和集成的开发环境,SageMaker 极大地简化了机器学习项目的复杂性。在这篇博客里,我们将使用 SageMaker 来托管我们的代码,部署机器学习模型,并与其他亚马逊服务进行通信。

Amazon Polly 是一项先进的文本转语音服务,旨在将文本内容转换为逼真的语音。利用深度学习技术,Polly 能够提供高质量、自然听感的语音输出,支持多种语言和口音。我们将使用 Amazon Polly 将英文文本翻译成自然听感的英文语音,包括男声和女声。

Amazon Bedrock 是一个完全托管的服务,提供来自领先 AI 公司的高性能基础模型(Foundation Models – FMs)供用户选择。使用 Amazon Bedrock,可以轻松地尝试和评估顶级 FMs 以适应您的使用场景,利用微调和检索增强生成(RAG)等技术,使用你的数据对这些模型进行私人定制,并构建利用您的企业系统和数据源执行任务的代理。

SadTalker 是一个开源工具,用于学习 3D 运动系数,使模型能够根据一张静态图像和音频轨迹生成逼真的“会说话的头部”视频。在这篇博客文章中,我们使用 SadTalker 生成我们的男性和女性新闻主播。

以下是完整的架构示意图:

设置环境

需要做的第一件事就是建立一个新的 SageMaker Domain

“Domain”可以被看作是一个用于测试和实验的共享工作空间。多个用户可以使用 Domain 来设置 Jupyter Notebook 环境,处理训练数据等等。

创建一个 SageMaker Domain

设定 Domain

首先,导航到“SageMaker”控制台并点击“Domains”。在 Domains 页面,点击“Create Domain”按钮:

建立 Domain 最简单的方法是使用 Quick Setup。请确保选择快速设置,然后点击“Set Up”:

一个新的 Domain 会出现在“Domains”控制台上,处于 Pending 状态。设定 Domain 会涉及到创建 IAM 角色,设定 EFS 储存空间,以及一些其他操作,因此这个过程可能需要几分钟:

一旦过程完成,Domain 的状态将会变为 InService:

解决问题:添加用户

在大部分情况下,Quick Setup 会自主创建一个默认的用户。如果创建失败,点击 Domain 的名称(比如 QuickSetupDomain-20240126T110128),然后在 User Profiles 的下方点击 Add User:

首先,选择一个用户名。其他用户设置不用改变(按默认选择)。唯一需要注意的是 Domain 的 Execution Role。需要记住这个值,因为之后需要添加一些权限到这个角色,这样可以使用 Amazon Polly 文字转语音服务:

User profile 将会出现在用户标签下方:

我们将使用这个用户配置文件来登录 SageMaker Studio,但是先需要向 Domain 使用的 IAM 角色添加一些额外的权限,它会被用来和其他 AWS 云服务进行交互。

解决问题:给 Polly 添加权限

如果在“Quick Setup”过程中使用的是 SageMaker 创建的默认 IAM 角色,那么需要 Amazon Polly 服务添加权限。先导航到 IAM 控制台并找到这个角色。

如果不知道 SageMaker Domain 正在使用哪个 IAM 角色,那可以在 SageMaker 控制台的“Domain Settings”页面找到这个信息:

接下来,导航到 IAM 控制台并搜索你的角色:

点击角色的名称以打开详细视图,然后点击“Add Permissions”:

添加 AmazonPollyFullAccess 策略,然后点击“Add permissions”:

IAM 角色已完成权限配置。下一步是打开 JupyterLab 环境。

开始 JupyterLab

当用户配置文件被创建后,点击用户配置文件的名称:

接下来,点击“Launch”,然后选择“Studio”。将“Studio”视为 Domain 的 IDE。从 Studio 可以创建机器学习工作,用于实验的 Jupyter Notebooks 等。

点击“Studio”后,会打开一个新的标签页,显示 Studio 界面。点击左上角的“JupyterLab”:

这时将会显示 JupyterLab 管理页面。点击“Create JupyterLab Space”以设定一个新的 JupyterLab 空间(类似经典的 SageMaker Notebook Instance):

首先,点击“Create JupyterLab space”,然后点击“Create Space”:

SadTalker 最适合在一个 GPU 装置的设备实例上运行。它也需要一些空间来储存模型,所以请确保选择 g4dn.2xlarge 这种实例类型, 并且至少设置 20GB 的磁盘空间:

点击“Run Space”,然后等待空间进入“Running”状态:

设定 SageMaker Studio

点击“Open JupyterLab”(在上文截图中位于“Stop Space”按钮旁边)将会打开一个新的 JupyterLab 空间上 Jupyter Lab 的界面:

点击“Terminal”以打开一个新的终端窗口。在新的终端窗口中执行以下命令:

运行 Jupyter notebook

执行 git clone 后,新的目录将会在侧面栏中出现,名为 jupyter-notebooks:

双击此目录。在其中你将找到一个 README 文件以及另一个名为 aws 的目录。点击 aws,然后点击 aiml。你将可以看到文件 talking-heads.mp4(一个演示 notebook 完整效果的视频)和 talking-heads.ipynb(Notebook 文件本身)。双击 talking-heads.ipynb 打开 notebook:

花些时间浏览 notebook 并了解它的运营方式。如果想更改视频中两位新闻主播讨论的“topic”(话题),可以在“Generate Dialogue”模块进行切换:

当你准备好要运行代码时,点“Kernel” ,然后选择“Restart Kernel and Run All Cells”:

notebook 可能需要运行 15-20 分钟,因为一些步骤(尤其是视频生成)可能需要一些时间才能完成。

实例输出

一旦 notebook 完成运行,可以点击文件浏览器面板中的文件夹图标,以返回到 JupyterLab Space 的首页目录。你会看到一个新的目录文件夹叫做 outputs:

点击 outputs,然后点击 final。在 final 目录下将会出现一个名为 talking-heads.mp4 的视频文件。这就是由脚本创建的完整的“talking heads”视频:

你可以右键点击视频,并选择“Download” 来保存本地副本。以下是一个快速无声样本 :

对于完整的有声视频,可以在这里查看。

拓展创意

点击若干次后将会从零开始进行 AI 脱口秀节目的生成。之后便可尝试更改讨论的话题,为两位主播生成新的图像,或者改变传递给 Claude 2 的提示。更改传递给 SadTalker 的参数,以减少(或增加)面部的运动并启用(或禁用)面部和背景的增强。

值得一提的是,花些时间了解 SageMaker,尤其是 SageMaker Jumpstart,它包括许多有用的 Jupyter 笔记本,可以加速你的 AI 旅程。

特别注意的是,完成后,不要忘记关闭并删除你的 JupyterLab 空间,同时确保你删除了任何可能仍在运行的 SageMaker Inference 端点

在 SageMaker Studio 内删除你的 JupyterLab 空间,如下图:

在 SageMaker 控制台中,从左手边的菜单栏的 “Inference” 菜单里找到并删除你的 Inference 端点:

至此操作全部完成。希望我的博客内容对你有帮助!谢谢。

本篇作者

Jeremy Pedersen

亚马逊云科技解决方案架构师。他专注于机器学习和教育设备,尤其是 Amazon DeepRacer。在加入亚马逊云科技之前,他在阿里云工作了五年,先是担任解决方案架构师,后来成为技术培训师。