风格一致性生成:怎么让 AI 画出的十张图看起来像同一个插画师画的

你可能会以为,AI 画图最难的是画得逼真。用久了你会发现,比“画得不像”更让人头疼的是“风格不统一”:让它画一只猫,很好看;画一艘飞船,也很好看;但两张图摆在一起,谁都不信它们出自同一个画师。

AI technology illustration

风格一致性,是 AI 绘画从“能出图”到“能干活”之间那道坎。给小说画封面、给游戏画立绘、给公众号配插图——图与图之间风格不统一,前面所有工作都得推翻重来。

我最早也天真地以为,在 prompt 里堆风格词就够了。直到我靠 Stable Diffusion 做了半年系列插画,才明白一件事:风格这个词,在扩散模型里不是一根线,而是一团乱麻。

为什么在 prompt 里写十遍 "watercolor" 也没用

一句话回答:因为扩散模型里没有一个叫“风格”的旋钮。

Stable Diffusion 这类模型生成图片,本质是从学过的“图像概率分布”里采样。prompt 先被文本编码器转成 token embedding,每一步去噪时,cross-attention 层让这些 embedding 影响噪声预测。

问题出在这:水彩、油画、赛博朋克这类词,在训练数据里跟成千上万张具体图片绑定过。模型只知道“大概长这样”,但“大概”太模糊了——同样是 watercolor,有的训练图是细笔薄涂,有的是重彩泼洒。模型学到的是“所有水彩画风格的平均值”,而不是某个画师的风格。

Google 在 2022 年的 Textual Inversion 论文 里点破过这个问题:文本空间里一个词的粒度,跟“特定画师的风格”这种高度细粒度的视觉属性,根本对不上。

就算你在 prompt 里写十遍 watercolor,也只是把这个“统计平均值”往同一个方向再拉一点。就像你在餐厅对着厨师喊十遍“多放盐”——他能做到的是更咸,不是变成你奶奶的手艺。

风格到底藏在模型的哪里

要理解解决方案,先要知道风格藏在哪。过去几年形成一个共识:在扩散模型里,风格主要分布在 U-Net 的 normalization 层和自注意力层。

normalization 层学的是每个通道的整体统计特征——色彩、明暗、对比度。这些正是人眼判断“画风”的第一手线索。自注意力层学的是“笔触与笔触之间的关系”——你总觉得“这像是手绘的而不是喷绘的”,靠的就是这种质感差异。

而 cross-attention 层(文本引导层)主要管内容:猫在哪、飞船在哪、物体什么形状。

这意味着什么?你依赖的 prompt 描述,恰好作用在最不管“笔触”的那一层。想让模型学会一种精确风格,本质上得调整权重层的分布。所以真正的解法只有三类:在文本侧学一个新词、在权重侧微调参数、在图像侧喂一张参考图。

三种主流方案,分别把风格锚在哪

把风格变成一个新词:Textual Inversion

既然现有词不够用,那就自己造一个。拿出 3-5 张风格统一的参考图,冻结模型所有权重,只训练一个独立的 embedding 向量。训练完,这个词进入词表,你在 prompt 里写上它,模型就往参考图的风格靠拢。

优点是数据需求少、训练快,普通消费级显卡几十分钟搞定。缺点是表达力有限——一个词能承载的信息就那么多。它能抓住“色调和大致调性”,但抓不住“每一笔都对”的质感。用它定调可以,用它复刻画师,不够。

Textual Inversion 到底在训练什么?

目标很简单:让模型看到新词时,生成过程尽量贴近参考图。做法是把参考图加噪再让模型去噪,算预测误差,反向传播——但只更新新词那一个 embedding 向量,其他参数全部冻结。

把风格写进权重:LoRA

LoRA(Low-Rank Adaptation)最初是 2021 年用来微调大语言模型的 方法,2022 年底被 Stable Diffusion 社区搬过来,如今是风格一致性最主流的手段。

原理一句话:冻结原始模型,在 attention 层旁边并接一条低秩旁路。训练时只更新旁路,生成时把旁路输出加回主路。低秩分解让旁路参数量只有原模型的百分之一左右,训练完保存成文件往往只有几十 MB。

风格 LoRA 一般需要 50-200 张统一风格的图。效果扎实,笔触、上色、线条处理都能抓住。但它有两个坑:

  • 数据少时,风格和内容会绑在一起学。素材里总出现龙猫,训练出的 LoRA 可能画什么都像宫崎骏片场。
  • 一个 LoRA 只能学一种画风。要十种画风就得训十个,这是一次性投资。

