阿里技术 10小时前
超清分辨率文生图模型微调实践
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文分享了阿里巴巴智能引擎团队 Muse 工作台在探索 FLUX.1-dev 模型原生支持 2K 分辨率图像生成过程中的技术经验。文章指出,当前主流开源模型在 1024*1024 分辨率下表现良好,但直接提高分辨率会导致图像质量急剧下降,出现细节丢失或画面内容丢失等问题。为解决此挑战,团队通过微调 FLUX.1-dev 模型,解决了 Grid Pattern 和细节缺失等关键问题,并探讨了 Classifier-Free-Guidance (CFG) 蒸馏对模型的影响。最终,微调后的模型在原生 2K 分辨率下展现出优于传统超分技术的细节表现。

✨ **原生高分辨率生成面临的挑战与解决方案:** 主流开源模型如 FLUX.1-dev 在 1024*1024 分辨率下效果良好,但尝试直接生成 2K 分辨率图像时,会出现 Grid Pattern(网格状纹理)和细节缺失等问题。Grid Pattern 问题与 Diffusion Transformer (DIT) 中的 ROPE 位置编码在外推到长序列时产生周期性影响有关。细节缺失则源于 DIT 训练时使用的 Dynamic Timestep Shift 策略在推理高分辨率图像时,导致采样步长过度集中在影响画面构图的阶段,而忽略了细节增强。团队通过直接在更长序列上微调模型,并禁用 Dynamic Timestep Shift 策略,有效解决了这两个核心问题。

🚀 **微调 FLUX.1-dev 以支持超清分辨率的训练与推理:** 训练阶段,通过在超清图片上微调模型,使 ROPE 位置编码能正确感知更长的序列(即更高分辨率的图像),同时结合多分辨率混合训练,以保持模型生成原始分辨率图像的能力。推理阶段,通过禁用 Dynamic Timestep Shift 策略,解决了去噪过程中 Timestep 采样偏移导致细节丢失的问题。实验结果表明,微调后的模型在生成 2K 分辨率图像时,画面质量和边缘细节得到显著增强,优于使用 Real-ESRGAN 等模型进行后处理超分的方案。

💡 **CFG 蒸馏对 FLUX.1-dev 的影响及对策:** 文章还探讨了 Classifier-Free-Guidance (CFG) 蒸馏对 FLUX.1-dev 的影响。虽然 CFG 蒸馏旨在通过通用负向提示词提升图像质量并降低推理开销,但 FLUX.1-dev 在较高 Guidance Scale 下表现不佳,可能因为 Guidance Scale 的影响从 O(n) 变为 O(n^2)。作者猜测,这是由于模型学习目标是将 FLUX.1-dev 的预测向量接近 FLUX.1-pro 在使用 CFG 后的预测向量,导致 Guidance Scale 被叠加了两次。因此,在使用 CFG 时,需要将 Guidance Scale 的取值范围进一步缩小。

📊 **微调数据与效果对比:** 团队使用了阿里巴巴 AI Data 平台约 400 万高质量图片,并采用 Joy Caption 模型进行打标,构建了训练数据集。微调学习率控制在 1e-6,以避免细节失真。效果对比显示,微调后的 FLUX.1-dev 原生支持 2K 分辨率生成的图像,在发丝、眼睛、手臂边缘等细节表现上,远优于将 1024 分辨率图像通过 Real-ESRGAN 进行超分处理的效果。此外,微调后的底模也能较好地兼容社区中基于 1024 分辨率图片训练得到的 LoRA 模型。

原创 徐轶轩 2025-07-18 08:32 浙江

本文分享了 Muse 在探索 FLUX.1-dev 支持原生 2k 分辨率生图过程中的经验。

这是2025年的第79篇文章

( 本文阅读时间:15分钟 )


