ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Stable Diffusion Inpainting图像修复实战:原理、参数与避坑

Stable Diffusion Inpainting图像修复实战:原理、参数与避坑

图像修复这件事,说穿了就是把画面里不想要的东西拿掉、把缺失的部分补上,同时让周围像素浑然不觉。过去做这活儿靠仿制图章和内容识别填充,纹理一复杂就露馅,尤其是手部、发丝、直线结构和文字边缘,基本是修图师最头疼的几块硬骨头。Stable Diffusion 图像修复功能里的智能 Inpainting 技术,正好卡在这个痛点上——它不靠复制粘贴,而是让模型根据周围的画面上下文重新画一块,再把这块画好的内容无缝嵌回原图。我这两年接的活儿里,从电商产品图去杂物、老照片去划痕、人像祛斑,到插画补手补背景、海报改文案区域,八成以上的局部修改都是靠它收尾的。这篇内容我会把 Inpainting 的底层逻辑、模型和工具怎么选、参数怎么配、实操怎么走、出了问题怎么查,按我自己的使用顺序全部摊开讲。无论你是刚接触生成式修图的新手,还是已经能跑通基础流程、但总在接缝和画风不一致上翻车的朋友,下面的内容都能直接拿去对照复现。

1. 先把问题想清楚:Inpainting 到底解决了什么

1.1 传统修图流程的瓶颈在哪儿

仿制图章的本质是“搬家”,把 A 处的纹理复制到 B 处。这招对付纯色背景、草地、砖墙这类重复性纹理非常高效,可一旦遇到有明确结构语义的区域就废了——比如画面里一只手挡住了产品,你想把手指去掉,仿制图章只能把周围的皮肤纹理硬贴过去,结果就是一片模糊的色块,指缝的形状、明暗过渡、关节起伏全没了。内容识别填充稍微聪明一点,会根据边缘做纹理延展,但它不懂“这里应该是一只手”或者“这里应该是一条直线”,遇到大块缺失往往糊成一团,遇到规则几何结构还会产生明显的拉伸和错位。

频率分离那套流程只能处理皮肤质感层面的问题,痘印、毛孔、色斑可以靠高低频拆开分别处理,但它解决不了“画面里多了个东西”这种结构性修改。液化、变形、裁剪这些手段更是只能调整已有像素,补不出不存在的内容。这就是为什么传统修图在“大区域结构性重建”上一直很吃力:工具本身没有语义理解能力,它不知道被遮挡的部分长什么样,只能靠人的经验和美术功底去硬画。

Inpainting 的思路完全不同。它把待修复区域当成一道“完形填空”题:给定周围的上下文,让扩散模型预测这块区域大概率应该是什么内容。模型在训练阶段见过海量图像,知道皮肤在光照下怎么过渡、手指之间是什么关系、背景的透视该怎么延续。所以它不是搬运纹理,而是重新生成一块语义合理、风格匹配、边缘连续的内容。这个区别听起来抽象,落到实际效果上就是:修手能补出关节结构,去杂物能补出完整的背景,改文字区域能补出干净的底色,而且不用你一笔一笔去画。

1.2 Inpainting 与图生图、局部重绘的关系

很多人刚上手会 confusion:图生图(img2img)不也是改图吗,为什么还要单独搞一个 Inpainting?关键差别在“改动范围是否可控”。图生图是对整张图重新加噪再一步步去噪,重绘幅度设到 0.3 以下基本只是轻微磨皮和色彩偏移,设到 0.6 以上整张图的构图、细节、光影都会变,你没法指定“只改左下角那一块”。哪怕你把重绘幅度压得很低,全图依然会被重新编码解码一遍,高频细节会有损失,人脸、文字这种精细区域容易出现“糊了一层”的感觉。

Inpainting 在机制上做了隔离:它只对蒙版覆盖的区域加噪去噪,非蒙版区域在潜空间层面用原图的编码结果直接覆盖回去。你可以理解成一张画,你拿张纸盖住不想改的部分,只把露出来的那一小块重新画,画完之后把纸撤掉,原来的部分一像素没动。这个机制带来的直接好处是:修改范围精确到蒙版边界,未选区零损失;同时因为模型只需要专注一小块区域,它可以把算力全砸在这块的细节上,修复质量往往比全图重绘再裁剪更高。

