5秒内克隆您的声音并生成任意语音内容开源项目MockingBird:助力智能语音助手、有声读物制作、语音播报系统、语音客服等领域

5秒内克隆您的声音并生成任意语音内容开源项目MockingBird:助力智能语音助手、有声读物制作、语音播报系统、语音客服等领域

GitHub – babysor/MockingBird: 🚀AI拟声: 5秒内克隆您的声音并生成任意语音内容 Clone a voice in 5 seconds to generate arbitrary speech in real-time

一、项目简介

MockingBird是一个使用户能够在短时间内克隆自己或他人的声音,并生成任意语音内容的项目,主要目标是实现快速的语音克隆和高质量的语音生成。它致力于在5秒内克隆用户的声音,并且能够实时生成任意语音内容,为用户提供了一个方便快捷的工具,可广泛应用于多种场景,如智能语音助手、有声读物制作、语音播报系统、语音客服等领域,使机器发出的声音更加生动和个性化,给用户带来更自然的语音交互体验。同时,它还考虑到不同操作系统和硬件的兼容性,力求在不同环境下都能稳定运行。

二、项目特点

(一)多语言支持

项目支持中文,并且使用了如aidatatang_200zh、magicdata、aishell3、data_aishell等多个数据集进行测试,确保了中文语音合成的质量和效果,为中文用户提供了极大的便利。这在很多语音合成项目中是一个重要的优势,因为中文的语音合成在发音、声调、韵律等方面具有独特的复杂性,该项目能够较好地应对这些挑战。

(二)跨平台运行

该项目可以在Windows操作系统和Linux操作系统(甚至包括M1 MACOS)上运行,这种跨平台的特性极大地扩展了其使用范围,无论是个人开发者还是企业用户,无论使用何种操作系统,都可以轻松部署和使用该项目。这意味着它在不同的硬件和软件环境下都具有较好的适应性和稳定性,方便了不同平台用户的开发和测试。

(三)易于使用和效果出色

MockingBird具有出色的效果,用户仅需使用新训练的合成器,通过复用预训练的编码器/声码器,即可获得令人满意的语音合成效果,这降低了使用门槛和对复杂配置的依赖,使开发者可以更专注于业务功能的开发和应用,而无需花费过多时间在复杂的语音合成模型的训练和调优上。

(四)网络服务支持

该项目还具备Web服务器功能,可通过远程调用提供服务。这使得开发者可以将该项目部署在服务器上,通过网络进行访问和调用,方便了远程开发和服务集成,也为构建基于语音合成的在线服务提供了基础。

三、技术原理

(一)深入剖析技术细节

  • 模型架构:项目包含多个部分,如Models、Control、Data,在整体架构上进行了细致的划分,以实现不同的功能。例如,在语音合成过程中,涉及到多个关键模型,包括编码器(encoder)、合成器(synthesizer)和声码器(vocoder)等。这些模型相互协作,完成从原始音频输入到最终语音输出的转换。
    • 编码器(encoder):对输入的语音进行特征提取和编码,将语音转换为可以被后续模型处理的特征表示,帮助后续模型更好地理解语音的特征和说话者的特征。
    • 合成器(synthesizer):根据输入的文本和编码后的语音特征,生成中间的声学表示,例如生成梅尔频谱图,为最终的语音生成提供基础信息。
    • 声码器(vocoder):将合成器生成的声学表示转换为最终的语音波形,是生成最终语音的关键步骤,决定了语音的音质和流畅度。
  • 依赖和环境:项目主要使用PyTorch作为深度学习框架,并且测试时使用的是1.9.0版本(2021年8月的最新版本),在GPU Tesla T4和GTX 2060上进行了测试。在安装过程中,需要安装Python 3.7或更高版本,还需要安装FFmpeg等工具,并且需要按照相应的步骤安装各种依赖项,如使用pip install -r requirements.txt来安装剩余的必要包,对于不同的环境(如M1 Mac),还有特殊的配置步骤,以确保项目可以正常运行。

(二)对比不同技术路径

与其他语音合成项目相比,MockingBird在以下几个方面展现出独特之处:
训练过程的灵活性:它允许用户根据自己的需求训练不同的模型组件。用户可以选择训练自己的编码器,使用自己的数据集对音频和梅尔频谱图进行预处理,然后使用encoder_train.py进行训练;对于合成器,可以根据不同的数据集(如aidatatang_200zh、magicdata等)进行预处理和训练;对于声码器,也可以根据需要选择是否训练新的声码器或使用已有的声码器。这种灵活的训练方式使用户可以根据自身资源和需求来调整项目,而不是依赖单一的预训练模型。
对预训练模型的利用:它通过复用预训练的编码器/声码器,同时允许用户训练自己的合成器,达到了较好的平衡。一方面可以利用预训练模型的优势,减少训练成本和时间,另一方面通过训练自己的合成器,可以更好地适应不同的语音特征和文本输入,这与一些完全依赖预训练模型或完全从零开始训练的项目不同。

