Install / Update PaperMod

Read aboout Install and Update instructions and sampled configuration templates

January 20, 2021 · Aditya Telange

Features / Mods

Learn About All Features in PaperMod

January 20, 2021 · Aditya Telange

NSF-HiFiGAN-声码器学习笔记

从 HiFi-GAN 到 NSF-HiFi-GAN:声码器学习笔记 本文基于 RVC(Retrieval-based Voice Conversion)项目的实际代码,从零开始梳理 HiFi-GAN 声码器的原理,再过渡到 RVC 中真正使用的 NSF-HiFi-GAN 变体。 代码位置:infer/lib/infer_pack/models.py 和 infer/lib/infer_pack/modules.py 一、先搞清楚声码器在干什么 在语音合成或语音转换的流程里,声码器处在最后一环。它的上游会输出某种"中间表示"——可能是 mel 频谱图,也可能是某个隐空间的向量。声码器要做的事情就一件:把这个中间表示变回可以听的音频波形。 说得直白点:频谱图是一张"图",声码器要把这张图"念"出来。 传统做法(Griffin-Lim 之类的)靠数学迭代来恢复相位信息,结果通常比较糊。HiFi-GAN 走的是神经网络的路线——用一个生成器直接输出波形采样点,同时用判别器来监督生成质量。 二、HiFi-GAN 的基本结构 HiFi-GAN 的论文是 2020 年发的(Jungil Kong 等人),核心思路可以用一句话概括: 转置卷积做上采样,残差块做波形精炼,多尺度判别器做质量监督。 2.1 生成器的整体流程 在 RVC 的代码里,标准 HiFi-GAN 生成器对应的是 Generator 类(models.py:204)。它的结构其实很规整: HiFi-GAN 生成器结构(40kHz 配置为例) ┌─────────────────────────────────────────────────────────────┐ │ 输入:隐变量 z │ │ [batch, 192, T帧] │ └────────────────────┬────────────────────────────────────────┘ │ ▼ ┌────────────────────┐ │ 预处理卷积层 │ │ Conv1d(192→512) │ ← 把输入投射到高维空间 │ kernel_size=7 │ └────────┬───────────┘ │ ┌────────────┴────────────┐ │ 上采样 Stage 1 (×10) │ │ ConvTranspose1d(512→256)│ ← 时间轴拉长到 T×10 └────────┬─────────────────┘ │ ┌────────┴──────────────────────────────────┐ │ MRF (多感受野融合) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐│ │ │ResBlock │ │ResBlock │ │ResBlock ││ │ │kernel=3 │ │kernel=7 │ │kernel=11 ││ │ └──────────┘ └──────────┘ └──────────┘│ │ 输出取平均 │ └────────┬──────────────────────────────────┘ │ ┌────────┴────────────┐ │ 上采样 Stage 2 (×10)│ │ ConvTranspose1d(256→128)│ ← 时间轴拉长到 T×100 └────────┬─────────────┘ │ ┌────────┴──────────────────────────────────┐ │ MRF 融合 │ │ ResBlock×3 (kernel=3/7/11) → 平均 │ └────────┬──────────────────────────────────┘ │ ┌────────┴────────────┐ │ 上采样 Stage 3 (×2) │ │ ConvTranspose1d(128→64)│ ← 时间轴拉长到 T×200 └────────┬─────────────┘ │ ┌────────┴──────────────────────────────────┐ │ MRF 融合 │ │ ResBlock×3 (kernel=3/7/11) → 平均 │ └────────┬──────────────────────────────────┘ │ ┌────────┴────────────┐ │ 上采样 Stage 4 (×2) │ │ ConvTranspose1d(64→32) │ ← 时间轴拉长到 T×400 └────────┬─────────────┘ │ ┌────────┴──────────────────────────────────┐ │ MRF 融合 │ │ ResBlock×3 (kernel=3/7/11) → 平均 │ └────────┬──────────────────────────────────┘ │ ┌────┴────────────┐ │ 后处理卷积层 │ │ Conv1d(32→1) │ ← 压缩到单声道 │ kernel_size=7 │ └────┬─────────────┘ │ ▼ ┌────────────┐ │ Tanh │ ← 限幅到 [-1, 1] └─────┬──────┘ │ ▼ ┌──────────────────┐ │ 输出波形 │ │ [batch, 1, T×400]│ └──────────────────┘ 上采样的总倍率 = 10 × 10 × 2 × 2 = 400。这个数字等于 hop_length(帧移),含义是:输入的每一帧对应输出的 400 个采样点。对于 40kHz 采样率来说,一帧就是 10ms。 ...

February 14, 2026 · Konpaku Youran

rvc结构简介

