许可证:其他
许可证名称:flux-1-dev-non-commercial-license
许可证链接:https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/LICENSE.md
语言:
- 英文
库名称:diffusers
管道标签:文本生成图像
标签:
- 量化
- fp8
- e4m3
- 文本生成图像
- ControlNet
- Diffusers
- Flux.1-dev
- 图像生成
- Stable Diffusion
- 量化
- 降低精度
基础模型:
- Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0
基础模型关系:量化
推理:
参数:
torch_dtype: torch.float8_e4m3fn
FLUX.1-dev-ControlNet-Union-Pro-2.0 (FP8 量化版)
本仓库包含Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0模型的FP8量化版本。这不是微调模型,而是将原始BFloat16模型直接量化为FP8格式以优化推理性能。我们提供了一个在线演示。
量化详情
该模型已使用PyTorch原生FP8支持从原始BFloat16格式量化为FP8格式。具体细节如下:
- 量化技术:原生FP8量化
- 精度:E4M3格式(4位指数,3位尾数)
- 使用的库:PyTorch内置FP8支持
- 数据类型:
torch.float8_e4m3fn
- 原始模型:BFloat16格式(Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0)
- 模型大小缩减:比原始模型小约50%
FP8量化的优势包括:
- 减少内存使用:与BFloat16/FP16相比,模型大小减小约50%
- 更快的推理:在支持FP8的硬件上可能获得速度提升
- 最小质量损失:精心校准的量化过程以保持输出质量
重要提示:这是Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0的直接量化版本,保留了原始模型的所有功能。未进行任何微调或额外训练。
关键点
与Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro相比:
- 移除了模式嵌入,模型更小。
- 在canny和pose上有所改进,控制力和美观度更好。
- 增加了对soft edge的支持。移除了对tile的支持。
模型卡片
- 该ControlNet由6个双块和0个单块组成。模式嵌入已被移除。
- 我们使用2000万张高质量通用和人像图像数据集从头训练了30万步。训练分辨率为512x512,使用BFloat16,批量大小为128,学习率为2e-5,引导均匀采样自[1, 7]。文本丢弃比例设为0.20。
- 该模型支持多种控制模式,包括canny、soft edge、depth、pose、gray。可以像普通ControlNet一样使用。
- 该模型可以与其他ControlNet联合使用。
展示
推理
import torch
from diffusers.utils import load_image
from diffusers import FluxControlNetPipeline, FluxControlNetModel
base_model = 'black-forest-labs/FLUX.1-dev'
controlnet_model_union_fp8 = 'ABDALLALSWAITI/FLUX.1-dev-ControlNet-Union-Pro-2.0-fp8'
controlnet = FluxControlNetModel.from_pretrained(controlnet_model_union_fp8, torch_dtype=torch.float8_e4m3fn)
pipe = FluxControlNetPipeline.from_pretrained(base_model, controlnet=controlnet, torch_dtype=torch.bfloat16)
pipe.to("cuda")
control_image = load_image("./conds/canny.png")
width, height = control_image.size
prompt = "一位年轻女孩优雅地站在宁静的海滩边缘,她长长的飘逸发丝被海风轻轻拂动。她穿着一件柔和的淡色连衣裙,与海岸景色的宁静蓝绿色调相得益彰。夕阳的金色光芒洒在她的脸上,凸显出她宁静的表情。背景是广阔的蔚蓝海洋,轻柔的波浪拍打着海岸,远处是悬崖和晴朗无云的天空。构图强调了女孩在自然美景中的宁静存在,冷暖色调平衡融合。"
image = pipe(
prompt,
control_image=control_image,
width=width,
height=height,
controlnet_conditioning_scale=0.7,
control_guidance_end=0.8,
num_inference_steps=30,
guidance_scale=3.5,
generator=torch.Generator(device="cuda").manual_seed(42),
).images[0]
多重推理
import torch
from diffusers.utils import load_image
from pipeline_flux_controlnet import FluxControlNetPipeline
from controlnet_flux import FluxControlNetModel
base_model = 'black-forest-labs/FLUX.1-dev'
controlnet_model_union_fp8 = 'ABDALLALSWAITI/FLUX.1-dev-ControlNet-Union-Pro-2.0-fp8'
controlnet = FluxControlNetModel.from_pretrained(controlnet_model_union_fp8, torch_dtype=torch.float8_e4m3fn)
pipe = FluxControlNetPipeline.from_pretrained(base_model, controlnet=[controlnet], torch_dtype=torch.bfloat16)
pipe.to("cuda")
control_image = load_image("./conds/canny.png")
width, height = control_image.size
prompt = "一位年轻女孩优雅地站在宁静的海滩边缘,她长长的飘逸发丝被海风轻轻拂动。她穿着一件柔和的淡色连衣裙,与海岸景色的宁静蓝绿色调相得益彰。夕阳的金色光芒洒在她的脸上,凸显出她宁静的表情。背景是广阔的蔚蓝海洋,轻柔的波浪拍打着海岸,远处是悬崖和晴朗无云的天空。构图强调了女孩在自然美景中的宁静存在,冷暖色调平衡融合。"
image = pipe(
prompt,
control_image=[control_image, control_image],
width=width,
height=height,
controlnet_conditioning_scale=[0.35, 0.35],
control_guidance_end=[0.8, 0.8],
num_inference_steps=30,
guidance_scale=3.5,
generator=torch.Generator(device="cuda").manual_seed(42),
).images[0]
推荐参数
可以调整controlnet_conditioning_scale和control_guidance_end以获得更强的控制和更好的细节保留。为了更好的稳定性,强烈建议使用详细的提示,某些情况下多重条件会有所帮助。
- Canny:使用cv2.Canny,controlnet_conditioning_scale=0.7,control_guidance_end=0.8。
- Soft Edge:使用AnylineDetector,controlnet_conditioning_scale=0.7,control_guidance_end=0.8。
- Depth:使用depth-anything,controlnet_conditioning_scale=0.8,control_guidance_end=0.8。
- Pose:使用DWPose,controlnet_conditioning_scale=0.9,control_guidance_end=0.65。
- Gray:使用cv2.cvtColor,controlnet_conditioning_scale=0.9,control_guidance_end=0.8。
使用FP8模型
本仓库包含模型的FP8量化版本。使用时需要支持FP8的PyTorch:
import torch
from diffusers.utils import load_image
from diffusers import FluxControlNetPipeline, FluxControlNetModel
base_model = 'black-forest-labs/FLUX.1-dev'
controlnet_model_union_fp8 = 'ABDALLALSWAITI/FLUX.1-dev-ControlNet-Union-Pro-2.0-fp8'
controlnet = FluxControlNetModel.from_pretrained(controlnet_model_union_fp8, torch_dtype=torch.float8_e4m3fn)
pipe = FluxControlNetPipeline.from_pretrained(base_model, controlnet=controlnet, torch_dtype=torch.bfloat16)
pipe.to("cuda")
完整示例参见fp8_inference_example.py
。
资源
致谢
该模型由Shakker Labs开发。原始灵感来自xinsir/controlnet-union-sdxl-1.0。保留所有版权。