Amphion MaskGCT: 제로 샘플 텍스트 음성 변환 복제 모델(로컬 원클릭 배포 패키지)

최신 AI 리소스9개월 전 업데이트 AI 공유 서클
2.9K 00

일반 소개

MaskGCT(마스크 생성 코덱 트랜스포머)는 펑키 마루 테크놀로지와 홍콩 중문대학교가 공동으로 도입한 완전 비회귀형 텍스트 음성 변환(TTS) 모델입니다. 이 모델은 명시적인 텍스트-음성 정렬 정보가 필요하지 않으며 먼저 텍스트에서 의미 코딩을 예측한 다음 의미 코딩에서 음향 코딩을 생성하는 2단계 생성 방식을 채택하고 있으며, MaskGCT는 제로 샘플 TTS 작업에서 우수한 성능을 발휘하여 고품질의 유사하고 이해하기 쉬운 음성 출력을 제공합니다.

공개 베타 제품: 음성 복제 및 동영상 다국어 번역 도구 '펀마루 치요'

논문: https://arxiv.org/abs/2409.00750

Amphion MaskGCT:零样本文本到语音克隆模型(本地一键部署包)

온라인 데모: https://huggingface.co/spaces/amphion/maskgct

 

기능 목록

  • 텍스트 음성 변환(TTS): 입력 텍스트를 음성 출력으로 변환합니다.
  • 시맨틱 인코딩: 후속 처리를 위해 음성을 시맨틱 코딩으로 변환합니다.
  • 음향 코드: 시맨틱 코딩을 음향 코딩으로 변환하고 오디오 파형을 재구성합니다.
  • 제로 샘플 학습명시적인 정렬 정보 없이 고품질 음성 합성.
  • 사전 교육 모델신속한 배포 및 사용을 지원하기 위해 사전 학습된 다양한 모델을 사용할 수 있습니다.

도움말 사용

설치 프로세스

  1. 복제 프로젝트::
    git clone https://github.com/open-mmlab/Amphion.git
    
  2. 환경 만들기 및 종속성 설치::
    bash ./models/tts/maskgct/env.sh
    

사용 프로세스

  1. 사전 학습된 모델 다운로드필요한 사전 훈련된 모델은 허깅페이스에서 다운로드할 수 있습니다:
    from huggingface_hub import hf_hub_download
    # 下载语义编码模型
    semantic_code_ckpt = hf_hub_download("amphion/MaskGCT", filename="semantic_codec/model.safetensors")
    # 下载声学编码模型
    codec_encoder_ckpt = hf_hub_download("amphion/MaskGCT", filename="acoustic_codec/model.safetensors")
    codec_decoder_ckpt = hf_hub_download("amphion/MaskGCT", filename="acoustic_codec/model_1.safetensors")
    # 下载TTS模型
    t2s_model_ckpt = hf_hub_download("amphion/MaskGCT", filename="t2s_model/model.safetensors")
    
  2. 음성 생성: 다음 코드를 사용하여 텍스트에서 음성을 생성합니다:
    # 导入必要的库
    from amphion.models.tts.maskgct import MaskGCT
    # 初始化模型
    model = MaskGCT()
    # 输入文本
    text = "你好,欢迎使用MaskGCT模型。"
    # 生成语音
    audio = model.text_to_speech(text)
    # 保存生成的语音
    with open("output.wav", "wb") as f:
    f.write(audio)
    
  3. 모델 교육자체 모델 학습이 필요한 경우 프로젝트의 학습 스크립트 및 구성 파일을 참조하여 데이터 준비 및 모델 학습을 수행할 수 있습니다.

주의

  • 환경 구성필요한 모든 종속 라이브러리가 설치되어 있고 환경 변수가 올바르게 구성되었는지 확인합니다.
  • 데이터 준비더 나은 음성 합성을 위해 고품질 음성 데이터로 학습합니다.
  • 모델 최적화특정 애플리케이션 시나리오에 따라 최적의 성능을 달성하도록 모델 매개변수 및 학습 전략을 조정합니다.

 

로컬 배포 튜토리얼(로컬 원클릭 설치 프로그램 포함)

며칠 전 또 다른 비선형 텍스트 음성 변환 AI 모델인 MaskGCT가 소스 코드를 공개했습니다. 역시 비선형인 F5-TTS 모델과 마찬가지로, MaskGCT 모델은 100,000시간 분량의 데이터 세트 Emilia로 학습되었으며 중국어, 영어, 일본어, 한국어, 프랑스어, 독일어 6개 언어의 교차 언어 합성에 능숙합니다. 에밀리아 데이터셋은 세계에서 가장 크고 다양한 고품질 다국어 음성 데이터셋 중 하나입니다.

