AI 图片头发像铁丝或塑料线

生成的人像头发一根根像铁丝、钓鱼线甚至塑料丝,看着就不对劲。讲讲 diffusion 模型为什么会画出 wire-hair,以及怎么把柔软的发丝找回来。

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

这是 SD 家族模型生成写实人像时最常见的失败之一。修法基本上是 prompt 结构 + sampler 选择 + 别让模型一次出所有细节,三件事一起搞定。

常见原因

按出现频率从高到低排。

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

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

怎么判断:你的 prompt 里有 “individual strands”、“hyperdetailed hair”、“sharp hair”、“8k hair” 之类的词。删掉之后铁丝感会明显减弱。

2. CFG / guidance scale 太高

CFG 高于 8 之后,模型会把所有东西的对比度都拉满。头发上的中间色调会被推到要么高光要么阴影,渲染出来就跟抛光铁丝一样。

怎么判断:CFG 在 9-15。同一 prompt 在 CFG 5-7 下头发就柔很多。

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

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

怎么判断:checkpoint 名字里带 “anime”、“toon”、“smooth”、“render”、“CG”、“3D”。或者图里其他东西(皮肤、布料)也有点塑料感。

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

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

怎么判断:base 是 512 或 640。事后再 upscale 也救不了底层的粗结构。

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

DPM++ 2M Karras 低步数和 Euler a 20 步都偏锐,会强调边缘。头发需要更柔的 sampler(DPM++ SDE、UniPC)或者更高步数才能渲出有机的聚拢感。

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

6. LoRA 堆得在打架

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

怎么判断:关掉 detail/sharpness LoRA 再跑。如果头发好了但脸的细节掉了,就是 LoRA 干的。

7. Negative prompt 把”柔”也给压下去了

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

怎么判断:negative 里有单独的 “blurry” 或 “soft” token。换成更具体的,比如 “motion blur, jpeg artifacts”。

最短修复路径

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 visible” → “natural hair texture” 这一步基本能解决一大半问题。

Step 2: CFG 降到 5-7

cfg_scale: 6.5

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

Step 3: sampler 换成 DPM++ SDE 或 UniPC

DPM++ SDE Karras 跑 25-30 步,渲软质有机纹理明显比 Euler a 或 DDIM 同步数好得多。

Step 4: base 分辨率拉高

SDXL 直接 1024x1024 或 1024x1280。SD1.5 用 hires fix 配 denoise 0.4-0.5——这样第二 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 重跑。这样不会动到脸和光。

Step 7: 最后做一次软像素级 pass

inpaint 完之后,只在头发蒙版上加一个轻量 Gaussian blur(0.5-1 像素)混合 30-50%,残留的铁丝感就基本没了。一定别全图加。

这些情况不是你的锅

有些 base 模型不管 prompt 怎么写,没有 fine-tune 或 LoRA 就是画不出写实头发。上面的步骤都试过头发还像塑料,那就是顶到模型上限了——换一个摄影向的 checkpoint,或者加一个 hair-texture LoRA。

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

容易被误诊成

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

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

怎么预防

  • 人像默认 CFG 5-7,没特殊原因别拉高。
  • 留一段”头发纹理”词的 snippet,写人像 prompt 时直接粘。
  • 人像生成别叠 detail-enhancer LoRA。
  • 人像 base 分辨率 1024 起;SD1.5 走 hires fix。
  • 看自己出图别只看缩略图,要 100% 放大看头发区域。
  • 客户活儿养成”单独头发 inpaint 一次”的标准动作。

FAQ

  • 为啥长直发比卷发更容易翻车? 长直发给了模型一条很长不中断的线去画。卷发强制方向变化,wire-look 反而藏住了。同一个人改成卷发再生一张,问题经常就消失。
  • 挂个”头发 LoRA”真有用吗? 训练在真实摄影头发上的那种有用。找 LoRA 描述里写”realistic hair texture”或”photographic hair”的,别用那些通用的”detail” LoRA,那玩意儿经常越加越糟。

相关阅读

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