Amphion MaskGCT: модель клонирования текста в речь с нулевой выборкой (локальный пакет развертывания одним щелчком мыши)
Общее введение
MaskGCT (Masked Generative Codec Transformer) - это полностью неавторегрессивная модель преобразования текста в речь (TTS), разработанная совместными усилиями компании Funky Maru Technology и Китайского университета Гонконга. Модель устраняет необходимость в явной информации о согласовании текста и речи и использует двухфазный подход к генерации, сначала предсказывая семантическое кодирование из текста, а затем генерируя акустическое кодирование из семантического кодирования. MaskGCT хорошо справляется с задачей TTS с нулевой выборкой, обеспечивая высококачественный, похожий и простой для понимания речевой вывод.
Публичная бета-версия продукта: Funmaru Chiyo, инструмент для клонирования голоса и многоязычного перевода видео
Диссертация: https://arxiv.org/abs/2409.00750

Онлайн-демонстрация: https://huggingface.co/spaces/amphion/maskgct
Список функций
- Преобразование текста в речь (TTS): Преобразует введенный текст в речевой вывод.
- семантическое кодирование: Преобразует речь в семантическое кодирование для последующей обработки.
- акустический код: Преобразование семантического кодирования в акустическое кодирование и восстановление формы звукового сигнала.
- обучение с нулевой выборкой: Высококачественный синтез речи без явной информации о выравнивании.
- Модель предварительного обученияШирокий выбор предварительно обученных моделей обеспечивает быстрое развертывание и использование.
Использование помощи
Процесс установки
- проект клонирования::
git clone https://github.com/open-mmlab/Amphion.git
- Создание среды и установка зависимостей::
bash ./models/tts/maskgct/env.sh
Процесс использования
- Загрузите предварительно обученную модель: Необходимые предварительно обученные модели можно загрузить с сайта 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")
- Создайте речь: Используйте следующий код для генерации речи из текста:
# 导入必要的库 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)
- обучение модели: Если вам нужно обучить собственную модель, вы можете обратиться к обучающим скриптам и конфигурационным файлам проекта для подготовки данных и обучения модели.
предостережение
- Конфигурация среды: Убедитесь, что установлены все необходимые зависимые библиотеки и правильно настроены переменные окружения.
- Подготовка данных: Обучение с использованием высококачественных речевых данных для лучшего синтеза речи.
- Оптимизация модели: Настройка параметров модели и стратегий обучения для достижения оптимальной производительности в соответствии с конкретными сценариями применения.
Учебник по локальному развертыванию (с локальной программой установки одним щелчком мыши)
Несколько дней назад был открыт исходный код еще одной неавторегрессивной модели искусственного интеллекта для преобразования текста в речь - MaskGCT. Как и модель F5-TTS, которая также является неавторегрессивной, модель MaskGCT обучена на 100 000-часовом наборе данных Emilia и обладает способностью к межъязыковому синтезу шести языков, а именно: китайского, английского, японского, корейского, французского и немецкого. Набор данных Emilia является одним из самых больших и разнообразных высококачественных многоязычных речевых наборов данных в мире.
На этот раз мы расскажем, как развернуть проект MaskGCT локально, чтобы ваша видеокарта снова заработала.
Установка основных зависимостей
Прежде всего, убедитесь, что Python 3.11 установлен локально, его можно загрузить с официального сайта Python.
python.org
Последующее клонирование официальных проектов.
git clone https://github.com/open-mmlab/Amphion.git
Предоставляются официальные сценарии оболочки для установки на базе 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
Здесь автор преобразует файл зависимости requirements.txt для 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
Выполнить команду:
pip3 install -r requirements.txt
Просто установите зависимости.
Установите onnxruntime-gpu.
pip3 install onnxruntime-gpu
Установка трехкомпонентного комплекта резака.
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
Конфигурация Windows espeak-ng
Поскольку проект MaskGCT опирается на программное обеспечение espeak, его необходимо настроить локально. eSpeak - это компактный синтезатор текста в речь (TTS) с открытым исходным кодом, который поддерживает множество языков и акцентов. В нем используется подход "резонансного пикового синтеза", который позволяет передавать речь на нескольких языках при небольшом пространстве. Речь получается четкой и может использоваться на высоких скоростях, но она не такая естественная и плавная, как у больших синтезаторов, основанных на записях человеческой речи. MaskGCT развивает синтез espeak с помощью вторичных рассуждений.
Сначала выполните команду для установки 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:\Program Files\eSpeak NG\libespeak-ng.dll в директорию C:\Program Files (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)
Первый вывод загрузит 10 гигабайтов моделей в каталог hf_download.
Процесс рассуждений занимает 11 Гб видеопамяти:

Если у вас меньше 11 Гб видеопамяти, то обязательно включите политику резервного копирования системной памяти в панели управления Nvidia, чтобы пополнить видеопамять за счет системной памяти:

При желании вы также можете написать простой интерфейс webui на основе 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()
И, конечно, не забудьте установить зависимость gradio:
pip3 install -U gradio
Эффект прогона выглядит следующим образом:

заключительные замечания
Преимущество модели MaskGCT заключается в том, что уровень тона и ритма очень выдающийся, сравнимый с реальным голосом, недостаток также очень очевиден, эксплуатационные расходы высоки, оптимизация инженерного уровня недостаточна.MaskGCT проекта домашней странице есть его коммерческая версия модели входа, в соответствии с этим выводом, официальный не должно быть слишком много власти в открытый исходный код версии, и, наконец, один ключ интеграции пакет представлен со всеми людьми, чтобы насладиться тем же.
Набор для развертывания MaskGCT одним щелчком мыши
https://pan.quark.cn/s/e74726b84c78
Любезно предоставлено компанией Ten Horsemen: https://pan.quark.cn/s/1a8428b6ff73 Код извлечения: kind
https://drive.google.com/drive/folders/11JHi5FnusZA34Q6zS3b3Xj5MiLpYKsLu
© заявление об авторских правах
Авторское право на статью Круг обмена ИИ Пожалуйста, не воспроизводите без разрешения.
Похожие статьи
Нет комментариев...