跳转至

M20 · R3 变速中立目标

状态 ✅ 完成(2026-09-01,共 420k 步:100k + 80k + 80k + 160k 四段)——CER 0.046 / MOS 2.09 / MOS@α=0 2.80 / delta 0.911,四项均为项目最佳或追平纪录
一句话 唯一改动:中立目标的变速引擎 WSOLA → DTW 引导的 RubberBand R3 时变变速;其余与 M19 逐项相同,从基座重头训 100k 步——与 M19 线(40k+30k+30k 分三段续训到 100k)在同一总步数上对照
上游 ← 探针页:WSOLA 目标比均匀 R3 低 0.52 MOS、伪影占残差 24%(电音主犯)· R3 试听页:新引擎 UTMOS 2.78→3.05、对齐不变、用户听感确认
对照 M19 线全程(10k–100k 同 α 协议;唯一变量 = 变速引擎,且 M20 为单段连续训练、无优化器重启)

TL;DR

420k 终点:内容、音质、中立端三项创项目纪录,情感强度追平纪录;中段 α 仍有电音(已归因,非训练量问题)。

  • ✅ CER 0.046(M19 最佳 0.109、M18 0.410)——七个 α 档全胜且全部 ≤0.08,α=0 仅 0.05
  • ✅ MOS 2.09(M19 线最佳 1.92)· MOS@α=0 2.80,超过 M18 保持的 2.77 纪录
  • ✅ delta 0.911 追平 M18 纪录 —— 但末五点为 .768/.908/.783/.833/.911, 均值 0.841、极差 0.143,420k 落在波动带上沿,不能宣称稳定达到 0.911
  • ✅ 探针 cos 0.88(M18 为 0.89);幅度比 0.83,残差已近饱和(A_share 0.043 / GT 0.062)
  • ⚠️ 中段谷未解(α=0.5 的 MOS 1.56):探针页 §5 证明 纯 GT 线性混合在 α=0.5 只有 1.42(低于模型输出),是加性插值假设失效,与训练量、分离质量均无关
  • 📌 核心假设(R3 目标端 +0.27 UTMOS 能否传导到输出):成立,但需要长训—— 100k 时仅兑现 +0.09,420k 时 α=0 端兑现 +0.80(2.80 vs M19 的 2.00)

1 与 M19 的差异(仅此一处)

M19 M20
x1_neu 构造 DTW 锚点 + pytsmod WSOLA DTW 锚点 + RubberBand R3 实时流、逐块时变 time_ratio
缓存 data/m19_cache data/m20_cache(21,301 条,抽检 0 损坏)

其余全部不变:whisper 条件、双 adapter、残差参数化 v(α)=v_B+α·v_Δ、λ_ortho=1.0、 DiT_Δ 零头初始化、DDP 8×1、lr 1e-5、seed 1234。

起点 = 基座 flow.pt(--base_init,与 M18/M19 同一起点),不是从 M19 的 ckpt 续。

2 变速实现

见 R3 试听页 §1。要点:RubberBand 实时模式允许流中途修改 time_ratio, 因此单条流走完整句(256 样点一块更新速率),无分段拼接、无交叉淡入,绕开 pylibrb set_keyframe_map 的绑定 bug。变速耗时 0.11s/条(WSOLA 2.7s)。

⚠️ 缓存重建工程记录:8 进程多线程 185 条/分钟(预计 110 分钟)→ 改 48 进程单线程后 5 分钟跑完, 线程互斥是瓶颈而非 CPU 总量。

3 训练与评测

参数 值
步数 / 并行 100,000 / DDP 8×1(全局 batch 8)
初始化 DiT_B 基座全量、DiT_Δ 基座主体 + proj_out 置零、spk 基座、两 adapter 随机
lr / seed / λ_ortho 1e-5 / 1234 / 1.0
ckpt / 中评 每 10k;20k/40k/60k/80k 各一次中评
α 网格 {0, 0.25, 0.5, 0.75, 1, 1.5, 2}(最高档 2,用户逐轮降档结论)
输出 outputs/m20/

主判据:与 M19 线同步数点对比 —— MOS(尤其 α=0 与中段)、CER@α=0、delta。