我们是阿里巴巴智能引擎团队,是阿里 AI 工程领域的先行者和深耕者,持续为阿里集团各业务提供高质量的 AI 工程服务。Muse 是智能引擎推出的面向内部的 AIGC 创作工作台。本文分享了 Muse 在探索 FLUX.1-dev 支持原生 2k 分辨率生图过程中的经验。

文章涉及的模型及对应的原生超清图片生成能力已在魔搭上线。因微信画质压缩原因,文中示意图未完全还原,欢迎大家在魔搭体验。

体验地址:

https://www.modelscope.cn/models/MusePublic/flux-high-res


01


背景介绍

目前 AIGC 社区中,主流的开源模型聚焦 1024*1024 像素下各种尺寸(1:1、3:4、9:16 等)的图片生成,例如 FLUX.1-dev、SD3.5-Large,以及更早期的 SDXL 等。抛开显存占用等工程问题,强行提高图片生成分辨率至 2048 像素级别,并不会导致模型无法生图,而是会让生图质量急剧下降。一个基于 FLUX.1-dev 的例子如下,可以看到:当生成图片分辨率从 1440 像素提升到 2048 像素后,整体画面仍然遵从提示词(a river in summer),但画面细节已经消失;进一步地提升到 2560 像素后,画面丢失了所有内容。

FLUX.1-dev生成图片、图片细节随着分辨率的变化情况

对于希望将 AIGC 图片用于真实应用的用户来说,1024 像素的图片是不够的。为了解决该问题,社区的主流做法是对生成图片进行超分(Image Super-Resolution)。使用 Real-ESRGAN 等模型,可以有效地将 1024*1024 像素的图片提升至 2048、4096 像素的超清图片。

然而 Real-ESRGAN 只是一个不到 100MB 的模型,实际效果有限,主要的局限在于:对于原始图片中接近无法辨认,可能仅占若干像素的边缘、纹理细节,并不能提升超清图片中对应细节质量。因此,AIGC 社区对于原生支持 2k 分辨率及往上图片生成的模型是有诉求的。同时,我们看到了一些最领先的闭源模型,开始将原生支持 2k 分辨率作为模型的竞争力、商业化的核心卖点,例如:

Black Forest Labs - FLUX 1.1 [pro] Ultra:

字节跳动 - Seedream 3.0:

上述模型都是最近一年内发布的 SOTA 文生图模型,在 Artificial Analysis 等评测网站处于前十的领先位置。在 fal.ai 等平台体验过闭源的 FLUX 1.1 [pro] Ultra后,我们发现它生成一张 2752*1536 的图片仅需 10 秒左右。这个耗时有点出乎意料,原因是团队对扩散模型的各类推理加速技术也有一定实践,对量化/算子类优化、Cache/蒸馏类优化、张量/序列并行等优化的空间上限有一些认识。这些性能优化空间的上限,使我们觉得想要在 10 秒内生成如此多像素的一张图片,模型参数量无法过大。

既然模型参数量不会比开源模型大太多,一个自然的问题是:为什么开源的 FLUX.1-dev 无法生成 2k 分辨率的超清图片?以及进一步地,是否可以通过对 FLUX.1-dev 微调,赋予其生成超清图片的能力?本文主要分享了团队在探索该问题时,遇到的“绊脚石”和解决方案。首先说一下结论:通过微调的确可以赋予 FLUX.1-dev 生成超清图片的能力,体现在模型的训练、推理阶段分别为:

    训练阶段:(1)直接在超清图片上微调,让模型的 ROPE 位置编码能够对更长的 Sequence,i.e., 分辨率更高的图片,有正确的认知;(2)通过多分辨率混合训练,维持模型生成原始分辨率图片的能力;

    推理阶段:通过禁用 Dynamic Timestep Shift,解决去噪阶段 timestep 的采样偏移问题;

在介绍技术细节前,先展示一下若干提示词下微调后的模型和原始 FLUX.1-dev 的对比结果。此外,我们对比了基于 NTK-ROPE 的一种生成超清图片的 Training-Free 解决方案。可以看到微调后的模型在生成超清图片时,图片质量和边缘细节得到了显著得增强。