(三)技术创新点

  • 快速语音克隆:在短时间(5秒内)克隆用户的声音是一个显著的创新点。它通过复杂的算法和模型架构,快速提取用户语音的特征,实现了高效的语音克隆,为用户提供了独特的语音克隆体验。
  • 架构重构:将项目重构为三个部分(Models、Control、Data),提高了项目的可维护性和可扩展性,方便开发者对不同部分进行独立开发和测试,使得项目的架构更加清晰和易于管理,在代码的组织和开发流程上更加灵活和高效。

四、类似项目

(一)Tacotron

  • 项目简介:Tacotron是一个端到端的语音合成项目,主要关注从文本到语音的合成过程。它旨在实现高质量的语音合成,通过将输入的文本转换为语音,在语音合成领域有一定的影响力。项目使用了一系列深度学习技术,推动了语音合成技术的发展,是较早尝试端到端语音合成的项目之一。其代码库可在fatchord/WaveRNN找到。

(二)WaveRNN

  • 项目简介:这是一个高效的神经音频合成项目,它致力于使用神经网络技术生成高质量的音频。在音频合成方面,尤其是在语音波形的生成上具有独特的优势,通过对神经网络的训练和优化,实现了较为自然的音频合成效果,是许多音频合成和语音合成项目的重要参考,为语音合成的波形生成部分提供了一种可行的技术路径。其代码库可在fatchord/WaveRNN找到。

(三)HiFi-GAN

  • 项目简介:HiFi-GAN是一个使用生成对抗网络(GAN)进行高效和高保真语音合成的项目。通过利用生成对抗网络的优势,在生成高保真语音方面取得了不错的效果,为语音合成的音质提升带来了新的技术思路,推动了生成对抗网络在语音合成领域的应用。

(四)Fre-GAN

  • 项目简介:Fre-GAN项目专注于对抗频率一致的音频合成,通过对抗性训练和频率一致性的考虑,在音频合成的频率方面进行优化,为提高语音合成的音频质量提供了新的技术方法,是音频合成技术创新的一个代表,对追求高质量音频的语音合成具有重要的参考价值。

(五)SV2TTS

  • 项目简介:SV2TTS是一个从说话者验证到多说话者文本到语音合成的转移学习项目,它将说话者验证的技术应用到多说话者的文本到语音合成中,为处理多说话者语音合成提供了一种新的思路和方法,在多说话者语音合成的个性化和适应性方面具有一定的优势,通过利用转移学习技术,能够更好地处理不同说话者的语音特征。

五、环境配置

在开始使用https://github.com/babysor/MockingBird项目之前,我们首先需要对环境进行配置,确保开发环境满足项目的要求,以下是详细的环境配置步骤:

(一)操作系统

该项目支持Windows和Linux操作系统,甚至可以在M1 MACOS上运行,具有良好的跨平台特性。对于不同的操作系统,配置过程可能会有所不同,下面将分别进行说明。

(二)Python版本

  • 通用设置:运行该工具需要Python 3.7或更高版本。Python作为项目的主要编程语言,其版本的选择会影响后续依赖项的安装,若在安装PyTorch时遇到ERROR: Could not find a version that satisfies the requirement torch==1.9.0+cu102 (from versions: 0.1.2, 0.1.2.post1, 0.1.2.post2 )这样的错误,很可能是Python版本过低,尝试使用Python 3.9可成功安装。

(三)安装PyTorch

需要根据自己的硬件环境安装PyTorch,并且可以在官方网站查找GPU版本的PyTorch安装方法。对于不同的操作系统,其安装过程可能需要不同的操作。例如,在安装PyTorch时,可能需要考虑CUDA工具包的版本,如torchvision0.10.0cudatoolkit10.2,这对于利用GPU加速深度学习任务至关重要。因为PyTorch是一个强大的深度学习框架,本项目利用PyTorch进行模型训练和推理,正确的安装将确保后续工作的顺利进行。

(四)安装ffmpeg

ffmpeg是一个开源的多媒体处理工具,在该项目中用于处理音频和视频等媒体文件。可以通过pip install ffmpeg来安装它。ffmpeg可以对音频进行各种操作,如格式转换、编码和解码,对于项目中的音频处理部分,如音频预处理和生成语音文件的后续处理,是不可或缺的工具。

(五)虚拟环境配置

为了更好地管理项目依赖,避免不同项目之间的依赖冲突,建议使用虚拟环境。可以使用condamamba来创建虚拟环境,命令如下:

conda env create -n env_name -f env.yml
mamba env create -n env_name -f env.yml

这将创建一个名为env_name的虚拟环境,其中包含项目所需的必要依赖项,但暂时不包含monotonic-align。创建完成后,使用conda activate env_name进入该虚拟环境。

(六)M1 Mac环境的特殊配置

对于M1 Mac用户,由于demo_toolbox.py中使用的PyQt5包与M1芯片不兼容,以下是一些解决步骤:
安装PyQt5
– 首先创建并打开一个Rosetta Terminal,然后使用系统Python创建项目的虚拟环境/usr/bin/python3 -m venv /PathToMockingBird/venv并激活source /PathToMockingBird/venv/bin/activate。接着升级pip并安装PyQt5:

