AI 工具 101

Flux 由 Black Forest Labs 开发:下一代文本到图像模型。它是否比 Midjourney 更好?

mm
Black Forest Labs Open-Source FLUX.1: A 12 Billion Parameter Transformer Capable of Generating Images

Black Forest Labs,Stable Diffusion 模型的开发团队,发布了 Flux,一套最先进的模型,承诺重新定义 AI 生成图像的能力。但 Flux 是否真正代表了该领域的飞跃,以及它如何与行业领军者如 Midjourney 相比?让我们深入探索 Flux 的世界,探索其潜力以重塑 AI 生成艺术和媒体的未来。

Black Forest Labs 的诞生

Black Forest Labs 不仅仅是一家 AI 创业公司;它是一家拥有丰富人才的公司,拥有开发基础性生成 AI 模型的经验。团队成员包括 VQGAN、Latent Diffusion 和 Stable Diffusion 模型家族的创造者,这些模型已经席卷了 AI 艺术世界。

Black Forest Labs 开源 FLUX.1

Black Forest Labs 开源 FLUX.1

凭借 3100 万美元的种子轮融资,由 Andreessen Horowitz 领投,并获得知名天使投资者的支持,Black Forest Labs 已将自己置于生成性 AI 研究的前沿。他们的使命明确:开发和推进最先进的生成深度学习模型,用于媒体,如图像和视频,同时推动创造力、效率和多样性的边界。

介绍 Flux 模型家族

Black Forest Labs 推出了 FLUX.1 文本到图像模型套件,旨在设定新的图像详细程度、提示遵循、风格多样性和场景复杂性的基准。Flux 家族由三个变体组成,每个变体针对不同的用例和可访问性级别进行了调整:

  1. FLUX.1 [pro]:旗舰模型,提供顶级的图像生成性能,具有优越的提示遵循、视觉质量、图像详细程度和输出多样性。通过 API 提供,定位为专业和企业使用的高级选项。
  2. FLUX.1 [dev]:用于非商业应用的开源、指导蒸馏模型。它旨在实现与专业版类似的质量和提示遵循能力,同时更高效。
  3. FLUX.1 [schnell]:套件中最快的模型,针对本地开发和个人使用进行了优化。它以 Apache 2.0 许可证开源,使其可用于广泛的应用和实验。

我将提供一些独特的、创新的提示示例,展示 FLUX.1 的能力。这些提示将突出模型在处理文本、复杂组合和具有挑战性的元素(如手)方面的优势。

  • 艺术风格混合与文本: “以文森特·梵高的风格创作一幅肖像,但用形成 ‘星空夜’ 的草书字体的笔触替换他的胡须。”
Black Forest Labs 开源 FLUX.1

Black Forest Labs 开源 FLUX.1

  • 动态动作场景与文本集成: “一个超级英雄从漫画书页面中突破。动作线和音效应该形成英雄的名字 ‘FLUX FORCE’ 的粗体、动态字体。”
Black Forest Labs 开源 FLUX.1

Black Forest Labs 开源 FLUX.1

  • 超现实概念与精确物体放置: “一只可爱的猫在窗户阳光下,棕色和白色,焦点在眼睛的质地和颜色上。自然光线以捕捉真实的眼神和深度。”
Black Forest Labs 开源 FLUX.1

Black Forest Labs 开源 FLUX.1

这些提示旨在挑战 FLUX.1 的能力,包括文本渲染、复杂场景组合和详细物体创建,同时展示其创造性和独特的图像生成潜力。

Flux 背后的技术创新

Flux 的令人印象深刻的能力背后是一系列技术创新,使其与其前辈和同时代的模型有所不同:

大规模的变压器驱动流模型

所有公开的 FLUX.1 模型都基于一种混合架构,结合多模态和并行扩散变压器块,扩展到令人印象深刻的 120 亿参数。这代表了与许多现有文本到图像模型相比,模型大小和复杂性的显著飞跃。

Flux 模型通过融入流匹配,一种概念上简单的训练生成模型的方法,改进了之前的最先进的扩散模型。流匹配提供了一个更灵活的生成模型框架,扩散模型是这种更广泛方法的一个特例。

为了提高模型性能和硬件效率,Black Forest Labs 集成了旋转位置嵌入和并行注意力层。这些技术使模型能够更好地处理图像中的空间关系,并更高效地处理大规模数据。

架构创新

