就是分辨率,由于技术的局限性,也因为算力的局限性,我们只能在小分辨率的图像里进行训练,而当你想要适配高分辨率的时候,对不起,重训或者外挂传统算法去打补丁。

如果在抠图领域,最经典的问题就是抠发丝,因为如果分辨率过低,是看不见发丝的,更别谈抠发丝是一种苦哈哈的细活。

采用高分辨率,是看见发丝了,计算量却暴涨了。

对于很多场景需要的“实时”抠图,只能跪了,因为单是训练的算力就不能接受了,更别提最终使用。

当然存在一些传统算法,可以为我们铺路,例如利用导向滤波进行后处理细化细节。

既然我们有大分辨率的图片信息,那直接利用起来就好了,细节我们从大分辨率图片里找回来就是了。

当然也可以作为一种先验辅助训练。

那个时期 resnet, unet 百家争鸣。

后来gan的出现,迎来了图像生成的大爆发。

而图像生成这个事,跟抠图,抠发丝是不一样的,因为它是完全生成新的图片,或者生成局部再贴回原图,几乎没有任何原始信息可以合理有效地补充。

而gan带来两层挑战,它需要几乎同时或者交替训练两个模型,一个负责生成,一个负责鉴别。

这里的计算量就已经不小了,如果还要支持更大的分辨率,显存就岌岌可危了,

gan在早期提出的时候本身训练也是不稳定的,后来为了稳定训练才提出来很多正则化惩罚以及归一化的思路。

那个时期,你不gan不行。

在transformer(注意力架构)提出后很多年,

[1706.03762] Attention Is All You Need

一直到了2022年Stable Diffusion彻底引暴了图像生成领域。

也就是新冠三年疫情的最后一年末。

所以从Stable Diffusion的技术路线谈起,是个不错的例子。

关于Stable Diffusion的技术原理补充,

可移步大话AI绘画技术原理与算法优化 一览。

分辨率是AIGC的阵痛

1.1 算力的三次方诅咒

分辨率对计算资源的吞噬是非线性的:

  • 像素维度:分辨率×2 → 像素数×4
  • 注意力维度:序列长度×4 → 计算量×16(O(N²))
  • 内存维度:激活值×4 → 显存占用×4(中间状态爆炸)

综合效应:分辨率×2 → 总成本×64

这意味着512×512到1024×1024不是"两倍工作量",而是64倍

1.2 数据的沙漠

LAION-5B的统计真相:

  • 短边<512像素的图像:87%
  • 短边<1024像素的图像:98%
  • 短边>2048像素的图像:0.3%

高分辨率图像不仅少,而且分布偏移。4K照片的拍摄设备、构图习惯、后期处理流程与手机快照完全不同。

模型在512×512上学习到的"世界知识",在4K上可能完全失效。

1.3 频率的牢笼

奈奎斯特采样定理在深度学习中的残酷映射:

训练分辨率决定了模型能学习的最高频率。

512×512的模型,其压缩空间通常是64×64。这意味着任何小于8像素的细节都无法被表达——不是模糊,是根本不存在

模型从未见过更细的纹理,它不知道"毛孔"应该长什么样。

1.4 第一个核心困局

训练分辨率是模型认知的"上限",推理分辨率是用户需求的"幻想"。

所有架构演化,都是在这个物理限制下的工程妥协。


SD1.5:U-Net的困境,只能打补丁了。(2022)

“第一次把扩散模型带到可用的工业级质量”

2.1 架构的先天残疾

SD1.5的U-Net架构有三个致命设计:

视觉的硬边界

U-Net的encoder-decoder结构,下采样到8×8时,每个特征点理论上能看到64×64的原始区域。

但对于2048×2048的图像,64×64只是3%的画面。模型根本看不见全局,只能凭统计规律猜测。

压缩的密度陷阱

KL-VAE将512×512压缩到64×64×4,每个压缩向量负责8×8像素的重建。这意味着:

  • 纹理:可学习(重复模式)
  • 结构:可学习(大尺度形状)
  • 精确几何:不可学习(亚像素级定位)

注意力的局部性

U-Net的注意力只在同分辨率特征图内进行,跨尺度的信息融合依赖skip connection的通道拼接。

这种层次化而非全局化的设计,让SD1.5擅长"画得像",不擅长"画得对"。

2.2 推理端的补救

面对用户的4K需求,SD1.5只能诉事后工程:

方案A:插值

