FLUX.1微调指南

FLUX.1 是 Black Forest Labs 今年夏天发布的文本转图像模型系列。FLUX.1 模型为开源图像生成模型树立了新标准:它们可以生成逼真的手、清晰的文本,甚至可以生成搞笑表情包这样异常困难的任务。

现在,你可以使用 Ostris 的 Replicate 上的 AI Toolkit 对 FLUX.1 [dev] 进行微调。

如果你知道这一切意味着什么,并且已经准备好使用你的数据集进行尝试,你可以跳到代码部分。否则,以下是它的含义以及你应该关注的原因:

左图:使用基本 FLUX.1 模型生成。右图:与模型 fofr/flux-bad-70s-food 相同的提示和种子

1、什么是微调?

这些大型图像生成模型(如 FLUX.1 和 Stable Diffusion)在一堆添加了噪声的图像上进行训练,并学习“添加噪声”的反向功能。令人惊讶的是,这竟然是“创建图像”。

他们怎么知道要创建哪幅图像?他们以 CLIP 和 T5 等转换器模型为基础,这些模型本身经过大量图像-标题对的训练。这些是语言到图像的编码器:它们学习将图像及其标题映射到高维空间中的相同形状。当您向他们发送文本提示时,例如“公园里读报纸的松鼠”,他们可以将其映射到网格中的像素模式。对于编码器来说,图片和标题是同一回事。

图像生成过程如下所示:获取一些输入像素,将它们稍微远离噪声并移向文本输入创建的模式,然后重复,直到达到正确的步数。

反过来,微调过程会从数据集中获取每个图像/标题对,并稍微更新内部映射。你可以通过这种方式教模型任何东西,只要它可以通过图像-标题对来表示:角色、设置、媒介、风格、流派。在训练过程中,模型将学会将你的概念与特定的文本字符串关联起来。将此字符串包含在提示中以激活该关联。

例如,假设你想针对漫画超级英雄微调模型。你将收集一些角色图像作为数据集。一个全面的批次:不同的设置、服装、灯光,甚至不同的艺术风格。这样,模型就会明白它正在学习的是这个人,而不是任何其他偶然的细节。

选择一个简短、不常见的单词或短语作为触发器:一些不会与其他概念或微调冲突的独特的东西。你可以选择“70 年代的糟糕食物”或“JELLOMOLD”之类的东西。训练您的模型。现在,当你提示“在旧金山的派对上拍摄 70 年代的糟糕食物”时,你的模型将调用你的特定概念。就这么简单。

拍几张你的宠物或你最喜欢的室内植物的照片,让我们开始吧。

左图:使用基本 FLUX.1 模型生成。右图:使用模型 fofr/flux-bad-70s-food 的相同提示和种子

2、如何微调 FLUX.1

n你只需在网络上或通过 API 上传一些图像,即可在 Replicate 上微调 FLUX.1。

如果你不熟悉 Replicate,我们可以轻松地将 AI 作为 API 运行。你不必寻找强大的 GPU,不必处理环境和容器,也不必担心扩展。可以使用普通 API 编写普通代码,只需为你使用的内容付费。

2.1 准备训练数据

要开始微调,你需要一组代表想要教给模型的概念的图像。这些图像应该足够多样化,以涵盖概念的不同方面。例如,如果你正在对特定角色进行微调,请包括各种设置、姿势和灯光下的图像。

以下是一些指导原则:

  • 使用 12-20 张图像以获得最佳效果
  • 尽可能使用大图像
  • 使用 JPEG 或 PNG 格式
  • 或者,为每个具有相同名称的图像创建一个相应的 .txt 文件,其中包含标题

获得图像(和可选标题)后,将它们压缩成一个文件。

2.2 在网络上创建训练

要开始在网络上进行训练过程,请在 Replicate 上导航到 Ostris 的 FLUX.1 [dev] 训练器

首先,选择一个模型作为目标,或者通过在模型选择器字段中键入名称来创建一个新模型。

接下来,将包含训练数据的 zip 文件作为 input_images 上传,然后设置训练参数。

trigger_word 指的是你正在训练的对象、风格或概念。选择一个不是真实单词的字符串,例如 TOK 或与正在训练的内容相关的内容,例如 CYBRPNK。你指定的触发词将在训练期间与所有图像相关联。然后,当你运行经过微调的模型时,可以在提示中包含触发词以激活你的概念。