RVC结构简介 推理流程 输入音频 (16kHz) │ ▼ ┌─────────────────┐ │ HuBERT │ 提取内容特征,输出256维(v1)或768维(v2) └────────┬────────┘ │ ▼ ▼ ┌─────────────────┐ │ F0 Extractor │ 提取基频,支持RMVPE/CREPE/Harvest/PM └────────┬────────┘ │ ▼ ▼ ┌─────────────────┐ │ Index Search │ 可选,用faiss做音色检索,混合特征 └────────┬────────┘ │ ▼ ▼ ┌─────────────────┐ │ Synthesizer │ VITS架构,生成目标音色波形 └────────┬────────┘ │ ▼ 输出音频 (32k/40k/48k) Synthesizer结构 主类是SynthesizerTrnMs256NSFsid(v1)和SynthesizerTrnMs768NSFsid(v2),区别只在输入维度。 SynthesizerTrnMs*NSFsid ├── enc_p (TextEncoder) │ ├── emb_phone: Linear(256/768 → hidden) │ ├── emb_pitch: Embedding(256, hidden) # pitch量化到256级 │ ├── encoder: Transformer Encoder │ └── proj: Conv1d → (mean, log_var) │ ├── flow (ResidualCouplingBlock) │ └── 4层 ResidualCouplingLayer + Flip │ 每层内部是WaveNet结构 │ ├── dec (GeneratorNSF) │ ├── m_source (SourceModuleHnNSF) │ │ └── SineGen: 根据F0生成正弦激励信号 │ ├── conv_pre │ ├── ups: 多级上采样 (ConvTranspose1d) │ ├── resblocks: HiFiGAN残差块 │ └── conv_post │ └── emb_g: Embedding(spk_num, gin_channels) # speaker embedding 推理时的数据流: ...

February 14, 2026 · Konpaku Youran

GTCRN 轻量化的流式方案的演进思路

GTCRN 演进路径 v0 → v1 → v2 → v3 的改动记录。 版本概览 v0 (原版) v1 (baseline) v2 (transient) v3 (causal) 16kHz/129ERB 48kHz/219ERB 同v1 同v1 ~50K参数 139K参数 139K参数 145K参数 DNSMOS 3.15 DNSMOS 3.15 DNSMOS 2.98 非实时 非实时 非实时 实时 10ms │ │ │ │ 算子级轻量化 │ 换损失函数 │ 因果化 └──────────────┴────────────────┘ v0 → v1: 算子级轻量化 背景 原版 GTCRN 是 16kHz 的,要适配 48kHz。顺便做了算子级优化,方便部署。 核心约束: 数据流不变:ERB → SFE → Encoder → DPGRNN → Decoder → CRM 频轴采样不变:两次 /2 时频建模顺序不变:intra(频率) → inter(时间) 四个改动点 1) 卷积 DW-Separable 化 ...

February 13, 2026 · Konpaku Youran

GTCRN轻量化方案

GTCRN-Light v3 技术说明书 0. 扼要(Executive Summary) GTCRN-Light v3(以下简称 v3)是在原生 GTRCN 基础上进行的等价轻量化实现:完整保留“ERB→SFE→Encoder(频轴两次 /2)→DPGRNN(intra→inter)→Decoder(镜像+跳连)→ERB⁻¹→复域 CRM”的主干数据流与功能语义,通过算子级设计收缩参数与 MACs,同时增强形状稳定性与工程可部署性。 核心收益: 结构等价:无语义重构、无路径删减;对齐原版的时/频建模顺序与接口。 计算瘦身:卷积 DW-Separable 化、RNN 低秩瓶颈、门控去 RNN 化、ERB 固定权重化。 工程稳态:严格的频轴上/下采样闭环(33→65→129),对齐安全,易于导出与部署。 1. 设计目标与边界(Design Goals & Constraints) 不改变 GTRCN 的任务假设与编解码语义:复域 CRM、ERB 子带、频轴二次下采样、DPGRNN(先 intra 后 inter)、镜像解码与跳连。 降低参数与 MACs,但不牺牲 DPGRNN 的双路径长程/跨频建模。 形状稳定:频轴整数对齐,杜绝奇偶差累积;跳连前天然同维。 部署友好:避免难以量化/导出的算子(极小化状态化 RNN、减少不必要的线性层)。 2. 与原生 GTRCN 保持一致的“架构不变量” 数据流: (B,F,T,2) → [|S|, Re, Im] → ERB(bm) → SFE → Encoder(freq /2 ×2) → DPGRNN(intra→inter) → Decoder → ERB(bs) → CRM × S(复域) 采样策略:ERB 后 F=129;编码两次在频轴 /2:129→65→33;解码反向:33→65→129(确保 33→65→129 的闭环)。 时/频耦合:瓶颈处严格遵循 intra-(per time, across F) → inter-(per freq, across T) 的双路径顺序。 输出语义:预测 CRM(实/虚) 并在复域与输入逐点相乘。 3. 轻量化的四大支柱(Pillars of Lightweighting) 3.1 卷积主干 DW-Separable 化 + 轻量 GT-ConvLite 动机:将 2D 卷积的通道耦合与空间(T/F)卷积解耦,保留感受野与局部子带建模能力的同时,将参数与 MACs 近似按 1/通道数 降低。 ...

February 13, 2026 · Konpaku Youran