当前位置: 首页 > news >正文

Stable Diffusion入门第16-18天:从文生图到图生图——用一张图“导演”你的AI创作

如果文生图是“无中生有”,那图生图就是“借力打力”。

前两周我们已经跑通了文生图工作流,也搞懂了节点、连线和数据类型。今天我们要进入一个更有趣的领域——图生图(Image to Image,简称img2img)

简单来说,图生图就是把一张已有的图片作为起点,让AI基于它生成一张新图片。你可以用它做风格迁移、线稿上色、老照片修复、图像增强……应用场景非常广泛。

而这一切的核心,只有一个参数——denoise(降噪强度)。它决定了一张图在“忠于原图”和“自由创造”之间,到底站在哪个位置。

一、图生图 vs 文生图:差的不只是一张图

在深入搭建工作流之前,先搞清楚一个根本问题:图生图和文生图在原理上到底有什么不同?

文生图的起点是一张纯粹的随机噪声——KSampler从Empty Latent Image拿到一张空白画布(全是噪声),然后根据你的提示词,一步步去噪,最终变成一张有内容的图片。

图生图的起点则是一张已有的图片。流程是这样的:

  1. VAE Encoder把你上传的图片编码成潜空间表示(LATENT)
  2. 根据denoise参数的设定,往这个潜空间表示里加入一定量的噪声
  3. KSampler从这个“加了一半噪声”的状态开始,结合你的提示词进行去噪
  4. VAE Decoder把去噪后的潜空间数据解码回像素图像

关键区别:文生图从100%噪声开始,图生图从“部分噪声”开始。denoise决定了这个“部分”到底是多少——denoise=1.0相当于100%噪声(=文生图),denoise=0.0相当于0%噪声(=原图不变)。

二、图生图核心工作流:五个节点,一条线

图生图工作流比文生图只多了一个节点,少了一个节点——把Empty Latent Image换成Load Image+VAE Encode

完整的工作流是这样的:

Load Checkpoint → Load Image → VAE Encode → CLIP Text Encode(正/负)→ KSampler → VAE Decode → Save Image

节点逐个拆解

1. Load Checkpoint(紫色输出)

和文生图一样,加载你的基础模型。输出MODEL、CLIP、VAE三个端口。

2. Load Image(蓝色输出)

这是图生图新增的节点。点击节点上的“upload”按钮,上传你要作为起点的图片。这个节点输出的是IMAGE类型(蓝色)——也就是像素空间的图像数据。

注意Load Image输出的是像素图像(IMAGE),而KSampler需要的是潜空间图像(LATENT)。所以中间必须加一个转换节点。

3. VAE Encode(粉色输出)

这个节点把Load Image传来的像素图像(IMAGE,蓝色)编码成潜空间表示(LATENT,粉色)。它需要两个输入:

  • pixels:从Load Image的IMAGE输出接入
  • vae:从Load Checkpoint的VAE输出接入(玫瑰色)

4. CLIP Text Encode(正/负)(橙色输出)

和文生图完全一样。正向提示词描述你想要什么,负向提示词描述你不想要什么。两个节点都需要从Load Checkpoint的CLIP端口(黄色)接入。

5. KSampler(粉色输出)

这是整个工作流的心脏。图生图和文生图在KSampler上的唯一区别是——denoise参数必须小于1

KSampler需要的输入:

  • model:从Load Checkpoint的MODEL接入(紫色)
  • positive:从正向CLIP编码节点接入(橙色)
  • negative:从负向CLIP编码节点接入(橙色)
  • latent_image:从VAE Encode的输出接入(粉色)——这是图生图和文生图最关键的区别

6. VAE Decode(蓝色输出)

把KSampler输出的潜空间图像(LATENT,粉色)解码成可视的像素图像(IMAGE,蓝色)。需要:

  • samples:从KSampler的LATENT输出接入
  • vae:从Load Checkpoint的VAE输出接入(玫瑰色)

7. Save Image

保存最终结果,和文生图一样。

连线速查表(按颜色)

颜色
Load Checkpoint (MODEL)KSampler (model)紫色 → 紫色
Load Checkpoint (CLIP)CLIP Text Encode ×2 (clip)黄色 → 黄色
Load Checkpoint (VAE)VAE Encode (vae)玫瑰色 → 玫瑰色
Load Checkpoint (VAE)VAE Decode (vae)玫瑰色 → 玫瑰色
Load Image (IMAGE)VAE Encode (pixels)蓝色 → 蓝色
VAE Encode (LATENT)KSampler (latent_image)粉色 → 粉色
CLIP Text Encode (CONDITIONING)KSampler (positive/negative)橙色 → 橙色
KSampler (LATENT)VAE Decode (samples)粉色 → 粉色
VAE Decode (IMAGE)Save Image (images)蓝色 → 蓝色

注意:整个工作流中,数据类型的流转是IMAGE(蓝) → LATENT(粉) → CONDITIONING(橙)参与去噪 → LATENT(粉) → IMAGE(蓝)。颜色不匹配的地方,就是你需要加转换节点的地方。

