Réplica de Voz Estilo Ma Dugong com Bert-VITS2 V2.1 (Python 3.10)

A versão V2.10 do Bert-VITS2 foi lançada, trazendo correções no alinhamento BERT para japonês/inglês e otimizações adicionais no desempenho. A base de dados do modelo principal foi aprimorada com mais dados, reduzindo a probabilidade de falhas no finetune e artefatos de voz robótica. O modelo BERT japonês foi substituído, e a inferência multilíngue foi aprimorada.

Para mais detalhes, consulte o site oficial do Bert-VITS2:

https://github.com/fishaudio/Bert-VITS2/releases/tag/2.1

Diante dos recentes acontecimentos, Ma Dugong tem se destacado com coragem, liderando pelo exemplo e praticando os "Quatro Preceitos de Hengqu": estabelecer o coração para o céu e a terra, garantir o sustento para o povo, dar continuidade aos estudos dos antigos sábios e trazer paz para todas as gerações.

Neste tutorial, homenagearemos Ma Dugong replicando sua voz com a nova versão V2.10 do Bert-VITS2.

Preparação do Conjunto de Dados para Bert-VITS2 V2.10

O estilo de Ma Dugong é caracterizado por uma fala extremamente rápida, pouca expressão corporal e pouca variação entonacional, com pausas apenas para respirar, lembrando uma metralhadora. Isso, em parte, se deve à alta densidade de informações em seus conteúdos. No entanto, para treinamento de aprendizado profundo, o áudio de seus programas é inadequado como um conjunto de dados de alta qualidade.

Um conjunto de dados ideal e de alta qualidade deve possuir as seguintes características:

  • Diversidade de Timbre: Amostras de voz do locutor alvo em diferentes estados emocionais, velocidades de fala e alturas tonais para capturar suas nuances em diversas situações.
  • Qualidade do Áudio: Garantir que as amsotras de voz tenham alta qualidade, sem ruídos, distorções ou outras interferências, pois isso impacta diretamente na qualidade da réplica.
  • Conteúdo Variado: Incluir palavras, frases, sentenças e parágrafos para capturar as características do timbre do locutor em diferentes contextos.
  • Equilíbrio Vocal: Manter uma quantidade relativamente equilibrada de amostras do locutor para evitar modelos enviesados.
  • Abrangência de Alturas Tonais: Coletar amostras em diferentes tons e inflexões para capturar melhor as variações vocais.
  • Ambientes de Gravação: Incluir amostras gravadas em diferentes ambientes (interno, externo, silencioso, ruidoso) para tornar o timbre replicado mais robusto e adaptável.
  • Duração e Diversidaed: Considerar amostras de diferentes durações e estilos de fala para uma representação mais completa das características vocais.

É claro que atender a todas essas características é um desafio. Para este exemplo, utilizaremos um trecho de uma entrevista com Ma Dugong e Liu Nüshen:

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

Primeiro, faremos o download do vídeo usando you-get:

pip install you-get

Execute o seguinte comando:

you-get https://www.bilibili.com/video/BV1sN411M73g/

Após o download bem-sucedido, extrairemos o áudio da voz de Ma Dugong.

Treinamento do Modelo Bert-VITS2 V2.10

Primeiro, clone o projeto V2.10, que é um fork do repositório oficial:

git clone https://github.com/v3ucn/Bert-VITS2_V210.git

Coloque seus arquivos de áudio no diretório Data/meimei/raw/meimei. Certifique-se de que os arquivos estejam no formato WAV.

Em seguida, substitua o modelo base. Baixe o novo modelo base aqui:

https://openi.pcl.ac.cn/Stardust_minus/Bert-VITS2/modelmanage/show_model

Coloque o modelo Bert-VITS2_2.1-Emo no diretório pretrained_models do seu projeto.

Adicionalmente, copie o modelo deberta-v2-large-japanese-char-wwm para o diretório bert/deberta-v2-large-japanese-char-wwm do projeto.

Como o modelo de emoção multidimensional foi adicionado, você também precisará baixar um modelo separado:

https://huggingface.co/facebook/wav2vec2-large-robust/tree/main

Coloque este modelo no diretório emotional do projeto:

E:\work\Bert-VITS2-v21_demo\emotional>tree /f
Folder PATH listing for volume myssd
Volume serial number is 7CE3-15AE
E:.
└───wav2vec2-large-robust-12-ft-emotion-msp-dim
        .gitattributes
        config.json
        LICENSE
        preprocessor_config.json
        pytorch_model.bin
        README.md
        vocab.json

Execute os scripts para segmentar o áudio:

python3 audio_slicer.py

Em seguida, realize o reamostragem e o reconhecimento de texto:

python3 short_audio_transcribe.py

Após isso, proceda com a anotação:

python3 preprocess_text.py

Diferente da versão V2.0.2, a V2.1 requer a geração de arquivos para o modelo de emoção multidimensional:

python3 emo_gen.py

Comparado à versão original, a nova versão adicionou um cache de spec para o conjunto de treinamento, o que melhora significativamente a eficiência do treinamento:

python3 spec_gen.py

Finalmente, gere os arquivos legíveis pelo modelo BERT:

python3 bert_gen.py

Por último, inicie o treinamento:

python3 train_ms.py

Inferência com o Modelo Bert-VITS2 V2.10

Após o treinamento do modelo, passe para a etapa de inferência. Primeiro, modifique o arquivo config.yml na raiz do projeto:

bert_gen:
  config_path: config.json
  device: cuda
  num_processes: 2
  use_multi_device: false
dataset_path: Data\meimei
mirror: ''
openi_token: ''
preprocess_text:
  clean: true
  cleaned_path: filelists/cleaned.list
  config_path: config.json
  max_val_total: 8
  train_path: filelists/train.list
  transcription_path: filelists/short_character_anno.list
  val_path: filelists/val.list
  val_per_spk: 5
resample:
  in_dir: raw
  out_dir: raw
  sampling_rate: 44100
server:
  device: cuda
  models:
  - config: ./Data/meimei/config.json
    device: cuda
    language: ZH
    model: ./Data/meimei/models/G_0.pth
    speakers:
    - length_scale: 1
      noise_scale: 0.6
      noise_scale_w: 0.8
      sdp_ratio: 0.2
      speaker: "\u79D1\u6BD4"
    - length_scale: 0.5
      noise_scale: 0.7
      noise_scale_w: 0.8
      sdp_ratio: 0.3
      speaker: "\u4E94\u6761\u609F"
    - length_scale: 1.2
      noise_scale: 0.6
      noise_scale_w: 0.8
      sdp_ratio: 0.2
      speaker: "\u5B89\u500D\u6640\u4E09"
  - config: ./Data/meimei/config.json
    device: cuda
    language: JP
    model: ./Data/meimei/models/G_0.pth
    speakers: []
  port: 7860
train_ms:
  base:
    model_image: "Bert-VITS2_2.1-Emo底模"
    repo_id: Stardust_minus/Bert-VITS2
    use_base_model: false
  config_path: config.json
  env:
    MASTER_ADDR: localhost
    MASTER_PORT: 10086
    RANK: 0
    THE_ENV_VAR_YOU_NEED_TO_USE: '1234567'
    WORLD_SIZE: 1
  keep_ckpts: 8
  model: models
  num_workers: 16
  spec_cache: true
translate:
  app_key: ''
  secret_key: ''
webui:
  config_path: Data/meimei/config.json
  debug: false
  device: cuda
  language_identification_library: langid
  model: models/G_150.pth
  port: 7860
  share: false

No bloco webui, insira o nome do arquivo do modelo: model: models/G_150.pth.

Em seguida, inicie o script de inferência:

python3 webui.py

Agora você pode realizar a inferência. Recomenda-se utilizar a interface de inferência oficial baseada em Gradio, em vez da versão FastAPI.

Este projeto destina-se à pesquisa e teste do Bert-VITS2. É importante notar que replicar a voz de Ma Dugong com apenas 30 segundos de áudio é, sem dúvida, uma tarefa irrealista. Contudo, o espírito de dedicação de Ma Dugong é algo que todos podemos emular.

Tags: Bert-VITS2 V2.10 Text-to-Speech TTS Python

Publicado em 7-16 02:58