MediaPipe 设备端文本到图像生成解决方案现已面向 Android 开发者推出

十月 09, 2023
Paul Ruiz Senior Developer Relations Engineer
Kris Tonthat Technical Writer

今年早些时候,我们通过 MediaPipe 解决方案在 Android 平台上预先展示了基于扩散模型的设备端文本到图像生成技术。今天,我们很高兴地宣布这一技术作为早期实验性解决方案“Image Generator”公开发布,以供开发者在 Android 设备上试用。现在,在高性能设备上仅花费约 15 秒的时间,便能轻松实现完全在设备端生成图像。我们热切期待看到您的杰作!

使用全新 MediaPipe Image Generator 任务的三种主要方式:

  1. 文本到图像生成,基于使用标准扩散模型的文本提示。
  2. 可控文本到图像生成,基于文本提示和使用扩散插件的条件图像。
  3. 可自定义的文本到图像生成,基于使用利用低秩适应 (LoRA) 权重的文本提示,允许用户根据为特定用例预定义的特定概念来创建图像。

模型

在我们深入了解 MediaPipe 新任务中所有有趣而精彩的内容之前,有一个关键点需要知道:我们的图像生成 API 支持任何与稳定扩散 v1.5 架构精确匹配的模型。这意味着您既可以使用预训练好的模型,也可以使用经过微调的模型。为了使用这些模型,您需要通过我们的转换脚本将模型转换为 MediaPipe Image Generator 所支持的模型格式。

您还可以通过在 Vertex AI 上利用 MediaPipe 扩散 LoRA 进行微调来自定义基础模型。通过这种方法,您无需对整个模型进行全面微调,就能将新的概念注入基础模型中。如需了解有关此流程的更多信息,请参阅我们的官方文档

如果您想立即试用此任务,并且不进行任何自定义,我们还在同一文档中提供了一些经过验证的可运行模型的链接。

利用扩散模型生成图像

尝试 Image Generator 任务最直接的方法是向其提供文本提示,然后使用扩散模型接收结果图像。

与 MediaPipe 的其他任务类似,您首先需要创建一个选项对象。在该任务中,您只需要在设备上定义基础模型文件的路径即可。一旦有了这个选项对象,您就可以创建 ImageGenerator 了。

val options = ImageGeneratorOptions.builder().setImageGeneratorModelDirectory(MODEL_PATH).build() imageGenerator = ImageGenerator.createFromOptions(context, options)

创建新的 ImageGenerator 之后,您可以通过传入提示、生成器应进行的迭代次数以及种子值来创建新图像。这将运行阻塞操作以创建新图像,因此,在返回新的位图结果对象之前,您应当在后台线程中运行这个操作。

val result = imageGenerator.generate(prompt_string, iterations, seed) val bitmap = BitmapExtractor.extract(result?.generatedImage())

除了这种简单的输入/输出形式外,我们还支持通过 execute() 函数手动逐次执行迭代,以在不同阶段获取中间结果图像,从而展示生成过程的进展。虽然出于对性能和复杂性的考虑,我们并不推荐大多数应用获取中间结果,但这是一种展示内部工作原理的好方法。这是一种更为深入的操作方法,您可以在 GitHub 上我们的官方示例应用中找到此示例的演示以及本帖子中提到的其他示例。

使用插件生成图像

能够仅凭借提示在设备上生成新图像是一个巨大的进步,但我们在此基础上又向前迈进了一步,我们实现了一个新的插件系统。这一系统使得扩散模型能够同时接收条件图像和文本提示作为输入。

我们目前支持三种不同的方式来为图像生成提供基础:面部结构、边缘检测和深度感知。这些插件使您能够提供一张图像,从中提取特定的结构,然后利用这些结构创建新的图像。

LoRA 权重

我们今天推出的第三个重要功能是利用 LoRA 技术来自定义 Image Generator 任务,使其能够教会基础模型理解训练过程中的新概念,比如特定的物体、人物或风格等。通过应用新的 LoRA 权重,Image Generator 将转变为一个专门化的生成器,能够在生成的图像中注入特定的概念。

LoRA 权重在一些用例中非常实用,比如您希望生成的所有图像都具有油画风格,或者在创造的场景中总是出现一个特定茶壶。您可以在 Vertex AI 的 MediaPipe 稳定扩散 LoRA 模型卡上查看关于 LoRA 权重的更多信息,并使用此笔记本来创建这些权重。一旦生成了 LoRA 权重,您便可以使用 MediaPipe 任务 Image Generator API 在设备端部署 LoRA 权重,或通过 Vertex AI 的一键式部署将其用于优化服务器端的推理。

在下面的例子中,我们使用 Dreambooth 茶壶训练图像集中的多张茶壶图像创建了 LoRA 权重。然后,我们使用权重在不同的场景下生成包含茶壶的新图像。

后续工作

这只是我们计划为设备端图像生成提供支持的开始。我们非常期待看到开发者社区所构建的优秀作品,请务必在 X(原名 Twitter)上发布您的杰作。发布时,请使用 #MediaPipeImageGen 标签并提到 @GoogleDevs。您可以在 GitHub 上查看官方示例,示例展示了您刚刚学到的所有内容。此外,阅读我们的官方文档以了解更多详细信息,同时关注 Google for Developers YouTube 频道,了解 MediaPipe 团队发布的更新内容和教程。

致谢

感谢所有为这项工作做出贡献的团队成员:来自 Core ML 团队的 Lu Wang、Yi-Chun Kuo、Sebastian Schmidt、Kris Tonthat、Jiuqiang Tang、Khanh LeViet、Paul Ruiz、Qifei Wang、Yang Zhao、Yuqi Li、Lawrence Chan、Tingbo Hou、Joe Zou、Raman Sarokin、Juhyun Lee、Geng Yan、Ekaterina Ignasheva、Shanthal Vasanth、Glenn Cameron、Mark Sherwood、Andrei Kulik、Chuo-Ling Chang 和 Matthias Grundmann,以及来自 Google Cloud 团队的 Changyu Zhu、Genquan Duan、Wu、Ting Yu 和 Shengyang Dai。