三、Denoise:图生图的“灵魂参数”

如果说图生图有一把钥匙,那这把钥匙的名字就叫denoise

Denoise到底是什么?

denoise的取值范围是0.0到1.0。它的含义是:在潜空间中,往原始图片里加入多少噪声

  • denoise = 1.0:加入100%噪声,原始图片完全被覆盖,相当于文生图
  • denoise = 0.0:加入0%噪声,原始图片完整保留,相当于什么都没做
  • denoise = 0.5:加入50%噪声,从“一半原图、一半噪声”的状态开始去噪

Denoise不同取值的效果

denoise值效果适用场景
0.0 - 0.3几乎不变,仅做微小调整图像修复、细节增强、降噪
0.3 - 0.5细微变化,保留构图和主体风格微调、色彩调整、高清放大
0.5 - 0.7明显变化,保留大致结构风格迁移、换装、背景替换
0.7 - 0.9较大变化,仅保留粗略轮廓草图转写实、大幅度风格转换
0.9 - 1.0几乎完全重绘接近文生图,仅保留极少量原图信息

一个直观的理解方式

想象你有一幅铅笔素描(原图),现在想把它变成水彩画:

  • denoise = 0.2:AI基本照着素描描一遍,稍微润色一下线条——你几乎看不出变化
  • denoise = 0.5:AI保留了素描的构图和轮廓,但把线条渲染成了水彩的笔触——看得出是同一幅画,但风格变了
  • denoise = 0.8:AI只保留了素描的大致构图(比如人物位置、物体分布),但细节全部重新生成——看起来像“根据素描重新画了一幅水彩”
  • denoise = 1.0:AI完全无视素描,只根据你的提示词“水彩画”重新生成——素描相当于没起任何作用

Denoise和其他参数的关系

Denoise和Steps的关系denoise控制的是“从哪个步数开始去噪”。如果总步数是20步,denoise=0.5意味着从第10步开始——前10步的噪声去除过程被跳过了。所以denoise越低,实际生效的步数越少,这也是为什么低denoise时细节会少一些。

Denoise和CFG的关系denoise控制“原图的影响力”,CFG控制“提示词的影响力”。两者是独立的——高denoise + 高CFG = 完全按照提示词重画;低denoise + 高CFG = 在原图基础上用力按照提示词调整(可能导致画面撕裂)。一般建议图生图时CFG设置在7-9之间。

四、实战:从搭建到调试,一步步来

第一步:搭建工作流

从空白画布开始,依次添加7个节点(上文列出的全部),按照颜色匹配表完成连线。

第二步:上传图片

Load Image节点点击“upload”按钮,选择一张你准备好的图片。建议先从简单图片开始——比如一张清晰的照片或插画,分辨率不要太大(512×512左右最佳)。

第三步:填写提示词

在正向CLIP节点中输入你想要的效果。比如原图是一只猫的照片,你想把它变成水彩风格:

watercolor painting, a cute cat, soft colors, artistic, gentle brush strokes

负向提示词输入通用内容:

blurry, low quality, distorted, ugly, bad anatomy

第四步:设置KSampler参数

  • Seed:随机或固定(固定可以复现结果)
  • Steps:20-30步
  • CFG:7-8
  • Sampler:DPM++ 2M Karras 或 Euler a
  • Scheduler:Karras 或 Normal
  • denoise先从0.5开始

第五步:生成并观察

点击Queue Prompt(或Ctrl+Enter),等待生成完成。

第六步:反复调整denoise

这是最关键的一步。从0.1到0.9,每个值生成一张图,观察变化。

你会发现一个连续的渐变光谱:

denoise=0.1:几乎看不出变化,只是稍微锐化或柔化了一下
denoise=0.3:颜色和纹理有了细微调整,但构图完全没变
denoise=0.5:风格开始转变,但主体轮廓、物体位置依然清晰可辨
denoise=0.7:风格大变,细节被重新生成,但还能看出“原图的影子”
denoise=0.9:几乎是一张全新的图,只有构图层面还隐约有原图的痕迹

这就是图生图最迷人的地方——你可以在“忠实原图”和“自由创造”之间找到一个完美的平衡点

五、进阶玩法:图生图的三种典型场景

掌握了基础工作流之后,来看看图生图最常见的三种应用场景。

场景一:风格迁移

把一张写实照片变成动漫风格、水彩风格、油画风格……

配置建议

  • denoise:0.5-0.7
  • 提示词:详细描述目标风格,如“anime style, cel shaded, vibrant colors, studio ghibli”
  • 负向提示词:排除原风格,如“realistic, photographic, 3d render”
  • CFG:8-10(较强风格引导)

场景二:高清放大

把一张低分辨率图片放大并增加细节。

配置建议

  • VAE Encode之前加一个Image Scale节点,把图片放大到目标尺寸(如2倍)
  • denoise:0.3-0.5(低denoise保留原图结构,同时增加细节)
  • 提示词:“high resolution, sharp focus, detailed, 8k, masterpiece”

场景三:草图→写实