让我们分解一些关键的架构元素,这些元素促成了 Flux 的性能:

  1. 混合架构:通过组合多模态和并行扩散变压器块,Flux 可以有效地处理文本和视觉信息,导致提示和生成图像之间的更好对齐。
  2. 流匹配:这种方法允许更灵活、更高效地训练生成模型。它提供了一个统一的框架,涵盖扩散模型和其他生成技术,可能导致更强大、更通用的图像生成。
  3. 旋转位置嵌入:这些嵌入帮助模型更好地理解和维护图像中的空间关系,这对于生成连贯、详细的视觉内容至关重要。
  4. 并行注意力层:这种技术允许更高效地处理注意力机制,这对于理解文本提示和生成图像中的不同元素之间的关系至关重要。
  5. 扩展到 12B 参数:模型的庞大规模使其能够捕获和合成更复杂的模式和关系,可能导致更高质量和更多样化的输出。

基准测试 Flux:图像合成的新标准

https://blackforestlabs.ai/announcing-black-forest-labs/

https://blackforestlabs.ai/announcing-black-forest-labs/

Black Forest Labs 声称 FLUX.1 设定了图像合成的新标准,在几个关键方面超越了流行的模型,如 Midjourney v6.0、DALL·E 3 (HD) 和 SD3-Ultra:

  1. 视觉质量:Flux 旨在生成更高保真度、更逼真的细节和更好的整体美观的图像。
  2. 提示遵循:该模型旨在更紧密地遵循给定的文本提示,生成更准确反映用户意图的图像。
  3. 尺寸/长宽比可变性:Flux 支持从 0.1 到 2.0 百万像素的多种长宽比和分辨率,提供了多种用例的灵活性。
  4. 字体:该模型在生成和渲染图像中的文本方面显示出改进的能力,这是许多文本到图像模型的常见挑战。
  5. 输出多样性:Flux 专门针对预训练中整个输出多样性的保留进行了微调,提供了更广泛的创造可能性。

Flux 与 Midjourney:比较分析

https://blackforestlabs.ai/announcing-black-forest-labs/

现在,让我们解决一个燃烧的问题:Flux 是否比 Midjourney 更好?为了回答这个问题,我们需要考虑几个因素:

图像质量和美学

Flux 和 Midjourney 都以生成高质量、视觉上令人惊艳的图像而闻名。Midjourney 因其艺术风格和创造具有独特美学吸引力的图像的能力而受到赞扬。Flux凭借其先进的架构和更大的参数数量,旨在匹配或超过这一水平的质量。

来自 Flux 的早期示例显示出令人印象深刻的细节、逼真的纹理和对照明和构图的牢固掌握。然而,艺术的主观性使得在这一领域很难明确宣称优越性。用户可能会发现每个模型在不同风格或图像类型中都有其优势。

提示遵循

Flux 在提示遵循方面可能比 Midjourney 有所超越。Black Forest Labs 强调了他们改进模型准确解释和执行给定提示的能力的重点。这可能会导致生成的图像更准确地反映用户的意图,尤其是对于复杂或细致入微的请求。

Midjourney 有时被批评为对提示采取创造性的自由,这可能会导致美丽但出乎意料的结果。Flux 的方法可能提供对生成输出的更精确的控制。

速度和效率

随着 FLUX.1 [schnell] 的推出,Black Forest Labs 正在瞄准 Midjourney 的一个关键优势:速度。Midjourney 以其快速的生成时间而闻名,这使得它在迭代的创作过程中非常受欢迎。如果 Flux 能够在保持质量的同时匹配或超过这种速度,它将是一个重要的卖点。

可访问性和易用性

Midjourney 由于其用户友好的界面和与 Discord 的集成而获得了普遍欢迎。Flux 作为一个新产品,可能需要时间来开发类似的可访问界面。然而,FLUX.1 [schnell] 和 [dev] 模型的开源性质可能会导致社区开发的工具和集成的广泛应用,可能会在灵活性和自定义选项方面超过 Midjourney。

技术能力

Flux 的先进架构和更大的模型大小表明,它可能在理解复杂提示和生成复杂细节方面具有更多的原始能力。流匹配方法和混合架构可能使 Flux 能够处理更广泛的任务并生成更多样化的输出。

伦理考虑和偏见缓解

Flux 和 Midjourney 都面临着解决 AI 生成图像中的伦理问题的挑战,例如偏见、虚假信息和版权问题。Black Forest Labs 对透明度的强调和他们使模型广泛可用的承诺可能会导致社区监督更强、更快地改进这些领域。

代码实现和部署

使用 Diffusers 的 Flux