提示词

(图片分辨率)

原始 FLUX.1-dev

原始 FLUX.1-dev

(NTK-ROPE)

微调的 FLUX.1-dev

a river in summer

(2048*2048)

An old bridge crossing a serene river, its stone arches covered in ivy, as ducks paddle lazily beneath it.

(2560*1440)


Skyscrapers glowing with neon lights at night, their reflections shimmering in puddles on wet streets, as taxis zip past hurriedly.

(1440*2560)


02


存在问题与解决方案

2.1 图片中的 Grid Pattern 与位置编码的外推问题

在使用原始 FLUX.1-dev 生成高分辨率图片时,我们首先观察到图片会出现规则性的网格、斜纹,我们称之为 Grid Pattern。具体表现如下图,可以看到画面中的网格是非常明显的,会直接导致图片不可用。该问题在 Reddit 等社区中也被用户频繁提及。

FLUX.1-dev 生成超清图片的 Grid Pattern 现象

在基于 Flow Matching 的扩散模型的推理过程中,我们认为最有可能引入周期性影响的部分是 Diffusion Transformer (DIT) 的 ROPE 位置编码。我们测量出网格的大小是 16*16,正好对应经过 VAE encode、patchify 后 latent space 中一个 token 的宽度、高度,这也进一步验证了该问题大概率和 token-level 的 ROPE 位置编码有关。


网格尺寸: 16*16,格位置: 从左上到右下颜色逐渐加深

使用 FLUX.1-dev 的 VAE 对 latent 进行 decode 操作时,生成图片的宽度、高度和序列长度L存在如下关系:

因此,当生成 1024*1024 分辨率的图片时,序列长度为 4k;当生成图片为 2048*2048 分辨率时,序列长度为 16k。对于熟悉大语言模型的同学来说,可以很容易地看到:使用一个主要在 1024*1024 分辨率图片上训练的 DIT,去生成 2048*2048 分辨率的图片,其实和大语言模型中使用一个训练序列长度为 4k 的模型,在测试阶段生成长度为 16k 的序列所遇到的“长度外推”问题是类似的。

由于不知道如何对更长距离的 Query、Key 进行有效的 Attention,对于大语言模型目前基于 next token prediction 的任务形式来说,会造成长序列上预测的 Perplexity 显著上升,生成文本的质量下降;而对于基于 Flow Matching 的扩散模型这类需要在连续空间预测用于降噪的速度向量的任务来说,会造成模型需要“注意”更多的 token,但由于模型不知道如何对远距离 token 进行正确感知,叠加 ROPE 编码的周期性影响,最终造成了生成图片中出现规则性的模式。

很遗憾,由于目前 DIT 结构的复杂性(例如,会针对文本、图像类 token 在不同 Block 中进行不同的 Attention 操作),叠加扩散模型框架需要迭代地使用 DIT 预测速度向量并降噪。想要针对上述复杂的行为,给出具有明确数学表达式的 ROPE 编码影响分析,难度极大。我们将其留作待解决的问题,在未来进行探索。

我们进一步发现,使用大语言模型中常见的缓解“长度外推”问题的技术方案,在扩散模型中的收益更小,我们猜测这主要与面临问题的难度上升有关:对于大语言模型来说,解决预测下一个 token 的分类问题就行,对于目标 token 的预测概率其实并不太重要,只要做到目标 token 的预测概率是所有 token 中最大的就行。

然而对于扩散模型来说,需要解决的是一个多变量回归问题:尽可能地让 DIT 预测的速度向量接近 Flow Matching 框架下概率路径对应的真实速度。解决一个多变量回归问题的难度,往往是比解决一个分类问题更难的。此外,更关键的是通过调整 ROPE 中旋转角度的指数底数、使用 NTK-ROPE 等方法来缓解外推问题,会额外引入训推不一致的问题。

