谑拓旧剖分辨率是AIGC的阵痛
1.1 算力的三次方诅咒
分辨率对计算资源的吞噬是非线性的:
像素维度:分辨率×2 → 像素数×4
Attention维度:序列长度×4 → 计算量×16(O(N2))
内存维度:激活值×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的模型,其latent空间通常是64×64。这意味着任何小于8像素的细节都无法被表达------不是模糊,是根本不存在。模型从未见过更细的纹理,它不知道"毛孔"应该长什么样。
1.4 第一个核心困局
训练分辨率是模型认知的"光速上限",推理分辨率是用户需求的"超光速幻想"。
所有架构演化,都是在这个物理限制下的工程妥协。
SD1.5:U-Net的困境,只能打补丁了。(2022)
"第一次把扩散模型带到可用的工业级质量"
2.1 架构的先天残疾
SD1.5的U-Net架构有三个致命设计:
Receptive Field的硬边界
U-Net的encoder-decoder结构,下采样到8×8时,每个特征点理论上能看到64×64的原始区域。但对于2048×2048的图像,64×64只是3%的画面。模型根本看不见全局,只能凭统计规律猜测。
Latent的密度陷阱
KL-VAE将512×512压缩到64×64×4,每个latent向量负责8×8像素的重建。这意味着:
纹理:可学习(重复模式)
结构:可学习(大尺度形状)
精确几何:不可学习(亚像素级定位)
Attention的局部性
U-Net的self-attention只在同分辨率特征图内进行,跨尺度的信息融合依赖skip connection的通道拼接。这种层次化而非全局化的设计,让SD1.5擅长"画得像",不擅长"画得对"。
2.2 推理端的绝望补救
面对用户的4K需求,SD1.5只能诉事后工程:
方案A:插值------数学的暴力
双三次插值将64×64 latent拉到256×256再解码。新像素完全由卷积核权重决定,零语义理解。
结果:建筑线条弯曲,文字无法辨认,人脸变成橡皮泥。
方案B:超分网络------幻觉的代价
ESRGAN作为后置处理器,用对抗学习"编造"高频细节。
结果:砖墙纹理逼真但重复,皮肤毛孔存在但位置错误,统计上合理,物理上荒谬。
方案C:Tiled生成------一致性的献祭
将4K画布切成16个512×512 tiles独立生成,切片堆叠。
结果:每个tile质量完美,拼接处光照突变,人物长出四个耳朵。
2.3 SD1.5的本质 verdict
SD1.5从未"理解"过高分辨率,它只是用低分辨率的认知,通过工程技巧伪装成高分辨率。
这种伪装在:
自然风景(低频主导):可接受
人脸特写(结构敏感):崩坏
文字排版(精确几何):灾难
新困局产生:U-Net的局部性无法突破,必须换架构。VAE的一致性也是崩坏的。
所以 SD1.5 的高分辨率不是"生成",而是"插值 + 幻觉"。
SDXL:分工的艺术(2023)
补上了 SD1.5 在"高频细节"和"结构一致性"上的缺口
3.1 架构层面的第一次革命
SDXL没有抛弃U-Net,但做了结构性分工:
更密的Latent空间
从64×64提升到更精细的表征(实际实现为更高效的VAE压缩),每个latent向量负责的像素区域减小,频率上限提升约40%。
这不是简单的"放大latent",而是重新训练VAE,让编码器学习更高效的语义压缩------用同样的比特数表达更多信息。
Base + Refiner的双阶段流水线
核心洞察:结构和纹理是不同频率的现象,应该用不同模型处理。
Base模型(U-Net):在相对低分辨率下运行,负责构图、语义、大尺度结构
Refiner模型(另一个U-Net):接收Base的输出作为条件,负责高频细节、纹理、局部对比度
这类似于传统图像处理中的拉普拉斯金字塔:Base处理低频,Refiner处理高频残差。
原生1024与可外推性
SDXL的训练分辨率达到1024×1024,且通过改进的位置编码(插值型),可以外推到2048×2048仍保持可用质量。
3.2 为什么分工有效?
从信号处理视角,SDXL的分解是频率解耦:
图像 = 低频结构(可压缩)+ 高频细节(可预测)
↓ ↓
Base模型 Refiner模型
(全局理解) (局部生成)
Base只需要"知道"画面有张脸,Refiner负责"画"出毛孔。这种解耦让:
Base的attention负担减轻(分辨率固定)
Refiner的生成空间受限(已有结构指导),幻觉减少
3.3 SDXL的新边界
仍然无法突破的墙:
U-Net的receptive field问题依旧,只是被Refiner部分缓解
两阶段串行,推理时间×2
外推到4K时,Refiner的局部性导致细节与结构脱节(如头发丝漂浮在空中)
新困局产生:U-Net的局部性是天生的,必须彻底换架构。
FLUX:Transformer的全局视野(2024)
补上了 U-Net 架构无法突破的"全局视野"缺口
4.1 为什么必须是DiT?
FLUX的架构切换(U-Net → DiT)不是追热点,而是物理必然:
Attention的全局性
DiT的self-attention是全连接的:每个patch能看见所有其他patch。对于2048×2048的图像(256×256 patches),这意味着任意两点间的信息传递只需一层。
对比U-Net:信息从左上角传到右下角需要经过4次下采样-上采样循环,每次都有信息损失。
Scaling的友好性
Transformer的性能随计算量可预测提升(scaling law)。U-Net的卷积结构在达到一定深度后收益递减,而DiT可以通过增加层数、头数、维度持续改进。
位置编码的外推性
FLUX采用RoPE(旋转位置编码),其设计本质是相对位置编码。这使得:
训练时:模型学习的是"距离为k的 patches 如何交互"
推理时:任意距离的交互都遵循同一函数,自然外推
4.2 FLUX的三重突破
更密的Latent
相比SDXL,FLUX的latent空间进一步压缩效率提升,在同等计算预算下能表达更高频率。
单阶段端到端
不再需要SDXL的Base+Refiner分工,单个DiT同时处理结构和细节。这得益于attention的全局性------模型自己学会了在需要时关注全局,在需要时聚焦局部。
Tiled生成的质变
FLUX的tiled效果远超SDXL,因为:
边界patch的attention可以看到相邻tile的上下文(若实现为 overlapping attention)
光照、风格的统计特性由全局attention隐式约束,无需显式同步
4.3 FLUX的物理极限
Attention2的诅咒依旧
DiT解决了U-Net的局部性,但没有解决计算复杂度。2048×2048的图像在latent空间为256×256,attention矩阵大小为65536×65536,单精度存储需16GB,计算不可行。
单尺度的频率天花板
FLUX仍然是单尺度latent。虽然比SDXL更密,但固定的压缩比意味着频率上限固定。想要真正的4K细节,必须接受更大的latent,进而触发显存爆炸。
新困局产生:全局性有了,但算力不够;想要更密latent,但内存不够。需要更高效的注意力或多尺度架构。
Z-Image:轻量与多尺度的平衡(2024-2025)
"成本、速度、落地"
5.1 阿里的工程判断
Z-Image的设计哲学与FLUX不同:
不是"更大更强",而是"刚好够用,极致高效"。
这是基于阿里云的产品场景:
淘宝商品图:需要1024-2048,但要求结构稳定(不能变形)、推理快速(实时生成)
钉钉文档插图:需要轻量部署
通义APP:需要低功耗
5.2 架构层面的创新
轻量DiT
比FLUX更少的层数、更小的维度:
浅层:宽attention,捕获全局
深层:窄attention+MLP,细化局部
这种异构设计让同样计算量下,有效receptive field更大。
多尺度特征融合(核心创新)
Z-Image不依赖单尺度latent,而是在DiT内部显式维护多分辨率特征:
输入图像 → 多尺度编码(1×, 1/2×, 1/4×, 1/8×)
↓
跨尺度attention(每个尺度能看到其他尺度)
↓
渐进式上采样 + 特征融合
↓
输出
这类似于传统计算机视觉中的图像金字塔,但完全可学习、端到端训练。
效果:
高频:从1×尺度获取
结构:从1/8×尺度获取
一致性:跨尺度attention保证
高效注意力变体
采用局部-全局混合attention:
局部窗口:计算密集型,但O(N)复杂度
全局token:可学习的"汇总"token,数量固定(如64个),与图像尺寸无关
这让Z-Image的显存占用与分辨率线性相关,而非平方相关。
5.3 Z-Image的定位
维度 Z-Image FLUX SDXL
设计目标 产品落地 质量极限 工业稳定
架构 轻量异构DiT 标准DiT U-Net分工
多尺度 显式融合 隐式单尺度 两阶段分工
Attention 局部-全局混合 标准全局 局部层次
外推能力 强(2K-4K) 很强(4K+) 弱(<2K)
推理速度 最快 中等 最慢(双阶段)
工程成本 最低 高 中
适用场景 实时生成 专业创作 传统工业
5.4 Z-Image的妥协
为了效率牺牲的质量:
极端复杂场景(如拥挤街道)的全局一致性弱于FLUX
最高频率细节(如毛发、织物纹理)不如FLUX真实
艺术性、创造力略逊于大规模DiT
但这是正确的工程选择:
对于90%的商业场景,"90分质量、100分速度"比"100分质量、50分速度"更有价值。
位置编码演化的总览
除了主要架构的变化之外,还有语义模块位置编码的演化。
因为
位置编码的演化,就是 AIGC 模型空间认知能力的演化。
SD1.5 靠卷积"猜位置",SDXL 开始显式编码位置,FLUX 建立了可外推的全局坐标系,而 Z-Image 则在工程成本下构建了多尺度的高效位置体系。
高分辨率生成的突破,不仅来自更大的模型或更强的 attention,更来自"模型终于知道自己在画布的哪里"。
代际 架构 空间位置编码 时间位置编码 文本位置编码 特点
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 的算法库部署到移动端,只是工作量巨大,目前精力有限,还没完全落地。
但方向是明确的:传统算法与现代模型的结合,仍然有很大的工程空间。
一起努力吧。
博主之前为了把推理性能压榨到极限,也做了不少"苦活".
特别是把移植到TF,然后用TF写个猥琐发育的Chunked Flash Attention in Keras,
那时Flash Attention 还没发布,
而TF这个版本也是后来整理开源了,
毕竟我已经抛弃TensorFlow/Keras转投PyTorch了。
SD1.5 时代,为了推理速度和显存压到极限,博主做了很多"优化"(苦活):
TO C 性价比为王:
权重预计算(减少重复计算)
Flash Attention(降低 attention 显存)
FP16/INT8 量化(端侧可运行)
跨框架迁移(TF ? Torch ? ONNX ? TFLite)
端侧蒸馏 Encoder,实现 1 秒级推理
多模型并行部署,显存复用
后来回到广东,给某游戏大厂做了大量游戏场景的定制化 LoRA,彻底拥抱 PyTorch。
TO B 质量为王
超高分辨率 显存要挤到极限
干净的脏 素材细节要求极高
高保真生成 设定一致性必须严格
语义可控 小数据训练,泛化性不能丢
但无论 TO C 还是 TO B,问题本质都一样:
算法研发,就是用小资源干大事。
在这之间有些算法做出来了,但没开源。
后来大厂开源了他们的版本,打法粗暴,一地鸡毛。
但无可厚非,毕竟这些年博主从开源项目中也学到了不少。
只是在那时就意识到:
不跟大厂硬钢 → 拿不到资源
跟在大厂后面 → 肉汤喝不到,锅还被砸
也是下了决心,选择了裸辞。
不再关注战场发生什么,只问自己:
我想做什么,想达成什么。
现在回头看,选择是对的,但路还很长,还得继续推进。