M19 参照点:10k delta .366/CER .422/MOS 1.34 · 40k .628/.207/1.70 · 70k .707/.202/1.93 · 90k .835/.109/1.92(M19 线最佳) · 100k .783/.125/1.82。 M20 另有一处天然优势:单段连续训练,不像 M19 线在 40k/70k 处有两次优化器重启。

4 结果(截至 260k,用户指定停点)

🎧 M20 音频对照(M20@40k vs M19@40k 同步数点同名对拍 + M19 90k★ 参照 + 输入/自然中立原音频)

4.1 40k 同步数点对照(M19 的 40k 终点 vs M20 的 40k 中评)

delta CER 总 CER@α=0 MOS MOS@α=1
M19@40k(WSOLA) 0.628 0.207 0.19 1.70 2.10
M20@40k(R3) 0.557 0.110 0.12 1.71 1.89

按 α 分层:

α MOS M19 MOS M20 CER M19 CER M20
0.0 1.79 1.75 0.19 0.12
0.25 1.52 1.62 0.07 0.11
0.5 1.51 1.69 0.04 0.05
0.75 1.77 1.84 0.05 0.11
1.0 2.10 1.89 0.06 0.12
1.5 1.95 1.75 0.10 0.10

40k 对照

  • ✅ 内容大幅领先:CER 总 0.207 → 0.110(同步数点降 47%),且中段与情感端全线更低
  • ⚖️ 音质持平:MOS 1.70 vs 1.71——R3 目标端那 +0.27 UTMOS 未在 40k 处传导为输出增益
  • ⚠️ 情感强度落后:delta 0.628 → 0.557;MOS@α=1 2.10 → 1.89
  • 20k 处落后更明显(delta .368 vs .619),40k 已追近——早期动态差异为主,非结构劣势

4.2 训练曲线(全程 0–420k,含 100k/180k/260k 三次续训,vs M19 线)

训练曲线

逐 40k 段均值(红点线 = 三次续训重启;180–260k 段为 4 卡×2,其余 8 卡×1,全局 batch 恒为 8):

段 L_sum M20 / M19 L_B M20 / M19 L_Δ M20 / M19 A_share M20 / M19
0–40k 1.056 / 1.030 1.146 / 1.080 2.068 / 1.858 0.0166 / 0.0192
40–80k 0.814 / 0.742 0.973 / 0.861 1.569 / 1.233 0.0286 / 0.0299
80–120k 0.743 / 0.686 0.874 / 0.800 1.329 / 1.102 0.0330 / 0.0373
120–160k 0.681 / — 0.838 / — 1.179 / — 0.0343 / —
160–200k 0.652 / — 0.786 / — 1.065 / — 0.0385 / —
200–240k 0.612 / — 0.752 / — 0.969 / — 0.0411 / —
240–280k 0.595 / — 0.726 / — 0.912 / — 0.0419 / —
280–320k 0.581 / — 0.733 / — 0.923 / — 0.0408 / —
320–360k 0.569 / — 0.701 / — 0.880 / — 0.0405 / —
360–400k 0.555 / — 0.695 / — 0.878 / — 0.0407 / —
400–420k 0.546 / — 0.695 / — 0.865 / — 0.0430 / —
  • 重建项全程仍在降:L_sum 1.18 → 0.55 档、L_B 1.22 → 0.70 档、L_Δ 2.30 → 0.85 档
  • A_share 在 0.043 附近饱和(GT 参照 0.062,达成约 69%)——与探针幅度比 0.83 一致, 残差幅度这条线已到顶,这解释了 delta 为何只在 0.77–0.91 的带内摆而不再系统上行
  • 三次续训重启只有短暂抬升即回落;4 卡×2 与 8 卡×1 之间无断层

4.3 全程轨迹(M20 线 0–420k vs M19 线 0–100k,同步数点)