因此,我们最终采用了最“朴素”的方案来解决该问题:直接在更长的序列上对模型进行微调,从而赋予它对更长距离 token 的感知能力,微调最终的结果也验证了该方案的有效性。

2.2 图片中的细节缺失与 Timestep 采样偏移问题

通过在更长的序列上微调,让模型知道如何对更多、更长距离的 token 进行感知,我们有效解决了上一节中提到的 Grid Pattern 问题,一个接踵而来的新问题是微调的 FLUX.1-dev 生成超清图片时会发生细节缺失现象,如下图所示。

FLUX.1-dev 生成超清图片的细节缺失现象

在对推理流程排查后,我们定位到该问题和 DIT 模型训练时普遍采用的 Dynamic Timestep Shift 策略有关。介绍具体问题前,我们先介绍一下该策略的用处:基于 Rectified Flow(是 Flow Matching 框架下一种具体的形式,所设计的概率路径是原始、目标分布下样本点之间的线性插值)的 DIT 训练阶段,我们会对图片施加高斯噪声,模型需要学习如何将高斯噪声移除,从而还原图片。具体加噪公式如下,其中 x0x1代表原始图片、高斯噪声:

实际训练过程中发现,施加噪声的影响不仅和t 相关,还和图片尺寸相关。当施加噪声的强度一定时(即 t固定),图片x0尺寸越大,实际加噪效果越差。下图是一个非常生动的例子。该现象也容易理解,图片中包含的像素越多,像素之间的冗余信息也越大,因此需要更高的噪声强度将其破坏,才能取得和低像素图片相同的加噪效果。

Dynamic Timestep Shift 策略就是用于解决上述问题的,它会根据图片尺寸动态地对t进行偏移得到 tshift。一般tshift 相比会更大,从而上述加噪公式中高斯噪声x的作用更大了,最终实现更高的噪声强度,具体由下面两个公式表示:

其中 size(x) 代表图片在 latent space 的序列长度。回顾第一个问题中图片分辨率和序列长度的关系(1024*1024 像素图片对应的 size(x)=4096,2048*2048 像素图片对应的 size(x)=16384),下图展示了 和偏移后tshift 的映射关系。可以看到,在 2048*2048 像素下 timestep 的偏移幅度是非常大的,例如 t=0.2 会被直接映射为tshift=0.8。

不同分辨率下的 timestep dynamic shift

为了保证训推一致,FLUX.1-dev 官方代码、Huggingface 的 diffusers 实现代码在模型推理过程中继续使用了 Dynamic Timestep Shift 策略。具体地,在推理阶段我们从高斯噪声x开始,基于 DIT 预测的速度向量进行 timestep 从 1 到 0(i.e., 从高斯噪声到 latent space 中符合提示词c 的图片)的积分:

上述积分难以求解,实际中一般采用简单的欧拉(Euler)法进行数值求解,迭代公式如下:

根据推理阶段采样步数的大小不同,会从[0,1] 区间内中离散化得到个 timestep 并按照  Dynamic Timestep Shift 策略偏移得到tshift。 下图展示了不同分辨率下,离散化后的tshift 绘制的折线图。

先解释一下图中红色、蓝色区域为什么对应画面构图、画面细节。回顾训练阶段的加噪过程,从 0→1 过程中一张图片 x逐渐变成了高斯噪声x1,从而t∈[0,0.5] 阶段是更接近原图,而t∈[0.5,1] 阶段更接近噪声。因此可以大致理解成,一个训练好的 DIT 模型在t∈[0.5,1] 阶段更关注如何从噪声得到一张画面整体遵从提示词的图片(但细节可能是模糊的),而在t∈[0,0.5] 阶段 DIT 更关注如何对遵从提示词的图片增强细节,从而得到最终的图片。

不同分辨率下得到的离散化 timestep

回到我们的细节消失问题上,可以观察上图中 2048*2048 像素对应的曲线(绿色),采样得到的所有 timestep 几乎都集中在对画面构图影响更大的t∈[0,5,1] 阶段,从而导致 DIT 模型基本没有被用于图片细节的还原,并最终导致了画面细节的缺失。

