AI 图片头发像铁丝或塑料线(修复)

生成的人像头发一根根像铁丝、钓鱼线甚至塑料丝。讲清楚 diffusion 模型为什么会画出 wire-hair,以及把柔软发丝找回来的 prompt、CFG、sampler 和 inpaint 具体设置。

你生成了一张人像。脸 OK、光线 OK,但头发就是哪里不对——说不上来但能感觉到。每根发丝从发根到发梢粗细完全一致;高光顺着发丝走,活像铜丝表面的反光;长发垂下来是一条条笔直平行的线,而真实头发应该是一缕缕互相交叉的。放大看几乎能数清每一根丝,但每根都同一个粗细。最终效果像假发、像钓鱼线、像融化的塑料,就是不像头发。

这是 Stable Diffusion 家族模型(SD1.5、SDXL、Pony、Illustrious)生成写实人像时最常见的失败之一。修法基本上是 prompt 结构 + guidance 设置 + sampler 选择 + 别让模型一次出所有细节,几件事一起搞定。

TL;DR 最快修法

只做三件事的话,做这三件:

  1. 删掉过度细节词ultra detailed hairevery strand visible8k hairsharp hair),换成 natural hair texture, varied strand thickness, soft flyaways
  2. 降低 guidance。 SDXL/SD1.5 把 CFG 降到 5-7;FLUX 则把传统 CFG = 1,用 Distilled CFG Guidance 3.5(或更低)——FLUX 的 guidance 机制不一样,见下面的模型分类表。
  3. 只 inpaint 头发区域,denoise 0.5-0.6,配发丝纹理 prompt,而不是整张重生成。

大多数情况这就能解决铁丝头。要是还在,说明你的 checkpoint 画不出写实头发,得换 base 模型或加 hair LoRA(文末讲)。

先搞清楚你用的是哪类模型

2026 年 6 月最重要的一个变量是你跑的是哪个模型,因为 FLUX 的 guidance 行为和 Stable Diffusion 完全不同。搞错这一点,是”把 CFG 降下来”这招完全没反应的最常见原因。

模型让头发变柔的 guidance 设置Negative prompt备注
SD1.5CFG 5-7有,正常生效要靠 hires fix 给头发腾空间;写实头发最弱
SDXL(Juggernaut XL、RealVisXL 等)CFG 5-7有,正常生效同显存下写实度最好;8GB 能跑;LoRA/inpaint 生态成熟
FLUX.1-dev / FLUX.2传统 CFG = 1 + Distilled CFG Guidance 3.5 或更低不用——蒸馏模型基本不理 negative默认就把发丝、毛孔、光照渲得自然得多;FLUX.2 需要约 24GB 显存

如果你在 FLUX 上还看到铁丝头,通常是 Distilled CFG 拉太高了(试 2.5-3.5),或者叠了一个锐化 LoRA。FLUX 很少需要 SD 那种大动干戈的 prompt 手术。

常见原因

按真实出图中出现的频率从高到低排。

1. Prompt 写了太多”超细节头发”

类似 ultra detailed hair, every strand visible, sharp focus on hair 这种写法,会把模型推向最大发丝对比度。模型把这理解成”每根发丝都画成高对比的独立线条”,铁丝就是这么来的。

怎么判断:你的 prompt 里有 individual strandshyperdetailed hairsharp hair8k hair。删掉之后铁丝感会明显减弱。

2. CFG / guidance scale 太高(Stable Diffusion)

在 SD1.5/SDXL 上,CFG 高于 8 之后模型会把所有东西的对比度都拉满。头发上的中间色调被推到要么高光要么阴影,渲染出来就跟抛光铁丝一样。社区默认的 7 已经是安全上限;专门为头发考虑,5-7 更好。

怎么判断:CFG 在 9-15。同一 prompt 在 CFG 5-7 下头发就柔很多。(FLUX 上这条不适用——见模型分类表;FLUX 的铁丝头来自 Distilled CFG 太高,而不是传统 CFG。)

3. 用”平滑/二次元向”的 checkpoint 在画”写实”头发

那些重度 fine-tune 在二次元、CG 渲染或超干净人像风格上的 checkpoint,根本没见过多少真实摄影头发。它会按它会的画法画:干净分块的发缕加 cel-shading 高光。

