wikiAudio05|HiFi-GAN:并行波形生成与周期判别02|判别器:多周期重排与多尺度观察
6 分钟
0 次观看

02|判别器:多周期重排与多尺度观察

波形的相邻样本高度相关,只看几段连续局部波形,未必能有效识别周期统计是否自然。HiFi-GAN 同时使用 MPD 与 MSD:前者按固定周期把相隔的采样点放到同列,后者在不同平滑尺度上看连续结构。

这里的 period 是重排超参数,不是检测出来的基频周期。原方法的五个周期为 2、3、5、7、11。论文 §2.3 · DiscriminatorP / DiscriminatorS

MPD 重排保留全部采样点;MSD 的平均池化会改变所观察的细节尺度。

图 1|周期重排、沿列卷积与波形梯度的对应

图 1|周期重排、沿列卷积与波形梯度的对应

1. 一维波形的周期重排与二维卷积

给定波形 x[0...11],周期为 3,重排结果为:

行列 0列 1列 2
0x[0]x[1]x[2]
1x[3]x[4]x[5]
2x[6]x[7]x[8]
3x[9]x[10]x[11]
Z[r,c]=x[rp+c],0≤c<p.Z[r,c]=x[rp+c],\qquad 0\le c<p.
符号、形状与约定
符号解释与例值
x[n]x[n]第 n 个波形采样值。
pp固定重排周期,教学例 3。
r,cr,c重排后行、列索引;列为原索引对 p 的余数。
ZZ重排矩阵;带批和通道时形状 [B,1,ceil(L/p),p]。
L,ceil⁡L,\operatorname{ceil}原波形长度及向上取整;末尾不足整行时先 padding。

卷积核宽度方向取 1,因此每个局部核不会同时混合相邻余数列。高度方向的相邻元素,在原波形里相差 p 点。例如高度为 3 的核作用于列 1,会读取 x[1],x[4],x[7],原始跨度为 7 点。

这种“按同余位置观察”与每 p 个点只抽一个点不同。前者每列都被处理,所有采样点都有梯度路径;后者会遗漏其余余数类。

2. 非整除长度的反射填充

官方实现先做 reflect padding。长度 10、周期 3 时需要 2 个补点;输入值 0...9 的末尾补 8、7,最后一行是 [9,8,7]。上一轮简单实验的零填充只适合演示矩阵形状,本篇补充更接近官方路径的边界检查。

# x: [B,1,L];极短片段需要先保证 reflect 的长度条件
pad = (-x.shape[-1]) % period
if pad:
    x = torch.nn.functional.pad(x, (0, pad), mode="reflect")
folded = x.reshape(x.shape[0], 1, -1, period)

先补齐再 reshape。代码只改变布局和边界,没有提取 F0、没有重采样,也没有把周期 3 理解成每秒 3 Hz。CPU 实验已核对完整重排序列为 0,1,2,3,4,5,6,7,8,9,8,7。

图 2|同一波形的原尺度、二倍与四倍平滑观察

图 2|同一波形的原尺度、二倍与四倍平滑观察

3. MSD 与 MPD 提供互补视角

路径输入变化主要保留主要损失
MSD 原尺度不下采样高频和连续局部形状长距离跨度受层数限制
MSD 较粗尺度平均池化后再卷积更长时间范围的包络、结构部分细微高频
MPD 固定周期重排到余数列多种采样间隔上的统计单个宽度为 1 的核不混合余数列

MSD 的三个子判别器观察原波形及逐级池化后的两种尺度。官方第一支使用 spectral normalization,其余使用 weight normalization;这些是训练稳定性实现细节,不是“多尺度”的定义。

4. 局部判别输出与中间特征

每个子判别器通常输出一串局部评分,再在训练损失中平均。多处局部评分迫使生成器改善不同片段,而不是只让一个全局均值看起来正确。判别器还返回中间特征图,供下一篇特征匹配损失使用。

返回对象用途典型错误
各子判别器的最终评分最小二乘对抗损失误当作经过 sigmoid 的概率
每层 feature map特征匹配损失在生成器阶段把 fake feature detach
对输入波形的梯度指导生成器改进生成器阶段全程 no_grad

多判别器增加的是训练反馈;推理只保留生成器,不必执行 MPD 和 MSD。

5. 有区分力的验证方式

先验证重排前后索引一一对应,再检查所有非填充采样点能否接收梯度。比较周期扰动时应保持音频内容、响度和长度一致,否则判别器可能只抓到更容易的响度差异。只看某个判别器分数,不能推出听感更自然。

固定周期并不保证学到正确基频;模型需要数据和损失共同形成有用的统计判别。

继续 损失与梯度路由,把这两组判别器接到训练循环。

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

正在连接 GitHub 评论…