DuoMatching 蒸完的学生模型 / 采样步数与画质要放在一起看

文章导读
采样步数降下来后,画质退化通常不是整条视频均匀变差,而是集中在某些运动段和高频纹理区域。对 DuoMatching 蒸完的学生模型,建议先把输入、种子、分辨率、采样器和输出编码固定住,只让步数按梯度变化,再按运动幅度与纹理密度分类看退化落点。这样得到的判断比只看一条顺眼的样片更接近可复现的配置结论,也能同时把耗时和显存读数放在同一张表里权衡。
📋 目录
  1. 一 固定输入视频与随机种子,只让采样步数变化
  2. 二 按步数梯度各生成一条结果并统一命名保存
  3. 三 按运动幅度与纹理密度给生成片段分类,看退化出现在哪类
  4. 四 同步记录每档步数的耗时与显存读数
  5. 五 给出哪类内容适合降步数、哪类需要保守处理的判断
A A

采样步数降下来后,画质退化通常不是整条视频均匀变差,而是集中在某些运动段和高频纹理区域。对 DuoMatching 蒸完的学生模型,建议先把输入、种子、分辨率、采样器和输出编码固定住,只让步数按梯度变化,再按运动幅度与纹理密度分类看退化落点。这样得到的判断比只看一条顺眼的样片更接近可复现的配置结论,也能同时把耗时和显存读数放在同一张表里权衡。

判断降步数是否可接受,应把同一输入、同一种子下的多档步数结果按类别对齐比较:低运动、低纹理片段可优先尝试较少步数;高运动、高频纹理、细小结构密集的片段需要保守处理。记录每档耗时与采样到的显存读数,并注明结论只适用于当前学生模型权重、分辨率帧率和采样器配置,换环境需重测。

固定输入视频与随机种子,只让采样步数变化

对比实验最容易出错的地方是同时改了输入、种子或输出编码,最后把差异归因到步数。建议把固定项写成清单,每次运行前逐项确认;步数只通过命令行显式传入,不依赖默认值或环境变量。

  • 输入文件路径、文件哈希、帧数、分辨率、帧率
  • 学生模型 checkpoint 路径与版本标识
  • 采样器、调度器、引导系数等采样参数
  • 随机种子、输出编码参数、硬件与驱动信息

种子和输入建议按片段分别存放,避免运行时手填。目录可以这样组织:

inputs/clip_A.mp4
inputs/clip_A.sha256
seeds/clip_A.seed
configs/base.yaml
configs/steps_08.yaml
configs/steps_16.yaml

seeds/clip_A.seed 中只写一个种子值,例如 1234。每次运行前把 base.yaml 复制成对应步数的配置文件,只改 steps 字段。检查是否漏改可以用两条命令:sha256sum -c inputs/clip_A.sha256 校验输入未变;diff configs/base.yaml configs/steps_08.yaml 查看除步数外是否还有差异。运行入口还应把完整参数打印到 logs/run_args.log,事后能对照。

按步数梯度各生成一条结果并统一命名保存

生成时保持同一条命令模板,只替换 `--steps` 和输出目录中的步数部分。参数位置要显式写出,尤其是 `--input`、`--seed`、`--steps`、`--out` 四项,避免脚本内部从别处读取默认值。下面是一行可替换的调用骨架,实际入口按你的工程替换:

python run_student.py `--input` inputs/clip_A.mp4 `--seed` 1234 `--steps` 8 `--out` runs/steps_08/clip_A_s1234_steps08.mp4

文件名建议包含片段、种子和步数,步数补零便于排序:{clip_id}_s{seed}_steps{step:02d}.mp4。目录按步数分开,方便直接对齐同一档结果:

runs/
  steps_08/
    clip_A_s1234_steps08.mp4
    meta.json
  steps_16/
    clip_A_s1234_steps16.mp4
    meta.json
  steps_32/
    clip_A_s1234_steps32.mp4
    meta.json
  configs/
  logs/

meta.json 至少记录输入路径、种子、步数、模型路径和输出文件名。批量生成时复制同一命令,只改 `--steps` 与输出目录,不要顺手改种子或输入。

DuoMatching 蒸完的学生模型 / 采样步数与画质要放在一起看

按运动幅度与纹理密度给生成片段分类,看退化出现在哪类

主观感受要落成可讨论的分类,建议先按运动幅度粗分低、中、高,再按纹理密度粗分低、中、高。运动幅度看主体位移、遮挡变化和相机运动;纹理密度看画面中高频细节是否密集,例如网格、文字、织物、树叶和细碎边缘。

  • 低运动低纹理:重点看边缘是否发虚、渐变区域是否出现色带或块状。
  • 中运动:重点看轮廓拖影、主体边缘是否连续两帧以上抖动。
  • 高运动:重点看遮挡边缘、背景拉伸和快速位移处的结构断裂。
  • 高纹理:重点看网格、文字、织物纹理是否粘连、闪烁或周期性断裂。

判断描述要可复现:写清时间区间和画面区域,例如第 2.0-3.5 秒画面右侧网格区域出现纹理粘连,而不是只写“糊了”。记录表建议包含 clip_id、时间段、区域、运动幅度、纹理密度、退化现象、出现步数档、是否可接受。这样同一片段在不同步数下的退化可以逐条对齐。

同步记录每档步数的耗时与显存读数

耗时用 /usr/bin/time -v 包住单次生成,记录 wall time;如果框架自身有计时日志,以日志为准并在表中注明来源。显存用轮询命令采样,生成开始前启动、结束后停止,表里写采样到的最大读数,不把它当成严格峰值。

/usr/bin/time -v python run_student.py `--input` inputs/clip_A.mp4 `--seed` 1234 `--steps` 8 `--out` runs/steps_08/clip_A_s1234_steps08.mp4 2> logs/time_steps08.log
nvidia-smi `--query-gpu`=memory.used `--format`=csv,noheader -l 1 > logs/mem_steps08.log

表格字段建议固定为:步数、clip_id、seed、耗时秒、采样最大显存、输出路径、配置路径、备注。备注里写清是否出现明显退化以及退化类型,画质和成本就能在同一张表里权衡。

给出哪类内容适合降步数、哪类需要保守处理的判断

判断依据是同一片段在相邻步数档之间,退化是否只落在可接受区域,是否影响主体轮廓、文字和网格结构。低运动、低纹理片段可以先尝试较少步数,重点观察边缘和渐变是否稳定;高运动、高频纹理、细小结构密集的片段需要保守处理,至少在相同分类下多取几条再决定。

适用条件是输入、种子、学生模型权重、采样器、分辨率帧率和输出编码都保持一致。结论的验证范围应写明:当前结果只覆盖表里列出的片段和步数档,换模型权重、换分辨率或换采样器都要重新建表对比。单条样片不足以代表一个类别,建议每类至少保留两到三条,并用固定时间点和画面区域描述退化现象。