怎么判断:checkpoint 名字里带 animetoonsmoothrenderCG3D。或者图里其他东西(皮肤、布料)也有点塑料感。SDXL 想要写实,换 Juggernaut XL 或 RealVisXL 这类摄影向 checkpoint。

4. 分辨率太低撑不起头发细节

512x512 下头发横向只有约 50-100 像素,模型没空间画真实的发丝聚拢,只能画最简单的——平行线。

怎么判断:base 是 512 或 640。事后再 upscale 也救不了底层的粗结构,只会把铁丝锐化得更明显。

5. Sampler 太”锐”不适合有机纹理

DPM++ 2M Karras 低步数和 Euler a 20 步都偏锐,会强调边缘,而且在 SDXL 上普通 Euler 系容易显得过于简单。头发更吃柔和的有机 sampler(DPM++ SDE KarrasUniPC),或者更高步数。

怎么判断:同 seed 同 prompt 切 sampler,头发柔软度肉眼可见地变。铁丝头特别吃换成 DPM++ SDE Karras

6. LoRA 堆得在打架

你挂了一个 detail enhancer LoRA 强度 1.0,再加一个人像 LoRA、一个风格 LoRA。detail LoRA 会把所有东西都推向最大微对比,头发的柔软度就没了。

怎么判断:关掉 detail/sharpness LoRA 再跑。如果头发好了但脸的细节掉了,就是 LoRA 干的。把它的权重降到 0.3-0.5 再挂回去,别用 1.0

7. Negative prompt 把”柔”也压掉了(仅 SD)

blurry, soft, low quality, out of focus 这种 negative,会让模型连”柔软渲染”一起避开,包括柔软的头发。

怎么判断:negative 里有单独的 blurrysoft token。换成更具体的,比如 motion blur, jpeg artifacts。(FLUX-dev 上这条不适用——蒸馏模型基本不理 negative prompt,留空即可。)

最短修复路径

Step 1: prompt 里删掉过度细节词

删掉一切推向最大发丝可见度的东西:

# 改前
photo of woman, ultra detailed hair, hyperdetailed strands,
8k, sharp focus on hair, every strand visible

# 改后
photo of woman, natural hair texture, soft hair clumps,
shallow depth of field, 50mm lens

every strand visiblenatural hair texture 这一步基本能解决一大半。

Step 2: 按你的模型把 guidance 设对

SD1.5 / SDXL 把 CFG 降到 5-7

cfg_scale: 6.5

CFG 低了模型才有空间画中间色调,而不是被逼到非黑即白。

FLUX 保持传统 CFG = 1,写实人像把 Distilled CFG Guidance 设到 3.5 或更低。FLUX-dev 上别加 negative prompt。

Step 3: 换成更柔的 sampler

DPM++ SDE Karras 跑 25-30 步,渲软质有机纹理明显比 Euler aDDIM 同步数好得多。UniPC 是不错的第二选择。inpaint 里做纯结构替换时,DPM++ 2M Karras 也很稳。

Step 4: base 分辨率拉高

SDXL 直接 1024x10241024x1280。SD1.5 用 hires fix 配 denoise 0.4-0.5、放大 1.5x-2x(细节放大器如 4x-UltraSharp 很合适)——这样第二 pass 才有空间把头发重画成纤维,而不是单纯放大第一 pass 的铁丝头。

Step 5: 加明确的发丝纹理词

hair: natural fly-aways, fine baby hairs at hairline,
hair clumping, varied strand thickness, soft highlights

varied strand thickness 就是铁丝头的专门解药。fly-aways 强制模型画一些不那么规整的散发,头发就不再像个工业制品。

Step 6: 用中等 denoise 单独 inpaint 头发区域

图其他地方都 OK 的话,蒙住头发,切到 inpaint 工作流 denoise 0.5-0.6,用上面那段发丝 prompt 重跑。这样不会动到脸和光。两个关键设置:

  • 把蒙版放大。 ComfyUI 里把 grow_mask_by 设到 6-8 像素(A1111/Forge 里就把蒙版画得比头发稍大一圈),新生成的内容才会在边缘自然过渡,而不是留一条接缝。
  • 如果 inpaint 结果发光、发平、或光照方向不对,说明 denoise 太低了——模型没空间重画光照上下文。把这些区域的 denoise 往 0.75-0.85 提。