把一张线稿或粗糙草图变成细节丰富的写实图像。

配置建议

  • denoise:0.7-0.9(高denoise,因为草图本身信息量少,需要AI大量“脑补”)
  • 提示词:详细描述你想要的最终效果——材质、光影、色彩、氛围
  • 这可能是最能体现图生图“创造力”的场景——AI从一条线稿中“读懂”了你想要的画面

六、常见问题与排障

Q1:生成结果和原图几乎一样,完全没有变化

原因:denoise设置得太低(接近0)。

解决:逐步提高denoise,从0.3开始试,每次增加0.1,直到看到明显变化。

Q2:生成结果完全不像原图,等于重新画了一张

原因:denoise设置得太高(接近1.0)。

解决:降低denoise到0.5-0.7区间。记住:denoise=1.0 = 文生图,原图不起任何作用。

Q3:生成的图片模糊或细节丢失

可能原因

  • 原图分辨率太低——先用图像处理软件把原图放大到512×512以上
  • Steps太少——增加到25-30步
  • denoise太低导致实际生效步数太少——适当提高denoise

Q4:颜色变得很奇怪或画面撕裂

可能原因

  • CFG太高——图生图中CFG过高容易导致画面不自然,建议降到6-8
  • 提示词和原图冲突太大——比如原图是猫,提示词却写“a dog”,AI会左右为难

Q5:VAE Encode节点报错

检查

  • Load Image的IMAGE输出(蓝色)是否接到了VAE Encode的pixels输入(蓝色)
  • Load Checkpoint的VAE输出(玫瑰色)是否接到了VAE Encode的vae输入(玫瑰色)
  • 颜色不匹配会导致连接失败

写在最后

图生图把一张静态的图片变成了创作的起点,而不是终点。你不必每次都从零开始“无中生有”——你可以拿一张草图、一张照片、一幅旧作,让AI帮你把它变成全新的样子。

而这一切的控制权,就握在denoise这个小小的参数手里。从0.1到0.9,你可以在“忠于原图”和“自由创造”之间自由滑动,找到那个最符合你创作意图的平衡点。

一张图 + 一段提示词 + 一个denoise值 = 无限可能。

接下来的路,你可以尝试:

  • 把图生图和LoRA结合,在保留原图结构的同时注入特定风格
  • 把图生图和ControlNet结合,用姿态、深度图等更精确地控制生成
  • 把图生图用在局部重绘(Inpaint)上,只修改图片的特定区域

图生图的世界,比你想象的更大。

http://www.cnnetsun.cn/news/4028659.html

相关文章:

  • AI搜索技术解析:从Gemini模型到工程落地实践
  • 基于多智能体协作的AI绘画:GPT-Image-2 Skill与Hermes框架实战
  • EdgeRemover:彻底移除 Edge 的终极指南
  • AI数字化蛋白筛选到底是否靠谱?AI-PPI/多模态/虚拟筛选一篇汇总!
  • 深入解析vLLM:PagedAttention如何革新LLM推理的显存管理与吞吐量
  • 想做测试工具却不会写代码?怎么办?
  • 文生TikZ
  • 国家工程技术研究中心申报条件有哪些
  • Python Django电商比价系统:从爬虫到智能Agent的全栈实践
  • 智能代码搜索:从向量化到混合检索,揭秘“离谱快”背后的技术架构
  • RTX Spark:在个人PC上搭建GPU加速的Spark大数据与AI开发环境
  • 三步装好Android Studio中文语言包,开发界面5分钟变中文
  • SH9持续同调拓扑正则性与无导数奇点检测:拓扑表示对应等价条件与Navier-Stokes奇异性的拓扑刻画
  • 终极指南:如何使用Holehe进行邮箱账号安全检测
  • Jinq 社区精选:用户最常问的 20 个问题与解答
  • klogg日志分析终极指南:如何快速检索10GB级日志文件(安装、搜索与实时监控全攻略)
  • ElasticSearch Paramedic源码解析:Ember.js前端架构与ElasticSearch API交互原理
  • 微信聊天记录导出其实很简单:换手机前,我把三年对话永久存进了本地
  • 新手必看:R3PLAYX界面导航与基础操作完全指南
  • Minum框架扩展指南:从零开发自定义数据库引擎的完整教程
  • 高阶C++-SFINAE
  • 开源共享记忆服务Lindy:突破AI上下文限制,构建可记忆的智能应用
  • mcrcon 跨平台编译实战:看懂一条裸命令,三端构建零报错
  • Java校园智能车辆管理系统设计与实现
  • 材料告急时,FGO玩家需要的不是一个攻略站
  • 一张内部图来解读UMI AIGC SAAS,优秘智能到底想做什么?
  • 10个Shapiq入门示例:从表格数据到图像识别的可解释性分析
  • HTTPS协议原理、优化与安全实践指南
  • 探索Kaizoku核心功能:为什么它是自托管漫画爱好者的必备工具
  • ROM修改进阶教程------如何打开系统的一些常用开关等指令 备份收藏 【一】