教你微调FLUX.1模型生成个人专属图像

0 阅读9分钟

微调FLUX.1以生成个人图像

更新(2025年5月):已发布更快的Flux训练器版本——可在此尝试。

本月早些时候发布的FLUX.1系列图像生成模型引起了巨大轰动,其生成的图像质量超越了现有的开源模型。社区迅速开始在Flux之上构建新功能,发布后不久便宣布在Replicate平台上支持Flux微调。

在Replicate上微调Flux非常简单:只需少量图像即可开始,无需深厚的专业技术知识。甚至可以完全在网页上完成整个微调过程,无需编写任何代码。社区已经在Replicate上发布了数百个公开的Flux微调模型,还有数千个私有微调模型。

Flux最令人兴奋的一点在于,它能够以一种以前代开源图像生成模型(如Stable Diffusion或SDXL)不易实现的方式对人物面部进行微调。自Dreambooth以来,仅凭少量训练图像就能获得出色结果变得如此简单。

在本篇博客中,将引导您完成使用自己的图像创建个人Flux微调模型的过程,从而可以生成自己作为超级英雄、卡通角色、冒险家,或只是身处各种有趣情境中的普通人的新颖且富有想象力的图像。

ziki-flux微调模型生成的“滑板上的ZIKI”变体。

步骤0:准备工作

以下是开始前需要准备的:

  • 一个Replicate账户
  • 少量训练图像
  • 两三美元

步骤1:收集训练图像

您需要几张自己的照片作为开始。这些应是您面部的高质量图像,从不同角度拍摄,并处于不同的光照条件下。

使用少至两张训练图像即可微调Flux,但为了获得最佳效果,建议至少使用10张或更多图像。理论上,随着训练数据中包含更多图像,您会持续获得更好的结果,但添加的图像越多,训练过程可能耗时越长。

收集训练图像时请考虑以下几点:

  • 支持WebP、JPG和PNG格式。
  • 如果可能,请使用1024x1024或更高分辨率。
  • 文件名无关紧要。可以随意命名文件。
  • 纵横比无关紧要。图像可以是正方形、横向、纵向等。
  • 10张图像是一个不错的最低数量。

多样性是关键。为了获得最佳效果,请选择在不同场景、着装、光照和角度下拍摄的训练图像。

收集好图像后,将它们放入一个zip压缩文件中。假设您将所有图像都放在一个名为data的文件夹中,运行以下命令来生成名为data.zip的文件:

zip -r data.zip data

步骤2:选择一个独特的触发词

每当微调一个图像模型时,您还需要选择一个独特的“触发词”,之后在生成图像的文本提示中会用到它:

photo of YOUR_TRIGGER_WORD_HERE looking super-cool, riding on a segway scooter

选择触发词时需要考虑以下几点:

  • 它应该是独特的东西,比如MY_UNIQ_TRGGR。可以想象成“个性化车牌”,但没有长度限制。
  • 它不应是任何语言中的现有单词,例如dogcyberpunk
  • 它不应是TOK,因为如果您将来想组合多个微调模型,这会与其他微调发生冲突。
  • 大小写无关紧要,但使用大写字母有助于在视觉上将触发词与提示文本的其余部分区分开来。

对于zeke/ziki-flux微调,选择了ZIKI作为触发词。简短、独特且易记。

选好触发词了吗?先在脑子里记住它。下一步将会用到。

步骤3:创建并训练模型

在Replicate上微调Flux有几种方法。可以使用基于网页的训练表单,也可以使用API。API非常适合以自动化或编程方式创建和更新微调模型,但本指南中将仅使用基于网页的表单,这样更简单。

访问replicate.com/ostris/flux-dev-lora-trainer以启动基于网页的训练过程。

对于destination输入,您需要选择一个要发布到的模型。这可以是一个您已经创建的现有模型,也可以是一个新模型:

您的微调Flux模型可以是公开的,也可以是私有的。

对于input_images输入,拖放您之前创建的zip文件。 对于trigger_word输入,输入您之前选择的字符串。确保它是唯一的! 对于steps,保持为1000。少于这个步数,您的训练过程可能无法正确学习训练图像中的概念。多于这个步数,您可能会花费额外的时间和成本,而模型性能却没有太大改善。

训练过程运行期间,将按秒计费。Flux模型的训练在Nvidia H100 GPU硬件上运行,截至撰写本文时,成本为每秒0.001528美元。对于一个典型的20分钟训练(使用大约20张训练图像和1000步时),预计需要支付约1.85美元。模型训练完成后,可以像运行任何其他Replicate模型一样通过API运行它,并且仅按生成图像所需的计算时间计费。

