wikiAudio08|F5-TTS:流匹配与文本引导的语音补全03|流匹配训练:插值路径、语音补全与条件丢弃
7 分钟
0 次观看

03|流匹配训练:插值路径、语音补全与条件丢弃

流匹配训练不需要先运行一条完整生成轨迹。每个样本随机选择流时间,把噪声与真实 mel 插值成一个中间状态,训练网络预测该位置的速度。生成时才沿多个时间步反复调用同一网络。

F5-TTS 又把任务组织成语音补全:模型可见部分参考语音,却不能在条件分支直接看到待生成区域的真实 mel。于是训练里至少有三种不同的遮罩含义,混在一起会造成标签泄漏或损失统计错误。原论文 §2–3

带噪声状态中含有目标信息是训练路径的一部分;条件分支泄漏完整目标则是另一回事。

图 1|流状态、可见条件、有效长度与监督区域的区分

图 1|流状态、可见条件、有效长度与监督区域的区分

1. 从直线路径推导速度

Xt=(1−t)X0+tX1,Ut=dXtdt=X1−X0.X_t=(1-t)X_0+tX_1,\qquad U_t=\frac{dX_t}{dt}=X_1-X_0.
符号、形状与约定
符号解释与例值
X0X_0采样的高斯噪声,[B,T,F]。
X1X_1真实 mel,同样为 [B,T,F]。
tt0 到 1 的无量纲流时间;每个样本可随机抽取。
XtX_t两端点之间的中间状态。
UtU_t该条件直线路径的目标速度;对固定两端点不随 t 改变。
d/dtd/dt对流时间求导,不是对音频采样点求导。

单个两频带位置取 X0=(0,2)、X1=(4,0):t=0.25 时状态为 (1,1.5),速度为 (4,−2)。训练网络看到的是混合了不同目标配对的状态,学到的整体速度场一般随状态与时间变化;不能因为某条条件路径是直线,就把所有真实生成轨迹都当成恒定速度。

2. 状态、参考条件与监督区域的掩码

位置示例帧 0帧 1帧 2帧 3帧 4
有效帧 valid11110
需要生成 generate00111
条件 mel 可见11000
损失纳入00110

帧 4 即使标记待生成,仍属于 padding,所以不参加损失。用于注意力的有效长度 mask 与用于损失的监督 mask 也应分别传递;一个控制网络读取范围,一个控制梯度监督位置。

L=∑b,t′,fMb,t′(Vθ(Xt,C,z,t)b,t′,f−Ut,b,t′,f)2F∑b,t′Mb,t′.\mathcal L=\frac{\sum_{b,t',f}M_{b,t'} (V_\theta(X_t,C,z,t)_{b,t',f}-U_{t,b,t',f})^2} {F\sum_{b,t'}M_{b,t'}}.
符号、形状与约定
符号解释与例值
b,t′,fb,t\prime,f批、音频帧和频带索引;t′ 避免与流时间 t 混淆。
MMgenerate 与 valid 的逻辑与,仅在真正要生成的有效区域为 1。
VθV_\theta网络预测速度;参数 θ 被训练。
C,zC,z遮盖后的 mel 条件和文本条件。
Ut,FU_t,F目标速度与频带总数;分母统计监督标量数。
L\mathcal L教学版 masked MSE;这里明确了批内有效元素平均规则。

若两帧各 2 频带都预测 0、目标速度全为 1,四个平方误差和为 4,除以 4 得到损失 1。参考区域再大,也不稀释这个数。

3. 构造一次训练批次

下方函数对应图 1 的四个输出:状态、参考条件、速度标签、监督 mask。它不执行神经网络;调用方把前三类条件交给网络,再按 mask 计算损失。

def cfm_batch(target, noise, time, generate, valid):
    # [B,T,F], time [B], Boolean masks [B,T]
    tau=time[:,None,None]
    state=(1-tau)*noise+tau*target
    reference=target.masked_fill((generate|~valid)[...,None],0)
    supervised=generate & valid
    if not supervised.any(): raise ValueError('no generated valid frame')
    return state,reference,target-noise,supervised

time[:,None,None] 保证同一句使用同一个流时间,并在帧与频带轴广播。把时间张量误放成 [T] 虽可能广播成功,却会变成每帧处于不同噪声阶段的另一个训练任务。

本轮 CPU 实验得到条件 [1,1,0,0,0]、监督 mask [0,0,1,1,0]、loss=1;参考帧和 padding 帧的预测梯度全为零。完整模型仍需验证注意力是否正确处理 padding。

4. 条件丢弃与 CFG 的训练基础

如果推理要比较有条件与无条件速度,训练就必须让模型见过对应的条件缺失状态。条件丢弃针对的是参考音频或文本支路,并不是把当前流状态整个清零。原论文区分音频条件丢弃,以及音频和文本同时丢弃;复现实例应按代码约定构造空条件。

输入支路正常条件对应丢弃情况
流状态当前带噪 mel仍然保留
参考 mel可见语音部分按训练配置变为无参考条件
文本参考与目标文字联合丢弃时采用空文本约定
流时间t始终需要

CFG 能否工作取决于训练过的条件缺失方式,不能临时发明一个从未见过的空输入格式。

5. 训练日志与最小验证

分别统计不同流时间区间、参考比例和语句长度上的误差。总均值相近时,早期低信噪阶段的错误可能更影响后续对齐。自由生成仍需固定文本、参考和随机种子,检查漏读与音色,而不只是看速度 MSE。

速度目标拟合正确不等于最终语音自然;长度估计、积分误差和声码器仍会影响结果。

继续 参考提示、Sway 与采样。

专题导航:TTS 总目录 · 上级章节 · 实验代码与实测记录

正在连接 GitHub 评论…