还有一个常被忽略的点:Inpainting 的“局部”不等于“小”。蒙版可以占画面三分之一甚至一半,只要你的显存和模型分辨率撑得住,大面积重建也是它擅长的场景,比如去掉前景的大件杂物、给人物换背景、给产品图补全被裁掉的边缘。真正决定成败的不是区域大小,而是蒙版边缘是否干净、重绘幅度是否匹配、模型是否选对——这几个问题后面会逐个拆开讲。

2. 核心原理拆解:蒙版、潜空间与去噪强度

2.1 蒙版不是选区那么简单

大多数人理解的蒙版就是“我圈出来的那块”,但在 Inpainting 里,蒙版是一个参与模型计算的输入通道,它的质量直接决定修复结果的质量。蒙版本身是一张黑白图,白色代表需要重绘,黑色代表保留。听起来很简单,但魔鬼藏在三个细节里:边缘硬度、外扩范围、与图像的分辨率对齐。

边缘硬度指的是蒙版从白到黑的过渡是突变还是渐变。如果你用硬边蒙版,模型在预测时会把边界当成一道“墙”,重绘区域和保留区域之间的像素关系会突然断裂,结果就是一条清晰可见的接缝。实际做法是给蒙版做羽化,让边缘有几像素的过渡带,模型在这条过渡带上会混合原图信息和生成内容,接缝就被“抹”掉了。我一般把羽化值设在 4 到 16 像素之间,具体看图像分辨率和修复区域的尺度:512 级别的图用 4 到 8,1024 级别用 8 到 16。

外扩范围是另一个容易踩的坑。你圈掉的区域往往只是“明显有问题”的部分,但问题边缘通常还有一圈残留——比如去一个人,你圈的是人体轮廓,但衣服边缘、投影、地面上的接触痕迹还在圈外,模型补完人体后,这圈残留就会变成鬼影。解决办法是把蒙版向外膨胀 8 到 32 像素,让模型把边缘的脏东西一起重画掉。膨胀太多也不行,会把不该改的背景吃掉,所以这个值要结合画面尺度调,宁可分两次修,也别一次贪大。

2.2 潜空间去噪:为什么重绘幅度决定一切

Stable Diffusion 不是直接在像素上画图的,它先把图像压缩到潜空间,分辨率大约缩小到原来的八分之一,然后在这个低维空间里做扩散和去噪,最后再由解码器还原成像素图。Inpainting 的过程也一样:原图编码成潜变量,蒙版区域被加噪,模型一步步预测噪声并减掉,直到恢复出干净的内容,最后把非蒙版区域的原始潜变量拼回去,统一解码。

这里有个关键差异:专用的 Inpainting 模型在输入端比通用模型多了几个通道,除了常规的图像潜变量,还额外接收蒙版本身和被蒙版处理过的图像信息。多出来的这几个通道让模型能“看到”哪些地方是残缺的、周围原本是什么样,所以它在边缘融合和上下文一致性上天生比通用模型强。通用模型做修复靠的是潜空间拼接这个“外挂”,模型本身并不知道自己在做修复,重绘幅度一高就容易和周围环境脱节,出现色调、光照、透视对不上的情况。

重绘幅度(denoising strength)是这套流程里最需要理解的参数。它的数值在 0 到 1 之间,代表加噪的程度,也间接代表模型有多大的自由度去改内容。数值越低,加噪越少,生成结果越贴近原图,基本只做纹理层面的微调;数值越高,加噪越多,原始信息被破坏得越彻底,模型越倾向于完全重画。这个参数没有万能值,必须结合修复目标来定,下面这张表是我在实际操作中总结的经验区间:

