M19 · DTW 对齐目标 + 双 adapter + 残差塔¶
| 状态 | ✅ 完成(2026-08-30,续训至 100k)——CER@α=0 治愈、CER 0.109 项目最低(90k)、α=2 外推修复、delta 爬至 0.835;MOS 于 ~1.9 见顶 |
| 一句话 | 在 M18-λ1.0 基础上三处改动:① 中立目标换 DTW 对齐版(mock 已验收)② adapter × 2 ③ 残差参数化——DiT_B 预测中立速度、DiT_Δ 直接预测「情感−中立」残差,情感 = 两塔之和 |
| 上游 | ← M19 Mock:DTW-WSOLA 把错位中位 23–284ms 压到 0–20ms(≤1 帧),用户听感通过 · M18 遗留 α=0 乱说与 cos(A,GT) 封顶 0.89 |
| 对照 | M18-λ1.0(三处全不改的基线) |
TL;DR¶
α=0 乱说病治愈;内容跟随全面登顶;但情感强度与音质双双不及 M18-λ1.0。
- ✅ CER@α=0:1.24 → 0.19(目标 <0.3)——DTW 对齐 + 双 adapter 两刀合并生效; CER 中段谷同时消失(α 0.25/0.5/0.75 = 0.07/0.04/0.05,M18 同位 0.94/0.20/0.07),CER 总 0.410→0.207 项目最低
- ⚠️ delta 0.628(M18 0.911):A_share 终点仅 0.027(GT 参照 0.078,残差约长到三成半), 且 30k→40k 平台(0.648→0.628);α=5 外推恶化(CER 0.21→0.94)同根——残差未成熟时 ×5 出界
- ⚠️ MOS 1.70(M18 1.98)、MOS@α=1 2.10 vs 2.81——α=1 的目标 x1_emo 并未过 WSOLA, 故不全是引擎税:和式 v=v_B+v_Δ 让 v_B 的 WSOLA 糙感直通情感端是主嫌疑
- MOS 轨迹 1.34→1.47→1.60→1.70 仍在爬未收敛,可续;三处改动捆绑,单变量归因待 §5.1
- 🔁 续训 +30k(→70k,用户决定,纯续训无配置改动):MOS 1.70→1.93(追平 M18 的 98%)、 MOS@α=1 2.10→2.55、delta 0.628→0.707——"40k 未收敛"确认;α=3 外推仍崩(MOS 1.26)—— 外推短板是结构性的,不随训练量消失
1 架构¶
情感音频 wav ─→ frozen whisper-large-v3 encoder(同 M17/M18)
├─ adapter_B(可训 2.2M)→ μ_B ─→ DiT_B → v_B ←u_n 监督(中立速度)
└─ adapter_Δ(可训 2.2M)→ μ_Δ ─→ DiT_Δ → v_Δ ←仅经和式损失隐式塑形(残差)
xvector → spk 线性层(基座权重)→ 两塔共用
DiT_B 全量基座初始化;DiT_Δ 基座主体 + proj_out 置零;cond ≡ 0;同一画布/噪声/t
| 与 M18-λ1.0 的差异 | M18 | M19 |
|---|---|---|
| 中立目标 x1_neu | 均匀 R3 | DTW-WSOLA 对齐版(250ms 锚、速率夹 [0.4,2.5]) |
| adapter | 1 个共享 | 2 个独立(结构相同) |
| 塔的分工 | v_A←u_e、v_B←u_n,A=相减 | v_B←u_n;情感=v_B+v_Δ(和式监督),v_Δ 隐式为残差 |
2 数据重建(仅 x1_neu 一个字段)¶
1. DTW 路径:情感 mel ↔ 自然中立 mel(librosa,M10 路径代码复用)
2. 锚点化:每 250ms 一锚 + 端点固定 + 单调 + 局部速率夹 [0.4, 2.5]
3. pytsmod WSOLA 锚点变速:中立【波形】变速率拉伸到情感时间轴(保音高)
4. 重提 mel → 新 x1_neu,断言 K == 2N
Mock 验收(m19-mock,12 配对):残余错位中位 0–20ms(≤1 mel 帧)、
p90 20–130ms;用户听感"与均匀版差不多"(节奏泄漏与引擎代价可接受)。
whisper 特征、xvec 均不变;输出 data/m19_cache/(仅覆盖 x1_neu 字段)。
3 训练¶
1. μ_B = adapter_B(feat);μ_Δ = adapter_Δ(feat);spks 同 M18
2. t ~ U[0.05,0.95]、α ~ U[0,1];x_α = (1−α)x1_neu + αx1_emo;y = (1−(1−σ)t)z + t·x_α
3. v_B = DiT_B(y, μ_B, t, spks);v_Δ = DiT_Δ(y, μ_Δ, t, spks)
4. 损失(生成段即全长;残差直接监督项经用户决定移除):
L = ‖v_B − u_n‖² (中立重建)
+ ‖(v_B + v_Δ) − u_e‖² (和式:情感由两塔合成 —— v_Δ 隐式学「补足 B 到情感」)
+ 1.0 · L_ortho(v_Δ, v_B) (λ=1.0,沿用 M18 消融结论)
诊断量 ‖v_Δ − (u_e−u_n)‖² 仅记日志不进梯度(观察残差是否自发对准 mel 差)
5. AdamW 联合更新两塔 + 两 adapter,grad_clip=1.0
| 参数 | 值 |
|---|---|
| 初始化 | DiT_B:基座 flow.pt 全量;DiT_Δ:基座主体 + proj_out 置零(init 时 v_Δ≡0、v(α)≡v_B——保留语音分析先验、消除"全量→残差"语义错位);spk 层基座权重;两 adapter 随机 |
| 步数 / 并行 | 40,000 / DDP 8×1(全局 batch 8) |
| lr / seed / clip | 1e-5 / 1234 / 1.0 |
| ckpt / 中途评测 | 每 10k;10k/20k/30k(同协议) |
| 日志 | L_B、L_sum、L_ortho、L_Δ(仅诊断)、grad_norm、A_share(=‖v_Δ‖²/‖v_B+v_Δ‖²)、cos(v_Δ,v_B) |
| 输出 | outputs/m19/ |
4 推理与评测¶
v(α) = v_B + α · v_Δ ← α 直接缩放残差塔输出,无相减
α ∈ {0, 0.25, 0.5, 0.75, 1, 1.5, 5};其余同 M18(P6 12 组、eval_suite 口径)
| 主判据 | 目标 |
|---|---|
| CER@α=0(乱说) | 1.24 → <0.3(DTW + 双 adapter 两刀的合并效果) |
| cos(v_Δ, GT 残差) | 0.89 →(残差成为一等输出后是否上升) |
| delta / MOS / 中段谷 | 不劣于 M18-λ1.0(0.911 / 1.98 / α=0.5 谷 1.37) |
探针:teacher-forced cos(v_Δ, x1_emo−x1_neu)(不再需要相减)。
5 已知不确定点¶
- 三处改动捆绑——若大幅改善/恶化,归因需后续单变量消融(DTW-only、双adapter-only 各 4h)
- WSOLA 目标的引擎质感略糙于 R3(冒烟 CER 0.026 vs 0.005)——若 α=0 的 MOS 受限,换分段 R3 实现
- v_Δ 只受和式梯度:早期 v_B 未收敛时它追的是移动目标 u_e−v_B,收敛后才落到真残差——L_Δ 诊断曲线负责观察这一过程
- 节奏泄漏已知并接受:DTW 使中立目标带上情感的句内节奏(用户听感判定可接受),α=0 的"中立"限谱形层——scope 声明进文档
- ~~残差塔基座初始化的语义错位~~ → 已由「基座主体 + 零头」解决(init 时 v_Δ≡0)
6 资源¶
缓存重建(仅 x1_neu,8 进程)约 40 分钟;训练 DDP 8×1 约 4 小时;评测 + 探针约 1 小时。
7 结果¶
🎧 M19 音频对照(与 M18-λ1.0 同名对拍 12 组 × 7 α + 输入原音频)
7.1 终点主表(P6 12 组 × 7 α,40k)¶
| 臂 | delta | CER 总 | CER@α=0 | MOS | MOS@α=0 | MOS@α=1 | CER@α=5 |
|---|---|---|---|---|---|---|---|
| M18 λ=1.0 | 0.911 | 0.410 | 1.24 | 1.98 | 2.77 | 2.81 | 0.21 |
| M19 | 0.628 | 0.207 | 0.19 | 1.70 | 1.79 | 2.10 | 0.94 |
按 α 分层(M19):MOS 0:1.79 0.25:1.52 0.5:1.51 0.75:1.77 1:2.10 1.5:1.95 5:1.27;
CER 0:0.19 0.25:0.07 0.5:0.04 0.75:0.05 1:0.06 1.5:0.10 5:0.94。
7.2 轨迹(10k/20k/30k/40k,vs M18-λ1.0 同协议)¶
| step | delta | CER 总 | CER@α=0 | MOS | MOS@α=1 |
|---|---|---|---|---|---|
| 10k | 0.366 | 0.422 | 0.41 | 1.34 | 1.35 |
| 20k | 0.619 | 0.278 | 0.23 | 1.47 | 1.67 |
| 30k | 0.648 | 0.262 | 0.29 | 1.60 | 1.95 |
| 40k | 0.628 | 0.207 | 0.19 | 1.70 | 2.10 |