双三次插值将64×64 压缩向量拉到256×256再解码。

新像素完全由卷积核权重决定,零语义理解

结果:建筑线条弯曲,文字无法辨认,人脸变成橡皮泥。

方案B:超分网络

ESRGAN作为后置处理器,用对抗学习"编造"高频细节。

结果:砖墙纹理逼真但重复,皮肤毛孔存在但位置错误,

统计上合理,物理上荒谬

方案C:Tiled生成

将4K画布切成16个512×512 叠片独立生成,切片堆叠。

结果:每个tile质量完美,拼接处光照突变,人物长出四个耳朵。

2.3 SD1.5的本质

SD1.5从未"理解"过高分辨率,它只是用低分辨率的认知,通过工程技巧伪装成高分辨率。

这种伪装在:

  • 自然风景(低频主导):可接受
  • 人脸特写(结构敏感):崩坏
  • 文字排版(精确几何):灾难

新困局产生:U-Net的局部性无法突破,必须换架构。VAE的一致性也是崩坏的。

SD1.5 的高分辨率是“插值 + 幻觉”。


SDXL:分工的艺术(2023)

补上了 SD1.5 在“高频细节”和“结构一致性”上的缺口

3.1 架构层面的第一次革命

SDXL没有抛弃U-Net,但做了结构性分工

更密的压缩空间

从64×64提升到更精细的表征(实际实现为更高效的VAE压缩),每个压缩向量负责的像素区域减小,频率上限提升约40%

这不是简单的"放大压缩",而是重新训练VAE,让编码器学习更高效的语义压缩——用同样的比特数表达更多信息。

基础 + 细化的双阶段流水线

核心洞察:结构和纹理是不同频率的现象,应该用不同模型处理

  • 基础模型(U-Net):在相对低分辨率下运行,负责构图、语义、大尺度结构
  • 细化模型(另一个U-Net):接收基础模型的输出作为条件,负责高频细节、纹理、局部对比度

这类似于传统图像处理中的拉普拉斯金字塔

基础处理低频,细化处理高频残差。

原生1024与可外推性

SDXL的训练分辨率达到1024×1024,且通过改进的位置编码(插值型),可以外推到2048×2048仍保持可用质量。

3.2 为什么分工有效?

从信号处理视角,SDXL的分解是频率解耦

图像 = 低频结构(可压缩)+ 高频细节(可预测)
      ↓                ↓
   基础模型          细化模型
  (全局理解)      (局部生成)

基础模型只需要"知道"画面有张脸,细化模型负责"画"出毛孔。这种解耦让:

  • 基础的注意力负担减轻(分辨率固定)
  • 细化的生成空间受限(已有结构指导),幻觉减少

3.3 SDXL的新边界

仍然无法突破的墙

  • U-Net的视野问题依旧,只是被细化模型部分缓解
  • 两阶段串行,推理时间×2
  • 外推到4K时,细化模型的局部性导致细节与结构脱节(如头发丝漂浮在空中)

新困局产生:U-Net的局部性是天生的,必须彻底换架构。


FLUX:Transformer的全局视野(2024)

补上了 U-Net 架构无法突破的“全局视野”缺口

4.1 为什么必须是DiT?

FLUX的架构切换(U-Net → DiT)不是追热点,而是物理必然

注意力的全局性

DiT的注意力是全连接的:每个切片能看见所有其他切片。对于2048×2048的图像(256×256 切片),这意味着任意两点间的信息传递只需一层

对比U-Net:信息从左上角传到右下角需要经过4次下采样-上采样循环,每次都有信息损失。

Scaling的友好性

Transformer的性能随计算量可预测提升(scaling law)。U-Net的卷积结构在达到一定深度后收益递减,而DiT可以通过增加层数、头数、维度持续改进。

位置编码的外推性

FLUX采用RoPE(旋转位置编码),其设计本质是相对位置编码。这使得:

  • 训练时:模型学习的是"距离为k的 切片 如何交互"
  • 推理时:任意距离的交互都遵循同一函数,自然外推

4.2 FLUX的三重突破

更密的压缩

相比SDXL,FLUX的压缩空间进一步压缩效率提升,在同等计算预算下能表达更高频率。

单阶段端到端

不再需要SDXL的基础+细化分工,单个DiT同时处理结构和细节。这得益于注意力的全局性——模型自己学会了在需要时关注全局,在需要时聚焦局部

Tiled生成的质变