pip install --upgrade pip
pip install pyqt5
  • 安装pyworld和ctc-segmentation
    • 这两个包似乎是该项目特有的,并且在原始的Real-Time Voice Cloning项目中未出现。当使用pip install安装时,这两个包缺少相应的wheels,程序会尝试直接从C代码编译,但可能找不到Python.h
    • 对于pyworld:首先通过brew install python安装Python,因为Python.h会随着brew安装的Python一起安装,其路径为/opt/homebrew/Frameworks/Python.framework/Headers,需要将此路径手动添加到环境变量中,通过export CPLUS_INCLUDE_PATH=/opt/homebrew/Frameworks/Python.framework/Headers,然后使用pip install pyworld进行安装。
    • 对于ctc-segmentation:不能使用相同的方法,需要从GitHub上的源代码进行编译:
git clone https://github.com/lumaku/ctc-segmentation.git
cd ctc-segmentation
source /PathToMockingBird/venv/bin/activate
cythonize -3 ctc_segmentation/ctc_segmentation_dyn.pyx
/usr/bin/arch -x86_64 python setup.py build
/usr/bin/arch -x86_64 python setup.py install --optimize=1 --skip-build
  • 其他依赖项安装:以PyTorch为例,使用x86架构安装:
/usr/bin/arch -x86_64 pip install torch torchvision torchaudio

然后通过pip install ffmpeg安装ffmpeg,并使用pip install -r requirements.txt安装其他所需的依赖项。
运行推理时的特殊设置:为了在x86架构上运行项目,创建一个名为pythonM1的可执行文件,其内容如下:

#!/usr/bin/env zsh
mydir=${0:a:h}
/usr/bin/arch -x86_64 $mydir/python "$@"

然后使用chmod +x pythonM1将其设置为可执行文件。如果使用PyCharm IDE,将项目解释器配置为pythonM1;如果使用命令行,则运行/PathToMockingBird/venv/bin/pythonM1 demo_toolbox.py

六、安装

当环境配置完成后,可以开始安装项目所需的各种组件和依赖,以下是详细的安装步骤:

(一)安装项目所需的包

首先,确保已经安装了Python和PyTorch,并且已经创建并激活了虚拟环境。然后,使用pip install -r requirements.txt来安装其余必要的包。但需要注意的是,由于requirements.txt是几个月前导出的,可能无法与较新的版本兼容。如果需要,可以使用pip install webrtcvad-wheels来安装webrtcvad,或者使用condamamba创建虚拟环境时,它们会自动安装必要的依赖项。

(二)其他可能的依赖项安装

除了上述提到的通用和针对M1 Mac的依赖项安装外,在不同的使用场景下,可能还需要一些额外的依赖项。例如,如果要使用命令行生成语音,可能需要安装cn2an,通过pip install cn2an可以获得更好的数字结果。

七、使用

一旦环境配置和项目安装完成,就可以开始使用该项目了,以下是不同的使用场景和使用方法:

(一)模型准备

  • 使用预训练的模型:对于该项目,使用预训练的encoder/vocoder而不是synthesizer,因为原始模型与中文符号不兼容,这意味着demo_cli暂时无法工作,所以需要额外的synthesizer模型。幸运的是,社区分享了一些模型,可以根据作者提供的链接进行下载,例如:

 

author

Download link

Preview Video

Info

@author

https://pan.baidu.com/s/1iONvRxmkI-t1nHqxKytY3g

Baidu

4j5d

75k steps trained by multiple datasets

@author

https://pan.baidu.com/s/1fMh9IlgKJlL2PIiRTYDUvw

Baidu

code:om7f

25k steps trained by multiple datasets, only works under version 0.0.1

@FawenYo

https://yisiou-my.sharepoint.com/:u:/g/personal/lawrence_cheng_fawenyo_onmicrosoft_com/EWFWDHzee-NNg9TWdKckCc4BC7bK2j9cCbOWn0-_tK0nOg?e=n0gGgC

input

output

200k steps with local accent of Taiwan, only works under version 0.0.1

@miven

https://pan.baidu.com/s/1PI-hM3sn5wbeChRryX-RCQ

code: 2021 https://www.aliyundrive.com/s/AwPsbo8mcSP

code: z2m0

https://www.bilibili.com/video/BV1uh411B7AD/

only works under version 0.0.1

可以根据自己的需求和使用场景选择合适的模型进行下载和使用。
训练自己的模型(可选)
训练encoder:首先对音频和梅尔频谱图进行预处理,使用python encoder_preprocess.py <datasets_root>,可通过--dataset {dataset}参数支持想要预处理的数据集,只有这些数据集的训练集将被使用,可能的数据集名称有librispeech_othervoxceleb1voxceleb2,使用逗号分隔多个数据集。然后使用python encoder_train.py my_run <datasets_root>/SV2TTS/encoder训练encoder,在训练时,encoder使用visdom,可以使用--no_visdom禁用它,但使用visdom可以更好地观察训练过程,在单独的CLI或进程中运行visdom启动服务器。

项目地址:  https://github.com/babysor/MockingBird

© 版权声明

相关文章

暂无评论

暂无评论...