训练侧读数:L_sum 首尾 1.35→0.85;L_Δ 诊断 2.20→1.30——残差无直接监督下自发向 真 mel 差靠拢(和式梯度生效);A_share 0.002→0.027(GT 参照 0.078,见 §7.5)——残差 40k 长到约三成半, 与 delta 平台(30k 0.648→40k 0.628)互为表里。
7.3 探针 cos(v_Δ, x1_emo−x1_neu)(held-out 300,t=0.1/0.5/0.9 中位)¶
| M18 λ=1.0(A=v_A−v_B) | M19 40k(v_Δ 直接输出) | M19c 70k | M19d 100k | |
|---|---|---|---|---|
| cos | 0.74 / 0.88 / 0.89 | 0.63 / 0.74 / 0.75 | 0.68 / 0.79 / 0.80 | 0.69 / 0.81 / 0.83 |
| ‖·‖/‖GT‖ | 0.73 / 0.89 / 0.92 | 0.59 / 0.64 / 0.67 | 0.66 / 0.73 / 0.73 | 0.66 / 0.75 / 0.76 |
读法:残差成为一等输出后 cos 不升反降(0.89→0.75)、幅度只到 GT 的 ~0.6—— 与 A_share 欠长互证:和式隐式塑形在 40k 内既没让残差长满、方向对齐也弱于相减式。 提示残差塔要么需要更长训练/更大 lr,要么需要恢复被移除的直接监督项(低权重)。
7.4 续训至 70k(M19c,用户决定:纯续训 +30k、α 最高档 5→3)¶
40k ckpt 起续(优化器重启、数据序 seed 2345,其余配置不变),10k/20k 中评 + 30k 终评:
| 全局步 | delta | CER 总 | CER@α=0 | MOS | MOS@α=1 | 外推 CER |
|---|---|---|---|---|---|---|
| 40k(M19 终点) | 0.628 | 0.207 | 0.19 | 1.70 | 2.10 | α5: 0.94 |
| 50k | 0.681 | 0.199 | 0.30 | 1.71 | 2.03 | α3: 0.68 |
| 60k | 0.568 | 0.196 | 0.26 | 1.79 | 2.38 | α3: 0.61 |
| 70k | 0.707 | 0.202 | 0.34 | 1.93 | 2.55 | α3: 0.63 |
| 80k(M19d,α 档 3→2) | 0.799 | 0.157 | 0.38 | 1.90 | 2.46 | α2: 0.21 |
| 90k | 0.835 | 0.109 | 0.31 | 1.92 | 2.46 | α2: 0.08 |
| 100k | 0.783 | 0.125 | 0.33 | 1.82 | 2.23 | α2: 0.11 |
🎧 90k★(推荐 ckpt)与 100k 均已上音频页四臂对拍。
🔬 天花板与电音归因见 M19 探针页:MOS@α=1 天花板 2.61(本模型 2.55 = 98%)、 delta 天花板 0.885(本模型 0.835 = 94%)、α=0 天花板被 WSOLA 砍到 2.81——残余电音的主犯是变速引擎而非模型。

