0x00 前言
FLUX 是由 Stable Diffusion 原班人马创立的新公司 Black Forest Labs(黑森林实验室)在今年 8 月推出的一款最新的文生图大模型。
FLUX 模型包含三个版本:
FLUX.1 [pro]
: 这是 FLUX.1 目前最强的版本(闭源),专为商业用途设计,提供最先进的图像生成性能,包括顶级的提示词遵循、视觉质量、图像细节和输出多样性FLUX.1 [dev]
: 直接从FLUX.1 [pro]
蒸馏而来的一个开源的引导蒸馏模型,适用于非商业应用。它获得了类似的质量和提示词遵循能力,同时比同等大小的标准模型更高效。FLUX.1 [schnell]
: 响应速度最快的模型,专为本地开发和个人使用量身定制。
在本文中,我们将学会如何使用 FLUX.1 [dev]
在线上免费生成个人写真。
因为是在线生成,因此对个人电脑配置没有任何门槛要求的,对没办法安装 SD 的同学非常友好。
0x10 流程说明
整个出图流程大概如下:
- 准备至少 12 张自己的正脸各个角度的照片
- 使用 Replicate 在线训练自己的 LoRA 模型,存储到 Hugging Face
- 使用 Replicate 在线出图
你要做的只有准备个人照和注册对应站点的帐号,是不是很简单呢?
废话不多说,我们先看看最终的出图效果:
0x20 准备工作
0x21 注册 Replicate
Replicate 是一个 AI 模型运行平台,允许用户通过 API 运行和微调开源的 AI 模型。
它支持生成图像、文本、视频、音乐和语音等任务,用户可以使用简单的代码部署自定义模型,使用自己的数据微调模型,并自动管理基础设施。这个平台旨在简化机器学习模型的部署和扩展,提供各种 AI 模型的生产级 API。
Replicate 目前只能通过关联 Github 账户注册。
点击这个优惠链接注册,新用户可以领取 $10 的免费额度: https://replicate.com/invites/572ae3c6-1385-41b3-afdc-1e99e11836b8
如果领取优惠成功,可以在账单 https://replicate.com/account/billing 中看到信用额度:
任务执行失败不扣费,生成一个 LoRA 模型大概需要 $2.23,生成一张图大概需要 $0.03,因此 $10 的免费额度足够挥霍很久了。
0x22 注册 Hugging Face
早在《SD 零基础入门系列》我们已经介绍过,Hugging Face 其实就是大模型的主要源仓库,如果你之前已经有注册过,复用帐号即可; 否则在官网 https://huggingface.co/ 注册新帐号即可。
Hugging Face 需要科学上网才能访问
0x23 创建存储 LoRA 的仓库
在去年 SD 系列中的《LoRA 训练》,我们也介绍过什么是 LoRA 模型、以及 LoRA 模型是如何训练的了。
但当时在本地训练,环境准备比较繁琐、而且受限于本地硬件配置,训练速度和质量也略显不足。这次我们把训练搬到线上,看看训练效果会不会比本地更好些。
但训练 LoRA 之前,我们需要在 Hugging Face 创建一个存储 LoRA 的模型仓库:
- 点击右上角个人头像
- New Model
- 输入 LoRA 模型仓库名称,随意即可
- 可见性必须选择 public,因为 private 的私有仓库是无法被 Replicate 读写的
- 点击 Create Model 按钮创建模型,复制模型仓库的名字备用,如我这里为
EXPM02/EXP-Flux-LoRA
如果担心自己的 LoRA 模型泄露给他人乱用,记得在使用完之后设置为 private,需要用到时再重新设置为 public
0x24 生成 API Token
为了让 Replicate 可以读写刚刚创建的 LoRA 模型仓库,我们还需要生成一个 Hugging Face 的 API Token 供其调用接口:
- 点击右上角个人头像
- Settings
- Access Token
- Create New Token
此时进入新 Token 权限编辑的页面,注意:
- Token Type 必须选择
Write
- Token Name 随机即可
- 在 User permissions 下,把 Repositories、Inference、Webhooks、Collections 的权限全部勾选上
- 点击最下方的 Save Token
- 存储并保管好获得的 API Token,千万不要泄露,格式形如
hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Token Type 千万不要选错
FINEGRAINED
,这个类型的 Token 在生成后,大部分权限会被强行移除且无法修改,导致训练完成后无法存储 LoRA 模型
0x25 准备个人照片
为了训练自己的 LoRA 模型,我们需要准备至少 12 张的个人照片,要求如下:
- 正脸照片为主,角度要丰富(45度以内的抬头、低头、侧脸等)
- 照片光线充足,不要太暗
- 人和背景能够鲜明区分
- 不要有任何障碍物阻挡脸部,戴眼镜可以先摘下,除非你希望出图都有眼镜
- 只是换脸,因此只拍上半身、甚至只有大头照即可
- 照片格式统一,要么全 jpg 要么全 png,混杂格式会导致训练时报错
- 照片尺寸没有要求,但不需要太大,像素宽度 512 差不多了,太大上传可能失败
- 照片统一命名格式为
a_photo_of_触发词(编号).jpg/png
- 所有照片不要放到文件夹中,直接压缩为
a_photo_of_触发词.zip
,且必须是.zip
压缩格式
关于 LoRA 触发词的运用,可以参考早期 SD 系列中的《LoRA 专题:五大应用场景》,它主要在出图时写在提示词中,以激活对应的 LoRA 模型
压缩包留作备用即可,可以参考我准备的照片(我的触发词为 EXP
):
至此准备工作全部完成,可以开始训练了。
0x30 训练自己的 LoRA 模型
训练需要在 Replicate 平台执行。
先打开 LoRA 训练工具仓库 ai-toolkit
: https://replicate.com/lucataco/ai-toolkit
- 选择 Train 标签
- 在 Destination 创建一个 Replicate 的模型仓库,名字随意即可(这个仓库主要用来记录训练结果的版本,目前我们并不会用到它)
- 在 images 上传前面
a_photo_of_触发词.zip
- 在 hf_token 中输入前面在 Hugging Face 生成的 API Token
特别地注意到 model_name 中,默认填写了 black-forest-labs/FLUX.1-dev
,即使用了 FLUX.1 [dev]
模型训练 LoRA。
首次使用
FLUX.1 [dev]
模型之前,需要手动访问模型页面 https://huggingface.co/black-forest-labs/FLUX.1-dev ,点击里面的Agree and access repository
同意访问按钮,否则训练时 API 接口无法调用这个模型,导致训练时会报错。
- 拉到最下面,找到 repo_id,填写前面在 Hugging Face 创建的、用于存储 LoRA 的仓库,如我这里为
EXPM02/EXP-Flux-LoRA
- 最后点击 Create Training 按钮开始训练
大概 20 分钟后,看到训练状态为 success 时即表示训练完毕:
此时访问我们自己在 Hugging Face 的模型仓库 EXPM02/EXP-Flux-LoRA
,点击 Files and versions 可以看到训练好的 LoRA 模型文件已经上传到仓库了,这就是你自己样子的 LoRA 模型:
0x40 出图
拥有自己的 LoRA 模型之后,我们就可以用它生成自己的写真、在朋友圈正式出道了。
这里要打开 Flux 在线画图仓库 flux-dev-lora
: https://replicate.com/lucataco/flux-dev-lora
不难发现这个操作界面很像 SD,基本功扎实的同学,很快就能上手了:
- 在 prompt 填入画面内容的提示词,第一个要填写自己 LoRA 模型的触发词,如我这里的触发词为
EXP
,后面提示词建议用 chatgpt 帮忙写 - 在 aspect_ratio 选择出图比例,我这里选了
16:9
- 注意到 image 是让我们上传一张参考图,和 SD 的《图生图》很像,这里先跳过,有兴趣的同学可以试试
- 在 hf_lora 填写前面生成的 LoRA 模型仓库名字,如这里为
EXPM02/EXP-Flux-LoRA
,表示使用我自己的模型 - 在 output_format 选择出图格式
- 在 num_outputs 选择一次出几张图,先保持 1 张看看提示词的效果,不然效果不好就浪费钱了
- 其他参数保持默认即可
- 点击 Run 按钮直接出图
根据提示词:
EXP, Realistic image of a young man in a dynamic and heroic pose, wearing a Spider-Man costume without a mask, as he swings between skyscrapers at night.
In one hand, he deftly balances a plate of mooncakes, symbolizing grace under pressure, while his other hand actively sprays spider silk, anchoring him securely to a nearby building.
The backdrop features a large, full moon that casts a dramatic silvery glow over the cityscape, with brightly lit skyscrapers enhancing the scene’s vibrancy.
His expression is one of intense concentration, his body language exuding cool confidence and agility.
我在中秋节化身为蜘蛛侠穿梭在城市之间送月饼,氛围感一下就出来了呢:
0x50 写真自由大赏
利用这个方法,我轻松 cos 了诸多角色的写真:
0xF0 Q&A
0xF1 开始训练时提示:Failed to upload file
如果你在 ai-toolkit
开始训练时,点击 Create Training 后一直提示 文件上传失败,说明 a_photo_of_触发词.zip
没上传成功。
如果你的 a_photo_of_触发词.zip
不是很大(10M 以内),一般都是网络原因引起的,你需要重复三个步骤,直到成功为止:
- 删掉 images 中的
a_photo_of_触发词.zip
- 在 images 重新选择
a_photo_of_触发词.zip
上传 - 点击 Create Training 按钮
不建议 a_photo_of_触发词.zip
太大,否则上传失败的几率比较高,而且训练用不到高分辨率的图片,一般在 512 像素就足够了。
0xF2 开始训练后马上就报错失败
错误提示如下:
Training failed.
Command '['python', 'run.py', 'config/replicate.yml']' returned non-zero exit status 1.
... ...
Error running job: black-forest-labs/FLUX.1-dev is not a local folder and is not a valid model identifier listed on 'https://huggingface.co/models'
If this is a private repository, make sure to pass a token having permission to this repo with `token` or log in with `huggingface-cli login`.
... ...
报错里有个关键信息: FLUX.1 [dev]
模型可能是私有的导致无法访问。
其实它不是私有的,前面已经说过,在 model_name 中,默认使用了 black-forest-labs/FLUX.1-dev
模型训练 LoRA,但是首次使用 FLUX.1 [dev]
模型之前,需要手动访问模型页面 https://huggingface.co/black-forest-labs/FLUX.1-dev ,点击里面的 Agree and access repository
同意访问按钮,否则训练时 API 接口无法调用这个模型,导致训练时会报错:
0xF3 训练完成后存储 LoRA 模型失败
错误提示如下:
Training failed.
(Request ID: Root=1-66e69ad2-3a16848326a94ec113e742c3;4af3e888-02e7-452d-833f-e5873aa75b6f) 403 Forbidden: Authorization error.. Cannot access content at: https://huggingface.co/EXPM02/EXP-Flux-LoRA.git/info/lfs/objects/batch. If you are trying to create or update content, make sure you have a token with the `write` role.
很明显就是你在 hf_token 中输入 Hugging Face 生成的 API Token 的权限不够,因为没有 Write 写权限导致无法存储模型到你的 LoRA 仓库。
解决方法请参考 0x24 去做就好了,多半是生成 Token 时, Token Type 没选对,必须选择 Write
。
Replicate 失败的任务并不会扣费