AI绘画的生成原理是什么?扩散模型通俗解释

AI绘画的生成原理是什么?扩散模型通俗解释
ai绘画生成原理扩散模型加噪去噪示意

简单说:ai绘画的生成原理就是扩散模型把纯噪声图一步步去噪雕成画面,CLIP听懂提示词、U-Net去噪、VAE在像素和潜空间之间搬运。理解这套机制后调参就不瞎猜了,按"文本理解+去噪控制+解码质量"三段想问题。

老实讲,啃明白ai绘画的生成原理之前,我一直把它当黑盒——输一句话蹦一张图,中间发生了啥一概不知。直到有次连出五十张废图全糊,才被迫去翻论文。翻完发现这东西没那么神,就是一条分工明确的流水线,今天用大白话给你讲透。

扩散模型到底在干什么

扩散模型干两件事——前向把清晰图一点点加噪变成纯雪花屏(只用于训练),反向从纯噪声一步步去噪把画面"显影"出来(生成时只用这半)。文生图跑的全是反向那一半。

这词听着唬人,打个比方你就懂。想象一张清晰的人物照,往上面撒50次噪点,撒到最后整张图就是电视没信号那种雪花。前向扩散让模型看着这过程学会"每步噪声长啥样"。反向去噪是倒着来:从雪花屏出发,模型按你提示词给的语义方向,猜"要画这个,这步该去掉哪些噪点",猜个二三十次,画面就从模糊里慢慢显形。跟老式照片在显影液里浮出来一个道理。

实际跑时你设的采样步数,就是反向去噪跑多少轮。我刚入门觉得步数越多越精细,拉到80步,本地一张图磨了快一分钟,跟30步比肉眼根本看不出差。后来固定20-30步,省下算力多跑几张挑图。

文生图完整跑一遍要经过哪些环节

一条完整文生图流水线是:文本编码→潜空间扩散去噪→VAE解码回像素图,三步串起来从一句话变成一张图。中间任何一环出岔子,结果都歪。

具体说,你输"a girl with red umbrella in rain",第一步文本编码器把这句话切成token、映射成高维向量,这串向量就是"语义的数字指纹",告诉后面模型往哪个方向画。第二步,扩散模型在潜空间(不是像素空间,这点很关键)里从随机噪声出发,按这串向量当指南针,跑几十步去噪。第三步,VAE解码器把潜空间里去完噪的"压缩图"放大还原成像素图。

这三步里,编码器理解偏了后面全错。我画赛博古风翻过车——提示词写"holographic embroidery",编码器把它理解成普通反光绣花,出来一张平平无奇的汉服照,完全没全息感。问题就出在文本理解那步,跟去噪没关系。说到底这套流水线是"翻译官+画师+洗印师"的配合。

提示词怎么写才不被编码器误读,看这篇AI绘画提示词写作完整指南

CLIP是怎么听懂你那句话的

CLIP是OpenAI的图文对齐模型,把文本和图像都映射到同一个向量空间,让"猫"这个词和猫的图片在数学上靠得近,文本编码器就靠这机制把人话翻译给扩散模型。

CLIP全称Contrastive Language–Image Pre-training,2021年OpenAI放出,原论文在arXiv的CLIP论文页。训练方式挺巧妙:拿4亿对图文配对,让模型学会"这段文字和这张图匹配,跟别的图不匹配"。训完之后,"a red apple"的文本向量跟红苹果图片距离很近,跟蓝色汽车就远。这就是文生图能"按图索骥"的底子。

具体到Stable Diffusion 1.5,用的是CLIP的ViT-L/14文本编码器,把77个token上限的提示词编成768维向量。这77 token是硬伤,长提示词会被截断。我有次堆到一百多个词,后半段全没生效,排查半天才反应过来是token被截了。理解这套机制,写提示词就从"堆词"变成"抢token预算"。

U-Net凭什么能去噪

U-Net是扩散模型里实际干去噪活的网络,结构像字母U,先下采样提取全局语义、再上采样恢复细节,中间用跳跃连接把细节信息接回去,所以能既顾大局又抠细节。

为啥去噪非得用这种结构?因为去噪两头难。一方面得懂"全局要画啥"——人物还是风景,这要压缩到低分辨率看整体。另一方面得抠"局部细节"——眼睛糊没糊、手指对不对,这要高分辨率。U-Net的U形正好两头都占:下采样把图压小、提取全局语义;上采样放大、恢复细节;中间用skip connection把下采样保留的细节直接接到上采样对应层,信息不丢。

所以U-Net在Stable Diffusion里占参数大头。根据 Stable Diffusion原论文(High-Resolution Image Synthesis with Latent Diffusion Models),SD 1.5的U-Net约8.7亿参数,整个模型8.9亿,U-Net吃掉97%以上。这就是为啥换底模首先换U-Net权重,它决定画风基本盘。

