Wan-Dancer 生成舞蹈视频时人像面容崩溃的排查步骤

文章导读
Wan-Dancer 生成舞蹈视频时出现面容崩溃,常见表现是五官错位、眼嘴区域糊成一团,换输入图也不一定好转。这种问题通常不是提示词或模型风格设置导致的,而更可能出在几个可检查的环节:输入人像被预处理拉伸或裁切,人脸检测器没有拿到有效置信度,采样步数不足以让面部细节收敛,以及共享缓存残留上一轮运行的特征干扰本次生成。排查顺序建议从输入图和日志开始,再做参数对照实验,每步只改一个变量,用截图和日志字
📋 目录
  1. 一 先核查输入人像的原始分辨率与长宽比
  2. 二 打开调试日志检查人脸检测置信度
  3. 三 对照采样步数做递增实验
  4. 四 清理共享缓存后重新生成
  5. 五 锁定随机种子并调整参考图对齐强度
A A

Wan-Dancer 生成舞蹈视频时出现面容崩溃,常见表现是五官错位、眼嘴区域糊成一团,换输入图也不一定好转。这种问题通常不是提示词或模型风格设置导致的,而更可能出在几个可检查的环节:输入人像被预处理拉伸或裁切,人脸检测器没有拿到有效置信度,采样步数不足以让面部细节收敛,以及共享缓存残留上一轮运行的特征干扰本次生成。排查顺序建议从输入图和日志开始,再做参数对照实验,每步只改一个变量,用截图和日志字段留痕,避免凭感觉调参。

面容崩溃通常是输入图宽高比偏离预处理期望、人脸检测置信度偏低与生成侧采样步数不足共同作用的结果。建议依次检查输入图尺寸与宽高比、开启调试日志查看人脸置信度、固定种子递增步数做对照、清理共享缓存后重跑,最后再锁定随机种子并调整参考图对齐强度。每一步只保留单一变更,以输出视频截图和日志文本作为验证依据。

先核查输入人像的原始分辨率与长宽比

Wan-Dancer 的预处理流程通常会把输入图缩放或居中裁切到模型可接受的分辨率。如果原图宽高比偏离明显,例如横构图或接近 1:1 的方图,裁切会直接切掉部分人脸;如果预处理把图片拉伸到目标尺寸,面部会被横向压扁或拉长,后续生成阶段会在拉伸后的脸上继续叠加噪声,最终输出的人脸看起来像化掉的五官。这类问题换图没用,因为每一张图都经过同一道错误变换。

先用 Python 读取输入图尺寸,不依赖图片查看器主观判断。代码放在生成任务开始前执行,文件路径替换为实际输入图路径:

from PIL import Image

img = Image.open("input.png")
w, h = img.size
print(f"输入尺寸: {w}x{h}, 宽高比: {w/h:.3f}")

环境缺少 PIL 时先执行 pip install pillow。宽高比取值区间建议这样判断:多数舞蹈视频以竖构图 9:16 为目标,对应宽高比约 0.5625;3:4 的中等竖幅也在可接受范围内。如果宽高比低于 0.5 或高于 1.2,建议先用图片编辑器居中裁切为接近 9:16 的竖图,再重新喂给生成流程,不要让模型在内部自动拉伸。这是通用经验区间,仍需结合 Wan-Dancer 当前版本的目标分辨率做最终确认。人脸区域占整图面积过小时,即使分辨率正常,检测器拿到的特征也不足,应先把人物裁成半身或近景,再继续排查。

打开调试日志检查人脸检测置信度

输入图检查通过后,下一步看日志。Wan-Dancer 生成前通常有人脸检测或人脸对齐步骤,日志会输出检测框坐标和置信度。置信度偏低时,模型拿到的人脸区域不可靠,生成阶段的人脸会被整体重置,出现与输入图质量无关的五官扭曲。

设置日志级别的方法取决于启动方式。如果通过 Python 脚本调用,在入口处追加:

Wan-Dancer 生成舞蹈视频时人像面容崩溃的排查步骤
import logging
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s %(levelname)s %(name)s %(message)s")

如果通过命令行工具启动,通常加上 `--log-level` DEBUG 或 -v,具体参数名以 Wan-Dancer 启动命令的 help 输出为准。把运行输出保留到日志文件,再提取置信度文本:

python run_dance.py `--input` input.png `--log-level` DEBUG 2>&1 | tee run.log
# 先看原始日志行,确认字段名
grep -iE "face|detect|conf|score" run.log
# 如果字段形如 face_score=0.73,再精确提取
grep -oE "face_score=[0-9.]+" run.log

字段名不固定时,grep -iE "face|detect|conf|score" 这一行用于确定实际写法,后续再把 pattern 替换为真实字段。验证方式:换一张正面光源、五官清晰的图重跑并对比置信度数字。若日志里大多数帧的置信度偏低或波动明显,先不要继续调生成参数,优先更换输入图或检查检测器的输入尺寸设置;如果只有个别帧跳变,问题更可能出在采样阶段。