Step 7: 可选的软像素级 pass

inpaint 完之后,只在头发蒙版上加一个轻量 Gaussian blur(0.5-1 像素)混合 30-50%,残留的铁丝感就基本没了。千万别全图加,只在头发蒙版里加,否则整张脸都会糊。

怎么确认修好了

收工前,在头发上以 100% 放大(不是缩略图)跑这几项检查:

  • 发丝粗细有变化。 有的粗有的细如发。粗细一律相同就还是铁丝。
  • 发丝聚拢、交叉。 真头发会聚成一缕缕并互相叠盖。完全平行的线说明没修到位。
  • 发际线和头顶有几根散发(flyaways)。 没有散发就是合成头发的明显标志。
  • 高光落在发缕上,而不是每一根丝上。 高光顺着每一根丝走,正是典型的铜丝感。

四项在全分辨率下都过,头发就会显得真实了。

这些情况不是你的锅

有些 base checkpoint 不管 prompt 怎么写,没有 fine-tune 或 LoRA 就是画不出写实头发。上面的步骤都试过头发还像塑料,那就是顶到模型上限了。两个办法:

  • 换 base 模型。 截至 2026 年 6 月,FLUX.2 默认就把头发、毛孔、皮肤与光的互动渲得比 SDXL 自然得多,而且基本不用做那么多 prompt 手术(代价是约 24GB 显存)。8GB 显卡的话,Juggernaut XL 这类摄影向 SDXL checkpoint 是写实的基准线。
  • 加 hair LoRA,要训练在真实摄影头发上的(见 FAQ)。

另外高动态发型(风吹起来、甩头瞬间)本身就更难,连商用模型都翻车。这种接受一定妥协吧。

容易被误诊成

“皮肤过于平滑/塑料感”那个 failure 看着很像,因为都有塑料感。它俩根因经常重合(CFG 高、平滑 checkpoint、过度细节词),但修法不一样:皮肤要加 film-grain 和毛孔纹理词;头发要加 varied-thickness 和 flyaway 词。别两边共用同一套 negative prompt。

还有一种情况:小缩略图看像铁丝,全分辨率打开其实是细发。先看实际尺寸再 debug。

怎么预防

  • SD 人像默认 CFG 5-7;FLUX 保持 Distilled CFG 3.5 或更低。
  • 留一段”头发纹理”词的 snippet,写人像 prompt 时直接粘。
  • 人像生成别叠 detail-enhancer LoRA;非要用就跑权重 0.3-0.5
  • 人像 base 分辨率 1024 起;SD1.5 走 hires fix。
  • 看自己出图别只看缩略图,要 100% 放大看头发区域。
  • 客户活儿养成”单独头发 inpaint 一次”的标准动作。

FAQ

  • 为啥长直发比卷发更容易翻车? 长直发给了模型一条很长不中断的线去画。卷发强制方向变化,wire-look 反而藏住了。同一个人改成卷发再生一张,问题经常就消失。
  • 挂个”头发 LoRA”真有用吗? 训练在真实摄影头发上的那种有用。找描述里写 realistic hair texturephotographic hair 的,别用那些通用 detail LoRA,那玩意儿经常越加越糟。
  • FLUX 上我把 CFG 降到 1 了还是没变化,是不是错了? 没错。FLUX 上传统 CFG 1 就是对的;控制对比度的旋钮是另一个 Distilled CFG Guidance。把它降到 2.5-3.5 做人像。
  • inpaint 出来的头发像贴上去的 / 有明显接缝,为啥? 蒙版太紧了。放大 6-8px(ComfyUI 里的 grow_mask_by),如果还是发平,把 inpaint denoise 往 0.75-0.85 提,让模型能重画边缘光照。
  • upscale 能修铁丝头吗? 不能。普通放大器只会把现有的铁丝锐化得更明显。你需要的是 hires fix(denoise 0.4-0.5,让模型重画)或者单独的头发 inpaint pass,而不是干巴巴地放大。

相关阅读

标签: #ai-image #排查 #图像生成 #hair #人像 #texture