Flux 模型可以使用 Hugging Face Diffusers 库轻松集成到现有的工作流中。以下是使用 FLUX.1 [dev] 或 FLUX.1 [schnell] 与 Diffusers 的分步指南:

  1. 首先,安装或升级 Diffusers 库:
!pip install git+https://github.com/huggingface/diffusers.git
  1. 然后,您可以使用 FluxPipeline 运行模型:
import torch
from diffusers import FluxPipeline

<p># 加载模型
pipe = FluxPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", torch_dtype=torch.bfloat16)</p>

<p># 启用 CPU 卸载以节省 VRAM(可选)
pipe.enable_model_cpu_offload()</p>

<p># 生成图像
prompt = "一只猫拿着一块写着你好世界的牌子"
image = pipe(
prompt,
height=1024,
width=1024,
guidance_scale=3.5,
output_type="pil",
num_inference_steps=50,
max_sequence_length=512,
generator=torch.Generator("cpu").manual_seed(0)
).images[0]</p>

<p># 保存生成的图像
image.save("flux-dev.png")

此代码片段演示如何加载 FLUX.1 [dev] 模型、从文本提示生成图像并保存结果。

使用 LitServe 部署 Flux

对于那些希望将 Flux 作为可扩展的 API 服务部署的人,Black Forest Labs 提供了一个使用 LitServe 的示例,LitServe 是一个高性能的推理引擎。以下是部署过程的分解:

定义模型服务器:

from io import BytesIO
from fastapi import Response
import torch
import time
import litserve as ls
from optimum.quanto import freeze, qfloat8, quantize
from diffusers import FlowMatchEulerDiscreteScheduler, AutoencoderKL
from diffusers.models.transformers.transformer_flux import FluxTransformer2DModel
from diffusers.pipelines.flux.pipeline_flux import FluxPipeline
from transformers import CLIPTextModel, CLIPTokenizer, T5EncoderModel, T5TokenizerFast

<p>class FluxLitAPI(ls.LitAPI):
def setup(self, device):
# 加载模型组件
scheduler = FlowMatchEulerDiscreteScheduler.from_pretrained("black-forest-labs/FLUX.1-schnell", subfolder="scheduler")
text_encoder = CLIPTextModel.from_pretrained("openai/clip-vit-large-patch14", torch_dtype=torch.bfloat16)
tokenizer = CLIPTokenizer.from_pretrained("openai/clip-vit-large-patch14", torch_dtype=torch.bfloat16)
text_encoder_2 = T5EncoderModel.from_pretrained("black-forest-labs/FLUX.1-schnell", subfolder="text_encoder_2", torch_dtype=torch.bfloat16)
tokenizer_2 = T5TokenizerFast.from_pretrained("black-forest-labs/FLUX.1-schnell", subfolder="tokenizer_2", torch_dtype=torch.bfloat16)
vae = AutoencoderKL.from_pretrained("black-forest-labs/FLUX.1-schnell", subfolder="vae", torch_dtype=torch.bfloat16)
transformer = FluxTransformer2DModel.from_pretrained("black-forest-labs/FLUX.1-schnell", subfolder="transformer", torch_dtype=torch.bfloat16)</p>

<p># 将变压器量化为 8 位以适应 L4 GPU
quantize(transformer, weights=qfloat8)
freeze(transformer)
quantize(text_encoder_2, weights=qfloat8)
freeze(text_encoder_2)</p>

<p># 初始化 Flux 流水线
self.pipe = FluxPipeline(
scheduler=scheduler,
text_encoder=text_encoder,
tokenizer=tokenizer,
text_encoder_2=None,
tokenizer_2=tokenizer_2,
vae=vae,
transformer=None,
)
self.pipe.text_encoder_2 = text_encoder_2
self.pipe.transformer = transformer
self.pipe.enable_model_cpu_offload()</p>

<p>def decode_request(self, request):
return request["prompt"]</p>

<p>def predict(self, prompt):
image = self.pipe(
prompt=prompt,
width=1024,
height=1024,
num_inference_steps=4,
generator=torch.Generator().manual_seed(int(time.time())),
guidance_scale=3.5,
).images[0]
return image</p>

<p>def encode_response(self, image):
buffered = BytesIO()
image.save(buffered, format="PNG")
return Response(content=buffered.getvalue(), headers={"Content-Type": "image/png"})</p>

<p># 启动服务器
if __name__ == "__main__":
api = FluxLitAPI()
server = ls.LitServer(api, timeout=False)
server.run(port=8000)</p>

此代码设置了一个 LitServe API,包括模型加载、请求处理、图像生成和响应编码。

