语音克隆数据变换¶
语音克隆数据变换是一个计划中的实验性音频数据集功能。它会在主模型训练开始前,把一个目标人声身份迁移到更多歌曲、人声 stem 或表演上,从而扩展训练集。
它的目标不是把 SimpleTuner 变成独立的变声工作站,而是减少音频微调数据里的纠缠。如果某个歌手只出现在一种很窄的风格里,LoRA 可能学到的是“这个歌手在这种编曲里”,而不是歌手身份本身。通过语音克隆生成的扩展 split,可以让同一个人声身份出现在更多编曲、caption、歌词和歌曲结构中。
此功能仅面向音频数据集。
授权和权利
只应在你有权使用的声音和录音上使用此流程。声音身份是敏感的生物特征和创作数据。该变换可能生成听起来像真实人物的衍生音频,因此权限、授权和披露都很重要。
ELI5¶
假设你有六首同一个歌手的录音,但每首都来自同一个乐队和同一种风格。只用这些歌训练时,模型可能会把歌手、吉他音色、鼓组感觉、速度范围和歌曲结构都当成一件事。
语音克隆数据变换试图拆开这些概念:
- 从歌手示例中学习一个小型语音转换模型。
- 读取更广泛的一组歌曲或人声 stem。
- 把源人声的音色替换成目标歌手音色。
- 让新的 captions 和歌词继续对齐生成后的音频。
- 把生成音频作为另一个普通训练 split 加入。
这样主模型就能在更多上下文中看到目标声音,而不是只记住原始窄数据集。
适用场景¶
适合使用:
- 你有目标歌手的授权录音
- 目标身份和单一流派、乐队、制作风格或歌曲结构纠缠太强
- trigger 词只在原风格里有效,换流派就失效
- 一个数据集里有多个歌手,模型学成了平均声音
- 你想为不同人声身份训练不同 LoRA
- 你希望 SimpleTuner 在同一次训练配置里准备扩展 split
不适合使用:
- 你已经有大量、多样、干净的同一声音数据
- 扩展源音频质量差,或与 caption 对不齐
- 你需要公开发布且没有明确权利
- 基础生成模型即使用干净直接样本也学不会目标身份
它如何进入训练¶
语音克隆是数据准备变换,不是 conditioning 数据集。
conditioning_data 用于训练时一直和主样本绑定的辅助输入,例如参考图像或生成的条件图。
语音克隆应该放在数据集级别的 data_transforms 列表中。它会生成新的音频文件、caption 和可选歌词,然后把结果注册为另一个主 audio 数据集。之后普通 dataloader 会像读取其他训练 split 一样读取它。
伪配置形状:
audio dataset:
id: target-voice
dataset_type: audio
data_transforms:
- task: identity_transfer
source: expansion-audio-backend
target: generated-audio-backend
method: rvc
audio_mode: separate_convert_remix
启动时的伪流程:
for each audio dataset:
for each data transform:
if task is identity_transfer:
prepare or reuse the target voice-conversion model
prepare or reuse generated audio
append generated audio as a normal train split
continue with normal metadata discovery, bucketing, caching, and training
RVC 风格的身份迁移¶
第一个实现是 RVC 风格的语音转换,使用 HuBERT 内容特征、RMVPE 音高提取、NSF/VITS generator、multi-period discriminator、mel/adversarial losses,以及可选 retrieval index。
这里的“RVC 模型”是声音专用的。它从目标身份数据集中训练得到。检索索引也是声音专用的,并由同一目标声音的特征构建。内容特征、音高提取、分离模型等预训练组件是可复用基础设施;转换模型和索引才是歌手或说话人专用的工件。
SimpleTuner 应该能够:
- 复用用户提供的语音转换模型和索引。
- 如果没有提供模型,则训练语音转换模型。
- 从目标声音数据构建检索索引。
- 在训练输出目录下缓存模型、索引和生成音频。
- 当源数据和变换设置未变化时,在启动时复用缓存工件。
- 可选地通过 Hub 模型仓库复用或发布语音转换模型。
默认行为¶
默认值比较保守。在这个 workflow 中,音频 backend 是要被转换的扩展音乐,model.identity_data_dir 是目标声音数据集,target.instance_data_dir 只是生成输出 split 的路径。
| 设置 | 默认值 | 原因 |
|---|---|---|
task |
identity_transfer |
明确标识该变换。 |
method |
rvc |
首个支持的声音迁移后端。 |
train_if_missing |
true |
SimpleTuner 应能从目标数据集启动训练声音模型。 |
force_retrain |
false |
尽量复用有效缓存模型。 |
build_index |
true |
检索通常能提高身份稳定性并减少泄漏。 |
identity_data_dir |
按需训练时必填 | 指向要迁移到扩展歌曲中的干净目标声音示例。 |
identity_audio_mode |
separate |
训练前对身份音频运行 Demucs。若身份数据集已是人声 stems,请用 vocal_only。 |
identity_stem_debug_dir |
未设置 | 可选目录,用来保存 identity vocals.wav 和 no_vocals.wav 预览。用它确认 RVC 是否从隔离人声训练,而不是从乐器泄漏训练。 |
asset_hub_model_id |
lj1995/VoiceConversionWebUI |
Default RVC asset repository for HuBERT, RMVPE, and v2 48k pretrained generator/discriminator checkpoints. |
model_name |
transform or Hub repo name | Human-readable name saved into the RVC artifact so downloaded caches are identifiable outside their folder name. |
sample_rate |
48000 |
Current implementation targets RVC v2 48k assets. Other rates need matching pretrained assets and configs. |
training_steps |
1000 |
Runs RVC generator/discriminator fine-tuning during startup. Increase for larger or more varied identity datasets. |
batch_size |
4 |
RVC training batch size before distributed sharding. Lower it for memory pressure. |
learning_rate |
1e-4 |
Standard RVC AdamW default. |
hub_model_id |
未设置 | 用户未显式启用时,不使用远程声音模型缓存。 |
reuse_from_hub |
设置 hub_model_id 时为 true |
在花时间按需训练前先检查 Hub。 |
push_to_hub |
false |
声音模型代表一个声音身份,上传必须显式开启。 |
public |
false |
Hub uploads are private by default. Set this to true only when the voice artifact can be published publicly. |
audio_mode |
完整歌曲默认 separate_convert_remix,人声 stem 默认 vocal_only |
完整混音需要分离;stem 不需要。 |
separation_method |
需要分离时使用 demucs |
Demucs 是预期默认 stem 分离器。 |
timbre_strength |
1.0 |
Controls how strongly the synthesized target voice replaces the source vocal. Lower values blend source and converted vocals. |
retrieval_strength |
0.75 |
Blends nearest target-voice content frames from the retrieval index into the generator input. |
| 生成 split 类型 | 主 audio 数据集 |
生成数据像普通音频一样训练,不作为 conditioning。 |
| 缓存位置 | output_dir 内 |
让生成工件绑定训练运行,并能重启复用。 |
| captions | 默认复制源 captions,除非另有配置 | 新 split 应保留歌词和编曲上下文。 |
如果提供了已有语音转换模型,SimpleTuner 应使用它;只有显式要求或必要工件缺失时才训练新模型。
Hub 缓存¶
语音转换模型可能训练成本较高,重复按需训练会变成明显的资源浪费。因此该 transform 应支持可选的 Hub 后端缓存,用于保存声音模型和检索索引。
安全查找顺序:
if local voice-conversion cache matches:
reuse local model and index
else if hub_model_id is configured and reuse_from_hub is enabled:
check the Hub repository
download only if it has a SimpleTuner voice-transform manifest
reuse only if the manifest matches this transform
else if train_if_missing is enabled:
train the voice-conversion model
build the retrieval index
cache locally
push to hub only when push_to_hub is true
else:
stop and ask for a model path or a reusable cache
Hub 仓库应使用 SimpleTuner 专用布局,而不是松散文件集合:
Manifest 是契约。它应记录目标身份数据集指纹、RVC 训练设置、索引设置、预期采样率、工具版本和 SimpleTuner voice-transform 格式版本。缺少 manifest 或 manifest 与当前 transform 不匹配时,SimpleTuner 不应复用该 Hub 工件。这样可以避免把错误声音模型静默应用到新数据集。
发布应为 opt-in。合理伪配置:
identity_transfer:
method: rvc
model:
train_if_missing: true
model_name: Target voice RVC
hub_model_id: org/target-voice-rvc
reuse_from_hub: true
push_to_hub: true
public: false
对于私有声音身份,除非有明确授权,否则 Hub 仓库应保持私有。生成音频和模型工件可能有不同共享权利,因此应分别处理上传设置。
WebUI 配置¶
RVC 模型训练应该可以通过 WebUI 配置,而不只依赖原始 dataloader JSON。
预期 WebUI 形状是在音频数据集里提供 dataset transform 编辑器:
Audio dataset
Data transforms
Add transform: Identity transfer
Method: RVC
Audio mode: vocal_only / separate_convert_remix / full_mix_convert
Train RVC model if missing: on
Force retrain: off
Build retrieval index: on
Hub model id: optional
Reuse from Hub: on when Hub model id is set
Push RVC model to Hub: off by default
Hub repo privacy: private by default
Caption 和歌词 sidecar:从源音频复制
WebUI 应让两种常见设置一眼可见:
- 已经有人声 stem: 选择
vocal_only,保持 Demucs 关闭,并写出生成的人声 stem。 - 有完整歌曲: 选择
separate_convert_remix,使用 Demucs 分离,只转换人声 stem,再和原始伴奏 stem 混回。
界面应明确显示生成音频会成为另一个主音频训练 split。不要把身份迁移展示成 conditioning_data,否则用户会以为它是训练期间的配对 conditioning 行为。
分布式启动行为¶
当 SimpleTuner 使用多个 data-parallel rank 启动时,语音克隆启动阶段应该利用可用 GPU,而不是让 rank 0 完成所有工作。
这里有两个不同的分布式阶段:
- RVC 模型训练: 如果
train_if_missing=true,没有匹配的本地缓存,也没有匹配的 Hub 工件,则当world_size > 1时,RVC 训练循环应使用 DDP。每个 rank 应通过普通 distributed sampler 模式接收不同的目标声音 batch。 - 生成音频准备: 扩展源输入应按 rank 切分,类似 TextEmbedCache 和 VAECache。每个 rank 只分离、转换并写出自己负责的 shard,然后所有 rank 同步,再继续 metadata discovery。
伪行为:
if world_size > 1:
if RVC model must be trained:
train RVC with DDP across all ranks
save final model and index once
split expansion inputs by global rank
each rank generates its own audio shard
barrier
rank 0 writes or verifies the combined manifest
barrier
else:
train and generate serially
最终声音模型只应由一个进程发布到 Hub。最终 manifest 更新也一样。每个 rank 可以独立写出自己的生成结果,只要文件名是确定的且互不重叠。
这样可以避免在多 GPU 系统上浪费 GPU 时间,并让启动行为与 SimpleTuner 现有缓存准备模型保持一致。
RVC 训练日志¶
启动阶段的 RVC 训练暂时不应创建 TensorBoard 或 WandB run。这些 logger 是给主 SimpleTuner 训练任务配置的,把它们复用于嵌套语音转换任务会需要额外 run 名称、路径、resume 规则和 artifact 策略。
RVC 阶段仍然可以通过 SimpleTuner 原生训练 logger 报告有用统计:
有用的本地统计包括 generator loss、discriminator loss、mel loss、KL loss、已处理样本数、耗时、DDP world size、缓存命中或未命中原因,以及最终模型来自本地缓存、Hub 缓存还是按需训练。
除非未来实现明确为 RVC transforms 添加外部 logger 集成,否则这些统计仅保存在本地。
选择 audio_mode¶
vocal_only¶
当扩展数据集已经预处理成干净人声 stem 时使用。
注意事项:
- 不要对干净 stem 再跑 Demucs,除非你确实有理由。
- caption 应描述人声和歌词;除非之后会混回伴奏,否则不要描述完整乐队编曲。
- 如果主训练模型期望完整歌曲,纯人声生成数据可能会形成不同的数据分布。
separate_convert_remix¶
当扩展数据集是完整混音歌曲时使用。
source full song
-> Demucs separates vocals and instrumental stems
-> RVC converts the vocal stem
-> converted vocal is remixed with the original instrumental stems
-> generated full song is added to training
这是完整歌曲扩展的首选模式,因为它避免把鼓、贝斯、吉他、房间声和母带痕迹当成声音的一部分去转换。
注意事项:
- Stem 分离可能留下串音、伪影或相位问题。
- 人声 stem 太弱、混响太多或被埋住时,转换后声音可能不稳定。
- Remix 的响度很重要。生成 split 如果一直更响或更小,会影响训练偏向。
- caption 应描述最终混音结果,而不只是源歌曲。
full_mix_convert¶
仅建议快速测试时使用。
它更快,但质量通常更低,可能把乐器也拖进语音转换器,并把不需要的伪影教给最终 LoRA。
Caption 和歌词策略¶
生成 split 的 caption 应匹配生成后的音频。
合理默认值:
copy source caption
remove source-vocal identity words when configured
append target-vocal identity or style words when configured
copy lyrics sidecar when lyrics still match
当源人声和转换后人声唱的是同一段词时,复制歌词通常是正确的。如果变换改了歌曲、剪掉段落、删除人声或使用非歌词源,则不应复制。
Caption 不能总是盲目复制。如果源 caption 写着“female pop vocal”,但生成结果是男性摇滚音色,就应该调整 caption。变换应支持简单的追加和删除规则,更高级的 caption 重写可以之后叠加。
缓存和复用¶
变换应写入两类缓存:
voice-conversion cache:
model checkpoint
retrieval index
manifest
generated audio cache:
generated audio files
captions
lyrics, when available
manifest
Manifest 应记录身份数据集指纹、变换设置、扩展源数据指纹和工具版本。如果这些值匹配,启动时可以复用现有工件;如果变化,则只重新生成受影响阶段。
实用数据集建议¶
对于 model.identity_data_dir 里的目标声音,干净的有声覆盖比单纯时长更重要。
- 快速冒烟测试: 30-60 秒干净人声可以证明 pipeline 能跑通,但转换声音通常会比较粗糙。
- 可用起点: 对个人声音数据集来说,5-10 分钟干净、独立的人声是合理的第一目标。
- 歌唱身份: 如果需要覆盖音高范围、元音、动态、咬字和表现性 phrasing,10-30 分钟会更好。
请使用许多短 clip,而不是一个很长的文件。5-20 秒左右的 clip 更容易检查、分离和复用。当前 RVC trainer 会把身份音频重采样到 48 kHz,并把每个身份文件截断到 max_seconds_per_file,默认值是 180。如果用户提供一个 30 分钟文件,默认只会使用前三分钟。拆分数据集可以避免意外丢掉有用的人声覆盖。
独立的 huggingface-hub-rvc 项目可以在不运行完整 SimpleTuner 训练任务的情况下训练、保存、加载和发布 RVC artifact。在 SimpleTuner 中,scripts/run_rvc_model.py 提供了一个直接入口,用于更深入地实验 pipeline 的 RVC 训练和转换部分。若想在主 LoRA 训练前调试身份数据集、Demucs 模式、retrieval strength、transfer strength 或 Hub artifact 复用,请先使用它。
- 身份控制重要时,每个 LoRA 保持一个目标歌手。
- 用干净、较干的人声样本训练语音转换模型。
- 除非目标就是学习合唱混合,否则避免二重唱。
- 扩展歌曲应覆盖不同速度、调性、流派、动态和歌词 phrasing。
- Caption 要足够多样,避免身份 token 和一种编曲永久绑定。
- 长训练前先抽查生成音频。
- 在合并所有内容之前,先分别比较直接训练数据、生成数据和混合训练运行。
常见失败模式¶
| 现象 | 可能原因 |
|---|---|
| LoRA 只在一种流派里有效 | 声音身份仍与编曲 caption 或源数据纠缠。 |
| 生成 split 听起来空、相位怪 | 完整歌曲处理中的分离或 remix 伪影。 |
| 乐器像被变声了一样 | 需要分离时使用了 full_mix_convert。 |
| 声音模型像学进了乐器 | Identity separation 的人声 stem 混入太多伴奏。设置 model.identity_stem_debug_dir 检查保存的 stems,或先预处理更干净的人声 stems 并使用 identity_audio_mode=vocal_only。 |
| 人声身份很弱 | 目标数据需要更干净、更多样,或检索索引更强。 |
| Caption 控制不了声音 | Caption 仍含源声音身份,或没有目标身份。 |
| 主模型学到伪影 | 生成音频质量太低或在训练 mix 中占比太高。 |
| 转换后的人声单调或像机器人 | RVC 路径缺少合适的 F0 提取、预训练 generator/discriminator 初始化、对抗训练,或足够干净的目标人声数据。 |
与正则化数据的关系¶
生成的身份迁移数据默认不是正则化数据。
正则化数据通常用于让 LoRA 保留基础模型行为。身份迁移数据用于让 LoRA 在更多上下文中学习目标声音。太多正则化配太少直接身份数据,会削弱身份 token;太多生成数据则可能教会转换伪影。
把它们看成三个独立旋钮:
- 直接目标数据集:最强身份信号
- 生成身份迁移数据集:更广的上下文和风格覆盖
- 正则化数据集:保留基础模型行为
状态¶
本文描述实验性的 data_transforms workflow。当前实现会训练或复用 SimpleTuner RVC v2 F0 artifact,从身份音频中提取 HuBERT content features 和 RMVPE pitch,微调预训练 RVC generator/discriminator,构建 retrieval index,生成扩展 split,缓存结果,然后直接进入正常训练,不要求用户手动执行第二个 preprocessing 阶段。