Black Forest Labs 的 Flux:文本到图像模型的下一步飞跃。它比 Midjourney 更好吗?


7 个月前

黑森林实验室与Flux模型的诞生

黑森林实验室是开创性稳定扩散模型的团队,最近发布了Flux——一套最先进的模型,承诺重新定义AI生成图像的能力。但Flux真的在这个领域代表了一个飞跃吗?它与行业领袖如Midjourney相比又如何呢?让我们深入探索Flux的世界,看看它如何重塑AI生成艺术和媒体的未来。

黑森林实验室的诞生

在深入Flux的技术细节之前,了解这个创新模型背后的背景至关重要。黑森林实验室不仅仅是另一家AI初创公司;它是一个人才济济的团队,拥有开发基础生成AI模型的丰富经验。团队成员包括VQGAN、潜在扩散和稳定扩散系列模型的创造者,这些模型在AI艺术界引起了轰动。

黑森林实验室成功完成了3100万美元的种子轮融资,由安德森·霍洛维茨领投,并获得了知名天使投资者的支持,使其在生成AI研究的前沿占据了一席之地。他们的使命明确:开发和推进最先进的生成深度学习模型,用于图像和视频等媒体,同时推动创造力、效率和多样性的边界。

Flux模型家族的介绍

黑森林实验室推出了FLUX.1系列文本到图像模型,旨在设定图像细节、提示遵循、风格多样性和场景复杂性的新基准。Flux家族包括三种变体,每种都针对不同的使用案例和可访问性水平:

  1. FLUX.1 [pro]:旗舰模型,提供顶级的图像生成性能,具有卓越的提示遵循、视觉质量、图像细节和输出多样性。通过API提供,定位为专业和企业使用的高端选项。
  2. FLUX.1 [dev]:开放权重、指导提炼的模型,适用于非商业应用。旨在实现与专业版相似的质量和提示遵循能力,同时更高效。
  3. FLUX.1 [schnell]:该系列中速度最快的模型,优化用于本地开发和个人使用。根据Apache 2.0许可证公开提供,使其可用于广泛的应用和实验。

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

  • 艺术风格与文本融合:“创建一幅文森特·梵高的肖像,采用他标志性的风格,但用旋转的笔触替代他的胡须,形成‘星夜’的草书。”

None

  • 动态动作场景与文本整合:“一位超级英雄冲破漫画书页面。动作线和音效应形成英雄的名字‘FLUX FORCE’,采用粗体、动态排版。”

None

  • 超现实概念与精确物体放置:“在窗户阳光下,近距离拍摄一只棕白相间的可爱猫咪。清晰聚焦于眼睛的纹理和颜色。自然光线捕捉真实的眼睛光泽和深度。”

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

Flux背后的技术创新

Flux令人印象深刻的能力背后是一些技术创新,使其与前辈和同类产品区分开来:

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

所有公开的FLUX.1模型都基于一种混合架构,结合了多模态和并行扩散变换器块,规模达到惊人的120亿参数。这在模型大小和复杂性上相比许多现有的文本到图像模型有了显著的飞跃。

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

为了提高模型性能和硬件效率,黑森林实验室集成了旋转位置嵌入和并行注意力层。这些技术使得在图像中更好地处理空间关系,并更高效地处理大规模数据成为可能。

架构创新

让我们分解一些对Flux性能贡献显著的关键架构元素:

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

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

None

黑森林实验室声称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的比较分析

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

图像质量与美学

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

Flux的早期示例显示出令人印象深刻的细节、真实的纹理以及对光线和构图的良好把握。然而,艺术的主观性使得在这一领域很难明确声称优越性。用户可能会发现每个模型在不同风格或类型的图像中各有其强项。

提示遵循

Flux在提示遵循方面可能优于Midjourney。黑森林实验室强调他们专注于提高模型准确解读和执行给定提示的能力。这可能导致生成的图像更接近用户的意图,尤其是在复杂或微妙的请求中。

Midjourney有时因对提示进行创造性自由处理而受到批评,这可能导致美丽但意外的结果。Flux的方法可能提供对生成输出的更精确控制。