对照采样步数做递增实验

采样步数不足时,扩散模型没有把噪声完全移除,面部的小结构还停留在噪声状态,表现为五官细节错乱或皮肤纹理异常。要确认是否步数导致的面容崩溃,固定其他全部变量,只递增步数,并记录每一步输出视频的截图。

设计一组固定种子的对照实验:seed 固定为 42,输入图、提示词、参考图参数保持完全一致,步数分别取 8、16、24、32、40:

python run_dance.py `--seed` 42 `--sampling`_steps 8  `--input` input.png
python run_dance.py `--seed` 42 `--sampling`_steps 16 `--input` input.png
python run_dance.py `--seed` 42 `--sampling`_steps 24 `--input` input.png
python run_dance.py `--seed` 42 `--sampling`_steps 32 `--input` input.png
python run_dance.py `--seed` 42 `--sampling`_steps 40 `--input` input.png

种子参数名未必是 `--seed`,以工具 help 输出为准。每轮生成后,用 ffmpeg 提取第 1 帧和视频中部某一帧,保存为带步数编号的截图:

Wan-Dancer 生成舞蹈视频时人像面容崩溃的排查步骤
ffmpeg -y -i out_24.mp4 -vf 'select=eq(n\,0)+eq(n\,72)' -vsync vfr -frames:v 2 frames_24_%d.png

这里的帧序号 72 只作为示例,需要按输出视频的实际帧数替换。验证方式:并排观察 8 步与 40 步截图,如果五官边缘随步数增加逐步变得完整清晰,说明此前采样步数不足;如果 32、40 步下五官仍然严重形变,说明问题不在步数,应该回到人脸检测和输入图环节,继续加大步数只会线性增加等待时间,对定位没有帮助。

清理共享缓存后重新生成

部分版本的 Wan-Dancer 会把每次运行的上传图、人脸特征张量或临时分辨率写入本地缓存。共享缓存被多个任务复用时,残留的人脸特征可能比本次输入图更旧,生成流程读取到旧特征,就会把上一批人脸结构带进新视频。此时无论怎么换图和调参,崩溃位置都会跟随旧特征变化,特征不明显但容易被忽略。

缓存目录通常出现在这几个位置,以启动日志中的 cache 路径为准:

~/.cache/wan-dancer/
./.cache/
./output/tmp/

先找目录并记录大小,再决定是否删除:

find . -maxdepth 3 -type d \( -name "tmp*" -o -name "*cache*" \) -print
du -sh ~/.cache/wan-dancer

确认目录确实是 Wan-Dancer 本次任务产生的临时文件后,停掉正在运行的生成进程,再删除指定目录:

Wan-Dancer 生成舞蹈视频时人像面容崩溃的排查步骤
rm -rf ~/.cache/wan-dancer/tmp_dance_*

不要在没有备份的情况下全量删除 home 下的陌生缓存目录。清理前后对比方法:删除前用 seed 42、步数 24 跑一次并导出首帧截图,删除后使用完全相同的参数再跑一次。对比两段视频同一帧号的截图和文件校验值,如果两次结果发生变化,说明缓存里的残留特征确实参与了生成,继续复用同一个缓存目录会重复触发相同问题。

锁定随机种子并调整参考图对齐强度

如果前面几步都没有定位到明确异常,剩余的影响因素主要是随机性和参考图对齐强度。不固定随机种子时,同一份输入可能得到完全不同的面容表现,失败点随机出现,无法复现,也就无法判断参数改动是否有效。参考图对齐强度控制生成输出对给定人脸的贴合程度,强度太低时模型会自行发挥五官比例,使面容向平均脸漂移,看起来像换了一个人。

在命令行或脚本中固定随机种子,保持输入图和采样步数不变:

python run_dance.py `--seed` 42 \
  `--input` input.png \
  `--sampling`_steps 30 \
  `--ref`_align 0.8

上述参数名中的 `--ref`_align 可能是 `--align`_strength、`--reference`_scale 或 `--face`_align,以实际工具 help 输出为准,这里只是可替换的通用骨架。

调整步骤分三步,每次只动一个参数:先固定 seed 为 42,以当前对齐强度跑一次作为基准;再把对齐强度下调一档(例如从 0.8 调到 0.7)重跑;最后上调一档(例如调到 0.9)重跑。每次导出同一帧截图并排对比。若提高对齐强度后五官轮廓更贴近输入图、崩溃消失,说明此前的对齐强度偏低;若调高后脸部变得僵硬或扭曲加剧,则问题根源仍在输入图或人脸检测环节,继续调这个参数意义不大。另注意:固定 seed 后重复运行同一指令,首帧截图仍出现明显差异,说明流程里存在未纳入可复现控制的预处理路径,应回到缓存清理环节重新排查。