(上图为 0–100k 拼接,40k/70k 竖虚线 = 优化器重启点;A_share 面板含订正后的 GT 参照,见 §7.5)
7.5 GT 残差能量参照的订正¶
此前沿用的 A_share 参照 0.095 是 M18 时代(均匀 R3 数据)的估计值,两处不准:
| 数据 | 用于 | GT A_share 中位(含 z,与训练同定义) | ‖x_e−x_n‖ 中位 |
|---|---|---|---|
m13_cache(均匀 R3) |
M18 | 0.115 | 264.6 |
m19_cache(DTW 对齐) |
M19 线 | 0.078 | 222.9 |
n=400 条,u_e−u_n = x1_emo−x1_neu、u_e = x1_emo−(1−σ)z(σ=1e-6)。
- 均匀 R3 的真值是 0.115 而非 0.095——旧估计偏低
- DTW 对齐使 GT 残差缩小 32%(0.115→0.078):时间轴对齐后,两条 mel 的差不再包含节奏错位那一部分, 这是对齐操作的直接后果,也意味着 M19 的残差塔本来就该学一个更小的量
- 据此重读:A_share 末段 0.037 ÷ 0.078 = 约 48%(而非旧口径的"三成"); 探针幅度比 ‖v_Δ‖/‖GT‖ = 0.76(t=0.9)与之一致(0.76² ≈ 0.58,α/t 分布差异内)
- 结论方向不变(残差仍欠长),但欠长程度比此前叙述轻:已过半程,缺的是最后一半而非七成
按 α 分层(70k):MOS 0:1.92 0.25:1.65 0.5:1.64 0.75:2.12 1:2.55 1.5:2.39 3:1.26;
CER 0:0.34 0.25:0.14 0.5:0.08 0.75:0.07 1:0.07 1.5:0.09 3:0.63。
- MOS 于 ~1.9 见顶(70k–100k 四点 1.93/1.90/1.92/1.82):音质端续训油水到 70k 基本吃完; 50k 停滞系优化器重启适应期;100k 终点 MOS@α=1 回落至 2.23(80–90k 为 2.46)—— 情感端在 delta 上爬的同时自然度略有交换
- delta 后程发力:70k 后 0.707→0.799→0.835(90k,达 M18 0.911 的 92%)—— 残差塔并非死平台,只是生长极慢;100k 0.783 回落在波动带内
- α=2 外推修复(用户降档正确):CER 0.63(α3)→ 0.08(α2@90k)—— 可用外推范围就是 [0, 2],再往上是残差幅度欠长下的线性放大出界
- CER 总 0.109(90k,项目历史最低);CER@α=0 波动带 0.19–0.38,主判据不回吐
- 90k 为综合最优 ckpt(delta 0.835 / CER 0.109 / MOS 1.92):
outputs/m19d/ckpts/step20000.pt
8 结论¶
| 项 | 结论 |
|---|---|
| α=0 乱说(主判据) | ✅ 治愈:CER@α=0 1.24→0.19,且 10k 起即 0.41——"均匀目标逐帧错位"假设被 DTW 对齐+双 adapter 证实(捆绑归因,单变量消融待做) |
| 内容跟随 | ✅ 项目最佳:CER 总 0.207,α∈[0.25,1.5] 全部 ≤0.10,CER 中段谷消失 |
| 情感强度 | 🔼 delta 90k 达 0.835(M18 的 92%)——纯续训在 70k 后兑现了情感强度;按订正后的 GT 参照(0.078,§7.5),A_share 已达 48%、探针幅度比 0.76——残差欠长但已过半程,比旧叙述乐观。要快就加回低权重直接监督,要稳就接受慢生长 |
| 音质 | ✅ MOS 见顶 ~1.9(M18 1.98 的 97%,70k–100k 四点平)——训练量的油水已榨干;中段谷(α 0.25–0.5 ≈1.55)与 M18 α=0.5 位持平或反超,但整体天花板略低于 M18,残差 = WSOLA 目标引擎税的最终嫌疑(换分段 R3 目标可归因) |
| α 外推 | ✅(降档后)α=2 内可用:CER 0.08(90k)——外推边界即残差幅度边界;α≥3 仍出界,除非残差长满否则不推 |
| 收敛 | 100k 定论:MOS ~1.9 见顶、delta 0.84 波动带、堆步数边际归零——M19 线的训练量故事结束。推荐 ckpt = 90k(step20000.pt of m19d)。下一刀二选一:① 低权重残差直接监督(治 delta 最后 8% + 或有惊喜)② 分段 R3 目标重建(归因 MOS 天花板 1.9 vs 1.98 的最后差距) |