将其余输入保持为默认值,然后单击“创建训练”。

步骤4:站起来伸展一下

训练过程相当快,但仍然需要几分钟。如果使用十张图像和1000步,大约需要20分钟。利用这个机会离开电脑,伸展一下手臂和腿,喝点水等等。

然后回来,您的模型应该就准备好了。

步骤5:在网页上生成图像

训练过程完成后,您的模型就可以运行了。最简单的开始方法是在网页上运行它。

您唯一需要输入的参数是提示词。其余参数开始时可以保持不变。Flux非常擅长遵循长提示词,因此提示词越详细、描述性越强越好。请务必在提示词中包含您的trigger_word,以便在生成的图像中激活您新训练的概念。

在Replicate网页游乐场中运行您新微调的模型。

步骤6:使用API生成图像

网页游乐场是开始体验新模型的好地方,但一次点击生成一张图像的方式很快就会变得乏味。幸运的是,您的模型也通过API托管在云端,因此您可以使用自己选择的编程语言从自己的代码中运行它。

当您运行一个模型时,会看到针对不同语言(如Node.js和Python)的选项卡。这些选项卡包含代码片段,展示了如何构造API调用来复制您刚刚在浏览器表单中输入的参数。

单击网页游乐场中的Node.js选项卡以查看API代码:

为方便您使用而提供的预制API代码片段。

这将显示您自行运行模型所需的确切设置步骤和代码片段。以下是为您准备的Node.js代码的简略版本:

import Replicate from "replicate"
const replicate = new Replicate()
const model = "zeke/ziki-flux:dadc276a9062240e68f110ca06521752f334777a94f031feb0ae78ae3edca58e"
const prompt = "ZIKI, an adult man, standing atop Mount Everest at dawn..."
const output = await replicate.run(model, { input: { prompt } })
console.log(output)

步骤7:使用语言模型撰写更好的提示词

有时从头开始想出一个好的提示词很难,而使用一个非常简单的提示词,如“ZIKI穿着高领节日毛衣”,不会产生非常有趣的结果。

这时语言模型就能派上用场。以下是一个语言模型提示词示例,可以帮助激发一些有趣的图像生成提示词想法:

为一个图像生成模型写十个提示词。这些提示词应描述一个名为ZIKI的虚构人物在各种场景下的情况。确保在每个提示词中都使用大写的ZIKI这个词。使提示词高度详细、有趣,并且主题多样。确保提示词能生成包含清晰面部细节的图像。ZIKI是一名43岁的成年男性。在提示词中要包含一些相关描述,以避免错误表述ZIKI的年龄或性别。不要暗示ZIKI的眼睛颜色。

这会生成一些有趣的提示词:

特写:ZIKI,一位40多岁的男性街头艺术家,正在城市墙壁上喷涂一幅充满活力的壁画。他的脸上显示出强烈的专注,脸颊和前额上沾有颜料斑点。他脖子上戴着呼吸器面罩,头上戴着一顶无檐便帽。部分完成的壁画在他身后清晰可见。

ZIKI,一位40多岁的时髦绅士间谍,正在豪华的蒙特卡洛赌场进行一场高风险的扑克游戏。他研究手中的牌时,脸上没有任何情绪流露,只有一条眉毛微微抬起。他穿着定制的无尾晚礼服,打着领结,面前的桌上放着一杯马提尼酒。

ZIKI,一位40多岁、相貌出众的绅士,正在指挥一个交响乐团。他富有表现力的脸上显示出强烈的专注,同时夸张地挥舞着指挥棒。他穿着一身笔挺的无尾晚礼服,因充满激情的动作,他灰白的头发略显凌乱。

要开始撰写您自己的提示词,可以尝试Meta Llama 3.1 405b,这是一个快速且功能强大的语言模型,您可以在网页上或通过Replicate上的API使用它,就像使用您自己的模型一样:

import Replicate from "replicate"
const replicate = new Replicate()
const model = "meta/meta-llama-3.1-405b-instruct"
const prompt = "Write ten prompts for an image generation model..."
const output = await replicate.run(model, { input: { prompt } })
console.log(output)

步骤8:尽情玩耍并迭代

现在您已经有了一个微调好的图像生成模型和一个可以帮助生成提示词的语言模型,是时候开始玩耍并生成有趣的图像了。

如果需要灵感,可以查看Replicate上的Flux微调模型集合,看看其他人创建了什么。

玩得开心,并在某平台或Discord上与社区分享您的结果。