采样器选不对去噪效果也差,这篇AI绘画采样器怎么选我写过实测对比。

VAE为什么要先压再解

VAE(变分自编码器)负责在像素空间和潜空间之间搬运,编码时把1024×1024的图压成128×128的潜表示、解码时再放大回去,扩散去噪在潜空间跑而不是像素空间,算力省了一个数量级。

这一步是Stable Diffusion相比早期扩散模型最大的工程突破。直接在像素空间做扩散,一张512×512×3的图就是78万个数,每步去噪都要处理这么大的张量,普通显卡扛不住。VAE先把图压到64×64×4的潜空间(缩了48倍),扩散模型在这个小空间里跑几十步去噪,最后VAE再解码回像素。算力省了,质量还没掉太多。

不过VAE有损压缩,偶尔出图会有点"VAE味"——轻微模糊或色彩偏移。我遇过人脸皮肤有种说不出的塑料感,换了微调VAE(vae-ft-mse-840000)立刻通透了。这种细节不实际跑几十张图体会不到。

训练数据是怎么塑造模型的

扩散模型的本事全来自训练时见过的图文对,见过的图越多越杂、配的描述越准,模型能画的东西就越广越准,数据规模和质量直接决定上限。

这点很多人忽略,光盯着架构看。其实架构大同小异,真正差距在数据。根据 LAION官方说明,Stable Diffusion训练用的LAION-5B包含约58亿对图文,SD 1.5在2.3亿对子集上训了15万步。这意味着模型对"训练集里没怎么见过的东西"就画不好——比如小众非遗工艺、罕见动植物,出图经常翻车,不是模型笨,是它没见过。

我画少数民族服饰时就发现,常见款式还行,一画到细节复杂的银饰就糊成一片,因为训练数据里这类高清样本太少。这也解释了为啥LoRA这么火——用几十张特定主题的图微调一个小模型,专门补主模型在垂直领域的数据缺口,本质是给模型"补课"。

想搞懂模型为啥需要训练、训练机制怎么回事,这篇AI绘画为什么需要训练讲得透。

SD、DALL-E、Midjourney原理差在哪

三家底层都是扩散模型,但文本编码器、是否在潜空间、训练数据策略和后处理管线不同——SD开源在潜空间用CLIP、DALL-E 3用GPT重写提示词再喂扩散、Midjourney闭源但深耕审美微调。

展开说。Stable Diffusion是开源的,潜空间扩散+CLIP ViT-L/14,权重公开,所以生态最旺,LoRA、ControlNet这些扩展全围绕它长。DALL-E 3(OpenAI)聪明在前面加了道工序——先用GPT-4把你的提示词扩写成详细、结构化的描述,再喂给扩散模型。你随手写"猫",GPT给你扩成"一只橘色短毛猫坐在窗台上,午后阳光斜射,毛发边缘有金色轮廓光"——所以DALL-E 3对短提示词特别友好,新手不用学权重语法也能出好图。

Midjourney最神秘,闭源,从不公开架构。从出图风格反推,它在美学微调上下了狠功夫,训练数据里高质量艺术品占比明显高于SD,V6之后明显往摄影写实方向也调了。我个人偏好这么排——艺术创作和氛围感选Midjourney,要可控、要本地部署、做LoRA微调选SD,图省事、要稳妥商用稿选DALL-E 3。各有各的活儿,别迷信哪一个。

不同模型的提示词写法也不通用,这篇AI场景提示词标签主要面向SD系,DALL-E和MJ得另调。

常见问题

AI绘画的生成原理是不是只有扩散模型这一种?

不是。扩散模型是当下主流,但还有GAN(生成对抗网络,早年StyleGAN就是)和自回归模型(像DALL-E 1逐像素生成)。扩散模型能统治现在,是因为生成质量稳、训练相对稳、可控性好,但速度慢是硬伤,所以才冒出LCM、SDXL Turbo这些少步数蒸馏方案。

为什么我出的图手指总是画错?

根子在训练数据。手部在训练图里要么被遮挡、要么角度杂、要么分辨率低,模型见过的"标准手"样本不够,去噪时靠猜,猜错就多一根少一根。这是扩散模型通病,跟提示词关系不大。靠负面提示词能缓解,根治得靠ControlNet把手部姿态锁住。

采样步数设多少合适?

我的经验值:SD1.5配Euler a,20-30步是甜区,出图约15秒;少于15步细节糊,多于40步边际收益递减还费时间。用了LCM或Turbo这类蒸馏模型,4-8步就够,几秒一张。别迷信"步数越多越好",那纯粹烧显卡。

觉得有用的话分享给朋友吧。