FLUX的tiled效果远超SDXL,因为:

  • 边界切片的注意力可以看到相邻堆叠的上下文(若实现为 注意力堆叠)
  • 光照、风格的统计特性由全局注意力隐式约束,无需显式同步

4.3 FLUX的物理极限

注意力平方²的苦难依旧

DiT解决了U-Net的局部性,但没有解决计算复杂度。2048×2048的图像在压缩空间为256×256,注意力矩阵大小为65536×65536,单精度存储需16GB,计算不可行。

单尺度的频率天花板

FLUX仍然是单尺度压缩。虽然比SDXL更密,但固定的压缩比意味着频率上限固定。想要真正的4K细节,必须接受更大的压缩,进而触发显存爆炸。

新困局产生:全局性有了,但算力不够;想要更密压缩,但内存不够。需要更高效的注意力多尺度架构


Z-Image:轻量与多尺度的平衡(2024-2025)

“成本、速度、落地”

5.1 阿里的工程判断

Z-Image的设计哲学与FLUX不同:

不是"更大更强",而是"刚好够用,极致高效"。

这是基于阿里云的产品场景:

  • 淘宝商品图:需要1024-2048,但要求结构稳定(不能变形)、推理快速(实时生成)
  • 钉钉文档插图:需要轻量部署
  • 通义APP:需要低功耗

5.2 架构层面的创新

轻量DiT

比FLUX更少的层数、更小的维度:

  • 浅层:宽注意力,捕获全局
  • 深层:窄注意力+MLP,细化局部

这种异构设计让同样计算量下,有效视野更大。

多尺度特征融合(核心创新)

Z-Image不依赖单尺度压缩,而是在DiT内部显式维护多分辨率特征

输入图像 → 多尺度编码(1×, 1/2×, 1/4×, 1/8×)
            ↓
      跨尺度注意力(每个尺度能看到其他尺度)
            ↓
      渐进式上采样 + 特征融合
            ↓
      输出

这类似于传统计算机视觉中的图像金字塔,但完全可学习、端到端训练。

效果

  • 高频:从1×尺度获取
  • 结构:从1/8×尺度获取
  • 一致性:跨尺度注意力保证

高效注意力变体

采用局部-全局混合 注意力

  • 局部窗口:计算密集型,但O(N)复杂度
  • 全局token:可学习的"汇总"token,数量固定(如64个),与图像尺寸无关

这让Z-Image的显存占用与分辨率线性相关,而非平方相关。

5.3 Z-Image的定位

维度 Z-Image FLUX SDXL
设计目标 产品落地 质量极限 工业稳定
架构 轻量异构DiT 标准DiT U-Net分工
多尺度 显式融合 隐式单尺度 两阶段分工
注意力 局部-全局混合 标准全局 局部层次
外推能力 强(2K-4K) 很强(4K+) 弱(<2K)
推理速度 最快 中等 最慢(双阶段)
工程成本 最低
适用场景 实时生成 专业创作 传统工业

5.4 Z-Image的妥协

为了效率牺牲的质量

  • 极端复杂场景(如拥挤街道)的全局一致性弱于FLUX
  • 最高频率细节(如毛发、织物纹理)不如FLUX真实
  • 艺术性、创造力略逊于大规模DiT

但这是正确的工程选择

对于90%的商业场景,"90分质量、100分速度"比"100分质量、50分速度"更有价值。


位置编码演化的总览

除了主要架构的变化之外,还有语义模块位置编码的演化。

因为

位置编码的演化,就是 AIGC 模型空间认知能力的演化。

SD1.5 靠卷积“猜位置”,SDXL 开始显式编码位置,FLUX 建立了可外推的全局坐标系,而 Z-Image 则在工程成本下构建了多尺度的高效位置体系。

高分辨率生成的突破,不仅来自更大的模型或更强的 注意力,更来自“模型终于知道自己在画布的哪里”。

代际 架构 空间位置编码 时间位置编码 文本位置编码 特点
SD1.5 U-Net 无显式 2D PE(卷积隐式) sin-cos CLIP 1D 局部性强,无法外推
SDXL U-Net++ 显式 2D sin-cos sin-cos++ 双编码器 1D 多尺度增强,但仍局部主导
FLUX DiT 2D RoPE(可外推) RoPE/sin-cos Transformer 1D 真正的全局坐标系
Z-Image 轻量 DiT 多尺度 + 局部相对 + 全局抽象 sin-cos Transformer 1D 工程最优,线性成本


