Amphion MaskGCT: modelo de clonación de texto a voz de muestra cero (paquete de despliegue local con un solo clic)
Últimos recursos sobre IAActualizado hace 9 meses Círculo de intercambio de inteligencia artificial 3.4K 00
Introducción general
MaskGCT (Masked Generative Codec Transformer) es un modelo de conversión de texto en habla (TTS) totalmente no autorregresivo introducido conjuntamente por Funky Maru Technology y la Universidad China de Hong Kong. El modelo elimina la necesidad de información explícita de alineación texto-voz y adopta un enfoque de generación en dos fases: en primer lugar, predice la codificación semántica a partir del texto y, a continuación, genera la codificación acústica a partir de la codificación semántica.
Producto beta público: Funmaru Chiyo, herramienta de clonación de voz y traducción multilingüe de vídeo
Tesis: https://arxiv.org/abs/2409.00750

Demostración en línea: https://huggingface.co/spaces/amphion/maskgct
Lista de funciones
- Conversión de texto a voz (TTS)Convierte el texto de entrada en salida de voz.
- codificación semántica: Convierte el habla en codificación semántica para su posterior procesamiento.
- código acústico: Convierte la codificación semántica en codificación acústica y reconstruye la forma de onda de audio.
- aprendizaje de muestra ceroSíntesis de voz de alta calidad sin información explícita de alineación.
- Modelo de preentrenamientoLa amplia gama de modelos preentrenados está disponible para facilitar su rápida implantación y uso.
Utilizar la ayuda
Proceso de instalación
- proyecto de clonación::
git clone https://github.com/open-mmlab/Amphion.git
- Creación de un entorno e instalación de dependencias::
bash ./models/tts/maskgct/env.sh
Proceso de utilización
- Descargar modelo preentrenadoLos modelos preentrenados necesarios pueden descargarse de HuggingFace:
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")
- Generar discursoUtiliza el siguiente código para generar voz a partir de texto:
# 导入必要的库 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)
- formación de modelosSi necesita entrenar su propio modelo, puede consultar los scripts de entrenamiento y los archivos de configuración del proyecto para la preparación de los datos y el entrenamiento del modelo.
advertencia
- Configuración del entornoAsegúrese de que todas las bibliotecas dependientes necesarias están instaladas y las variables de entorno están configuradas correctamente.
- Preparación de datos: Entrenamiento con datos de habla de alta calidad para mejorar la síntesis del habla.
- Optimización de modelosAjuste los parámetros del modelo y las estrategias de entrenamiento para lograr un rendimiento óptimo en función de los escenarios de aplicación específicos.
Tutorial de implantación local (con instalador local de un solo clic)
Al igual que el modelo F5-TTS, que tampoco es autorregresivo, el modelo MaskGCT se ha entrenado con el conjunto de datos Emilia, de 100.000 horas de duración, y es competente en la síntesis multilingüe de seis idiomas: chino, inglés, japonés, coreano, francés y alemán. Emilia es uno de los mayores y más diversos conjuntos de datos de habla multilingüe de alta calidad del mundo.
Esta vez, compartimos cómo desplegar el proyecto MaskGCT localmente para que tu tarjeta gráfica vuelva a funcionar.
Instalación de dependencias básicas
En primer lugar, asegúrate de que Python 3.11 está instalado localmente, y puedes descargar el paquete desde el sitio web oficial de Python.
python.org
Clonación posterior de proyectos oficiales.
git clone https://github.com/open-mmlab/Amphion.git
Se proporcionan scripts shell de instalación oficiales basados en Linux:
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
Aquí el autor convierte el archivo de dependencia requirements.txt para Windows:
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
Ejecutar comando:
pip3 install -r requirements.txt
Basta con instalar las dependencias.
Instalar onnxruntime-gpu.
pip3 install onnxruntime-gpu
Instalación del conjunto de tres piezas de la linterna.
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
Configuración de Windows espeak-ng
eSpeak es un sintetizador de texto a voz (TTS) compacto y de código abierto que admite varios idiomas y acentos. Utiliza un método de "síntesis de picos de resonancia" que permite hablar varios idiomas en poco espacio. El habla es clara y puede utilizarse a altas velocidades, pero no es tan natural y suave como otros sintetizadores más grandes basados en grabaciones del habla humana, y MaskGCT se basa en la síntesis de espeak con razonamiento secundario.
En primer lugar ejecute el comando para instalar espeak:
winget install espeak
Si no puedes instalarlo, también puedes descargar el instalador e instalarlo manualmente:
https://sourceforge.net/projects/espeak/files/espeak/espeak-1.48/setup_espeak-1.48.04.exe/download
A continuación, descarga el instalador de espeak-ng:
https://github.com/espeak-ng/espeak-ng/releases
Descárgalo y haz doble clic para instalarlo.
A continuación, copie C:\Program Files\eSpeak NG\libespeak-ng.dll al directorio C:\Program Files (x86)\eSpeak\command_line.
A continuación, cambie el nombre de libespeak-ng.dll a espeak-ng.dll
Por último, basta con configurar el directorio C:\program Files (x86)\eSpeak\command_line en la variable de entorno.
Razonamiento local MaskGCT
Con todo eso configurado, escribe el script de inferencia 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)
La primera inferencia descargará 10 G de modelos en el directorio hf_download.
El proceso de razonamiento ocupa 11 G de memoria de vídeo:

Si tienes menos de 11G de memoria de vídeo, asegúrate de activar la política de recuperación de memoria del sistema en el panel de control de Nvidia para completar tu memoria de vídeo a través de la memoria del sistema:

Si lo deseas, también puedes escribir una sencilla interfaz webui basada en gradio, app.py:.
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()
Y, por supuesto, no olvides instalar la dependencia de gradio:
pip3 install -U gradio
El efecto de carrera es el siguiente:

observaciones finales
La ventaja del modelo MaskGCT es que el nivel de tono y el ritmo es muy destacado, comparable a la voz real, la desventaja es también muy obvio, el coste de funcionamiento es alto, la optimización del nivel de ingeniería es insuficiente.página de inicio del proyecto MaskGCT tiene su versión comercial del modelo de la entrada, de acuerdo con esta inferencia, el funcionario no será demasiado en la versión de código abierto de la fuerza, y, finalmente, presentó un paquete de integración de una sola llave, y la gente con la misma fiesta.
Kit de implantación de MaskGCT con un solo clic
https://pan.quark.cn/s/e74726b84c78
Cortesía de Ten Horsemen: https://pan.quark.cn/s/1a8428b6ff73 Código de extracto: kind
https://drive.google.com/drive/folders/11JHi5FnusZA34Q6zS3b3Xj5MiLpYKsLu
© declaración de copyright
Derechos de autor del artículo Círculo de intercambio de inteligencia artificial Todos, por favor no reproducir sin permiso.
Artículos relacionados
Sin comentarios...