FFusionXL-BASE
详情
下载文件
关于此版本
模型描述
🌌 FFusion/FFusionXL-BASE:现已支持 ONNX、DirectML 和 Intel OpenVINO 格式
该模型作为基础模型,主要为 FFusion/FFusionXL-BASE 提供的 diffusers 训练用途而优化。
除此之外,它还在推理中发挥关键作用,并为评估我们的 LoRA 提取结果提供基准。

🌟 概述
🚀 快速训练:专为高速训练优化,支持快速实验。
🧩 多功能性:适用于从自然语言处理到计算机视觉等多种应用和标准。
🎓 按需训练:作为训练您专属模型的基础,可按您的需求定制。
🌐 多语言支持:支持多种语言的模型训练。
🛡️ 坚固架构:基于经过验证的技术构建,确保稳定性和可靠性。
📜 模型描述
FFusionXL "Base" 是一个为加速训练流程而设计的基础模型。它以灵活性为核心,可作为跨多种标准训练自定义模型的基础,支持创新与高效。
支持训练的格式:
Safetensor 检查点(fp16 & fp32)
Diffusers(safetensors)FP16 & FP32
Diffusers(pytorch bin)FP16 & FP32
ONNX 未优化 FP32
ONNX 优化 FP16,全面支持 DirectML / AMD / NVIDIA
Intel® OpenVINO™ FP32 - 未优化
Intel® OpenVINO™ FP16
训练方: FFusion AI
模型类型: 基于扩散的文本到图像生成模型
许可证: FFXL 研究许可证
模型描述: 本模型基于 SDXL 训练而成,可用于根据文本提示生成和修改图像。它是一个 潜在扩散模型,使用两个固定预训练文本编码器(OpenCLIP-ViT/G 和 CLIP-ViT/L)。
更多信息资源: SDXL 论文(arXiv)
📊 模型来源
目录
### 📌 ONNX 版本
我们很高兴宣布,已推出完全优化的 Microsoft ONNX 版本,仅兼容最新的 DirectML 执行提供程序。所有 ONNX 文件均经过优化(量化)为 fp16 格式,以实现跨所有设备的快速推理和训练。
VAE_Decoder 保持为 fp32,设置如下:
"float16": false,
"use_gpu": true,
"keep_io_types": true,
"force_fp32_ops": ["RandomNormalLike"]
以避免出现黑屏和渲染错误。一旦有适用于完整 fp16 VAE 解码器的可靠解决方案,我们将立即更新。VAE 编码器及其他部分均已完全优化 🤟。
我们的 ONNX 模型使用 ONNX v8 进行优化:
生产者: onnxruntime.transformers 1.15.1
导入: ai.onnx v18, com.microsoft.nchwc v1, ai.onnx.ml v3, com.ms.internal.nhwc v19, ai.onnx.training v1, ai.onnx.preview.training v1, com.microsoft v1, com.microsoft.experimental v1, org.pytorch.aten v1, com.microsoft.dml v1, graph: torch_jit
🔖 ### 📌 ONNX 详情
安装
macOS:下载 .dmg 文件,或运行 brew install --cask netron
Linux:下载 .AppImage 文件,或运行 snap install netron
Windows:下载 .exe 安装程序,或运行 winget install -s winget netron
-- NETRON 浏览器版本:启动文本编码器
-- NETRON 浏览器版本:启动文本编码器 2
-- NETRON 浏览器版本:启动 VAE 解码器
-- NETRON 浏览器版本:启动 VAE 编码器
-- NETRON 浏览器版本:启动 UNET
🔖 ### 📌 AMD 对 Microsoft® DirectML 优化的 Stable Diffusion 支持
AMD 已发布针对 Stable Diffusion 的 Microsoft DirectML 优化支持,与 Microsoft 密切合作以实现 AMD 设备上的最佳性能。
Microsoft DirectML AMD Microsoft DirectML Stable Diffusion
🔖 ### 📌 ONNX 推理说明
🔖 ### 📌 文本到图像
以下是如何使用 ONNX Runtime 加载 ONNX Stable Diffusion 模型并运行推理的示例:
from optimum.onnxruntime import ORTStableDiffusionPipeline
model_id = "FFusion/FFusionXL-BASE"
pipeline = ORTStableDiffusionPipeline.from_pretrained(model_id)
prompt = "sailing ship in storm by Leonardo da Vinci"
images = pipeline(prompt).images
### 📌 Intel® OpenVINO™ 版本
为方便推理测试和训练,我们也提供了转换后的 Intel® OpenVINO™ 模型。目前尚未应用量化和优化。
### 📌 使用 FFusion/FFusionXL-BASE 进行 OpenVINO 推理
🔖 ### 📌 安装依赖项
在使用 OVStableDiffusionXLPipeline 之前,请确保已安装 diffusers 和 invisible_watermark。您可以按如下方式安装这些库:
pip install diffusers
pip install invisible-watermark>=0.2.0
🔖 ### 📌 文本到图像
以下是如何使用 OpenVINO Runtime 加载 FFusion/FFusionXL-BASE OpenVINO 模型并运行推理的示例:
from optimum.intel import OVStableDiffusionXLPipeline
model_id = "FFusion/FFusionXL-BASE"
base = OVStableDiffusionXLPipeline.from_pretrained(model_id)
prompt = "train station by Caspar David Friedrich"
image = base(prompt).images[0]
image.save("train_station.png")
🔖 ### 📌 带文本反转的文本到图像
首先,您可以不使用文本反转运行原始管道:
from optimum.intel import OVStableDiffusionXLPipeline
import numpy as np
model_id = "FFusion/FFusionXL-BASE"
prompt = "charturnerv2, multiple views of the same character in the same outfit, a character turnaround of a beautiful cyber female wearing a black corset and pink latex shirt, scifi best quality, intricate details."
np.random.seed(0)
base = OVStableDiffusionXLPipeline.from_pretrained(model_id, export=False, compile=False)
base.compile()
image1 = base(prompt, num_inference_steps=50).images[0]
image1.save("sdxl_without_textual_inversion.png")
然后,您可以加载 charturnerv2 文本反转嵌入并再次使用相同提示运行管道:
# 重置稳定扩散管道
base.clear_requests()
# 将文本反转加载到稳定扩散管道中
base.load_textual_inversion("./charturnerv2.pt", "charturnerv2")
在第一次推理前编译模型
base.compile() image2 = base(prompt, num_inference_steps=50).images[0] image2.save("sdxl_with_textual_inversion.png")
[****](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/HocDOL_Tlxsqe9qKMRwyp.png)[****](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/bkkQSPWD8Zt736eihubEi.png)[****](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/oX4CWQwbuQn4WiBDbOwM6.png)
🔖 ### 📌 图像到图像
以下是加载 PyTorch FFusion/FFusionXL-BASE 模型、动态转换为 OpenVINO 并使用 OpenVINO Runtime 进行图像到图像推理的示例:
from optimum.intel import OVStableDiffusionXLImg2ImgPipeline from diffusers.utils import load_image
model_id = "FFusion/FFusionXL-BASE-refiner-1.0" pipeline = OVStableDiffusionXLImg2ImgPipeline.from_pretrained(model_id, export=True)
url = "https://huggingface.co/datasets/optimum/documentation-images/resolve/main/intel/openvino/sd_xl/castle_friedrich.png" image = load_image(url).convert("RGB") prompt = "medieval castle by Caspar David Friedrich" image = pipeline(prompt, image=image).images[0] pipeline.save_pretrained("openvino-FF-xl-refiner-1.0")
🔖 ### 📌 图像输出优化
可以通过使用如 `FFusion/FFusionXL-BASE-refiner-1.0` 这样的模型来优化图像。此时,您只需从基础模型输出潜在表示即可。
from optimum.intel import OVStableDiffusionXLImg2ImgPipeline
model_id = "FFusion/FFusionXL-BASE-refiner-1.0" refiner = OVStableDiffusionXLImg2ImgPipeline.from_pretrained(model_id, export=True)
image = base(prompt=prompt, output_type="latent").images[0] image = refiner(prompt=prompt, image=image[None, :]).images[0]
## 📜 第 003 部分:🧨 Model Diffusers、快速 LoRa 加载与训练
### \### 📌 Model Diffusers:释放 FFusion/FFusionXL-BASE 的强大功能
无论您是艺术家、研究人员还是 AI 爱好者,我们的模型都旨在让您的旅程顺畅而激动人心。请确保将 diffusers 升级至 >= 0.19.3:
pip install diffusers --upgrade
此外,请安装 `transformers`、`safetensors`、`accelerate` 和隐形水印:
pip install invisible_watermark transformers accelerate safetensors
然后您可以按如下方式使用模型:
from diffusers import DiffusionPipeline import torch
pipe = DiffusionPipeline.from_pretrained("FFusion/FFusionXL-09-SDXL", torch_dtype=torch.float16, use_safetensors=True, variant="fp16") pipe.to("cuda")
如果使用 torch < 2.0
pipe.enable_xformers_memory_efficient_attention()
prompt = "An astronaut riding a green horse"
images = pipe(prompt=prompt).images[0]
## 📜 Diffusers 训练指南:使用 LoRA 训练 FFusion/FFusionXL-BASE
## Stable Diffusion XL 文本到图像微调
`train_text_to_image_sdxl.py` 脚本展示了如何在您自己的数据集上微调 Stable Diffusion XL(SDXL)。
🚨 此脚本为实验性脚本。该脚本微调整个模型,通常会导致模型过拟合并出现灾难性遗忘等问题。建议尝试不同的超参数以获得您数据集的最佳结果。🚨
## 📜 使用 PyTorch 本地运行
### \### 📌 安装依赖项
在运行脚本之前,请确保安装库的训练依赖项:
**重要**
为确保成功运行最新版本的示例脚本,我们强烈建议**从源代码安装**,并在我们频繁更新示例脚本时保持安装最新,同时安装一些特定于示例的依赖项。为此,请在新的虚拟环境中执行以下步骤:
git clone https://github.com/huggingface/diffusers cd diffusers pip install -e .
然后进入 `examples/text_to_image` 文件夹并运行:
pip install -r requirements_sdxl.txt
并使用以下命令初始化 [**🤗Accelerate**](https://github.com/huggingface/accelerate/) 环境:
accelerate config
或为无交互式环境(如笔记本)设置默认配置:
accelerate config default
或如果您的环境不支持交互式 shell(例如笔记本):
from accelerate.utils import write_basic_config write_basic_config()
在运行 `accelerate config` 时,如果将 torch compile 模式设置为 True,可获得显著的速度提升。
### \### 📌 训练
export MODEL_NAME="FFusion/FFusionXL-BASE" export VAE="madebyollin/sdxl-vae-fp16-fix" export DATASET_NAME="lambdalabs/pokemon-blip-captions"
accelerate launch train_text_to_image_sdxl.py
--pretrained_model_name_or_path=$MODEL_NAME
--pretrained_vae_model_name_or_path=$VAE
--dataset_name=$DATASET_NAME
--enable_xformers_memory_efficient_attention
--resolution=512 --center_crop --random_flip
--proportion_empty_prompts=0.2
--train_batch_size=1
--gradient_accumulation_steps=4 --gradient_checkpointing
--max_train_steps=10000
--use_8bit_adam
--learning_rate=1e-06 --lr_scheduler="constant" --lr_warmup_steps=0
--mixed_precision="fp16"
--report_to="wandb"
--validation_prompt="a cute Sundar Pichai creature" --validation_epochs 5
--checkpointing_steps=5000
--output_dir="sdxl-pokemon-model"
--push_to_hub
**注意**:
* `train_text_to_image_sdxl.py`(diffusers/examples/text\_to\_image)脚本会预先计算文本嵌入和 VAE 编码并将其保存在内存中。对于像 `lambdalabs/pokemon-blip-captions` 这样的小型数据集可能不是问题,但在较大数据集上运行时,它肯定会引发内存问题。为此,您希望将这些预计算的表示单独序列化到磁盘,并在微调过程中加载它们。有关更深入的讨论,请参阅 [**此 PR**](https://github.com/huggingface/diffusers/pull/4505)。
* 训练脚本计算密集,可能无法在 Tesla T4 等消费级 GPU 上运行。
* 上述训练命令在训练周期之间执行中间质量验证,并将结果记录到 Weights and Biases。相关 CLI 参数为 `--report_to`、`--validation_prompt` 和 `--validation_epochs`。examples/text\_to\_image
### \### 📌 推理
from diffusers import DiffusionPipeline import torch
model_path = "FFusion/FFusionXL-BASE" # <-- 将其更改为您的新训练模型 pipe = DiffusionPipeline.from_pretrained(model_path, torch_dtype=torch.float16) pipe.to("cuda")
prompt = "A pokemon with green eyes and red legs." image = pipe(prompt, num_inference_steps=30, guidance_scale=7.5).images[0] image.save("pokemon.png")
## 📜 Stable Diffusion XL(SDXL)的 LoRA 训练示例
低秩适应(Low-Rank Adaption of Large Language Models)最初由微软在 [**LoRA: Low-Rank Adaptation of Large Language Models**](https://arxiv.org/abs/2106.09685) 中引入,作者为 _Edward J. Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, Weizhu Chen_。
简而言之,LoRA 通过向现有权重添加一组低秩分解矩阵来微调预训练模型,并**仅**训练这些新添加的权重。这带来了一些优势:
* 之前的预训练权重保持冻结,从而避免模型陷入[**灾难性遗忘**](https://www.pnas.org/doi/10.1073/pnas.1611835114)。
* 低秩分解矩阵的参数远少于原始模型,因此训练后的 LoRA 权重易于移植。
* LoRA 注意力层允许通过 `scale` 参数控制模型适应新训练图像的程度。
[**cloneofsimo**](https://github.com/cloneofsimo) 是第一个在流行的 [**lora**](https://github.com/cloneofsimo/lora) GitHub 仓库中尝试 LoRA 训练 Stable Diffusion 的人。
借助 LoRA,您可以在 Tesla T4、Tesla V100 等消费级 GPU 上微调 Stable Diffusion 的自定义图像-文本对数据集。
### \### 📌 训练
首先,您需要按照[**安装部分**](https://huggingface.co/FFusion/FFusionXL-BASE#installing-the-dependencies)设置开发环境。确保设置 `MODEL_NAME` 和 `DATASET_NAME` 环境变量。此处,我们将使用 [**Stable Diffusion XL 1.0-base**](https://huggingface.co/FFusion/FFusionXL-BASE) 和 [**Pokemons 数据集**](https://huggingface.co/datasets/lambdalabs/pokemon-blip-captions)。
**_注意:通过定期在训练过程中生成采样图像来监控训练进度非常有用。_** [**_Weights and Biases_**](https://docs.wandb.ai/quickstart) **_是轻松查看训练期间生成图像的优秀解决方案。您只需在训练前运行_** `pip install wandb` **_即可自动记录图像。_**
export MODEL_NAME="FFusion/FFusionXL-BASE" export DATASET_NAME="lambdalabs/pokemon-blip-captions"
为本示例,我们希望直接将训练好的 LoRA 嵌入存储到 Hub 上,因此需要登录并添加 `--push_to_hub` 标志。
huggingface-cli login
现在我们可以开始训练了!
accelerate launch train_text_to_image_lora_sdxl.py
--pretrained_model_name_or_path=$MODEL_NAME
--dataset_name=$DATASET_NAME --caption_column="text"
--resolution=1024 --random_flip
--train_batch_size=1
--num_train_epochs=2 --checkpointing_steps=500
--learning_rate=1e-04 --lr_scheduler="constant" --lr_warmup_steps=0
--seed=42
--output_dir="sd-pokemon-model-lora-sdxl"
--validation_prompt="cute dragon creature" --report_to="wandb"
--push_to_hub
上述命令将在微调过程中运行推理,并将结果记录至 Weights and Biases。
### \### 📌 微调文本编码器和 UNet
该脚本还允许您同时微调 `text_encoder` 和 `unet`。
🚨 微调文本编码器需要额外的内存。
向训练脚本传递 `--train_text_encoder` 参数以启用 `text_encoder` 和 `unet` 的微调:
accelerate launch train_text_to_image_lora_sdxl.py
--pretrained_model_name_or_path=$MODEL_NAME
--dataset_name=$DATASET_NAME --caption_column="text"
--resolution=1024 --random_flip
--train_batch_size=1
--num_train_epochs=2 --checkpointing_steps=500
--learning_rate=1e-04 --lr_scheduler="constant" --lr_warmup_steps=0
--seed=42
--output_dir="sd-pokemon-model-lora-sdxl-txt"
--train_text_encoder
--validation_prompt="cute dragon creature" --report_to="wandb"
--push_to_hub
### \### 📌 推理
使用上述命令训练模型后,您只需加载训练好的 LoRA 权重,即可通过 `DiffusionPipeline` 简单地进行推理。您需要传递 `output_dir` 以加载 LoRA 权重,在本例中为 `sd-pokemon-model-lora-sdxl`。
from diffusers import DiffusionPipeline import torch
model_path = "takuoko/sd-pokemon-model-lora-sdxl" pipe = DiffusionPipeline.from_pretrained("FFusion/FFusionXL-BASE", torch_dtype=torch.float16) pipe.to("cuda") pipe.load_lora_weights(model_path)
prompt = "A pokemon with green eyes and red legs." image = pipe(prompt, num_inference_steps=30, guidance_scale=7.5).images[0] image.save("pokemon.png")
### \### 📌 评估
[****](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/NPrW6dc_JsAxZrZZRDC_M.jpeg)[****](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/b0Z2M7wp-MqCXes595ulX.jpeg)
[****](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/m890TYI3HTk6xYMPBrLQN.png)[****](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/I67ri4P06doH7l2n7x1G0.png)
本分析由 FFusion.AI 使用 yuvalkirstain/PickScore\_v1 模型进行,是测试 Stable Diffusion 模型提示胜率和准确性的持续研究的重要贡献。
📧 如有任何疑问或需要支持,请联系 [**[email protected]**](mailto:[email protected])。我们随时为您提供帮助!






