重绘幅度实际效果适用场景
0.2 - 0.35极轻微改动,纹理微调去小瑕疵、磨皮、去细划痕
0.35 - 0.5轻度重绘,保留原结构去痘印、去小物件、补小缺口
0.5 - 0.7中度重绘,结构可调换衣服颜色、改局部元素、补中等缺失
0.7 - 0.85重度重绘,内容大幅改变去大件杂物、换背景、补大块缺失
0.85 - 1.0完全重画,几乎忽略原图蒙版区域彻底重建、抽象补全

有一点要说明:不同模型、不同采样器对这个区间的敏感度不一样。有些修复专用模型在 0.6 就能做出很大的改动,通用模型可能要到 0.8 才有同样效果。所以表里的数值是起点,不是标准答案,实际用的时候先在一个小区域上试跑两三档,对比结果再定,比盲目套参数靠谱得多。

2.3 蒙版模式与重绘区域的对应关系

跑 Inpainting 的时候你会遇到两个蒙版模式选项:重绘蒙版内容、重绘非蒙版内容。前者是常规用法,你圈哪里就改哪里;后者是把蒙版当成“保护区”,蒙版内的像素保留,蒙版外全部重画。这个反向模式在换背景时特别好用——你把人像圈出来保护住,剩下的区域全部交给模型重画,比手动去圈背景省事得多,也不容易漏掉边角。

还有一个常被误解的选项是“只重绘蒙版区域”和“整图重绘但只贴回蒙版区域”的区别。前者会把计算范围压缩到蒙版的外接矩形内,速度快、显存占用低,但模型能看到的上文有限,修复大区域时容易缺少全局参考;后者会把整张图都跑一遍,只在最后贴回蒙版部分,上下文完整、融合更好,代价是速度慢、显存吃紧。我一般小区域用前者,大区域或者对融合要求高的场景用后者,尤其是人物边缘、发丝、半透明材质这类需要大量周围信息参考的地方,整图模式的优势很明显。

3. 模型与工具选型:用什么跑、跑哪个模型

3.1 专用修复模型和通用模型的真实差距

模型这块,最直观的分类就是“修复专用”和“通用”。修复专用模型在训练阶段就见过大量“带蒙版的残缺图 + 完整原图”的配对数据,它学的是“给定残缺和蒙版,补出完整内容”这件事,所以对蒙版边缘的处理、对缺失区域语义的推断都更自然。你在上面跑修复,重绘幅度中等偏上也不容易出现边缘断层,提示词的影响也更直接——你写“一只握着杯子的手”,它补出来的手大概率是握着杯子的姿态,而不是一只悬空的手。

通用模型不是不能做修复,它的优势在于选择多、风格多、生态里的微调模型多。如果你要修的是特定画风的内容,比如某种插画风格、某种胶片质感,通用模型里能挑到更贴合的底模,修复专用模型未必有这个风格。但用它做修复,重绘幅度就得压着来,一般不超过 0.6,再高就容易和周围环境脱节;蒙版的羽化和外扩也要更讲究,因为模型本身没有“边缘融合”的训练先验,全靠潜空间拼接兜底。

实际选型的思路可以这样:如果修复目标是写实类、结构类、需要高保真的场景,优先修复专用模型;如果目标是风格化内容、需要保持特定画风,优先风格匹配的通用模型,把重绘幅度和蒙版精度当成主要控制手段。还有一类是分层修复模型,专门处理“前景和背景分开生成再合成”的流程,适合抠图换背景这种活儿,但它对操作流程的要求更高,新手可以先从单模型修复跑通再考虑。

3.2 表单式界面和节点式工作流的取舍

工具层面,主流就两类:表单式界面和节点式工作流。表单式界面的好处是上手快,蒙版绘制、参数填写、生成预览都在一个页面里,改一个参数点一下生成就能看结果,适合单张精修、参数调试、快速试错。它的短板是流程固定,你想加一个预处理步骤、想串联多个模型、想批量跑不同参数组合,就得靠插件或者手动重复操作。

节点式工作流刚好相反,它把每一步拆成独立节点,加载图像、生成蒙版、编码、采样、解码、保存,全部可视化连接。好处是流程完全可控,你可以把“自动分割生成蒙版”“蒙版膨胀”“分区采样”“后处理融合”串成一条流水线,跑一次出多组结果,批量处理时优势极大。代价是学习曲线陡,节点连错一个地方就报错,排查起来比表单式麻烦。

