S 市新开了一家“AI 快照影楼”,快门一按三秒出片,可照片上的脸经常翻车:新娘的脸像被墨渍晕开,新郎的眼睛一高一低,全家福里甚至有人五官错位。影楼老板只好请来老街的修图师傅“阿德”。阿德不重拍整张照片,而是先眯起眼睛找出坏掉的脸,再架上放大镜对准五官,用细毛笔一点一点补色,最后用晕染把修补处和周围融为一体——几分钟后,一张张清晰端正的肖像就交回到老板手上。这套手艺,正是 ADetailer 在 Stable Diffusion 里做的事:检测脸部、裁剪局部、重绘细节、融合回填。本文就用阿德的修图故事,带你装好、调好、用好这个插件。
掌握 ADetailer,是 AI 绘画从“能出图”到“出好图”的关键一跃。它能自动修复脸部崩坏,让肖像、模特图、头像批量产出稳定达标,是 AIGC 创作者和 AI 绘画工程师的必备技能。
目录
可视化演示
通过检测修复流程、参数调优效果、多模型串联三个模式,展示ADetailer如何自动检测面部并进行Inpainting二次修复。
本节配有交互动效(进入视口后自动加载,约 3KB)。
检测修复四阶段流程 SD生成图像后YOLO检测面部区域生成蒙版再进行Inpainting修复 检测到面部后自动裁切放大修复再缩回原图保持整体风格一致 SD Gen → YOLO Detect → Mask → Inpainting ADetailer自动化检测修复流程解决SD脸部崩坏问题
问题背景:为什么 AI 影楼老把脸拍坏
影楼老板翻开相册,整卷照片八十张里有四十张脸是花的。阿德接过照片端详半天,很快说出了原因:这些“翻车脸”不是设备坏了,而是底片太小、脸太小。拍全身照时,模特的五官只占底片上绿豆大的一小块,摄影系统把注意力都花在构图和身体上了,轮到刻画眼睛、鼻子时,已经没有足够的“底片像素”了。
在 Stable Diffusion 的世界里,这种“脸崩坏了”通常表现为三种形态:脸部崩坏,整片肤色像被墨水晕开的调色板;五官扭曲,眼睛一高一低、鼻子歪斜;细节模糊,眉毛、嘴角糊成一团分不出轮廓。根本原因在于,人脸区域占整张图的比例太小,而扩散模型的分辨率(常见 512×512)和采样步数有限,注意力机制对细小区域关注不足。
阿德拍了拍老板的肩膀:“照片小,就得把脸放大来修。”——这正是 ADetailer 的出发点:不整张重拍,只对准脸,把有限的重绘能力全部花在刀刃上。
- $w_f$ 人脸框宽检测器把人脸框成一个矩形,它的宽度就是 $w_f$,对应脸上从左到右的横向范围。在人脸检测任务中这个值通常从几十到一百多像素。
- $h_f$ 人脸框高矩形的高度是 $h_f$,对应脸上从上到下的纵向范围,把脸的宽度和高度乘起来就得到脸占据的像素面积。
- $W \times H$ 整图尺寸整张生成图的宽度和高度相乘,得到这张图的像素总数,比如 512×512 就是 262144 像素,这是分母,表示我们一共有多少“底片颗粒”可用。
- $s$ 面积占比用脸的像素面积除以整图的像素面积,得到人脸占比。$s$ 越小,说明分给人脸的“底片颗粒”越少,脸就越容易修坏。
工作原理:修图师傅的四步绝活
阿德终于出手了。第一手,举起强光手电扫过整卷照片,把所有可疑的脸圈出来,这叫目标检测;第二手,架上放大镜把脸放大到占满整个工作台,这叫区域裁剪;第三手,用细毛笔蘸着颜料按原照的风格补上眼睛、鼻子、嘴,这叫局部重绘;第四手,用棉签轻轻晕染修补边缘,让补色区域和周围皮肤无缝衔接,这叫融合回填。
技术上,ADetailer 依赖两类模型合作:检测模型(如 face_yolov8)负责在整张图上输出人脸的边界框和置信度;Stable Diffusion 的局部重绘(img2img)管线负责在框内重绘。完整流程是:把生成好的图片送入 ADetailer → 检测器推理出人脸框 → 根据框生成蒙版(mask)→ 管线只在蒙版区域内做一次重绘采样 → 把重绘结果贴回原图。整张图的其他像素完全不动,所以照片的光线、构图、身体都不会被破坏。
这套“先检测再修复”的思路,和修图师傅“先找脸再补脸”一模一样。它保证了绝大多数像素原封不动,只有坏掉的区域被重画,所以整体风格和光线不会突变。
- $I_{\text{orig}}$ 原图Stable Diffusion 生成后带着崩坏脸的原始图片。它的大部分内容(背景、身体、衣物)都是好的,只有脸部区域需要动刀。
- $M$ 蒙版一张与图片等大的黑白掩膜,脸部区域值为 1、其余区域值为 0。它告诉重绘管线“只有这里需要动笔”,是 ADetailer 精准修复的关键。
- $I_{\text{new}}$ 重绘结果局部重绘管线在蒙版区域内重新生成的脸部图像。由于采样带有随机性,$I_{\text{new}}$ 和原脸相比既可能变好也可能“变脸”,所以重绘幅度要克制。
- $\odot$ 逐像素组合$I_{\text{orig}} \odot (1 - M)$ 保留所有非脸区域,$I_{\text{new}} \odot M$ 保留所有脸部区域,两者相加,就得到了“只有脸被换掉”的最终输出。
安装配置:把阿德的工具台搭起来
阿德来到影楼,先要布置一间工作室:需要一面墙挂手电筒(检测模型)、一套画笔(重绘管线)、一张工作台(WebUI 界面)。好消息是,搭建这间“工作室”只需要在 Stable Diffusion WebUI 里点几下鼠标。
第一步,安装插件:打开 WebUI,进入“扩展(Extensions)”页面,选择“从网址安装”,填入官方仓库地址 https://github.com/Bing-su/adetailer,点击安装后重启 WebUI。第二步,下载检测模型:访问模型发布页或官方推荐链接,下载 face_yolov8n.pt、face_yolov8s.pt 等 .pt 文件,放到 stable-diffusion-webui/models/adetailer/ 目录下。第三步,启用插件:在 WebUI 底部找到“ADetailer“或”After Detailer”折叠面板,勾选启用,并选中刚才放进去的模型文件。
需要注意的是,插件本身不携带任何检测模型,模型必须手动下载,否则运行时就会报 "Could not find model" 之类错误。模型放错目录也不行——比如把 .pt 文件扔进 Lora 或 VAE 的文件夹,界面里照样看不到。依赖环境方面,ADetailer 需要 OpenCV 与 numpy,一般随 WebUI 的 Python 环境自动安装,无需额外处理。
工具台搭好之后,阿德挽起袖子,正式开始补脸。对新手来说,先别急着改参数,用默认配置跑一张,你会立刻看到脸部的变化。
参数调优:轻一点,还是重一点
阿德拿起了画笔,但笔力轻重很有讲究。太重,会把脸画成另一个人;太轻,原来的瑕疵还露在外面。ADetailer 里的 denoising(重绘幅度)就是这个“笔力”。
最核心的参数是 denoising strength,默认值是 0.4。它控制重绘时加入多少噪声、走多远的重绘步数:值越大,脸部被重新生成的程度越高,崩坏修得越干净,但也越容易变成“别人”;值越小越保守,适合原脸已经不错、只想轻度修复的场景。推荐的甜点区间是 0.2 到 0.4。其次是 Confidence Threshold(置信度阈值),默认 0.3,它决定检测器“多确信这是人脸才动手”:阈值太低会把墙壁花纹、衣服褶皱误检成脸,白修一场;阈值太高又会漏掉侧脸、小脸。第三是 Mask Expansion(蒙版扩张),默认 16 到 32 像素,它把重绘范围向脸部四周扩展,避免补过的地方和周围出现生硬接缝。此外,还可以在重绘阶段补充提示词,例如加入 "restored face, detailed eyes, natural skin" 等,让模型在补脸时更注意五官细节。
调参像烧菜放盐:盐太少没味道,盐太多齁嗓子。先用默认值跑一张,脸崩得厉害就提高到 0.5 左右;脸基本合格只差细节就降到 0.2。阿德说:“笔轻一点,人还是那个人。”
- $x_0$ 原图信息脸部区域原本的真实像素。重绘时它会作为起点,被逐步添加噪声,$x_0$ 保留越多,修复结果越像原来的脸。
- $\bar{\alpha}_t$ 保留比例扩散模型在第 $t$ 步还保留多少原始信息的系数,$t$ 越大这个值越小,说明原图信息流失越多。
- $\varepsilon$ 随机噪声标准高斯噪声,它代表“重画”时注入的新随机素材。denoising 强度越高,$\varepsilon$ 的权重越大,生成的五官越“放飞”。
- $x_t$ 加噪图把原图信息和随机噪声按系数混合。ADetailer 用这个机制控制修复力度:想要像本人,就把 denoising 调低,让 $x_0$ 占主导。
模型选择:换一副好用的“眼睛”
“工欲善其事,必先利其器。”阿德的工具箱里备着好几副放大镜:有的看得远、看得准,适合大活;有的轻便灵活,适合跑量;还有一副折叠旅行镜,方便但不适合盯细节。
ADetailer 的检测模型决定了“能不能找到脸、找得准不准”。最常用的是 Ultralytics 的 YOLO 系列:face_yolov8 是完整版,精度高、对侧脸和小脸更鲁棒,适合对画质要求高的单张精修;face_yolov8n 是轻量版(n 代表 nano),速度快、占显存小,批量出图时几乎不拖慢速度,是绝大多数场景的默认选择。此外还有 Google 的 mediapipe_face,它极度轻量、安装方便,但对小脸、遮挡和极端角度的脸容易漏检。除人脸外,同系列还有 hand_yolov8(手部)、person_yolov8(人体)等模型,用于修复手部、身体等其他易崩部位。
怎么选?日常批量出图用 face_yolov8n 最省心;单张精修、角度刁钻就换 face_yolov8;想在低配显卡上跑或者快速试验,可以试试 mediapipe。就像阿德出门修图:普通客户随手拿轻便放大镜,重要客户才上重型器材。
- $p(c)$ 类别概率检测器对每个候选框输出它属于“人脸、手、背景”等类别的概率,每个类别的得分都在 0 到 1 之间。
- $\max_c p(c)$ 最高分在所有类别里取最大的那个概率,它代表检测器对这个框内容的“信心”。信心越高,越可能是真的脸。
- $\tau$ 阈值门槛只有当最高分不低于阈值 $\tau$ 时,该框才会进入修复流程。$\tau$ 调高会减少误检但容易漏掉侧脸,调低则相反。
最佳实践:老修图师的实战手册
阿德工作台上贴着一张泛黄的实战手册,上面记着这些年踩过的坑和攒下的经验。第一条是“多人脸不怕,一框一个全修掉”:ADetailer 的检测器会标出图上所有脸,每一张都会自动进入修复流程,全家福也能一次搞定。
第二条是“脸太小先放大再修”:如果生成图里脸只有十几个像素,检测器很难找到,这时应该先开 Hires.fix 高清修复把图放大,再让 ADetailer 在放大后的图上修脸,五官会自然很多。第三条是“一串不够就串两串”:在 ADetailer 设置里可以配置多组检测模型,一组用 face 模型修脸,一组用 hand 模型修手,按顺序执行,半身像、全身像都能兼顾。第四条是“固定种子跑批次”:批量生成时保持随机种子固定,配合 ADetailer 自动修复,成片率能从六成提到九成以上。
针对疑难杂症,手册也有备录:侧脸、逆光脸检测不到,就降低置信度阈值到 0.2 左右;修复边界出现生硬色块,就增大蒙版扩张;眼部总是崩坏,可以先开 Hires.fix 放大,再单独跑一次眼部重绘。手册最后一行写着三句话:先让脸够大(分辨率),再让框够准(模型与阈值),最后让笔够稳(温和的 denoising)——这就是八成的实战心得。
阿德把修好的相册交还老板,老板翻了几页,一张张脸清晰端正,喜上眉梢。夕阳里,阿德收起放大镜,又接下了下一单活。
AI 应用场景
电商人像批量出图工作室
阶段:图像生成后处理(AIGC 后期)
解决的问题:网店模特图动辄几百张,传统做法是人工在 PS 里逐张修脸,单张耗时三五分钟,费时且效果不稳定。用 SD 批量出图后接入 ADetailer 自动检测修复,脸崩坏的图直接自动修补,成片率从 60% 提升到 95%,人工只需要抽检。
具体案例:某服装电商用 SD 生成 500 张模特图,ADetailer 自动修复后抽样质检,仅 12 张需要人工微调,整体交付时间从 3 天缩短到半天,大幅降低了模特拍摄和后期成本。
个人创作者头像与自媒体封面
阶段:生成质量控制
解决的问题:创作者用 SD 生成自拍感头像时,脸畸形是最大痛点,反复抽卡浪费时间。开启 ADetailer 后,不懂参数的新手也能用默认配置稳定产出五官清晰的头像。
具体案例:一位 B 站 up 主用同一底模生成系列栏目头像,开启 ADetailer 后五官清晰、神态稳定,粉丝评论“像换了个画师”,系列封面点击率提升明显。
Python 演示
import numpy as np RNG = np.random.default_rng(7) def make_clean(): # 造一张干净脸: 浅色背景 + 椭圆肤色 + 眼睛 + 嘴巴 img = np.full((256, 256, 3), 255.0, dtype=np.float32) yy, xx = np.mgrid[0:256, 0:256] head = ((xx - 128) / 55.0) ** 2 + ((yy - 128) / 65.0) ** 2 <= 1 img[head] = [240, 210, 190] for ex, ey in ((108, 110), (148, 110)): img[(xx - ex) ** 2 + (yy - ey) ** 2 <= 30] = [40, 40, 60] img[(xx - 128) ** 2 + (yy - 150) ** 2 <= 70] = [200, 80, 80] return img def corrupt(img): # 模拟脸部崩坏: 全局加噪 + 人脸区域额外加噪 bad = img + RNG.normal(0, 35, img.shape) bad[72:168, 72:168] += RNG.normal(0, 25, (96, 96, 3)) return np.clip(bad, 0, 255) def blur(img, k=5): # 简化的盒式模糊, 用来模拟重绘时的抹平效果 w = np.ones((1, k), dtype=np.float32) / k out = np.apply_along_axis(lambda v: np.convolve(v, w[0], mode='same'), 1, img) out = np.apply_along_axis(lambda v: np.convolve(v, w[0], mode='same'), 0, out) return out def detect(conf): # 模拟目标检测: 置信度 0.92 高于阈值则返回人脸框 return (72, 72, 168, 168) if 0.92 >= conf else None def run(denoise=0.45, conf=0.3, expand=4): clean = make_clean() bad = corrupt(clean) box = detect(conf) if box is None or denoise <= 0: return clean, bad, bad y1, x1, y2, x2 = box y1, x1 = max(0, y1 - expand), max(0, x1 - expand) y2, x2 = min(256, y2 + expand), min(256, x2 + expand) region = bad[y1:y2, x1:x2].copy() smooth = blur(region) noise = RNG.normal(0, 60, region.shape) * denoise painted = np.clip(smooth + noise, 0, 255) * 0.4 + smooth * 0.6 out = bad.copy() out[y1:y2, x1:x2] = np.clip(painted, 0, 255) return clean, bad, out def mae(a, b): return round(float(np.abs(a - b).mean()), 2) def main(): clean, bad, fixed = run() print('修复前脸部区域误差:', mae(bad[72:168, 72:168], clean[72:168, 72:168])) print('修复后脸部区域误差:', mae(fixed[72:168, 72:168], clean[72:168, 72:168])) for d in (0.0, 0.2, 0.45, 0.8): _, _, out = run(denoise=d) print('denoise=%.2f 脸部误差:' % d, mae(out[72:168, 72:168], clean[72:168, 72:168])) if __name__ == '__main__': main()
head = ((xx - 128) / 55.0) ** 2 + ((yy - 128) / 65.0) ** 2 <= 1用椭圆方程生成干净的脸型区域bad[72:168, 72:168] += RNG.normal(...)在脸部区域额外加噪,模拟“崩坏的脸”def detect(conf)模拟目标检测器:置信度高于阈值才返回人脸框y1, x1 = max(0, y1 - expand), max(0, x1 - expand)模拟蒙版扩张,把修复范围向脸周扩展noise = RNG.normal(0, 60, region.shape) * denoisedenoise 决定注入噪声的强度,对应“笔力”out[y1:y2, x1:x2] = np.clip(painted, 0, 255)把重绘结果贴回原图,完成融合回填for d in (0.0, 0.2, 0.45, 0.8)扫描不同重绘幅度,观察“太轻”与“太重”的误差变化
常见误区
误区“我装了 ADetailer,为什么整张图还是模糊的?它不就是让图片变清晰的吗?”
正解ADetailer 不是超分辨率工具,它只对检测到的脸部区域做局部重绘。想让整张图变清晰,要开 Hires.fix 或使用额外的高清放大模型;ADetailer 负责“脸好不好看”,不负责“整图清不清晰”。就像修图师傅只负责补脸,不负责把整张照片重新洗印一遍。
为何常见:因为修复后脸部确实变清晰了,很容易让人误以为它提升了整张图的画质。
误区“脸崩得厉害就把 denoising 拉到 0.9,反正重画一遍肯定干净。”
正解denoising 越大,脸部越接近“完全重新生成”,和原图的光线、角度、人物相似度会断崖式下降,出现“换了一张脸”的违和感。0.2 到 0.4 是甜点区间;脸崩得很厉害时,更好的做法是先提高生成分辨率,或换更强的检测模型,而不是一味拉高重绘幅度。
为何常见:直觉上认为“力度越大效果越强”,忽略了局部重绘的本质是随机采样,噪声占比过高就会丢失人物特征。
误区“插件明明装好了,为什么一运行就报错说找不到模型?是不是 WebUI 坏了?”
正解ADetailer 插件和检测模型是两回事。.pt 模型文件必须手动下载,并放到 models/adetailer 目录下,文件名、后缀、路径都不能出错。插件只是“工具台”,模型才是“放大镜”,两者缺一不可。
为何常见:大多数 SD 扩展装上即用,ADetailer 却需要额外下载模型,超出了用户对“装插件”的固有预期。
误区“我手也画崩了,ADetailer 帮不上忙,只能重新抽卡。”
正解ADetailer 是一个“通用检测 + 局部重绘”框架,脸只是最常见的应用。它支持多种检测模型:hand_yolov8 修复手部、person_yolov8 修复人体,还能配置多段 ADetailer 串联,先修脸再修手,全身像也能稳定出图。
为何常见:插件界面里默认加载的都是人脸模型,名字里又带着 face/detailer,让人误以为它的能力边界只在脸上。
面试题
Q1. ADetailer 主要用于解决 SD 生成图片的哪类问题?
- A.脸部崩坏细节模糊← 正确答案
- B.背景过于杂乱无章
- C.整体曝光过度发白
- D.全局色彩严重失真
答案:A。ADetailer 的核心能力是通过检测定位脸部区域并局部重绘,专门解决脸部崩坏、五官扭曲、细节模糊等脸部质量问题。背景杂乱、曝光或色彩问题属于其他后处理工具的范畴,就像修图师傅只补脸,不负责调色。
Q2. ADetailer 修复脸部的第一个关键步骤是什么?
- A.直接用目标检测锁定人脸← 正确答案
- B.先对整张图做重绘降噪
- C.先把图片分辨率放大
- D.先调整图片的色彩饱和度
答案:A。ADetailer 的流程是“先检测、再修复”,目标检测输出人脸框和置信度,后续的裁剪、重绘、融合都依赖这个框。直接整图重绘会破坏背景,放大和调色都不是修复脸部的必要前置步骤。
Q3. ADetailer 的检测模型文件默认应放在哪个目录?
- A.models/adetailer 目录下← 正确答案
- B.models/Stable-diffusion
- C.models/Lora 模型目录
- D.放到任意一个位置即可
答案:A。ADetailer 会固定从 stable-diffusion-webui/models/adetailer/ 目录读取 .pt 检测模型。放在其他目录即使路径存在也不会被识别,就像放大镜必须挂在工具台的指定挂钩上,放错位置就找不到。
Q4. 面部修复时 denoising(重绘幅度)推荐的甜点区间是?
- A.0.1 以下几乎不改脸
- B.0.85 重绘幅度太高
- C.0.2 到 0.4 温和修复← 正确答案
- D.拉到 1.0 完全重画脸
答案:C。denoising 过低(0.1 以下)几乎等于没修,过高(0.85、1.0)会把脸重画成另一个人。0.2 到 0.4 能让修复保留原脸特征的同事清除崩坏,符合“笔轻一点,人还是那个人”的原则。
Q5. 关于 ADetailer 的检测模型,下列说法正确的是?
- A.face_yolov8 系列专用于人脸检测← 正确答案
- B.mediapipe 也能用于人脸检测← 正确答案
- C.检测模型决定脸部画质上限
- D.模型文件可以放到任意位置
答案:AB。face_yolov8 和 mediapipe 都是 ADetailer 支持的人脸检测模型。但检测模型只负责“找到脸、框得准”,脸部画质上限由 SD 底模、重绘管线和参数决定,所以 C 错;模型必须放在指定目录,D 也错。
Q6. 为什么低分辨率生成时脸部更容易崩坏?
- A.人脸像素占比小细节易丢失← 正确答案
- B.采样器不认识人的脸结构
- C.图片色彩空间设置错误导致
- D.生成插件之间产生冲突导致
答案:A。在 512×512 的出图中,人脸往往只占几十像素见方的小区域,细节容量极低,采样稍有偏差就会崩坏。这就像小尺寸合影里人脸只有绿豆大,摄影师很难把五官拍清楚,而不是相机“不认识脸”。
Q7. 蒙版扩张(Mask Expansion)参数的主要作用是什么?
- A.扩大重绘范围覆盖脸周← 正确答案
- B.增大输出图片的最终分辨率
- C.提升检测模型的推理速度
- D.改变采样器的步数参数
答案:A。蒙版扩张把重绘区域向脸部四周扩展若干像素,让补色的边缘和周围皮肤自然过渡,避免出现生硬接缝。它不改变分辨率、速度和采样步数,只是把“画布”向外延了一圈。
Q8. 关于“高清修复(Hires.fix)后再使用 ADetailer”,说法正确的是?
- A.放大后脸部细节更清晰← 正确答案
- B.放大后可以调低重绘幅度← 正确答案
- C.两者先后顺序对结果没有影响
- D.ADetailer 会再次放大一次图片
答案:AB。先 Hires.fix 放大,脸部的像素更多,ADetailer 检测更准、修复后的五官更自然,同时因为底子更好了,denoising 可以适当调低。顺序当然有影响,ADetailer 本身不放大图片,所以 C、D 错。
Q9. ADetailer 融合回填阶段所用的蒙版(Mask)来自哪里?
- A.由检测框后处理生成← 正确答案
- B.需要用户手动涂抹蒙版
- C.每次随机生成一张蒙版
- D.由原图直方图统计生成
答案:A。ADetailer 检测器输出人脸边界框后,插件内部把框转换为蒙版,再经蒙版扩张等后处理,得到最终参与融合的 mask。全程自动,无需手涂、不靠随机、与直方图无关,这正是“检测是眼、蒙版是手术刀”的体现。
Q10. 下列哪些做法能提升批量出图的面部质量?
- A.串联两段 ADetailer 修复← 正确答案
- B.固定种子并对比微调参数← 正确答案
- C.关闭检测直接批量出图
- D.适当降低重绘幅度保持像← 正确答案
答案:ABD。多段 ADetailer 可以同时修脸和手,固定种子便于复现和调参,降低 denoising 能保持人物相似度。关闭检测等于让 ADetailer 完全失效,批量出图没有了面部守护,C 明显错误。