对于步骤,一个好的起点是 1000。

learning_ratebatch_sizeresolution 保留为默认值。除非你想提供自己的字幕,否则请保持自动字幕启用。

如果你想在 Hugging Face 上保存自己的模型,请输入你的 Hugging Face 令牌并设置存储库 ID。

填写完表格后,单击“创建训练”以开始微调过程。

2.3 通过 API 创建训练

或者,你可以使用 API 从自己的代码创建训练。

确保已在环境中设置了 REPLICATE_API_TOKEN。在你的帐户设置中找到它。

export REPLICATE_API_TOKEN=r8_***************************

创建一个新模型,作为微调权重的目标。一旦流程完成,你的训练模型将驻留在此位置。

import replicate

model = replicate.models.create(
    owner="yourusername",
    name="flux-your-model-name",
    visibility="public",  # or "private" if you prefer
    hardware="gpu-t4",  # Replicate will override this for fine-tuned models
    description="A fine-tuned FLUX.1 model"
)

print(f"Model created: {model.name}")
print(f"Model URL: https://replicate.com/{model.owner}/{model.name}")

现在你有了模型,请通过创建新的训练运行来开始训练过程。你需要提供输入图像、步数以及任何其他所需参数。

# Now use this model as the destination for your training
training = replicate.trainings.create(
    version="ostris/flux-dev-lora-trainer:4ffd32160efd92e956d39c5338a9b8fbafca58e03f791f6d8011f3e20e8ea6fa",
    input={
        "input_images": open("/path/to/your/local/training-images.zip", "rb"),
        "steps": 1000,
        "hf_token": "YOUR_HUGGING_FACE_TOKEN",  # optional
        "hf_repo_id": "YOUR_HUGGING_FACE_REPO_ID",  # optional
    },
    destination=f"{model.owner}/{model.name}"
)

print(f"Training started: {training.status}")
print(f"Training URL: https://replicate.com/p/{training.id}")

请注意,此时为模型选择哪种硬件并不重要,因为我们将所有 FLUX.1 微调路由到 H100。训练这么多步骤通常需要 20-30 分钟,费用不到 2 美元。

2.4 使用训练好的模型

训练完成后,可以像使用任何其他模型一样直接在 Replicate 上使用训练好的模型。

你可以在 Web 上运行它:

  • 转到 Replicate 上的模型页面(例如  https://replicate.com/yourusername/flux-your-model-name)。
  • 对于提示输入,请包含触发词(例如“70 年代的糟糕食物”)以激活你的微调概念。
  • 根据需要调整任何其他输入。
  • 单击“运行”以生成你的图像。

或者,使用 API。例如,使用 Python 客户端:

import replicate

output = replicate.run(
    "yourusername/flux-your-model-name:version_id",
    input={
        "prompt": "A portrait photo of a space station, bad 70s food",
        "num_inference_steps": 28,
        "guidance_scale": 7.5,
        "model": "dev",****
    }
)

print(f"Generated image URL: {output}")

将  yourusername/flux-your-model-name:version_id 替换为你的实际模型详细信息。

你可以在模型页面的“API”选项卡上找到有关使用 API 运行它的更多信息。

3、使用 FLUX.1 [schnell] 实现更快的生成

你可以将 FLUX.1 [dev] LoRA 与较小的 FLUX.1 [schnell] 模型一起使用,以更快、更便宜地生成图像。只需在生成时将模型参数从 dev 更改为 schnell,并将 num_inference_steps 降低到 4 等小值即可。

请注意,输出仍将受 FLUX.1 [dev] 的非商业许可。

3.1 示例和用例

查看我们的示例库以获取灵感。你可以看到其他人如何微调 FLUX.1 来创建不同的风格、角色、永无止境的可爱动物游行等等。

基本 FLUX.1 模型输出:

左图:使用基本 FLUX.1 模型生成。右图:使用 fofr/flux-bad-70s-food 模型的相同提示和种子


3.2 许可和商业使用

如果你使用 FLUX.1 模型及其微调在 Replicate 上生成图像,则可以将这些图像用于商业用途。

如果你从 Replicate 下载权重并在自己的计算机上生成图像,则不能将这些图像用于商业用途。


原文链接:Fine-tune FLUX.1 with your own images

BimAnt翻译整理,转载请标明出处