我的建议是:先把表单式界面用熟,把蒙版、重绘幅度、采样器这些基础参数的手感建立起来,知道每个参数动一下画面会怎么变;等你要做重复性任务、要批量、要把修复嵌进更大的流程里,再切到节点式。两张表对照一下更清楚:

对比维度表单式界面节点式工作流
上手成本低,半小时能跑通中高,需要理解数据流
单张精修效率高,改参数即时预览中,改参数要重跑节点
流程可控性受限于内置功能极高,可自由组合
批量处理依赖脚本或插件原生支持,适合流水线
问题排查直观,报错信息简单需要逐节点检查

3.3 显存和分辨率的账要提前算

修复大图之前,先算清楚显存这笔账,不然跑到一半爆显存,前面调的参数全白费。潜空间的分辨率是像素分辨率除以八,一张 1024×1024 的图编码后是 128×128 的潜变量。模型在训练时是固定分辨率的,早期版本多在 512 级别训练,后来的版本到了 1024 级别。你喂给它的图如果远大于训练分辨率,模型没见过这个尺度,结构容易崩,表现就是修复区域出现重复纹理、比例失调、细节糊成一团。

显存占用的大头在注意力计算,粗略估算和潜变量分辨率的平方成正比。512 级别的修复,8GB 显存基本够用;1024 级别,建议 12GB 以上;如果你要跑整图模式再叠加高分辨率修复,16GB 起步比较稳。显存不够的时候有几个折中方案:把修复区域裁出来单独跑再贴回去、用分块采样、降低批处理数量、开启显存优化选项。这些手段都会牺牲一点速度或融合质量,但比直接爆显存强。

分辨率这块还有一个实用原则:修复区域的实际像素尺寸尽量贴近模型的训练分辨率。比如你在一张 2048 的大图上修一块 300×300 的区域,与其把整张图喂进去,不如把这块区域连同周围一圈上下文裁出来,缩放到 512 或 1024 再修,修完缩放贴回。这样模型工作在它熟悉的尺度上,细节质量更稳定,显存压力也小。裁切的时候记得多留 64 到 128 像素的上下文边距,给模型足够的参考信息。

4. 完整实操流程:从一张瑕疵图到干净成片

4.1 蒙版制作与预处理的关键细节

蒙版制作是整条流程的地基,这一步做糙了,后面参数调得再细也救不回来。手工绘制适合形状不规则、需要精确控制的区域,比如沿着人物轮廓去背景、沿着产品边缘去杂物。绘制的时候宁可多圈一点,也别贴着目标边缘画,圈完做膨胀,把边缘的残留一起吃掉。自动分割适合人体、头发、服装、常见物体这类有明确语义的目标,分割模型给出的蒙版边缘通常比较贴合,但发丝、半透明材质、细长结构还是会有毛边,需要手工补几笔。

蒙版做完之后有两步预处理不能省。第一步是检查蒙版和原图的分辨率是否严格一致,尺寸差一个像素都会导致贴回时错位。第二步是做羽化和膨胀的顺序问题:先膨胀再羽化,膨胀负责把边缘的残留纳入重绘范围,羽化负责让边界过渡自然;顺序反了的话,羽化会把膨胀出来的边缘又模糊掉,等于白做。我一般膨胀 8 到 16 像素、羽化 4 到 8 像素作为默认组合,遇到发丝、烟雾、玻璃这类软边缘目标,羽化加到 12 以上,硬边缘目标比如建筑、产品,羽化压到 4 以内。

4.2 参数配置清单与选择理由

参数不是越多越好,关键是理解每个参数在管什么。下面这张表是我修图时的默认配置,后面会解释为什么这么选:

参数默认值调整逻辑
采样器DPM++ 2M Karras收敛稳、细节好,适合大多数修复
采样步数25 - 30低于 20 细节不足,高于 35 收益递减
CFG 引导系数5 - 7太低不听话,太高色彩过饱和、边缘发硬
重绘幅度0.45 - 0.65按修复目标调,见上一节区间表
蒙版羽化4 - 8软边缘目标加到 12 以上
蒙版膨胀8 - 16去杂物时加大,换背景时减小
重绘区域仅蒙版 / 整图小区域用仅蒙版,大区域用整图
随机种子固定方便对比参数,定稿前再放开

采样器的选择上,Euler a 出图更有随机感、适合创意类修复,但同一张图多次生成差异较大,不利于精修对比;DPM++ 2M Karras 更稳定,同样的种子和参数重复跑结果基本一致,适合需要反复微调的场景。步数给到 25 到 30 是比较划算的区间,再往上加细节提升很有限,时间倒是实打实地涨。CFG 这个参数容易被滥用,很多人觉得“数值越高越听话”,实际上超过 8 之后画面容易发灰、发硬、出现色块,修复区域和周围环境的融合反而变差。

随机种子建议在调试阶段固定住。同一个种子、同一组参数,你只改重绘幅度,就能直观看出幅度对结果的影响;如果种子随机,每次结果都不一样,你根本分不清是参数起了作用还是运气。等参数定型、准备出终稿的时候再放开种子,多跑几张挑最好的一张。

4.3 提示词在局部修复里的写法

局部修复的提示词逻辑和整图生成不太一样。整图生成你要描述整个画面,局部修复你真正需要描述的是蒙版里应该出现什么,但同时要兼顾整体风格的一致性,不然修出来的那块和周围格格不入。

我的写法是“主体描述 + 风格锚点 + 质量词”三段式。主体描述只写蒙版内的内容,比如“一只自然下垂的右手,手指微微弯曲”“干净的浅灰色背景,柔和渐变”“木质桌面纹理,细密木纹”。风格锚点用来锁定画风,写几个和原图一致的词,比如“写实摄影,自然光,浅景深”,或者“扁平插画,低饱和,柔和线条”。质量词不是越多越好,三四个够用,堆一长串反而会让模型分心。

负面提示词在修复里主要防两类问题:一类是结构崩坏,比如“多指、畸形、扭曲、模糊、重影”;另一类是风格污染,比如你修写实照片,就加上“卡通、插画、绘画、3D 渲染”。还有一个小技巧:如果修复区域总是冒出原图里没有的元素,可以在负面词里点名排除,比如补背景时加“人物、文字、logo”,去杂物时加“杂物、阴影、反光”。这招不是百分百有效,但能明显降低翻车率。

4.4 三个真实场景的完整操作记录

第一个场景是电商产品图去杂物。原图是一瓶护肤品放在台面上,旁边有一片撕掉的标签纸和几根散落的棉签。操作顺序:先圈出标签纸和棉签,膨胀 12 像素把投影和边缘反光吃进去,羽化 6 像素;重绘幅度设 0.55,先跑一张看背景的台面纹理能不能接上;第一张出来纹理方向有点偏,把重绘幅度降到 0.48、提示词加上“光滑浅色台面,柔和反光”,第二张就接得很自然了。这类场景的关键是背景纹理的方向和光照一致性,重绘幅度太高会把台面的反光画乱,太低又去不干净阴影。

第二个场景是人像补手。原图人物右手被裁掉一半,只剩手腕和一小截手掌。蒙版圈住缺失区域并往手臂方向多扩 16 像素,羽化 8 像素;重绘幅度 0.7,提示词写“自然放松的右手,手指微微弯曲,肤色与手臂一致,柔和自然光”;负面词加“多指、畸形、僵硬”。第一张手指出多了,第二张把重绘幅度降到 0.62、CFG 从 7 降到 6,手指数量正常了,但和袖口的衔接有点生硬;第三张把蒙版往袖口方向再扩 8 像素,让模型把袖口边缘也重画一部分,衔接就顺了。补手这类活儿,蒙版一定要覆盖到相邻的结构边界,只圈缺失部分是补不出自然衔接的。

