好,现在所有要素齐全,我来生成最终版。 --- # 最终版翻唱方案 ## 基于 Applio 的 RVC + Diffusion-SVC 完整管线 --- ## 一、数据准备 | 数据集 | 时长 | 用途 | 训练目标 | |---|---|---|---| | 说话数据(去混响) | ~35min | Speaker 0(说话) | 纯说话声纹 | | 唱歌数据(去混响) | ~25min | Speaker 1(普通唱歌) | 中低音唱歌声纹 | | 高音翻唱数据(可选) | 待收集 | Speaker 2(高音唱歌) | 高音域唱歌声纹 | 所有数据统一处理: ``` 原始音频 → pc-nsf-hifigan 移调增强(±3, ±5 semitones) → 切片(~5~10s) → 重采样至 48000Hz → 去混响 ``` --- ## 二、预训练模型 | 模型 | 来源 | 用途 | |---|---|---| | RVC V2 48kHz 官方底模 | Applio 内置 | RVC 主干初始化 | | ContentVec768 L12 | 官方权重 | 内容特征提取 | | RMVPE | 官方权重 | F0 提取 | | Diffusion-SVC shallow 底模 | HuggingFace(shallow_512_20 或 512_30) | 浅扩散精炼 | | pc-nsf-hifigan | 官方权重 | 声码器(微调用) | --- ## 三、训练流程 ### Phase 0:特征提取 ``` 对全部训练音频执行: ├─ ContentVec768 L12 → 768-dim 内容特征(帧率 50fps→对齐到mel帧率) ├─ RMVPE → F0 + UV ├─ Volume 包络 ├─ 音量包络 → 响度嵌入 └─ STFT(按 Diff-SVC 参数:44.1k/block=512/n_mels=128)→ GT mel ``` 高音数据单独标注,用于 Speaker 2 训练。 --- ### Phase 1:RVC 主模型训练(Applio 框架) **模型结构:** ``` TextEncoder(含响度嵌入) → ResidualCouplingBlock (flow, 4 layers) → GeneratorNSF (HiFi-GAN NSF) Speaker Embedding: nn.Embedding(n_spk=3, gin_channels=256) ├─ ID 0: 说话 ├─ ID 1: 普通唱歌 └─ ID 2: 高音唱歌 ``` **训练策略:** - 加载 RVC V2 48kHz 底模 - 余弦退火 + 学习率预热 - 损失函数:mel + kl + feature + discriminator(RVC 原生) - 三个 speaker embedding **分开初始化,联合训练** - 保存最佳权重 **预期产物:** `rvc_best.pth`(一个3说话人的RVC底模) --- ### Phase 2:MelHead 训练 **位置:** Applio 的 `rvc/lib/algorithm/synthesizers.py`(合成器输出后、GeneratorNSF 之前插入) ``` 输入:RVC flow 输出 z([B, 192, T],100fps) │ ├─ FrameAligner(插值至 Diff-SVC 帧率 86.13fps) │ ├─ Conv1d(192 → 128, k=1) ├─ LeakyReLU(0.1) ├─ Conv1d(128 → 128, k=3, padding=1) ├─ LeakyReLU(0.1) └─ Conv1d(128 → n_mels, k=1) ← n_mels=128 ↓ coarse mel([B, 128, T]) ``` **训练方式:** - 冻结整个 RVC 底模(enc + flow + generator) - 只训练 MelHead(~0.5M 参数) - Loss: L1 mel loss + multi-resolution STFT loss - 训练数据:Phase 0 的 z + GT mel 对 **预期产物:** `mel_head.pth` --- ### Phase 3:浅扩散模型训练 ``` 输入:RVC flow 输出 z │ ├─ MelHead → coarse mel(mel₂) ├─ F0 / UV ├─ Volume └─ Speaker Embedding(来自 Phase 1) ↓ Diffusion-SVC shallow decoder(冻结加载底模) ↓ refined mel(mel₁) ↓ Loss = ||mel₁ − GT mel|| + noise prediction loss ``` **如果 Diffusion-SVC 底模参数与 RVC 不一致:** - frame aligner 在 MelHead 中处理 - cond channel aligner 额外加一层 `Conv1d(256 → hidden)` - spec 通道数对齐(Diff-SVC 内部 128 dim) **预期产物:** `shallow_diffusion.pth` --- ### Phase 4:pc-nsf-hifigan 微调(可选) - 冻结低层卷积 - 微调高层 + speaker cond 层 - 少量步数(防止过拟合) **预期产物:** `nsf_hifigan_finetune.pth` --- ### Phase 5:InterpTRQE-SptME 准备(可选) - 在训练集上计算一次 SHAP 值 - 得到 ContentVec 各维度的 speaker contribution mask - 保存为推理时使用的 filter mask --- ## 四、推理流程 ### 4.1 完整推理管线 ``` 输入:源音频(任意采样率、任意说话人) │ ├─ 重采样至 16000Hz → ContentVec768 L12 → 768-dim 内容特征 │ └─ [可选] InterpTRQE-SptME SHAP mask 过滤音色残留 │ ├─ 重采样至 48000Hz → RMVPE → F0 + UV │ └─ F0 帧率对齐至 RVC 帧率(100fps) │ ├─ Volume 包络提取 │ └─ 生成逐帧说话人权重 ``` --- ### 4.2 逐帧音色切换逻辑 ``` F0 阈值:THRESHOLD = 500Hz(可根据角色调整) 过渡宽度:sigma = 30Hz 逐帧权重: weight_speech = sigmoid((THRESHOLD - f0) / sigma) # 低音→说话特征 weight_sing = sigmoid(...) # 中音→普通唱歌 weight_high = sigmoid((f0 - THRESHOLD) / sigma) # 高音→高音唱歌 逐帧 Speaker Embedding: g_frame = w_speech * emb_g(0) + w_sing * emb_g(1) + w_high * emb_g(2) # [gin_channels=256, T_frame] # 时域平滑(防 vibrato 抖动) g_frame = smooth_lowpass(g_frame, window=5) ``` --- ### 4.3 F0 降调策略(高音域映射) ``` F0 分段处理: 若 f0 < THRESHOLD(中低音): → 保留原始 F0 若 f0 >= THRESHOLD(高音): → 计算降调量 shift_semitones(可固定如 -5,也可动态) → f0_sung = f0 * 2^(-shift_semitones/12) → 用 f0_sung 做 RVC 推理 → 声码器侧输入原始 f0(高音),确保激励合成在高音域 即: RVC 推理用的 F0: 降调后的 F0(中音域) Speaker Embedding: 高音唱歌(ID 2) 声码器 m_source F0: 原始高音 F0 ``` --- ### 4.4 完整推理数据流 ``` 源音频 │ ├─① ContentVec(768-dim) │ └─ [可选] InterpTRQE-SptME mask │ ├─② RMVPE → F0 + UV │ ├─→ 降调映射 → f0_lowered │ └─→ 保留原始 → f0_original(给声码器) │ ├─③ Volume 包络 │ └─④ 逐帧 Speaker Weight(由 F0 阈值驱动) ↓ RVC 推理(Applio) ├─ enc_p(hubert, f0_lowered) ├─ flow(z_p, …reverse) → z ├─ speaker mixing: g_frame └─ dec(z, f0_lowered, g_frame) → raw_waveform ↓ MelHead(z → coarse mel,对齐 Diff-SVC 帧率) ↓ Diffusion-SVC shallow(coarse mel → refined mel) ↓ nsf-hifigan(refined mel, f0_original, g_frame) ↓ final_waveform(高音域、音色已切换) ↓ AU 后处理(去噪、混响、EQ) ``` --- ## 五、模块对接位置(Applio 代码) | 模块 | 插入位置 | |---|---| | MelHead | `rvc/lib/algorithm/synthesizers.py` / `Synthesizer.forward()`,dec 前插入 | | 逐帧 speaker mixing | `rvc/infer/pipeline.py` 或 `rvc/infer/infer.py` 推理循环 | | F0 降调策略 | `rvc/infer/pipeline.py` / `get_f0()` 后处理 | | 声码器原始 F0 注入 | `diffusion/unit2mel.py` 或 `diffusion/naive/naive.py` 的 forward | | InterpTRQE-SptME | ContentVec 提取后、喂入 enc_p 前 | --- ## 六、一句话总结 **三个 speaker(说话/唱歌/高音)+ MelHead + F0 阈值逐帧音色切换 + 声码器移调映射 + 浅扩散精炼 = 一条端到端的高质量翻唱管线,所有模块在 Applio 框架上增量实现,不改底模结构。**