步数 delta M20 / M19 CER M20 / M19 MOS M20 / M19 MOS@α=1 M20 / M19 MOS@α=0 M20 / M19
20k 0.368 / 0.619 0.293 / 0.278 1.44 / 1.47 1.49 / 1.67 1.42 / 1.40
40k 0.557 / 0.628 0.110 / 0.207 1.71 / 1.70 1.89 / 2.10 1.75 / 1.79
60k 0.500 / 0.568 0.146 / 0.196 1.75 / 1.79 2.01 / 2.38 1.82 / 1.69
80k 0.616 / 0.799 0.140 / 0.157 1.84 / 1.90 2.18 / 2.46 2.00 / 1.93
100k 0.641 / 0.783 0.100 / 0.125 1.85 / 1.82 2.32 / 2.23 2.09 / 2.00
120k 0.659 / — 0.103 / — 1.88 / — 2.31 / — 2.14 / —
140k 0.742 / — 0.136 / — 1.87 / — 2.28 / — 2.13 / —
160k 0.655 / — 0.109 / — 1.85 / — 2.37 / — 2.04 / —
180k 0.722 / — 0.091 / — 1.99 / — 2.43 / — 2.41 / —
200k 0.721 / — 0.072 / — 1.96 / — 2.42 / — 2.48 / —
220k 0.769 / — 0.085 / — 2.02 / — 2.51 / — 2.44 / —
240k 0.779 / — 0.062 / — 2.06 / — 2.58 / — 2.69 / —
260k 0.768 / — 0.069 / — 2.06 / — 2.50 / — 2.66 / —
300k 0.908 / — 0.069 / — 2.05 / — 2.59 / — 2.64 / —
340k 0.783 / — 0.051 / — 2.06 / — 2.56 / — 2.68 / —
380k 0.833 / — 0.049 / — 2.12 / — 2.65 / — 2.80 / —
420k 0.911 / — 0.046 / — 2.09 / — 2.61 / — 2.80 / —

全程轨迹

420k 终点在几乎所有维度上都是项目最佳:CER 0.046(M18 为 0.410、M19 最佳 0.109)、 MOS 2.09、MOS@α=0 2.80(超过 M18 的 2.77 纪录)、delta 0.911(追平 M18 纪录)。

⚠️ delta 要按波动带读,不能只看终点:末五点为 0.768 / 0.908 / 0.783 / 0.833 / 0.911, 均值 0.841、极差 0.143——420k 恰好落在带的上沿,不能声称"稳定达到 0.911"。 相较之下 CER 是单调改善(0.069 → 0.069 → 0.051 → 0.049 → 0.046),不在噪声带内。

4.4 420k 终点按 α 分层

α 0 0.25 0.5 0.75 1.0 1.5 2.0
MOS M20@420k 2.80 1.91 1.56 2.14 2.61 2.15 1.47
MOS M19 90k★ 2.05 1.65 1.56 1.96 2.46 2.32 1.43
CER M20@420k 0.05 0.08 0.06 0.03 0.03 0.03 0.05
CER M19 90k★ 0.31 0.15 0.07 0.04 0.04 0.07 0.08
  • CER 七档全胜,且全部 ≤0.08——α=0 只有 0.05(M19 为 0.31,M18 为 1.24)
  • MOS 在 α=0 / 0.25 / 0.75 / 2.0 四档领先;α=0.5 / 1.0 / 1.5 三档仍略逊 M19
  • 中段谷仍在(α=0.5 为 1.56)——已由探针页 §5 归因为 加性插值假设失效,与训练量无关

4.5 探针 cos(v_Δ, x1_emo−x1_neu)(held-out 300,t=0.1/0.5/0.9 中位)

M19@100k M20@100k M20@180k M20@260k M20@420k 参照 M18-λ1.0
cos 0.69 / 0.81 / 0.83 0.65 / 0.76 / 0.78 0.70 / 0.82 / 0.84 0.73 / 0.85 / 0.87 0.73 / 0.86 / 0.88 0.74 / 0.88 / 0.89
‖v_Δ‖/‖GT‖ 0.66 / 0.75 / 0.76 0.61 / 0.70 / 0.71 0.69 / 0.78 / 0.79 0.72 / 0.81 / 0.82 0.71 / 0.82 / 0.83 0.73 / 0.89 / 0.92

残差方向 0.88 已逼近 M18 相减式的 0.89;幅度比 0.83 仍低于 M18 的 0.92, 但 260k→420k 仅从 0.82 挪到 0.83——残差幅度这条线基本到顶了。

4.6 MOS 收敛判读(0–420k)

MOS 轨迹

各 α 的 MOS 全程轨迹(步数单位 k):

