FLUX 1 将像 Stable Diffusion 一样完整支持ControlNet组件

在这里插入图片描述

之前 InstantX 团队做的多合一的 Flux ControlNet 现在开始和 ShakkerAI 合作并推出了:Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro
该模型支持 7 种控制模式,包括 canny (0), tile (1), depth (2), blur (3), pose (4), gray (5) 和 low quality (6),并且还能和其他 ControlNet 一起使用。

模型卡片

  • 该 checkpoint 是 FLUX.1-dev-Controlnet-Union 的专业版,经过更多步骤和数据集的训练。
  • 该模型支持 7 种控制模式,包括 canny (0)、tile (1)、depth (2)、blur (3)、pose (4)、gray (5)、low quality (6)。
  • 建议 controlnet_conditioning_scale 为 0.3-0.8。
  • 该模型可与其他 ControlNets 共同使用。

效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Multi-Controls 推理

import torch
from diffusers.utils import load_image

from diffusers import FluxControlNetPipeline, FluxControlNetModel, FluxMultiControlNetModel

base_model = 'black-forest-labs/FLUX.1-dev'
controlnet_model_union = 'Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro'

controlnet_union = FluxControlNetModel.from_pretrained(controlnet_model_union, torch_dtype=torch.bfloat16)
controlnet = FluxMultiControlNetModel([controlnet_union]) # we always recommend loading via FluxMultiControlNetModel

pipe = FluxControlNetPipeline.from_pretrained(base_model, controlnet=controlnet, torch_dtype=torch.bfloat16)
pipe.to("cuda")

prompt = 'A bohemian-style female travel blogger with sun-kissed skin and messy beach waves.'
control_image_depth = load_image("https://huggingface.co/Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro/resolve/main/assets/depth.jpg")
control_mode_depth = 2

control_image_canny = load_image("https://huggingface.co/Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro/resolve/main/assets/canny.jpg")
control_mode_canny = 0

width, height = control_image.size

image = pipe(
    prompt, 
    control_image=[control_image_depth, control_image_canny],
    control_mode=[control_mode_depth, control_mode_canny],
    width=width,
    height=height,
    controlnet_conditioning_scale=[0.2, 0.4],
    num_inference_steps=24, 
    guidance_scale=3.5,
    generator=torch.manual_seed(42),
).images[0]

我们还支持像以前一样加载多个控制网。

from diffusers import FluxControlNetModel, FluxMultiControlNetModel

controlnet_model_union = 'Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro'
controlnet_union = FluxControlNetModel.from_pretrained(controlnet_model_union, torch_dtype=torch.bfloat16)

controlnet_model_depth = 'Shakker-Labs/FLUX.1-dev-Controlnet-Depth'
controlnet_depth = FluxControlNetModel.from_pretrained(controlnet_model_depth, torch_dtype=torch.bfloat16)

controlnet = FluxMultiControlNetModel([controlnet_union, controlnet_depth])

# set mode to None for other ControlNets
control_mode=[2, None]

资料

  • InstantX/FLUX.1-dev-Controlnet-Canny
  • Shakker-Labs/FLUX.1-dev-ControlNet-Depth
  • Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro
05-30
在Reactor库中,`Flux`是一种异步执行的多个结果的数据流,它类似于Java中的`Stream`。`Flux`可以让您更轻松地处理和转换数据流,以及处理来自外部数据源的事件。 `Flux`可以使用多个方式创建,例如使用静态方法、使用`Iterable`或`Stream`、从`Mono`转换等。以下是一个使用静态方法创建`Flux`的示例: ```java import reactor.core.publisher.Flux; public class FluxExample { public static void main(String[] args) { Flux.just("Hello", "World") // 创建一个包含两个字符串的Flux .subscribe(System.out::println); // 订阅Flux并在元素可用时打印它们 } } ``` 在上面的代码中,我们使用`Flux.just`方法创建了一个包含两个字符串的`Flux`,然后使用`subscribe`方法来订阅它并在元素可用时打印它们。 `Flux`还提供了许多其他方法,可以用于创建、转换和组合`Flux`。例如,您可以使用`map`方法将`Flux`中的元素转换为另一种类型,或使用`merge`方法将多个`Flux`合并为一个。以下是一个使用`map`和`merge`的示例: ```java Flux<String> flux1 = Flux.just("Hello", "World"); Flux<String> flux2 = Flux.just("Reactor", "Flux"); Flux<String> result = Flux.merge(flux1.map(String::toUpperCase), flux2.map(String::toLowerCase)); result.subscribe(System.out::println); // 输出 "HELLO", "WORLD", "reactor", "flux" ``` 在上面的代码中,我们首先使用`map`方法将`flux1`和`flux2`中的字符串转换为大写和小写,然后使用`merge`方法将它们合并为一个`Flux`。最后,我们订阅了`result`并打印了它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值