
Implementação de Pytorch de modelos convolucionais de síntese de texto em fala em redes:
As amostras de áudio estão disponíveis em https://r9y9.github.io/deepvoice3_pytorch/.
Notebooks que devem ser executados em https://colab.research.google.com estão disponíveis:
NOTA : Os modelos pré -ridicularizados não são compatíveis para dominar. Para ser atualizado em breve.
| Url | Modelo | Dados | Paramters hiper | Git Commit | Passos |
|---|---|---|---|---|---|
| link | DeepVoice3 | LJSpeech | link | ABF0A21 | 640K |
| link | Nyanko | LJSpeech | builder=nyanko,preset=nyanko_ljspeech | BA59DC7 | 585K |
| link | DeepVoice3 de vários falantes | Vctk | builder=deepvoice3_multispeaker,preset=deepvoice3_vctk | 0421749 | 300k + 300k |
Para usar modelos pré-treinados, é altamente recomendável que você esteja no commit Git específico mencionado acima. ou seja,
git checkout ${commit_hash}
Em seguida, siga a seção "SyntheSize do ponto de verificação" no ReadMe do Commit Git específico. Observe que a versão mais recente de desenvolvimento do repositório pode não funcionar.
Você pode tentar, por exemplo:
# pretrained model (20180505_deepvoice3_checkpoint_step000640000.pth)
# hparams (20180505_deepvoice3_ljspeech.json)
git checkout 4357976
python synthesis.py --preset=20180505_deepvoice3_ljspeech.json
20180505_deepvoice3_checkpoint_step000640000.pth
sentences.txt
output_dir
hparams.py para obter detalhes.builder especifica qual modelo você deseja usar. deepvoice3 , deepvoice3_multispeaker [1] e nyanko [2] são santificados.Instale os pacotes listados acima primeiro e depois
git clone https://github.com/r9y9/deepvoice3_pytorch && cd deepvoice3_pytorch
pip install -e ".[bin]"
Existem muitos parâmetros hiper -girados depende de qual modelo e dados você está trabalhando. Para conjuntos de dados e modelos típicos, são fornecidos parâmetros conhecidos por funcionar bem ( predefinição ) no repositório. Consulte o diretório presets para obter detalhes. Observe isso
preprocess.pytrain.pysynthesis.py Aceita --preset=<json> Parâmetro opcional, que especifica onde carregar parâmetros predefinidos. Se você quiser usar parâmetros predefinidos, deve usar o mesmo --preset=<json> durante todo o processamento, treinamento e avaliação. por exemplo,
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
em vez de
python preprocess.py ljspeech ~/data/LJSpeech-1.0
# warning! this may use different hyper parameters used at preprocessing stage
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
Uso:
python preprocess.py ${dataset_name} ${dataset_path} ${out_dir} --preset=<json>
${dataset_name} s são:
ljspeech (en, um alto -falante)vctk (EN, multi-falante)jsut (JP, alto -falante único)nikl_m (ko, multi-falante)nikl_s (ko, alto -falante) Supondo que você use parâmetros predefinidos conhecidos por funcionar bem para o conjunto de dados LJSpeech/DeepVoice3 e possui dados em ~/data/LJSpeech-1.0 , você pode pré-processar dados por:
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0/ ./data/ljspeech
Quando isso for feito, você verá recursos extraídos (espectrogramas MEL e espectrogramas lineares) em ./data/ljspeech .
Construindo seu próprio conjunto de dados, com metadados no formato JSON (compatível com o CarpedM20/multi-fals-tacotron-tensorflow) é atualmente suportado. Uso:
python preprocess.py json_meta ${list-of-JSON-metadata-paths} ${out_dir} --preset=<json>
Pode ser necessário modificar o arquivo JSON predefinido pré-existente, especialmente n_speakers . Para o multispaker em inglês, comece com presets/deepvoice3_vctk.json .
Supondo que você tenha o conjunto de dados A (alto -falante A) e o conjunto de dados B (alto -falante B), cada um descrito no arquivo de metadados json ./datasets/datasetA/alignment.json e ./datasets/datasetB/alignment.json , você pode pré -processar dados por:
python preprocess.py json_meta "./datasets/datasetA/alignment.json,./datasets/datasetB/alignment.json" "./datasets/processed_A+B" --preset=(path to preset json file)
Algum conjunto de dados, especialmente o conjunto de dados gerado automaticamente, pode incluir um longo silêncio e ruídos indesejáveis de liderança/trilha, minando o modelo SEQ2SEQ de nível de char. (por exemplo, vctk, embora isso seja coberto em vctk_preprocess)
Para lidar com o problema, gentle_web_align.py vai
gentle_web_align.py usa gentil, uma ferramenta de alinhamento de texto de fala baseada em kaldi. Isso acessa aplicativos suaves servidos na Web, alinham os segmentos de som com transcrições e converte o resultado em arquivos de etiquetas no estilo HTK, a serem processados no preprocess.py . Gentil pode ser executado no Linux/Mac/Windows (via Docker).
Os resultados preliminares mostram que, embora o método baseado em HTK/Festival/Merlin no vctk_preprocess/prepare_vctk_labels.py funcione melhor no VCTK, Gentil é mais estável com clipes de áudio com ruído ambiente. (por exemplo, trechos de filme)
Uso: (assumindo que Gentle está sendo executado no localhost:8567 (padrão quando não especificado))
datasetA/wavs e transcrições estão em datasetA/txts ) python gentle_web_align.py -w "datasetA/wavs/*.wav" -t "datasetA/txts/*.txt" --server_addr=localhost --port=8567
datasetB/speakerN/blahblah.wav e datasetB/speakerN/blahblah.txt ) python gentle_web_align.py --nested-directories="datasetB" --server_addr=localhost --port=8567
Depois de ter alinhamento de fonema para cada enunciado, você pode extrair recursos executando preprocess.py
Uso:
python train.py --data-root=${data-root} --preset=<json> --hparams="parameters you may want to override"
Suponha que você construa um modelo de estilo DeepVoice3 usando o conjunto de dados LJSpeech, então você pode treinar seu modelo por:
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech/
Os pontos de verificação do modelo (.PTH) e alinhamentos (.png) são salvos no diretório ./checkpoints por 10000 etapas por padrão.
Por favor, verifique isso com antecedência e siga os comandos abaixo.
python preprocess.py nikl_s ${your_nikl_root_path} data/nikl_s --preset=presets/deepvoice3_nikls.json
python train.py --data-root=./data/nikl_s --checkpoint-dir checkpoint_nikl_s --preset=presets/deepvoice3_nikls.json
Os logs são despejados no diretório ./log por padrão. Você pode monitorar logs por Tensorboard:
tensorboard --logdir=log
Dada uma lista de texto, synthesis.py Sinícese sinais de áudio do modelo treinado. O uso é:
python synthesis.py ${checkpoint_path} ${text_list.txt} ${output_dir} --preset=<json>
Exemplo test_list.txt:
Generative adversarial network or variational auto-encoder.
Once upon a time there was a dear little girl who was loved by every one who looked at her, but most of all by her grandmother, and there was nothing that she would not have given to the child.
A text-to-speech synthesis system typically consists of multiple stages, such as a text analysis frontend, an acoustic model and an audio synthesis module.
O VCTK e o NIKL são suportados pelo conjunto de dados para criar um modelo multi-falante.
Como algumas amostras de áudio no VCTK têm longos silêncios que afetam o desempenho, é recomendável fazer alinhamento de fonemas e remover silêncios de acordo com o VCTK_Preprocess.
Depois de ter o alinhamento do fonema para cada enunciada, você pode extrair recursos por:
python preprocess.py vctk ${your_vctk_root_path} ./data/vctk
Agora que você tem dados preparados, então você pode treinar uma versão multi-falante do DeepVoice3 por:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
Se você deseja reutilizar a incorporação aprendida de outro conjunto de dados, pode fazer isso em vez disso:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
--load-embedding=20171213_deepvoice3_checkpoint_step000210000.pth
Isso pode melhorar um pouco a velocidade de treinamento.
Você poderá obter amostras de áudio limpas em ../nikl_preprocoess. Os detalhes são encontrados aqui.
Depois que a Nikl Corpus estiver pronta para uso do pré -processamento, você pode extrair recursos por:
python preprocess.py nikl_m ${your_nikl_root_path} data/nikl_m
Agora que você tem dados preparados, então você pode treinar uma versão multi-falante do DeepVoice3 por:
python train.py --data-root=./data/nikl_m --checkpoint-dir checkpoint_nikl_m
--preset=presets/deepvoice3_niklm.json
Se você possui dados muito limitados, pode considerar experimentar o modelo pré-treinado em reviravolta fina. Por exemplo, usando o modelo pré-treinado no LJSpeech, você pode adaptá-lo aos dados do VCTK Speaker p225 (30 minutos) pelo seguinte comando:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk_adaptation
--preset=presets/deepvoice3_ljspeech.json
--log-event-path=log/deepvoice3_vctk_adaptation
--restore-parts="20171213_deepvoice3_checkpoint_step000210000.pth"
--speaker-id=0
Pela minha experiência, pode obter uma qualidade razoável da fala muito rapidamente, em vez de treinar o modelo do zero.
Existem duas opções importantes usadas acima:
--restore-parts=<N> : Especifica onde carregar os parâmetros do modelo. As diferenças da opção --checkpoint=<N> são 1) --restore-parts=<N> Ignora todos os parâmetros inválidos, enquanto --checkpoint=<N> não. 2) --restore-parts=<N> Diga ao treinador para começar de 0 etapas, enquanto --checkpoint=<N> Diga ao treinador para continuar a partir da última etapa. --checkpoint=<N> Deve estar bem se você estiver usando exatamente o mesmo modelo e continuar treinando, mas seria útil se você deseja personalizar sua arquitetura de modelo e ter vantagens do modelo pré-treinado.--speaker-id=<N> : Especifica qual falante de dados é usado para treinamento. Isso só deve ser especificado se você estiver usando o conjunto de dados de vários alto-falantes. Quanto ao VCTK, o ID do alto -falante é atribuído automaticamente de forma incremental (0, 1, ..., 107) de acordo com o speaker_info.txt no conjunto de dados. Se você estiver treinando o modelo multi-falante, a adaptação dos alto-falantes só funcionará quando n_speakers for idêntico .
Isso pode acontecer dependendo dos back -ends que você tem para o Matplotlib. Tente alterar o back -end para o matplotlib e veja se funciona da seguinte forma:
MPLBACKEND=Qt5Agg python train.py ${args...}
No #78, o Engiecat relatou que a alteração do back -end do Matplotlib de Tkinnter (TKAGG) para PYQT5 (QT5AGG) corrigiu o problema.
Parte do código foi adaptada dos seguintes projetos:
Banner e logotipo criado por @jraulhernandezi (#76)