论文:

https://arxiv.org/abs/2508.02107
 

模型:

https://www.modelscope.cn/models/DiffSynth-Studio/LoRAFusion-preview-FLUX.1-dev
 

代码:

https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-LoRA-Fusion.py
 

01.引言

为了充分挖掘魔搭社区 Diffusion LoRA 模型的潜力,我们开发了一个自动 LoRA 检索与融合框架:AutoLoRA。他可以根据输入的文本提示,从 LoRA 候选池中检索到 个与提示词相关的LoRA,然后通过集成一个门控融合模块在生成图片的时候促进多个 LoRA 协同工作,充分发挥各个 LoRA 的能力。

02.效果展示

检索+融合:社区赋能基模

在 FLUX.1-dev 上进行实验,对每个输入检索1-3个 LoRA,并使用融合模块把她们融合在一起进行生图。可以看到检索到的 LoRA 可以提升原图的细节和整体的美观程度。


 

物体+风格:多元功能融合

单独测试融合模块的物体和风格LoRA融合,即保持了物体的一致性也融合了风格样式。

风格+风格:实现奇思妙想

"a cat"

LoRA 1

LoRA 2

LoRA 3

LoRA 4

LoRA 1

LoRA 2

LoRA 3

LoRA 4

更多 LoRA 融合

3 个 LoRA 融合也能发挥作用,一个冰雪材质,加皮影戏,加一个背景 LoRA:

03.技术亮点

如图所示,AutoLoRA 包括两个关键组件:1)基于权重编码的 LoRA 检索器 和 2)细粒度的门控融合模块。

我们先介绍 LoRA 检索器。要实现通过文本检索 LoRA 的功能,我们需要 LoRA 模型转化为一个embedding,但是面对一个模型权重参数,我们难以使用常规的方法对齐进行特征提取。为了解决这个问题,我们利用了一个权重编码器来对 LoRA 进行编码。具体来说就是把LoRA的每一层视为一个 token,首先通过一些可学习的查询和矩阵把 token 转化成 token embedding:.

把所有的层转换成embedding之后,我们可以得到一个 embedding 序列:,最后把用 Transformer Blocks 对其进行全局的特征提取,得到最终的 LoRA embedding: 。
 

LoRA 编码器的训练目标:使用对比损失进行训练,虽然我们拿不到 LoRA 模型的训练数据,但是在社区中 每个 LoRA 通常会带有几张封面图,我们利用这些极其有限的数据构造一个数据集。首先使用 Qwen VL 为每张图片生成三段长度不同的描述来作为每个 LoRA 的文本标签,数据集格式如下:。

训练完之后我们就可以通过计算文本 embedding 与 LoRA embedding 之间的余弦相似度来在候选池检索最想关的LoRA,并且有新增的 LoRA 也不需要对模型重新训练。

接下来介绍我们的 LoRA 融合模块。之前的一些 LoRA 融合方法只能在少数且数量固定的 LoRA 上生效,为了进行可以把检索到的任意数量 LoRA 进行融合,我们提出了一个细粒度的门控融合机制,在线性层中利用可学习的门控模块感知扩散过程中原始模型和 LoRA 各个中间层的隐状态特征,动态计算不同维度的 LoRA 权重。

具体来说,在一个线性层中原始模型的输出为 , 个 LoRA 的输出为 。首先对其进行归一化:
 

随后,通过三个专门的门控组件的协同计算每个 LoRA 的特定维度贡献权重:
 

其中 表示 Base Feature Gate,用于建模原始输出的表示重要性; 表示 LoRA-Specific Gate,用于感知每个 LoRA 适配器的差异化贡献; 表示 ,用于捕获原始输出和 LoRA 输出之间的高阶交互特征。他们都是可学习的权重向量 。 表示 sigmoid 激活函数;\odot 表示逐元素乘法。门控矩阵 中的 用于确定第 个 LoRA 在维度上的贡献。最后,该模块通过幅度校准将原始输出与加权后的 LoRA 输出进行集成:

其中 是一个可学习的融合缩放参数,进一步确保融合的数值稳定性 。

LoRA 融合模块的训练目标:我们使用一个抗干扰训练策略,即在训练的时候同时加载两个 LoRA,但是只用其中一个LoRA的图文进行训练,损失函数使用标准的 flow matching 损失。

04.本地推理

LoRA 融合模型可直接在 DiffSynth-Studio 中进行推理。

安装:

git clone https://github.com/modelscope/DiffSynth-Studio.git  
cd DiffSynth-Studio
pip install -e .

推理:

import torch
from diffsynth.pipelines.flux_image_new import FluxImagePipeline, ModelConfig
pipe = FluxImagePipeline.from_pretrained(
    torch_dtype=torch.bfloat16,
    device="cuda",
    model_configs=[
        ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="flux1-dev.safetensors"),
        ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="text_encoder/model.safetensors"),
        ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="text_encoder_2/"),
        ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="ae.safetensors"),
        ModelConfig(model_id="DiffSynth-Studio/LoRAFusion-preview-FLUX.1-dev", origin_file_pattern="model.safetensors"),
    ],
)
pipe.enable_lora_magic()
pipe.load_lora(
    pipe.dit,
    ModelConfig(model_id="cancel13/cxsk", origin_file_pattern="30.safetensors"),
    hotload=True,
)
pipe.load_lora(
    pipe.dit,
    ModelConfig(model_id="DiffSynth-Studio/ArtAug-lora-FLUX.1dev-v1", origin_file_pattern="merged_lora.safetensors"),
    hotload=True,
)
image = pipe(prompt="a cat", seed=0)
image.save("image_fused.jpg")

05.写在最后

近期随着 Qwen-Image 的开源,开源社区中 Qwen-Image 的 LoRA 模型生态蓬勃发展,我们将会继续优化模型效果,将这项技术应用到 Qwen-Image 的 LoRA 生态中,和广大开发者一起,共建繁荣的开源社区生态!


 

点击链接阅读原文,即可跳转链接~

https://www.modelscope.cn/papers/2508.02107

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