이번에는 그래픽 카드를 다시 작동시키기 위해 로컬에 MaskGCT 프로젝트를 배포하는 방법을 공유합니다.

기본 종속성 설치

먼저 Python 3.11이 로컬에 설치되어 있는지 확인하고 공식 Python 웹사이트에서 패키지를 다운로드할 수 있습니다.

python.org

공식 프로젝트의 후속 복제.

git clone https://github.com/open-mmlab/Amphion.git

공식 리눅스 기반 설치 셸 스크립트가 제공됩니다:

pip install setuptools ruamel.yaml tqdm   
pip install tensorboard tensorboardX torch==2.0.1  
pip install transformers===4.41.1  
pip install -U encodec  
pip install black==24.1.1  
pip install oss2  
sudo apt-get install espeak-ng  
pip install phonemizer  
pip install g2p_en  
pip install accelerate==0.31.0  
pip install funasr zhconv zhon modelscope  
# pip install git+https://github.com/lhotse-speech/lhotse  
pip install timm  
pip install jieba cn2an  
pip install unidecode  
pip install -U cos-python-sdk-v5  
pip install pypinyin  
pip install jiwer  
pip install omegaconf  
pip install pyworld  
pip install py3langid==0.2.2 LangSegment  
pip install onnxruntime  
pip install pyopenjtalk  
pip install pykakasi  
pip install -U openai-whisper

여기서는 작성자가 Windows용 요구 사항.txt 종속성 파일을 변환합니다:

setuptools   
ruamel.yaml   
tqdm   
transformers===4.41.1  
encodec  
black==24.1.1  
oss2  
phonemizer  
g2p_en  
accelerate==0.31.0  
funasr   
zhconv   
zhon   
modelscope  
timm  
jieba   
cn2an  
unidecode  
cos-python-sdk-v5  
pypinyin  
jiwer  
omegaconf  
pyworld  
py3langid==0.2.2  
LangSegment  
onnxruntime  
pyopenjtalk  
pykakasi  
openai-whisper  
json5

실행 명령을 실행합니다:

pip3 install -r requirements.txt

종속성을 설치하기만 하면 됩니다.

onnxruntime-gpu를 설치합니다.

pip3 install onnxruntime-gpu

토치 3종 세트 설치.

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

Windows 구성 설명

MaskGCT 프로젝트는 백엔드에 espeak 소프트웨어를 사용하므로 로컬에서 구성해야 합니다. eSpeak는 여러 언어와 악센트를 지원하는 소형 오픈 소스 텍스트 음성 변환(TTS) 합성기입니다. 작은 설치 공간에서 여러 언어를 제공할 수 있는 '공명 피크 합성' 방식을 사용합니다. 음성은 선명하고 빠른 속도로 사용할 수 있지만 사람의 음성을 녹음한 대형 합성기만큼 자연스럽고 부드럽지는 않으며, MaskGCT는 espeak의 합성을 기반으로 2차 추론을 통해 구축됩니다.

먼저 espeak를 설치하는 명령을 실행합니다:

winget install espeak

설치할 수 없는 경우 설치 프로그램을 다운로드하여 수동으로 설치할 수도 있습니다:

https://sourceforge.net/projects/espeak/files/espeak/espeak-1.48/setup_espeak-1.48.04.exe/download

그런 다음 espeak-ng 설치 프로그램을 다운로드합니다:

https://github.com/espeak-ng/espeak-ng/releases

다운로드하고 더블클릭하여 설치합니다.

그런 다음 C:\프로그램 파일\eSpeak NG\libespeak-ng.dll을 C:\프로그램 파일 (x86)\eSpeak\command_line 디렉터리에 복사합니다.

그런 다음 libespeak-ng.dll의 이름을 espeak-ng.dll로 바꿉니다.

마지막으로, C:\Program Files (x86)\eSpeak\command_line 디렉터리를 환경 변수로 구성하세요.

MaskGCT 로컬 추론

모든 구성이 완료되면 추론 스크립트 local_test.py를 작성합니다:

from models.tts.maskgct.maskgct_utils import *  
from huggingface_hub import hf_hub_download  
import safetensors  
import soundfile as sf  
import os  
import argparse  
os.environ['HF_HOME'] = os.path.join(os.path.dirname(__file__), 'hf_download')  
print(os.path.join(os.path.dirname(__file__), 'hf_download'))  
parser = argparse.ArgumentParser(description="GPT-SoVITS api")  
parser.add_argument("-p", "--prompt_text", type=str, default="说得好像您带我以来我考好过几次一样")  
parser.add_argument("-a", "--audio", type=str, default="./说得好像您带我以来我考好过几次一样.wav")  
parser.add_argument("-t", "--text", type=str, default="你好")  
parser.add_argument("-l", "--language", type=str, default="zh")  
parser.add_argument("-lt", "--target_language", type=str, default="zh")  
args = parser.parse_args()  
if __name__ == "__main__":  
# download semantic codec ckpt  
semantic_code_ckpt = hf_hub_download("amphion/MaskGCT", filename="semantic_codec/model.safetensors")  
# download acoustic codec ckpt  
codec_encoder_ckpt = hf_hub_download("amphion/MaskGCT", filename="acoustic_codec/model.safetensors")  
codec_decoder_ckpt = hf_hub_download("amphion/MaskGCT", filename="acoustic_codec/model_1.safetensors")  
# download t2s model ckpt  
t2s_model_ckpt = hf_hub_download("amphion/MaskGCT", filename="t2s_model/model.safetensors")  
# download s2a model ckpt  
s2a_1layer_ckpt = hf_hub_download("amphion/MaskGCT", filename="s2a_model/s2a_model_1layer/model.safetensors")  
s2a_full_ckpt = hf_hub_download("amphion/MaskGCT", filename="s2a_model/s2a_model_full/model.safetensors")  
# build model  
device = torch.device("cuda")  
cfg_path = "./models/tts/maskgct/config/maskgct.json"  
cfg = load_config(cfg_path)  
# 1. build semantic model (w2v-bert-2.0)  
semantic_model, semantic_mean, semantic_std = build_semantic_model(device)  
# 2. build semantic codec  
semantic_codec = build_semantic_codec(cfg.model.semantic_codec, device)  
# 3. build acoustic codec  
codec_encoder, codec_decoder = build_acoustic_codec(cfg.model.acoustic_codec, device)  
# 4. build t2s model  
t2s_model = build_t2s_model(cfg.model.t2s_model, device)  
# 5. build s2a model  
s2a_model_1layer = build_s2a_model(cfg.model.s2a_model.s2a_1layer, device)  
s2a_model_full =  build_s2a_model(cfg.model.s2a_model.s2a_full, device)  
# load semantic codec  
safetensors.torch.load_model(semantic_codec, semantic_code_ckpt)  
# load acoustic codec  
safetensors.torch.load_model(codec_encoder, codec_encoder_ckpt)  
safetensors.torch.load_model(codec_decoder, codec_decoder_ckpt)  
# load t2s model  
safetensors.torch.load_model(t2s_model, t2s_model_ckpt)  
# load s2a model  
safetensors.torch.load_model(s2a_model_1layer, s2a_1layer_ckpt)  
safetensors.torch.load_model(s2a_model_full, s2a_full_ckpt)  
# inference  
prompt_wav_path = args.audio  
save_path = "output.wav"  
prompt_text = args.prompt_text  
target_text = args.text  
# Specify the target duration (in seconds). If target_len = None, we use a simple rule to predict the target duration.  
target_len = None  
maskgct_inference_pipeline = MaskGCT_Inference_Pipeline(  
semantic_model,  
semantic_codec,  
codec_encoder,  
codec_decoder,  
t2s_model,  
s2a_model_1layer,  
s2a_model_full,  
semantic_mean,  
semantic_std,  
device,  
)  
recovered_audio = maskgct_inference_pipeline.maskgct_inference(  
prompt_wav_path, prompt_text, target_text,args.language,args.target_language, target_len=target_len  
)  
sf.write(save_path, recovered_audio, 24000)

첫 번째 추론은 hf_download 디렉토리에 10G의 모델을 다운로드합니다.

추론 프로세스는 11G의 비디오 메모리를 차지합니다:

Amphion MaskGCT:零样本文本到语音克隆模型(本地一键部署包)

비디오 메모리가 11G 미만인 경우, 시스템 메모리를 통해 비디오 메모리를 충전하려면 Nvidia 제어판에서 시스템 메모리 폴백 정책을 켜야 합니다:

Amphion MaskGCT:零样本文本到语音克隆模型(本地一键部署包)