回顾四代架构:

  • SD1.5(U-Net):证明了扩散模型可行,但暴露了局部性局限
  • SDXL(U-Net+分工):用工程分工绕过局限,但复杂度爆炸
  • FLUX(DiT):用Transformer解决局部性,但算力瓶颈显现
  • Z-Image(轻量DiT+多尺度):用效率优化平衡质量与成本

每一步都不是"更好"的简单替代,而是在约束条件下的当前最优

  • SD1.5:低算力时代的最优

  • SDXL:高频细节的最优

  • FLUX:全局一致性的最优

  • Z-Image:成本与落地性的最优

这或许是AI工程化的终极真理:

没有最好的架构,只有最合适的架构。

把一些成熟的传统算法,适配到现有的模型架构里去,永远不会过时。

之所以说传统算法永不过时,并不是怀旧,而是工程现实。

无论模型架构如何迭代,分辨率、算力、频率上限这些物理约束始终横在那里——它们不会因为你换了 U‑Net、换了 DiT、换了多尺度结构就自动消失。

而传统算法恰恰能在这些“结构性短板”上提供一种稳定、可控、可解释的补偿路径:

不依赖大规模数据,不受模型形态限制,却能在关键环节把模型无法表达的细节补回来。

基于这样的判断,博主开始尝试把传统图像处理重新嵌入到现代 AIGC 推理链路中,

探索一种不依赖重训、不依赖超分、却能真正吃下高分辨率的方案。

这条路并不轻松,但确实走通了。

为了让模型在高分辨率下保持结构稳定、细节可信,博主实现了一套纯传统算法的分辨率适配方案,

可以作为插件无缝接入各种开源模型架构。

虽然还不够完美,但已经证明这条路线是可行的,而且潜力巨大。

例如 GFPGAN  的原生分辨率只有 512×512,但通过这套方案,不需要超分、不需要重训,就能稳定支持 4K 人脸修复

,质量和成本都在可控范围内。

 facefusion LivePortrait 等模型同样能直接受益。

在训练场景下,它可以作为结构先验;

在推理场景下,它可以作为轻量插件。

理论上再做一次二次微调,效果会更进一步。

这套方案也可以写成纯 C 的算法库部署到移动端,只是工作量巨大,目前精力有限,还没完全落地。

但方向是明确的:传统算法与现代模型的结合,仍然有很大的工程空间。

一起努力吧。


博主之前为了把推理性能压榨到极限,也做了不少“苦活”.

特别是把transformer注意力移植到TF,写了个猥琐发育的Chunked Flash Attention in Keras

那时Flash Attention 还没发布,

现在这个版本整理开源了,可用于粗略学习理解。

博主已经彻底抛弃TensorFlow/Keras,

(自从看到有人提交代码,审核都没通过就被合入主干代码了,真瞎了我的狗眼。)

一起拥抱PyTorch吧。

SD1.5 时代,为了推理速度和显存压到极限:

TO C 性价比为王:

  • 权重预计算(减少重复计算)

  • Flash Attention(降低显存)

  • FP16/INT8 量化(端侧可运行)

  • 跨框架迁移(TF ↔ Torch ↔ ONNX ↔ TFLite)

  • 端侧蒸馏 Encoder,实现 1 秒级推理

  • 多模型并行部署,显存复用

这里给新手一个建议,跨框架迁移 这个事做好了,对学习和研究有莫大的帮助。

只有把底层实现吃透了,开发和debug才能事半功倍。

所以,不失为一个很好的学习思路。

疫情结束之后,博主回到广东,

给某游戏大厂做了一段时间的游戏场景出图的定制化。

TO B 质量为王

  • 超高分辨率 显存要挤到极限

  • 干净的脏 素材细节要求极高

  • 高保真生成 设定一致性必须严格

  • 语义可控 小数据训练,泛化性不能丢

但无论 TO C 还是 TO B,问题本质都一样:

算法研发,就是用小资源干大事。

在这之间有些算法博主也做出来了,还没开源。

大厂就开源了他们的版本,打法粗暴,一地鸡毛。

无可厚非,博主从开源项目中也学到了不少,开源这个事情,利弊都很明显。

这些操作就很容易意识到:

  • 不跟大厂硬钢 → 拿不到资源

  • 跟在大厂后面 → 肉汤喝不到,锅还被砸

最后下了决心,裸辞深挖底层。

战场发生什么,已经不重要了,只问自己:

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