diff-svc/doc/advanced_skills.markdown

84 lines
5.5 KiB
Markdown
Raw Normal View History

2023-03-10 11:08:57 +00:00
# Diff-SVC(advanced skills)
## 0.前置知识
> svc\
> Singing voice conversion旨在保证歌唱内容的同时,将音色从source speaker转换到 target speaker
> mel\
> 可简单认为mel谱以数字格式保留了音频的所有信息理想情况可完成wav→mel→wav的无损转换。
> hubert\
> 语音内容编码器可将音频wav编码为256维向量任意语种经hubert编码为统一格式的数字内容units代替人工进行自动标注。
> 音色与发音习惯:\
> 音色可以理解为声音特征,发音习惯为个人特色的咬字、停顿等,共同构成音频的识别特征。\
> 需注意svc模型完整的保留了咬字习惯可能从听感上与源音频没有区别不像目标特征实际音色部分已经完整替换了。
> 音色泄露:\
> 模型工作流程为wav→units→wav。语音编码时units不可避免的带入源音频音色信息导致输出音频含有部分源音频的音色称为音色泄露。
> [soft-vc](https://github.com/bshall/hubert/releases/download/v0.1/hubert-soft-0d54a1f4.pt): \
> hubert的一种英文训练soft-vc技术较普通hubert减少了音色泄露不可避免的有内容信息损失导致口胡英文语料训练其他语种出错率更高\
> 此模型为默认模型,推荐使用。
> [cn_hubert](https://github.com/TencentGameMate/chinese_speech_pretrain):\
> 中文训练的hubert音色、f0泄露更严重不可直接变调保留下来的语音信息也更完整如发音、情感通过特化解决。\
> 此模型(**本项目仅可使用base模型**)优缺点均较明显,**必须**配合特化操作弥补缺陷。
> 不准确的工作流程概括:\
> 将输入源wav编码为units语音信息并提取f0音高曲线参考svc模型将units+f0转换为目标音色的mel、经过声码器转换为wav。\
> 预处理时提取数据集mel、units、f0参数模型在训练过程中学习到units+f0→mel的映射关系。\
> 推理时提取输入源wav的units+f0svc模型将两者转换为目标音色的mel经声码器转换为所需wav。
## 1.特化
> [cn_hubert下载](https://github.com/TencentGameMate/chinese_speech_pretrain)\
> 模型放置路径:\
> "checkpoints/cn_hubert/chinese-hubert-base-fairseq-ckpt.pt"\
> 所需依赖 fairseq 请自行安装
> 理论:\
> units在理想情况仅包含语音内容实际混入了音色、f0信息模型训练中实际学习到的是units数据集音色、编码内容+f0→mel数据集音色、原内容的映射关系。
> 流程:\
> 推理时完成的是units任意音色、数据集包含任意内容+f0→mel数据集音色、对应内容的映射关系因其与训练条件有偏差应进行人工干预即特化操作。
> 优缺点:\
> 特化旨在将any2one的模型变为one2one以固定输入音色为代价、更好的保留语音信息即any→A变为B→A。
> 应用条件:\
> soft-vc模型自身包含音色泄露的解决方案正常训练即可cn_hubert推荐使用特化训练。
> 流程:\
> 目标音色为A输入音色为B以下使用的模型均为中文hubert的base模型\
> 1、以B为数据集如opencpop、正常流程训练svc模型\
> 2、将目标音色A的数据集使用B模型转换一遍得到A内容、B音色的wav数据集\
> 3、预先提取此数据集的units得到A内容、B音色的units\
> 使用batch.py、units设为True、加载B模型把A数据集wav放到batch文件夹内会自动导出特化所需的units至batch文件夹即2、3两步\
> 4、将上步得到的units与目标音色A的数据集放到同文件夹下以正常流程进行训练\
> 5、程序检测到数据集中有npy格式的units会自动加载、不再临时提取\
> 6、特化训练即unitsB音色、A编码内容+f0→melA音色、A原内容的映射关系得到的模型仅允许B音色的音频输入、转换质量也会更高
> 推理:\
> 特化推理时完成的是unitsB音色、数据集包含任意内容+f0→melA音色、对应内容的映射关系与训练条件更接近均为B→A\
> 所以特化模型可以解决音色泄露等问题,得到更高的转换质量
## 2.特化进阶
> 循环特化:\
> 特化训练可得B→A的高质量转换模型同理以此模型作为预模型导出units可得A→B的特化模型\
> 重复多次后A、B音色间的转换损耗越来越小效果更佳
> 多项特化:\
> 可以分别使用B、C、D等音色炼制预模型\
> 将A数据集分为多份分别导出A内容、BCD音色的数据集进行特化训练\
> 由此得到B、C、D三种固定输入、A音色一种固定输出的特化模型因输入条件更复杂、数据集数量需求更大
> 音色抵抗:\
> 将数据集A拆为数份使用不同音色units特化此时可认为模型进行了B、C、D三种音色的适应训练\
> 将数据集A复制数份使用不同音色units特化会出现下列特殊情况\
> 1、X units、B音色 → X mel、A音色\
> 2、X units、C音色 → X mel、A音色\
> 3、X units、D音色 → X mel、A音色\
> 同一份内容X有多种音色的units同时指向了同一份X mel;模型更容易总结出相同点(语义信息),忽略音色泄露的信息\
> 在音色种类足够时,这种特殊情况相对某几种音色的适应训练、更偏向于对陌生音色的抵抗训练,更加泛化