同期 Google 还提出过 DreamBooth,几张图就能微调整个模型,效果不错但模型文件太大,生态位基本被 LoRA 取代。

把参考图喂进模型:IP-Adapter

如果不想训练呢?腾讯 2023 年提出的 IP-Adapter 走另一条路:用 CLIP 图像编码器把参考图变成视觉特征,再通过一组专门的 cross-attention 注入 U-Net。

它跟 img2img 的区别在于:IP-Adapter 只注入“风格/构图提示”,不覆盖原有文本引导。你可以同时说“画一只猫”和“参考这张水彩”,内容与风格相对独立。

优势是零训练,给张图就能换风格。短板是内容泄漏——参考图里的动作、构图、物品会偶尔被一起抄过来。你要的是它的色调,它连构图一起给你搬来了。

三个方案怎么选

维度 Textual Inversion LoRA IP-Adapter
要多少图 3-5 张 50-200 张 0 张(1 张参考图)
要训多久 几十分钟 数小时 不用训
风格还原度 弱,定个调性 强,贴近原画师 中,看参考图给不给力
内容泄漏 过拟合时会 较高
适合场景 出草稿、定方向 正式系列插画 试稿、快速换风

关于 seed、风格词堆叠和 img2img 的三个误解

固定 seed 就能统一风格?

不能。seed 只决定初始噪声。内容一变,去噪路径千差万别。它只能保证“同样 prompt、同样 seed”时随机细节一致,跨内容时完全帮不上忙。

风格词叠得越多,风格越强?

不会。叠太多词,每个风格的“统计平均值”互相拉扯,最后得到的是“平均值的平均值”——一种什么都是又什么都不是的廉价质感。

img2img 能不能保持风格?

它能保留参考图的结构和色彩,但改内容主体时,构图容易被锁死。你要的是“同一画师画一艘飞船”,img2img 会给你“同一张草图涂一艘飞船”。

我的真实经验:最优解是组合拳

讲完原理,说点实操。我最早以为“固定 seed + 固定 prompt 模板”就能统一风格,试了之后才知道这是个根本盲点:seed 只是初始噪声,内容一变,去噪路径完全不同。它保证不了风格。

  1. 先训一个 LoRA 定“笔触”。这是风格的骨干,管线条、上色、材质。
  2. 用 IP-Adapter 传一张参考图,把色调和光影方向补上。
  3. 把 prompt 写成固定模板:「风格词 + 画面主体 + 画质后缀」,每次只替换主体。
  4. LoRA 权重调到 0.7-0.9,不要拉满。拉满容易把内容一起锁死。
  5. 每个画面生成 8-10 张,挑风格最统一的。这一步不“智能”,但它是目前最可靠的质量保障。

这套流程让我从“十张图十个风格”,变成“十张图里八张像同一个画师”。剩下两张还是不行,但已经够用了。

当前方案的边界在哪

说点大实话。

第一,所有方案都依赖“足够的风格样本”。LoRA 需要 50-200 张,IP-Adapter 依赖参考图的质量。你手里只有一两张图想要抽出一个完整风格?目前没有好办法。

第二,风格和内容的解耦不彻底。学宫崎骏的 LoRA,通常会把“漂浮感、大场景、细腻背景”这些内容倾向一起学进去。风格从来不是单纯的“画法”,它跟创作者看世界的方式绑在一起。这一点,2015 年 Gatys 的神经风格迁移论文 就捅过娄子——用 Gram 矩阵分离“内容”和“风格”,结果换背景的时候连构图一起换了。

第三,风格本身是个开放概念。你可以说“这个插画师用了大量留白”,但“留白多少”没有一个数值坐标。这也是为什么现在没有“风格调节滑块”——因为还没人知道“风格”这个维度的轴应该怎么定。

未来我比较看好的方向,是把“风格”建模成独立的标识向量,像人脸 ID 那样在更高层的语义空间做风格对齐。目前这个方向还在论文阶段,离稳定使用有距离。

在那之前,想让 AI 画出“看起来像同一个插画师画的”十张图,最靠谱的办法仍然是:训练一个高质量的 LoRA,多画几张,然后挑。这很不浪漫,但它有效。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/698.html

(0)
上一篇 10小时前
下一篇 10小时前

相关推荐