速度与效率

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

可访问性与易用性

Midjourney因其用户友好的界面和与Discord的集成而受到欢迎。作为新产品,Flux可能需要时间来开发类似的可访问界面。然而,FLUX.1 [schnell]和[dev]模型的开源特性可能会导致社区开发的工具和集成的广泛出现,可能在灵活性和定制选项上超越Midjourney。

技术能力

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

伦理考量与偏见缓解

Flux和Midjourney都面临着解决AI生成图像中的伦理问题的挑战,例如偏见、错误信息和版权问题。黑森林实验室对透明度的重视以及他们致力于使模型广泛可用,可能会导致更强大的社区监督和更快的改进。

代码实现与部署

使用Diffusers中的Flux

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

  1. 首先,安装或升级Diffusers库:
import torch
from diffusers import FluxPipeline

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

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

# 生成图像
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]

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

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

使用LitServe将Flux部署为API

对于希望将Flux部署为可扩展API服务的用户,黑森林实验室提供了一个使用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

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)

        # 量化为8位以适应L4 GPU
        quantize(transformer, weights=qfloat8)
        freeze(transformer)
        quantize(text_encoder_2, weights=qfloat8)
        freeze(text_encoder_2)

        # 初始化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()

    def decode_request(self, request):
        return request["prompt"]

    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

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

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

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

启动服务器:

python server.py

使用模型API:

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

import requests
import json

url = "http://localhost:8000/predict"
prompt = "一个机器人坐在椅子上,正在画一幅未来城市景观的画"
response = requests.post(url, json={"prompt": prompt})

with open("generated_image.png", "wb") as f:
    f.write(response.content)

print("图像生成并保存为generated_image.png")

部署的关键特性

  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. 市场营销与广告:市场营销人员可以以空前的速度和质量为活动、社交媒体内容和产品模型创建定制视觉效果。
  3. 游戏开发:游戏设计师可以使用Flux快速原型化环境、角色和资产,简化前期制作过程。
  4. 建筑与室内设计:建筑师和设计师可以根据文本描述生成空间和结构的真实可视化。
  5. 教育:教育工作者可以创建定制的视觉辅助材料和插图,以增强学习材料,使复杂概念更易于理解。
  6. 电影与动画:分镜艺术家和动画师可以使用Flux快速可视化场景和角色,加速前期可视化过程。

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

黑森林实验室明确表示,Flux只是他们在生成AI领域雄心壮志的开始。他们已宣布计划开发具有竞争力的生成文本到视频系统,承诺以高分辨率和前所未有的速度提供精确的创建和编辑能力。

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

  1. 改进的集成:文本到图像和文本到视频生成之间的无缝工作流程,允许更复杂和动态的内容创建。
  2. 增强的定制:对生成内容的更细致控制,可能通过先进的提示工程技术或直观的用户界面实现。
  3. 实时生成:随着像FLUX.1 [schnell]这样的模型不断改进,我们可能会看到实时图像生成能力,这可能会彻底改变现场内容创作和互动媒体。
  4. 跨模态生成:在多个模态(文本、图像、视频、音频)之间以连贯和集成的方式生成和操控内容的能力。
  5. 负责任的AI开发:继续关注开发不仅强大而且负责任和伦理的AI模型。

结论:Flux是否比Midjourney更好?

Flux是否“更好”于Midjourney的问题并不能简单地用“是”或“否”来回答。这两个模型代表了文本到图像生成技术的前沿,各自具有独特的优势和特点。

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

另一方面,Midjourney拥有良好的业绩记录、大量活跃用户和许多用户喜爱的独特艺术风格。它与Discord的集成和用户友好的界面使其对各个技术水平的创作者都非常可访问。

最终,“更好”的模型可能取决于具体的使用案例、个人偏好以及每个平台不断发展的能力。显而易见的是,Flux在生成AI领域代表了一个重要的进步,引入了创新技术,推动了文本到图像合成的可能性边界。

推荐阅读:

FluxAI 中文

© 2025. All Rights Reserved