# VITS ## 论文 ```Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech``` * [https://arxiv.org/abs/2106.06103](https://arxiv.org/abs/2106.06103) ## 模型结构 在这项工作中,作者提出了一种并行端到端 TTS 方法,它生成的音频比目前的两阶段模型更自然。该方法采用了变异推理,并增加了归一化流和对抗训练过程,从而提高了生成模型的表现力。作者还提出了一种随机时长预测器,可根据输入文本合成具有不同节奏的语音。通过对潜在变量的不确定性建模和随机时长预测器,该的方法表达了自然的一对多关系,即一个文本输入可以用不同的音调和节奏以多种方式说话。在 LJ Speech(一个单一说话者数据集)上进行的人类主观评估(平均意见分或 MOS)表明,该方法优于最佳的公开 TTS 系统,其 MOS 可与标准答案相媲美。 ![原理](1.png) ## 算法原理 先验编码器:TextEncoder由多层的transformer encoder组成,预测的结果输出均值与方差。 后验编码器:由conv1d+WN网络组成+conv1d组成。输出得到均值与方差,并且使用FLOW得到复杂分布。通过flow后的复杂分布与先验编码器后的分布进行对MAS对齐估计。得到attn硬对齐矩阵。 MAS对齐估计:通过mas(monotonic align search)硬对齐算法,将文本feature和序列帧feature进行一个硬对齐,拿到对齐矩阵Attn。MAS使用DP算法,假设一个文本feature其对应的帧序列符合一个高斯分布,通过DP算法做优化,计算出文本和序列的最优对齐矩阵。 解码器:实际就是声码器HiFi-GAN V1的生成器。应用于多人模型时,在说话人嵌入向量之后添加一个线性层,拼接到的输出隐变量。 判别器:增加了一个HiFi-GAN的多周期判别器,仅在训练的时候才起作用,用于对抗generator的训练。 ## 环境配置 ### Docker(方法一) ``` #拉取镜像 docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10 #创建容器 docker run --shm-size 80g --network=host --name=telechat --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /opt/hyhal:/opt/hyhal:ro -v : -it /bin/bash #安装依赖 cd vits pip install -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple/ apt-get install espeak cd monotonic_align python setup.py build_ext --inplace ``` ### Dockerfile(方法二) ``` cd ./docker docker build --no-cache -t vits . #创建容器 docker run --shm-size 80g --network=host --name=telechat --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /opt/hyhal:/opt/hyhal:ro -v : -it /bin/bash #安装依赖 cd vits pip install -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple/ apt-get install espeak cd monotonic_align python setup.py build_ext --inplace ``` ### Anaconda(方法三) 1、关于本项目 DCU 显卡所需的特殊深度学习库可从光合开发者社区下载安装: https://developer.hpccube.com/tool/ ``` DTK驱动:dtk-24.04.1 python:python3.10 torch:2.1 torchvision:0.16.0 torchaudio:2.1.2 ``` 2、其它非特殊库参照 requirements.txt 安装 ``` cd vits pip install -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple/ apt-get update chmod 777 /tmp apt-get install espeak cd monotonic_align python setup.py build_ext --inplace ``` ## 数据集 - 训练任务采用 LJ Speech-1.1 数据集,下载地址:http://113.200.138.88:18080/aidatasets/project-dependency/ljspeech-1.1 - 下载完成后,在 vits 文件夹下创建连接: ``` ln -s /path/to/LJSpeech-1.1/wavs DUMMY1 ``` ## 训练 ### 代码修改 - STFT: ``` vim /usr/local/lib/python3.10/site-packages/torch/functional.py ##把第650行的 normalized, onesided, return_complex) ##改为 normalized, onesided, return_complex=True) ``` ### 单卡训练 ``` bash run_single.sh ``` ### 多卡训练 ``` bash run_multi.sh ``` *注意,每次运行训练后,DUMMY1 目录下会多出许多 .pt 文件,如果再次训练的话会报错,所以需要每次训练后把所有的 .pt 文件给删除: ``` rm -rf DUMMY1/*.pt ``` ## 推理 暂无 ## result 暂无 ## 应用场景 ### 算法类别 语音合成 ### 热点应用行业 医疗,金融,科研,教育 ## 源码仓库及问题反馈 https://developer.hpccube.com/codes/modelzoo/vits_pytorch ## 参考资料 https://github.com/jaywalnut310/vits/tree/main