FFusionXL-BASE

详情

模型描述

FFusionXL-openvino-onnx-directml.png
ONNX Version AvailableOpenVINO SupportIntel/AMD/NVIDIA Compatible

🌌 FFusion/FFusionXL-BASE:现已支持 ONNX、DirectML 和 Intel OpenVINO 格式

该模型作为基础模型,主要为 FFusion/FFusionXL-BASE 提供的 diffusers 训练用途而优化。

除此之外,它还在推理中发挥关键作用,并为评估我们的 LoRA 提取结果提供基准。

🌟 概述

  • 🚀 快速训练:专为高速训练优化,支持快速实验。

  • 🧩 多功能性:适用于从自然语言处理到计算机视觉等多种应用和标准。

  • 🎓 按需训练:作为训练您专属模型的基础,可按您的需求定制。

  • 🌐 多语言支持:支持多种语言的模型训练。

  • 🛡️ 坚固架构:基于经过验证的技术构建,确保稳定性和可靠性。

📜 模型描述

FFusionXL "Base" 是一个为加速训练流程而设计的基础模型。它以灵活性为核心,可作为跨多种标准训练自定义模型的基础,支持创新与高效。

Safetensor checkpointsDiffusers(safetensors)Diffusers(pytorch bin)ONNX un-optimized FP32ONNX Optimized FP16 full DirectML supportIntel® OpenVINO™ FP32 & FP16

支持训练的格式:

  • 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/GCLIP-ViT/L)。

  • 更多信息资源: SDXL 论文(arXiv)

📊 模型来源

目录

  1. 📌 ONNX 版本

    1. 🔖 ### 📌 ONNX 详情

    2. 🔖 ### 📌 AMD 对 Microsoft® DirectML 优化的 Stable Diffusion 支持

    3. 🔖 ### 📌 ONNX 推理说明

    4. 🔖 ### 📌 文本到图像

  2. 📌 Intel® OpenVINO™ 版本

    1. 📌 使用 FFusion/FFusionXL-BASE 进行 OpenVINO 推理

    2. 🔖 ### 📌 安装依赖项

    3. 🔖 ### 📌 文本到图像

    4. 🔖 ### 📌 带文本反转的文本到图像

    5. 🔖 ### 📌 图像到图像

    6. 🔖 ### 📌 优化图像输出

  3. 📜 第 003 部分:🧨 Model Diffusers、快速 LoRA 加载与训练

    1. 📌 Model Diffusers:释放 FFusion/FFusionXL-BASE 的强大功能
    2. 📌 安装依赖项
    3. 📌 训练
    4. 📌 推理
    5. 📌 训练
    6. 📌 微调文本编码器和 UNet
    7. 📌 推理
  4. 📌 评估

### 📌 ONNX 版本

preview-ffusionAI__base_00026_ copy.jpg

我们很高兴宣布,已推出完全优化的 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 详情

NETRON 详情:onxxapp-nutron-ffusionai.jpg

安装

macOS下载 .dmg 文件,或运行 brew install --cask netron

Linux下载 .AppImage 文件,或运行 snap install netron

Windows下载 .exe 安装程序,或运行 winget install -s winget netron

https://netron.app/

-- NETRON 浏览器版本启动文本编码器Text Encoder1 FFusionXL.jpg

-- NETRON 浏览器版本启动文本编码器 2TextEncoder2 FFusionXL.jpg

-- NETRON 浏览器版本启动 VAE 解码器

-- NETRON 浏览器版本启动 VAE 编码器VAE encoder FFUSION-ai-Screenshot_2016.jpg

-- NETRON 浏览器版本启动 UNET

🔖 ### 📌 AMD 对 Microsoft® DirectML 优化的 Stable Diffusion 支持

FFusionXL-directML.jpg

AMD 已发布针对 Stable Diffusion 的 Microsoft DirectML 优化支持,与 Microsoft 密切合作以实现 AMD 设备上的最佳性能。

Microsoft DirectML AMD Microsoft DirectML Stable Diffusion

🔖 ### 📌 ONNX 推理说明

Onnx-FFusionXL1.jpg

🔖 ### 📌 文本到图像

以下是如何使用 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 之前,请确保已安装 diffusersinvisible_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")


[**![SDXL-preview.png](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/HocDOL_Tlxsqe9qKMRwyp.png)**](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/HocDOL_Tlxsqe9qKMRwyp.png)[**![FFusi1onXL_with_textual_inveaarsion1.png](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/bkkQSPWD8Zt736eihubEi.png)**](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/bkkQSPWD8Zt736eihubEi.png)[**![FFusionXL_with_textual_inversion1.png](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/oX4CWQwbuQn4WiBDbOwM6.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")


### \### 📌 评估

[**![evaluation-ffusionAI.jpg](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/NPrW6dc_JsAxZrZZRDC_M.jpeg)**](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/NPrW6dc_JsAxZrZZRDC_M.jpeg)[**![evaluation-ffusionXL.jpg](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/b0Z2M7wp-MqCXes595ulX.jpeg)**](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/b0Z2M7wp-MqCXes595ulX.jpeg)

[**![image_comparisons.png](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/m890TYI3HTk6xYMPBrLQN.png)**](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/m890TYI3HTk6xYMPBrLQN.png)[**![combined_FFigure.png](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/I67ri4P06doH7l2n7x1G0.png)**](https://cdn-uploads.huggingface.co/production/uploads/6380cf05f496d57325c12194/I67ri4P06doH7l2n7x1G0.png)

本分析由 FFusion.AI 使用 yuvalkirstain/PickScore\_v1 模型进行,是测试 Stable Diffusion 模型提示胜率和准确性的持续研究的重要贡献。

📧 如有任何疑问或需要支持,请联系 [**[email protected]**](mailto:[email protected])。我们随时为您提供帮助!

此模型生成的图像

未找到图像。