원하는 경우 gradio, app.py: 를 기반으로 간단한 웹UI 인터페이스를 작성할 수도 있습니다.

import os  
import gc  
import re  
import gradio as gr  
import numpy as np  
import subprocess  
os.environ['HF_HOME'] = os.path.join(os.path.dirname(__file__), 'hf_download')  
# 设置HF_ENDPOINT环境变量  
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"  
reference_wavs = ["请选择参考音频或者自己上传"]  
for name in os.listdir("./参考音频/"):  
reference_wavs.append(name)  
def change_choices():  
reference_wavs = ["请选择参考音频或者自己上传"]  
for name in os.listdir("./参考音频/"):  
reference_wavs.append(name)  
return {"choices":reference_wavs, "__type__": "update"}  
def change_wav(audio_path):  
text = audio_path.replace(".wav","").replace(".mp3","").replace(".WAV","")  
# text = replace_speaker(text)  
return f"./参考音频/{audio_path}",text  
def do_cloth(gen_text_input,ref_audio_input,model_choice_text,model_choice_re,ref_text_input):  
cmd = fr'.\py311_cu118\python.exe local_test.py -t "{gen_text_input}" -p "{ref_text_input}" -a "{ref_audio_input}" -l {model_choice_re} -lt {model_choice_text} '  
print(cmd)  
res = subprocess.Popen(cmd)  
res.wait()  
return "output.wav"  
with gr.Blocks() as app_demo:  
gr.Markdown(  
"""  
项目地址:https://github.com/open-mmlab/Amphion/tree/main/models/tts/maskgct  
整合包制作:刘悦的技术博客 https://space.bilibili.com/3031494  
"""  
)  
gen_text_input = gr.Textbox(label="生成文本", lines=4)  
model_choice_text = gr.Radio(  
choices=["zh", "en"], label="生成文本语种", value="zh",interactive=True)  
wavs_dropdown = gr.Dropdown(label="参考音频列表",choices=reference_wavs,value="选择参考音频或者自己上传",interactive=True)  
refresh_button = gr.Button("刷新参考音频")  
refresh_button.click(fn=change_choices, inputs=[], outputs=[wavs_dropdown])  
ref_audio_input = gr.Audio(label="Reference Audio", type="filepath")  
ref_text_input = gr.Textbox(  
label="Reference Text",  
info="Leave blank to automatically transcribe the reference audio. If you enter text it will override automatic transcription.",  
lines=2,  
)  
model_choice_re = gr.Radio(  
choices=["zh", "en"], label="参考音频语种", value="zh",interactive=True  
)  
wavs_dropdown.change(change_wav,[wavs_dropdown],[ref_audio_input,ref_text_input])  
generate_btn = gr.Button("Synthesize", variant="primary")  
audio_output = gr.Audio(label="Synthesized Audio")  
generate_btn.click(do_cloth,[gen_text_input,ref_audio_input,model_choice_text,model_choice_re,ref_text_input],[audio_output])  
def main():  
global app_demo  
print(f"Starting app...")  
app_demo.launch(inbrowser=True)  
if __name__ == "__main__":  
main()

물론 그라디오 종속성을 설치하는 것을 잊지 마세요:

pip3 install -U gradio

실행 효과는 다음과 같습니다:

Amphion MaskGCT:零样本文本到语音克隆模型(本地一键部署包)

결론

MaskGCT 모델의 장점은 톤과 리듬 수준이 매우 뛰어나고 실제 음성과 비교할 수 있으며 단점도 매우 분명하고 운영 비용이 높으며 엔지니어링 수준의 최적화가 불충분하다는 것입니다.MaskGCT 프로젝트 홈페이지에는 입구 모델의 상용 버전이 있으며,이 추론에 따르면 관계자는 오픈 소스 버전에서 너무 많은 힘이 없어야하며 마지막으로 모든 사람들이 동일한 것을 즐길 수있는 원키 통합 패키지가 제공됩니다.

 

MaskGCT 원클릭 배포 키트

https://pan.quark.cn/s/e74726b84c78

텐 호스맨 제공: https://pan.quark.cn/s/1a8428b6ff73 추출 코드: 종류

https://drive.google.com/drive/folders/11JHi5FnusZA34Q6zS3b3Xj5MiLpYKsLu

© 저작권 정책

관련 문서

댓글 없음

댓글에 참여하려면 로그인해야 합니다!
지금 로그인
없음
댓글 없음...