有了上述认识后,推理阶段生成超清图片的解决方案也非常直观:我们可以直接禁用 Dynamic Timestep Shfit 策略,例如直接采用在[0,1] 上均匀离散化后的 timestep。

2.3 Classifier-Free-Guidance (CFG) 蒸馏对模型使用 CFG 的影响

通过解决上述两个问题,我们基本实现了开源模型 FLUX.1-dev 生成超清图片的能力。除此之外,我们对 CFG 蒸馏也有了一些自己的想法,在此一并进行分享。

在 SD1.5 / SDXL 时代 CFG 的作用十分关键。几乎每次生图,用户都要在负向提示词中使用“poor quality、bad quality、error、bad finger”等词组来提升图片质量。此外,用户还可以在负向提示词中输入不希望出现的内容,从而实现图片中对应概念的移除。

事实上,有很多使用场景除了负向提示词,我们缺乏有效的手段去进一步提升图片质量,例如我们或许也只能通过输入“cloudy eye”、“dull expression”等负向提示词,去尝试提升图片中人物眼睛的明亮度、人物表情的自然度。社区已有的各类可控生成插件,类似 ControlNet、IP-Adapter 等并无法发挥用处。我们相信一个全方位能力优秀的模型,可能无需使用 CFG 来提升图片质量,但至少目前的模型或多或少都存在不足,因此 CFG 仍然是十分有用的功能。 

使用 CFG 最大的问题是它会让推理开销接近 double。在推理阶段每轮基于欧拉法的迭代中,DIT 需要同时预测正向提示词c、负向提示词n 下的速度向量v(x,c,t) 和v(x,n,t) 才能得到 CFG 预测结果,因此推理开销接近只使用正向提示词时的两倍。

FLUX.1-dev 通过模型蒸馏某种程度上解决了上述问题:基于一组通用的负向提示词(例如 poor quality、bad quality),直接让学生模型(FLUX.1-dev)尝试输出教师模型(FLUX.1-pro)在正向提示词、一组通用负向提示词上的 CFG 预测结果。通过这种蒸馏策略,就可以让学生模型在无需使用 CFG 时,也获得基于通用负向提示词带来的 CFG 图像质量提升收益。

尽管官方并未公开 FLUX.1-dev 的蒸馏细节,但我们(包括社区)普遍认为 FLUX.1-dev 就是基于上述流程从 FLUX.1-pro 蒸馏得到的,从而仅需在正向提示词上预测速度向量,同时又保留了部分 CFG 的能力。

然而 FLUX.1-dev 无法像 SD3.5-Large 等模型一样,在 Guidance Scale 等于 3.5、5 等典型值下使用 CFG。具体效果如下表所示,可以看到在 Guidance Scale 等于 3.5 时图片质量产生了显著下降,该现象在其他相似参数量,但并未经过 CFG 蒸馏的模型时是不存在的。值得额外说明的是,下表中的 True CFG Scale 并不是 FLUX.1-dev 推理代码中的 guidance_scale 参数,后者其实是 FLUX.1-dev 经过 CFG 蒸馏后引入的一个变量。

提示词 / 

负向提示词

True CFG 

Scale 1

True CFG 

Scale 2

True CFG 

Scale 3.5

True CFG 

Scale 5

True CFG 

Scale 7.5

1 girl / anime style, white hair, japanese school uniform



1 car / sport car, red car

1 cat / orange cat, baby cat

首先可以明确的是,并不是 FLUX.1-dev 无法使用 CFG,至少在相对较小的 True CFG Scale 下 CFG 仍在正常发挥作用。此外,CFG 的能力一般通过让模型知道如何在空提示词(null caption)上生成图片获得,而 FLUX.1-dev 在空提示词下是可以生成各类图片的,因此它并不欠缺 CFG 能力。

