Em nosso artigo, propomos o Daft-Exprt, um modelo acústico de vários falantes que avançava o estado da arte para transferência de prosódia de transmissão cruzada em qualquer texto. Essa é uma das tarefas mais desafiadoras e raramente abordadas diretamente na síntese de fala, especialmente para dados altamente expressivos. O DAFT-EXPRT usa camadas de condicionamento de filme para injetar estrategicamente diferentes informações prosódicas em todas as partes da arquitetura. O modelo codifica explicitamente recursos tradicionais de prosódia de baixo nível, como pitch, volume e duração, mas também informações prosódicas de nível superior que ajudam a gerar vozes convincentes em estilos altamente expressivos. A identidade do alto -falante e as informações prosódicas são separadas por meio de uma estratégia de treinamento adversário que permite a transferência precisa da prosódia entre os falantes. Os resultados experimentais mostram que o Daft-Exprt supera significativamente as linhas de base fortes em tarefas de transferência de prosódios entre textos entre textos, enquanto produzem naturalidade comparáveis aos modelos expressivos de última geração. Além disso, os resultados indicam que o modelo descarta informações de identidade do alto -falante da representação da prosódia e geram consistentemente a fala com a voz desejada. Visite nossa página de demonstração para obter amostras de áudio relacionadas às experiências de papel.
Divulgação completa : o modelo fornecido neste repositório não é o mesmo que na avaliação do papel. O modelo do artigo foi treinado com dados proprietários, o que nos impede de liberá -los publicamente.
Pré-treinarmos Daft-Exprt em uma combinação do conjunto de dados de fala de LJ e o conjunto de dados de fala emocional (ESD) de Zhou et al.
Visite os lançamentos deste repositório para baixar o modelo pré-treinado e ouvir exemplos de transferência de prosódia usando esse mesmo modelo.
Requisitos:
Recomendamos o uso do CONDA for Python Environment Management, por exemplo, baixe e instale o Miniconda.
Crie seu ambiente Python e instale dependências usando o Makefile:
conda create -n daft_exprt python=3.8 -yconda activate daft_exprtcd environmentmakeTodas as dependências do Linux/CoNA/PIP serão instaladas pelo Makefile, e o repositório será instalado como um pacote PIP no modo editável.
Requisitos:
Construa a imagem do Docker usando o Dockerfile associado:
docker build -f environment/Dockerfile -t daft_exprt . Este guia de início rápido ilustrará como usar os diferentes scripts deste repositório para:
Todos os scripts estão localizados no diretório scripts.
O código-fonte Daft-Exprt está localizado no diretório daft_exprt.
Os parâmetros de configuração usados nos scripts são todos instanciados em hparams.py.
Como exemplo rápido de início, consideramos o uso do conjunto de dados de fala de 22kHz LJ e o conjunto de dados de fala emocional de 16kHz (ESD) de Zhou et al.
Isso combina um total de 11 alto -falantes. Todos os conjuntos de dados do alto -falante devem estar no mesmo diretório raiz. Por exemplo:
/data_dir
LJ_Speech
ESD
spk_1
...
spk_N
Neste exemplo, usamos a imagem do Docker construída na seção anterior:
docker run -it --gpus all -v /path/to/data_dir:/workdir/data_dir -v path/to/repo_dir:/workdir/repo_dir IMAGE_ID
O código -fonte espera que a estrutura de árvore específica para cada conjunto de dados do alto -falante:
/speaker_dir
metadata.csv
/wavs
wav_file_name_1.wav
...
wav_file_name_N.wav
metadata.csv deve ser formatado da seguinte forma:
wav_file_name_1|text_1
...
wav_file_name_N|text_N
Dado que cada conjunto de dados possui sua própria nomenclatura, este projeto não fornece um script universal pronto.
No entanto, o script format_dataset.py já propõe o código para formatar LJ e ESD:
python format_dataset.py
--data_set_dir /workdir/data_dir/LJ_Speech
LJ
python format_dataset.py
--data_set_dir /workdir/data_dir/ESD
ESD
--language english
Nesta seção, o código será:
Para pré-processar todos os dados formatados disponíveis (ou seja, LJ e ESD neste exemplo):
python training.py
--experiment_name EXPERIMENT_NAME
--data_set_dir /workdir/data_dir
pre_process
Isso pré-processará os dados usando os hiper-parâmetros padrão definidos para áudios de 22kHz.
Todas as saídas relacionadas ao experimento serão armazenadas em /workdir/repo_dir/trainings/EXPERIMENT_NAME .
Você também pode segmentar falantes específicos para pré-processamento de dados. Por exemplo, para considerar apenas os falantes de ESD:
python training.py
--experiment_name EXPERIMENT_NAME
--speakers ESD/spk_1 ... ESD/spk_N
--data_set_dir /workdir/data_dir
pre_process
A função pré-processo leva vários argumentos:
--features_dir : caminho absoluto em que os dados pré-processados serão armazenados. Padrão para /workdir/repo_dir/datasets--proportion_validation : Proporção de exemplos que estarão no conjunto de validação. Padrão para 0.1 % por falante.--nb_jobs : Número de núcleos a serem usados para multiprocessamento Python. Se definido como max , todos os núcleos da CPU são usados. Padrão para 6 . Observe que, se for a primeira vez que você pré-processando os dados, esta etapa levará várias horas.
Você pode diminuir o tempo de computação aumentando o parâmetro --nb_jobs .
Depois que o pré-processamento terminar, inicie o treinamento. Para treinar em todos os dados pré-processados:
python training.py
--experiment_name EXPERIMENT_NAME
--data_set_dir /workdir/data_dir
train
Ou se você segmentou falantes específicos durante o pré-processamento (por exemplo, alto-falantes ESD):
python training.py
--experiment_name EXPERIMENT_NAME
--speakers ESD/spk_1 ... ESD/spk_N
--data_set_dir /workdir/data_dir
train
Todas as saídas relacionadas ao experimento serão armazenadas em /workdir/repo_dir/trainings/EXPERIMENT_NAME .
A função do trem leva vários argumentos:
--checkpoint : Caminho absoluto de um ponto de verificação daft-Exprt. Padrão para ""--no_multiprocessing_distributed : Desative o treinamento distribuído com multiprocessos Pytorch. Padrão para False--world_size : Número de nós para treinamento distribuído. Padrão para 1 .--rank : classificação do nó para treinamento distribuído. Padrão para 0 .--master : URL usado para configurar o treinamento distribuído. Padrão para tcp://localhost:54321 . Esses valores padrão iniciarão um novo treinamento a partir da iteração 0, usando todas as GPUs disponíveis na máquina.
O código supõe que apenas 1 GPU esteja disponível na máquina.
O tamanho padrão do lote e os hiper-parâmetros de acumulação de gradiente estão definidos como valores para reproduzir o tamanho do lote de 48 do papel.
O código também suporta o registro do Tensorboard. Para exibir saídas de log:
tensorboard --logdir_spec=EXPERIMENT_NAME:/workdir/repo_dir/trainings/EXPERIMENT_NAME/logs
Depois que o treinamento terminar, você pode criar um conjunto de dados para ajuste fino do vocoder:
python training.py
--experiment_name EXPERIMENT_NAME
--data_set_dir /workdir/data_dir
fine_tune
--checkpoint CHECKPOINT_PATH
Ou se você segmentou falantes específicos durante o pré-processamento e o treinamento (por exemplo, alto-falantes ESD):
python training.py
--experiment_name EXPERIMENT_NAME
--speakers ESD/spk_1 ... ESD/spk_N
--data_set_dir /workdir/data_dir
fine_tune
--checkpoint CHECKPOINT_PATH
O conjunto de dados de ajuste fino será armazenado em /workdir/repo_dir/trainings/EXPERIMENT_NAME/fine_tuning_dataset .
Para um exemplo de como usar o Daft-Exprt para síntese de TTS, execute o script synthesize.py.
python synthesize.py
--output_dir OUTPUT_DIR
--checkpoint CHECKPOINT
Sentenças padrão e enunciados de referência são usados no script.
O script também oferece a possibilidade de:
--batch_size : Processar lote de frases em paralelo--real_time_factor : estimar o desempenho do fator em tempo real daft-exprt, dado o tamanho do lote escolhido--control : execute o controle de prosódia local @article{Zaidi2021,
abstract = {},
journal = {arXiv},
arxivId = {2108.02271},
author = {Za{"{i}}di, Julian and Seut{'{e}}, Hugo and van Niekerk, Benjamin and Carbonneau, Marc-Andr{'{e}}},
eprint = {2108.02271},
title = {{Daft-Exprt: Robust Prosody Transfer Across Speakers for Expressive Speech Synthesis}},
url = {https://arxiv.org/pdf/2108.02271.pdf},
year = {2021}
}
Qualquer contribuição para este repositório é mais do que bem -vinda!
Se você tiver algum feedback, envie -o para [email protected].
© [2021] Ubisoft Entertainment. Todos os direitos reservados