启动服务器:

&lt;/pre&gt;
python server.py
&lt;pre&gt;

使用模型 API:

您可以使用一个简单的客户端脚本测试 API:

import requests
import json

<p>url = "http://localhost:8000/predict"
prompt = "一个机器人坐在椅子上,画一幅未来城市风景的画"</p>

<p>response = requests.post(url, json={"prompt": prompt})
with open("generated_image.png", "wb") as f:
f.write(response.content)</p>

<p>print("图像已生成并保存为 generated_image.png")</p>

部署的关键特性

  1. 无服务器架构:LitServe 设置允许可扩展、无服务器部署,可以在不使用时扩展到零。
  2. 私有 API:您可以在自己的基础设施上将 Flux 部署为私有 API。
  3. 多 GPU 支持:设置旨在高效地在多个 GPU 上运行。
  4. 量化:代码演示如何将模型量化为 8 位精度,使其能够在较低功耗的硬件(如 NVIDIA L4 GPU)上运行。
  5. CPU 卸载enable_model_cpu_offload() 方法用于通过在不使用时将模型的一部分卸载到 CPU 来节省 GPU 内存。

Flux 的实际应用

Flux 的多功能性和强大功能为各个行业开启了广泛的潜在应用:

  1. 创意产业:平面设计师、插画家和艺术家可以使用 Flux 快速生成概念艺术、情绪板和视觉灵感。
  2. 营销和广告:营销人员可以使用 Flux 为活动创建自定义视觉效果、社交媒体内容和产品模拟,速度和质量无与伦比。
  3. 游戏开发:游戏设计师可以使用 Flux 快速原型环境、角色和资产,从而简化了预生产过程。
  4. 建筑和室内设计:建筑师和设计师可以根据文本描述生成现实的空间和结构的视觉化。
  5. 教育:教育者可以使用 Flux 创建自定义的视觉辅助工具和插图,以增强学习材料并使复杂的概念更容易理解。
  6. 电影和动画:分镜头艺术家和动画师可以使用 Flux 快速可视化场景和角色,从而加快预可视化过程。

Flux 和文本到图像生成的未来

Black Forest Labs 已经明确表示,Flux 只是他们在生成性 AI 空间的雄心壮志的开始。他们宣布了开发具有精确创建和编辑能力的竞争性生成文本到视频系统的计划,承诺以高分辨率和前所未有的速度交付。

这条路线图表明,Flux 不仅仅是一个独立的产品,而是更广泛的生成 AI 工具生态系统的一部分。随着技术的发展,我们可以期待看到:

  1. 改进的集成:文本到图像和文本到视频生成之间的无缝工作流程,使得更复杂和动态的内容创作成为可能。
  2. 增强的自定义:对生成内容的更细粒度的控制,可能是通过高级的提示工程技术或直观的用户界面实现的。
  3. 实时生成:随着像 FLUX.1 [schnell] 这样的模型的改进,我们可能会看到实时图像生成的能力,这可能会革命性地改变实时内容创作和交互式媒体。
  4. 跨模态生成:跨多个模态(文本、图像、视频、音频)以协调和集成的方式生成和操作内容的能力。
  5. 负责任的 AI 开发:继续专注于开发不仅强大而且负责任和道德的 AI 模型。

结论:Flux 是否比 Midjourney 更好?

Flux 是否“更好”于 Midjourney 的问题并不是一个简单的是或否问题。两种模型都代表了文本到图像生成技术的最前沿,每种都有其自身的优势和独特的特点。

Flux凭借其先进的架构和对提示遵循的强调,可能在某些场景中提供更精确的控制和潜在的更高质量。其开源变体还提供了定制和集成的机会,这对于开发人员和研究人员来说可能非常有价值。

Midjourney,另一方面,拥有成功的记录、庞大的活跃用户群体和许多用户喜爱的独特艺术风格。其与 Discord 的集成和用户友好的界面使其对创意人士来说无论技术水平如何都很容易使用。

最终,“更好的”模型可能取决于特定的用例、个人偏好以及每个平台不断演进的能力。很明显,Flux 代表了生成性 AI 领域的重大进步,引入了创新技术并推动了文本到图像合成的可能性边界。

我已经沉浸在了令人着迷的机器学习和深度学习世界中五年了。我的热情和专业知识让我为超过50个不同的软件工程项目做出了贡献,特别关注AI/ML。我的持续的好奇心也让我对自然语言处理产生了兴趣,这是一个我渴望进一步探索的领域。