第三个场景是给静物图换背景。原图是一个陶瓷杯放在杂乱的桌面上,要去掉桌面换成纯色背景。这里用反向蒙版更省事:把杯子圈出来作为保护区域,蒙版模式选“重绘非蒙版内容”,膨胀 4 像素、羽化 6 像素;重绘幅度 0.8,提示词写“纯浅米色背景,柔和棚拍光,杯子底部有自然接触阴影”;重绘区域选整图模式,让模型能看到完整的杯子形态。跑了两张,第一张杯子底部的阴影丢了,第二张在提示词里补上“接触阴影”就有了。换背景最容易被忽略的就是接触阴影,没有阴影物体就像飘在空中,加上这一句能救回大半真实感。

4.5 后期处理:接缝、色彩与细节回补

生成结果贴回原图之后,别急着导出,放大到 200% 沿着蒙版边界走一圈。常见的残留问题有三类:接缝线、色差、细节断层。接缝线通常是蒙版羽化不够或者重绘幅度跳变导致的,轻度的话用修复画笔在接缝处轻扫几下就能压掉;明显的话把蒙版边缘再羽化几个像素重跑一次。色差表现为修复区域和周围环境的色调、明度、饱和度对不上,原因可能是模型风格偏移,也可能是解码时的色彩空间差异,前者换更贴合的模型或降低重绘幅度,后者在后期做一次局部色彩匹配。

细节断层指的是修复区域的高频细节密度和周围不一致,比如周围是清晰的皮肤纹理,修复区域却是磨皮后的光滑感,或者反过来。这种问题在缩放贴回时最容易出现,解决办法是修完之后对修复区域做一次轻微的锐化或降噪,让它和周围的质感对齐。我习惯在贴回之后叠加一层很弱的噪点,透明度控制在 3% 到 5%,这一步能把“生成感”压下去不少,尤其是写实类图像。

5. 常见问题排查与避坑实录

5.1 接缝明显、边缘出现色差

接缝是 Inpainting 最高频的问题,成因至少有四种,排查的时候按顺序过一遍能省很多时间。第一种是蒙版硬边,模型在边界处没有过渡参考,生成内容和原图像素直接撞在一起,表现是一条锐利的线。第二种是重绘幅度过高,生成内容和原图的纹理逻辑完全脱节,边界处出现纹理方向的突变。第三种是分辨率不匹配,原图和蒙版尺寸差了一两个像素,贴回时错位。第四种是色彩偏移,模型解码出来的颜色和原图有系统性偏差,整块修复区域都比周围亮一点或黄一点。

对应的解法:硬边就加羽化,4 到 8 像素起步;幅度过高就降到 0.5 以下试一版;分辨率问题就统一尺寸再跑;色彩偏移就在后期做局部匹配,或者在提示词里加上和原图一致的光照描述。还有一个进阶技巧:在蒙版边缘外侧再画一圈很窄的过渡蒙版,让模型在这圈过渡带上做半强度重绘,边界融合会更自然,代价是要多调一次蒙版。

5.2 修复区域画风不一致、像贴上去的

画风不一致的典型表现是修复区域的笔触、质感、光照逻辑和周围明显不同,一眼就能看出是后贴的。原因通常有三个:底模和原图的风格不匹配、提示词里混入了冲突的风格词、CFG 过高导致生成区域过度锐化。

底模的问题最根本,修写实照片就用写实底模,修插画就用插画底模,不要指望一个模型通吃。提示词冲突很隐蔽,比如你修一张低饱和的胶片风照片,提示词里写了“清晰、高对比、鲜艳”,生成出来的那块自然和周围不搭。CFG 的问题前面提过,超过 8 之后画面会发硬,修复区域和周围的柔和过渡就断了。我的经验是把 CFG 压在 5 到 6.5 之间,提示词只写必要的风格锚点,宁可少写也别乱写。

5.3 大区域修复崩坏、结构混乱

蒙版一大,模型需要凭空补全的信息就多,结构崩坏的概率直线上升。表现包括透视错乱、物体比例失调、重复纹理、语义不清。这种情况下硬调参数收效有限,得换策略。