我们对上述问题进行了相对合理的猜测,先给出结论:Guidance Scale 对 CFG 蒸馏过的模型的影响会从O(n) 变为O(n2),从而我们无法使用典型的 Guidance Scale 取值,而需要对其往更小的范围缩放。

基于上面提到的对蒸馏学习目标的猜测:让 FLUX.1-dev 的速度向量预测接近 FLUX.1-pro 在相同正向提示词、一组通用负向提示词上经过 CFG 后的速度向量预测,有如下式子:

其中代表 True CFG Scale,c 代表正向提示词,Cnegative 代表一组通用负向提示词。上式右侧代表 FLUX.1-pro 使用 CFG 后的预测结果。假设 FLUX.1-dev 完美学习了上述目标,即约等于号变成了等号,则对 FLUX.1-dev 再次使用 CFG 的预测结果output 如下,其中n 代表负向提示词:

在完美学习的假设下,通过将 FLUX.1-dev 使用 CFG 的输出替换为 FLUX.1-pro 的原始输出,可以很直观地看到 Guidance Scale 被叠加了两次,从而它的影响变成了O(n2) 的关系。这也解释了上表中为什么在 True CFG Scale 为 2 时,CFG 还在正常生效,而在 3.5 和更大的取值上图片质量下降明显。


03


微调数据与参数

总结关于训练阶段的解决方案,我们以合适的策略使用超清图片对 FLUX.1-dev 进行微调即可,剩下的主要是显存是否够用、训练是否高效等工程问题。我们使用了阿里巴巴 AI Data 平台上约 400 万高质量图片。针对每张图片我们都进行了缩放,确保图片尺寸比例保持不变的情况下,宽度、高度的最大值小于等于 2048 像素。

此外,我们采用了 Joy Caption 模型对每张图片进行打标,并最终得到了每个样本包含图片、对应打标结果的数据集。由于每个 worker 的训练 batch size 设置为 1,因此我们无需考虑同一个 batch 内图片大小不一致,导致模型无法输出的问题。我们采用的微调学习率为 1e-6,在实践中我们发现使用高于 5e-6 的学习率在百万量级的图片上对 FLUX.1-dev 进行微调,在训练一定步数后会出现细节失真的问题。


04


效果对比

最后再给几组对比图片,第一列为原始 FLUX.1-dev 生成 1024 分辨率图片后,再使用 Real-ESRGAN 进行 4 倍超分并 resize 至 2048 像素的图片;第二列为我们微调后支持原生 2k 分辨率图片的 FLUX.1-dev 所生成的图片。我们额外在模型上 patch 了社区用户贡献的主体、风格 LoRA,以说明微调后的底模可以较好地兼容社区中基于 1024 分辨率图片训练得到的 LoRA。每个 case 除了生成的原图,我们额外给出了相同主体的细节放大图片。可以看到原生 2k 分辨率的图片在发丝、眼睛、手臂边缘等细节的质量,远优于超分辨率的图片。

原始 FLUX.1-dev + Real-ESRGAN 2x

微调的 FLUX.1-dev

原始 FLUX.1-dev + Real-ESRGAN 2x

微调的 FLUX.1-dev

原始 FLUX.1-dev + Real-ESRGAN 2x

微调的 FLUX.1-dev


05


局限与未来工作

目前我们用于微调的超清图片集中在写实风格,导致微调后的模型在其他艺术风格上的表现相对欠缺,后续我们会使用覆盖范围更广的图片进行微调。此外,我们在图片打标环节尚未进行深入探索,直接使用了 Joy Caption 的打标结果。后续我们也会探索更细致、质量更高的打标结果对模型微调的影响。最关键的,对于超清生图能力而言可能模型微调(SFT)已经足够,但想进一步提高模型生成超清图片的美学性、人物质量,我们还需要依赖 RLHF,这也是我们后续重要的探索方向。

欢迎留言一起参与讨论~

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

FLUX.1-dev AI绘画 高分辨率生成 模型微调 AIGC
相关文章