α 20 40 60 80 100 120 140 160 180 200 220 240 260 300 340 380 420
0.0 1.42 1.75 1.82 2.00 2.09 2.14 2.13 2.04 2.41 2.48 2.44 2.69 2.66 2.64 2.68 2.80 2.80
0.25 1.43 1.62 1.55 1.58 1.65 1.68 1.67 1.59 1.81 1.76 1.83 1.94 1.94 1.79 1.86 1.89 1.91
0.5 1.43 1.69 1.60 1.57 1.51 1.48 1.48 1.44 1.59 1.52 1.58 1.53 1.59 1.55 1.52 1.54 1.56
0.75 1.48 1.84 1.82 1.87 1.96 1.91 1.93 1.84 2.00 1.93 2.08 2.08 2.11 2.07 2.12 2.09 2.14
1.0 1.49 1.89 2.01 2.18 2.32 2.31 2.28 2.37 2.43 2.42 2.51 2.58 2.50 2.59 2.56 2.65 2.61
1.5 1.46 1.75 1.93 2.12 2.05 2.19 2.12 2.19 2.20 2.12 2.24 2.14 2.14 2.22 2.17 2.30 2.15
2.0 1.33 1.47 1.49 1.56 1.41 1.43 1.49 1.47 1.47 1.47 1.48 1.44 1.47 1.47 1.49 1.54 1.47
总 1.44 1.71 1.75 1.84 1.85 1.88 1.87 1.85 1.99 1.96 2.02 2.06 2.06 2.05 2.06 2.12 2.09
  • α=0 从 1.42 涨到 2.80(+1.38),是改善最大的档位,且已超过 M18 保持的 2.77 纪录
  • 中段谷仍未填平:α=0.5 停在 1.56(曾在 260k 达 1.59),α=0.25 到 1.91 后走平
  • α≥1 基本收敛:α=1 在 2.5–2.65 之间摆、α=1.5 在 2.1–2.2、α=2 在 1.4–1.5
  • 训练侧末段 A_share 0.043(GT 参照 0.062,达成 69%),探针幅度比 0.83——残差已近饱和

5 结论

项 结论(420k 终点)
核心假设 ✅ 成立但需长训:R3 目标端 +0.27 UTMOS 的优势,100k 时几乎不可见(+0.09)、180k 显形、420k 在 α=0 端兑现 +0.80。⇒ 1× 预算下的数据端消融,结论可能是反的
内容 ✅ CER 0.046 项目最佳,七档全胜且全 ≤0.08;α=0 从 M18 的 1.24 / M19 的 0.31 降到 0.05
音质 ✅ MOS 2.09 项目最佳(M18 1.98 / M19 1.92);MOS@α=0 2.80 破 M18 的 2.77 纪录
情感强度 ✅ delta 0.911 追平纪录,但按波动带读为 0.84 ± 0.07;残差幅度已饱和(A_share 0.043/0.062、探针幅度比 0.83),继续堆步数不会再涨
中段 α ❌ 未解且非训练问题:α=0.5 的 MOS 1.56,而纯 GT 线性混合只有 1.42——模型已在天花板上。病根是 中立 + α·Δ 的加性假设对"频率位置"类信息失效(探针页 §5)
推荐 ckpt M20@420k = outputs/m20d/ckpts/step160000.pt —— 项目当前最佳模型
并行度 8×1 与 4×2(全局 batch 恒 8)曲线无断层;CPU 空闲时 4 卡×2 达 285 步/分钟,快于 8 卡×1 的 243

方法学教训

  1. n=1 评测点抖动可达 ±0.08:delta 在末五点极差 0.143,单点(甚至三点)不足以判趋势; CER/MOS 的单调改善才是可信信号
  2. 数据端的感知改善需长训才能穿过 L2 损失:本轮传导用了约 4× 步数才充分显形

下一步(中段 α 是唯一未解项)

α≥0.75 与 α=0 均已可用;唯一短板是中段,且已确认不是训练问题。候选修法见 探针页 §5.1b–5.1d:核心思路是在推理端把被搞模糊的谐波结构重新建立 (扔掉旧梳齿 → 按插值 F0 画上新梳齿 → 源与滤波器保持一致),全部在推理端、不动训练。 ⬜ 该对照实验尚未运行。

讨论