第一个策略是分块修复:把大区域拆成几块小的,一块一块修,每块都保留足够的上下文,修完再拼接。第二个策略是先低分辨率定结构、再高分辨率补细节:先在 512 级别跑一版,把大结构定下来,把结果作为底图,再在 1024 级别用小蒙版修细节。第三个策略是给约束:用结构控制类的辅助网络提供边缘、深度、姿态的参考,让模型在大区域里也有明确的结构指引,不至于自由发挥。这三个策略可以叠加用,大区域修复的本质是“降低模型的不确定性”,你给的信息越多,它崩得越少。

5.4 文字和直线结构修不好

文字修复是公认的难点,因为文字有严格的字形结构,模型生成的字往往是“看起来像字但经不起看”的伪文字。实用的做法不是让模型直接生成文字,而是让模型把文字区域补成干净的底色或背景,再用排版工具把真文字叠上去。这样字形可控、字体可调、后期还能改,比跟模型死磕强得多。

直线结构比如建筑边缘、产品轮廓、画面里的规则线条,修复时容易弯曲或断裂。解决办法是用边缘检测类的辅助约束,把原图的线条提取出来作为生成参考,模型就会沿着这些线走。如果没有辅助网络,就把蒙版切成沿线条方向的长条,分段修,每段只改很短一截,线条的连续性会好很多。这个技巧在处理栏杆、窗框、桌沿这类结构时特别管用。

5.5 问题速查表

现象最可能的原因优先尝试的解法
边界有锐利接缝蒙版硬边、羽化不足羽化加到 8 以上,重跑
修复区域偏亮/偏黄解码色彩偏移后期局部色彩匹配
画风和周围不搭底模不匹配、提示词冲突换同风格底模,精简提示词
大区域结构崩坏上下文不足、自由度太高分块修、先低分辨率定结构
文字变成伪文字模型不擅长字形补底色后手动排版
直线弯曲断裂缺少结构约束边缘约束、长条分段修
修复后出现鬼影蒙版没盖住边缘残留蒙版膨胀 16 到 32 像素
手部多指畸形手部结构复杂、幅度过高降幅度、加负面词、缩小蒙版

6. 进阶玩法:让修复更可控

6.1 用结构约束把修复按住

辅助约束网络的价值在于“给模型一个不能跑偏的框架”。边缘约束适合保留建筑轮廓、产品外形、文字区域的边界;深度约束适合保持空间透视,尤其是在换背景、补大件物体的时候,深度图能让模型知道哪里近哪里远;姿态约束适合人物修复,补手臂、补腿的时候,骨架能给模型明确的比例参考。

用法上不用搞太复杂,把原图喂给约束网络,生成一张参考图,再把这个参考接到修复流程里,强度调在 0.5 到 0.8 之间。强度太低约束不住,太高会限制模型的发挥,修复区域容易出现僵硬的复制感。约束网络最适合的场景是“结构必须准、内容可以变”,比如产品图修复要保持外形轮廓,人像修复要保持姿态比例,这两类场景用上约束之后,返工率能降一大截。

6.2 画面外扩:把构图补完整

外扩(outpainting)本质上是把蒙版画到画面外面去,让模型补出画框之外的 content。操作上把画布扩大,新增区域涂成蒙版,原图部分保留,然后走标准修复流程。这里有几个参数要调:新增区域的填充方式影响最大,用噪声填充模型自由度最高、容易跑飞,用边缘延展填充更稳、和原图的衔接更好,用纯色填充适合背景干净的场景。

外扩的宽高比也要控制,一次扩太多模型容易失去整体感,我一般单次外扩不超过原图边长的 30%,需要更大就分两三次扩。提示词要描述扩展出去的部分是什么,比如“画面向右侧延展,延续的木质桌面和柔和阴影”,不写的话模型可能补出完全不相干的内容。外扩特别适合做海报的留白延展、产品图的场景扩展、人像的构图补全,用好了能省掉重新拍摄或重新绘制的成本。

6.3 批量处理与流程固化

