Llasa 1~8B : un modèle de synthèse vocale à source ouverte pour la génération et le clonage de la parole de haute qualité

Introduction générale

Llasa-3B est un modèle de synthèse vocale open source développé par le laboratoire audio de l'université des sciences et technologies de Hong Kong (HKUST Audio). Le modèle est basé sur l'architecture Llama 3.2B, qui a été soigneusement réglée pour fournir une génération de parole de haute qualité qui non seulement prend en charge plusieurs langues, mais permet également l'expression émotionnelle et le clonage personnalisé de la parole.Llasa-3B a attiré l'attention de nombreux chercheurs et développeurs pour son expressivité et sa flexibilité dans la synthèse de la parole naturelle.

Llasa 1~8B:高品质语音生成和克隆的开源文本转语音模型

Expérience : https://huggingface.co/spaces/srinivasbilla/llasa-3b-tts

 

Liste des fonctions

  • synthèse vocale: Convertit le texte en un son naturel et fluide.
  • clonage de la paroleLe clonage de la voix humaine : Il suffit de 15 secondes d'enregistrement audio pour cloner une voix humaine spécifique, y compris le timbre et l'émotion.
  • Prise en charge multilingueLes langues suivantes sont prises en charge : le chinois et l'anglais, l'objectif étant d'étendre le système à d'autres langues.
  • l'expression affectiveLa capacité d'injecter des émotions dans le discours généré renforce l'authenticité de ce dernier.
  • Prise en charge de plusieurs modèlesModèles paramétriques à l'échelle 1B et 3B disponibles, les modèles 8B devant être introduits à l'avenir.
  • pondération ouverteTous les modèles sont fournis avec des poids ouverts, qui peuvent être utilisés directement ou affinés deux fois par les développeurs, et prennent en charge les Transformers et les vLLM Cadres.

 

Utiliser l'aide

Installation et préparation de l'environnement

Pour utiliser le modèle Llasa-3B, vous devez d'abord préparer l'environnement suivant :

Environnement PythonPython 3.9 ou supérieur est recommandé.
Bibliothèques apparentées: Nécessite l'installation detorchtransformersxcodec2etc.

conda create -n xcodec2 python=3.9
conda activate xcodec2
pip install transformers torch xcodec2==0.1.3

Téléchargement et chargement du modèle

Visitez Hugging Face surLlasa-3B pageVous pouvez utiliser directement la fonction de téléchargement du modèle de Hugging Face :

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import soundfile as sf
llasa_3b = 'HKUST-Audio/Llasa-3B'
tokenizer = AutoTokenizer.from_pretrained(llasa_3b)
model = AutoModelForCausalLM.from_pretrained(llasa_3b)
model.eval()
model.to('cuda')  # 如果有GPU

Processus de synthèse vocale

  1. Texte préparé: :
    • Saisissez le texte que vous souhaitez convertir en parole.
  2. Prétraitement du texte: :
    • Utiliser un texte formaté spécifique pour guider le modèle de génération vocale, par exemple :
      input_text = "这是一个测试文本,请转成语音。"
      formatted_text = f"<|TEXT_UNDERSTANDING_START|>{input_text}<|TEXT_UNDERSTANDING_END|>"
      
  3. Générer un discours: :
    • Convertir le texte en un jeton que le modèle peut comprendre :
      chat = [
      {"role": "user", "content": "Convert the text to speech:" + formatted_text},
      {"role": "assistant", "content": "<|SPEECH_GENERATION_START|>"}
      ]
      input_ids = tokenizer.apply_chat_template(chat, tokenize=True, return_tensors='pt', continue_final_message=True)
      input_ids = input_ids.to('cuda')
      
    • Générer un jeton vocal :
      speech_end_id = tokenizer.convert_tokens_to_ids('<|SPEECH_GENERATION_END|>')
      outputs = model.generate(input_ids, max_length=2048, eos_token_id=speech_end_id, do_sample=True, top_p=1, temperature=0.8)
      
  4. décodage de la voix: :
    • Convertit le jeton généré en audio :
      from xcodec2.modeling_xcodec2 import XCodec2Model
      model_path = "HKUST-Audio/xcodec2"
      Codec_model = XCodec2Model.from_pretrained(model_path).eval().cuda()
      generated_ids = outputs[0][input_ids.shape[1]:-1]
      speech_tokens = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
      speech_ids = [int(token[4:-2]) for token in speech_tokens if token.startswith('<|s_') and token.endswith('|>')]
      speech_tokens_tensor = torch.tensor(speech_ids).cuda().unsqueeze(0).unsqueeze(0)
      gen_wav = Codec_model.decode_code(speech_tokens_tensor)
      sf.write("output.wav", gen_wav[0, 0, :].cpu().numpy(), 16000)
      

clonage de la parole

  • Enregistrer ou préparer environ 15 secondes de la bande sonore originale: :
    • Utilisez un appareil d'enregistrement ou fournissez un fichier audio existant.
  • processus de clonage phonétique: :
    • Encodage des fréquences sonores originales dans un livre de codes que le modèle peut utiliser :
      prompt_wav = sf.read("your_source_audio.wav")[0]  # 必须是16kHz采样率
      vq_code_prompt = Codec_model.encode_code(torch.from_numpy(prompt_wav).unsqueeze(0).unsqueeze(0).cuda())
      
    • Ajouter des signaux audio au processus de génération de texte :
      speech_ids_prefix = [f"<|s_{id}|>"foridin vq_code_prompt[0, 0, :].tolist()]
      chat = [
      {"role": "user", "content": "Convert the text to speech:" + formatted_text},
      {"role": "assistant", "content": "<|SPEECH_GENERATION_START|>" + ''.join(speech_ids_prefix)}
      ]
      # 后续步骤与文本转语音相同
      

mise en garde

  • Assurez-vous que le format d'entrée audio est correct, le Llasa-3B ne prend en charge que l'audio 16kHz.
  • La performance du modèle est directement affectée par la qualité du texte et de l'audio d'entrée, ce qui garantit la qualité de l'entrée.
© déclaration de droits d'auteur

Articles connexes

Pas de commentaires

Vous devez être connecté pour participer aux commentaires !
S'inscrire maintenant
aucun
Pas de commentaires...