当你同一类修复要做几十上百张的时候,单张手调就不现实了,得把流程固化下来。思路是把“蒙版生成、参数配置、批量跑图、结果筛选”拆成独立环节,每个环节用脚本或工作流串起来。蒙版如果是规则形状,可以用脚本批量生成;如果是语义目标,就用自动分割批量出蒙版,再人工抽检几张修正。

参数固化成配置文件是个好习惯,把模型、采样器、步数、CFG、重绘幅度、蒙版处理参数写成一个模板,批量跑的时候直接调用。下面是一个参数模板的示例结构,实际用的时候按你的工具格式调整:

{ "model": "inpainting-model-v1", "sampler": "DPM++ 2M Karras", "steps": 28, "cfg_scale": 6, "denoising_strength": 0.55, "mask_blur": 6, "mask_dilate": 12, "inpaint_area": "only_masked", "seed": -1, "negative_prompt": "blurry, distorted, extra fingers, text, watermark" }

批量跑完之后一定要抽检,不能全信自动结果。抽检的重点是蒙版边缘、色彩一致性、结构合理性这三项,发现问题的那几张单独拎出来手工修,别为了省事把瑕疵图直接交付。批量流程的收益在于把重复劳动压下去,把人的精力留给出问题的那百分之十,这个比例才是合理的。

6.4 修复质量的验收标准

修完之后怎么判断“可以交付”,我自己的验收清单是四步。第一步放大到 200% 看边界,沿着蒙版走一圈,有没有接缝、色差、纹理断层;第二步缩小到 50% 看整体,修复区域在整体画面里是否突兀,光影逻辑是否统一;第三步换背景看,把图放到深色和浅色背景上各看一遍,边缘的杂色和光晕会暴露得更明显;第四步隔一段时间再看,刚修完的时候眼睛会“适应”瑕疵,放一两个小时再看,问题往往一眼就能发现。

这四步里最容易忽略的是第三步和第四步。换背景看能抓出很多边缘问题,尤其是抠图换背景类的修复,浅色背景上不明显的白边,换到深色背景上立刻现形。隔时间再看则是利用新鲜感,修图修久了会产生“确认偏误”,你觉得已经修好了,其实只是看习惯了。我吃过好几次亏,交付之后被指出来边缘有残留,回头一看确实明显,就是当时看太久麻木了。

7. 我踩过的坑和几条实在建议

先说一个我早期犯的错:蒙版画得越小越省事。刚开始用的时候总想着“精准圈出问题区域”,圈得特别贴边,结果每次修完都有一圈残留,来回补蒙版补到崩溃。后来想明白了,蒙版的目的是告诉模型“这块要重画”,不是“这块有问题”,多圈一点让模型有发挥空间,边缘反而更干净。现在我的习惯是圈完之后统一膨胀十几个像素,省下来的返工时间远比多算的那点显存值钱。

第二个坑是迷信高重绘幅度。数值越高改动越大,听起来很爽,实际上超过 0.7 之后修复区域和周围环境的融合质量下降得很明显,尤其是写实类图像,光影和质感很容易脱节。我现在的做法是从低往高试:先 0.4 跑一张,看看够不够;不够就 0.5,再不够 0.6,一般到 0.65 左右就能解决八成问题。真正需要 0.8 以上的场景,往往是蒙版没画好或者模型没选对,与其硬拉参数,不如回头检查这两项。

第三个是别在一个模型上死磕。同一个修复任务,换个模型可能效果天差地别,尤其是风格化内容。我现在的习惯是手头常备两三个不同风格的底模,写实一个、插画一个、质感偏胶片的一个,遇到修不动的图就换模型试一版,经常是换个模型就通了。模型不是越新越好,是越匹配越好,这个道理在修复任务里体现得特别明显。

最后提一个容易被低估的点:保存中间结果。每调一次参数、每换一个模型,都把结果存下来,命名带上关键参数,比如“去杂物_d55_m12_seed1234”。这样做的好处是翻车的时候能快速回退,对比的时候有据可查,隔几天想复现某个效果也不用凭记忆瞎猜。修复这件事本身就是反复试错的过程,把试错过程管好,效率自然就上来了。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进