Nota : Esta é a versão de desenvolvimento. Se você precisar de uma versão estável, consulte a v0.1.1.
O objetivo do repositório é fornecer uma implementação do vocoder wavenet, que pode gerar amostras de fala bruta de alta qualidade condicionadas a características linguísticas ou acústicas.
As amostras de áudio estão disponíveis em https://r9y9.github.io/wavenet_vocoder/.
Um caderno que deveria ser executado em https://colab.research.google.com está disponível:
NOTA : Este não é um modelo de texto em fala (TTS). Com um modelo pré-treinado fornecido aqui, você pode sintetizar a forma de onda, dada um espectrograma MEL , não um texto bruto. Você precisará do modelo de previsão de espectro do MEL (como o Tacotron2) para usar os modelos pré-treinados para TTS.
NOTA : Quanto ao modelo pré-terenciado para LJSpeech, o modelo foi ajustado várias vezes e treinado para mais de 1000 mil etapas no total. Consulte os problemas ( #1, #75, #45) para saber como o modelo foi treinado.
| Modelo URL | Dados | Hyper Params URL | Git Commit | Passos |
|---|---|---|---|---|
| link | LJSpeech | link | 2092A64 | 1000K ~ Etapas |
| link | CMU Ártico | link | B1A1076 | 740k etapas |
Para usar modelos pré-treinados, primeiro consulte o commit Git específico mencionado acima. ou seja,
git checkout ${commit_hash}
E depois segue a seção "SyntheSize do ponto de verificação" no ReadMe. Observe que a versão antiga do Synthesis.Py não pode aceitar --preset=<json> parâmetro e você pode ter que alterar o arquivo hparams.py de acordo com o arquivo predefinido (JSON).
Você pode tentar, por exemplo:
# Assuming you have downloaded LJSpeech-1.1 at ~/data/LJSpeech-1.1
# pretrained model (20180510_mixture_lj_checkpoint_step000320000_ema.pth)
# hparams (20180510_mixture_lj_checkpoint_step000320000_ema.json)
git checkout 2092a64
python preprocess.py ljspeech ~/data/LJSpeech-1.1 ./data/ljspeech
--preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
python synthesis.py --preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
--conditional=./data/ljspeech/ljspeech-mel-00001.npy
20180510_mixture_lj_checkpoint_step000320000_ema.pth
generated
Você pode encontrar um arquivo WAV gerado no diretório generated . Gostaria de saber como funciona? Então dê uma olhada no código :)
O repositório consiste em 1) biblioteca Pytorch, 2) ferramentas de linha de comando e 3) receitas no estilo ESPNET. O primeiro é uma biblioteca Pytorch para fornecer funcionalidade wavanet. O segundo é um conjunto de ferramentas para executar o treinamento/inferência do WaveNet, processamento de dados etc. O último são as receitas reproduzíveis que combinam as ferramentas da biblioteca e utilitários do WaveNet. Por favor, dê uma olhada neles, dependendo do seu propósito. Se você deseja construir seu WaveNet no seu conjunto de dados (acho que esse é o caso mais provável), a receita é o caminho para você.
git clone https://github.com/r9y9/wavenet_vocoder && cd wavenet_vocoder
pip install -e .
Se você precisar apenas da parte da biblioteca, poderá instalá -la no Pypi:
pip install wavenet_vocoder
O repositório fornece receitas no estilo kaldi para tornar os experimentos reproduzíveis e facilmente gerenciáveis. As receitas disponíveis são as seguintes:
mulaw256 : WaveNet que usa a distribuição de saída categórica. A entrada é uma forma de onda quantizada de Mulaw de 8 bits.mol : Mistura de Logística (Mol) WaveNet. A entrada é de áudio bruto de 16 bits.gaussian : Wavenet de Gaussian único (também conhecido como Professor Wavenet do Clarinete). A entrada é de áudio bruto de 16 bits. Toda a receita foi run.sh , que especifica todas as etapas para executar o treinamento/inferência do WaveNet, incluindo o pré -processamento de dados. Consulte Run.sh no diretório EGS para obter detalhes.
Aviso : o condicionamento global para wavenet de vários falantes não é suportado nas receitas acima (embora não seja difícil de implementar). Verifique v0.1.12 para o recurso ou, se você realmente precisar do recurso, por favor, levante um problema.
As receitas foram projetadas para serem genéricas para que se possa usá -las para qualquer conjunto de dados. Para aplicar receitas ao seu próprio conjunto de dados, você precisará colocar todos os arquivos WAV em um único diretório plano. ou seja,
> tree -L 1 ~/data/LJSpeech-1.1/wavs/ | head
/Users/ryuichi/data/LJSpeech-1.1/wavs/
├── LJ001-0001.wav
├── LJ001-0002.wav
├── LJ001-0003.wav
├── LJ001-0004.wav
├── LJ001-0005.wav
├── LJ001-0006.wav
├── LJ001-0007.wav
├── LJ001-0008.wav
├── LJ001-0009.wav
É isso! A última etapa é modificar db_root em run.sh ou dar db_root como a linha de comando argent for run.sh.
./run.sh --stage 0 --stop-stage 0 --db-root ~/data/LJSpeech-1.1/wavs/
Uma receita normalmente consiste em várias etapas. É altamente recomendável executar a receita passo a passo para entender como funciona pela primeira vez. Para fazer isso, especifique stage e stop_stage da seguinte forma:
./run.sh --stage 0 --stop-stage 0
./run.sh --stage 1 --stop-stage 1
./run.sh --stage 2 --stop-stage 2
Em situações típicas, você precisaria especificar dispositivos CUDA explicitamente expecialmente para a etapa de treinamento.
CUDA_VISIBLE_DEVICES="0,1" ./run.sh --stage 2 --stop-stage 2
As ferramentas de linha de comando são escritas com docopt. Veja cada documentação para os usos básicos.
Despeje hyperparameters em um arquivo JSON.
Uso:
python tojson.py --hparams="parameters you want to override" <output_json_path>
Uso:
python preprocess.py wavallin ${dataset_path} ${out_dir} --preset=<json>
Nota: Para treinamento multi -GPU, é melhor garantir que Batch_size % num_gpu == 0
Uso:
python train.py --dump-root=${dump-root} --preset=<json>
--hparams="parameters you want to override"
Dado um diretory que contém recursos de condicionamento local, sintetize formas de onda para eles.
Uso:
python evaluate.py ${dump_root} ${checkpoint} ${output_dir} --dump-root="data location"
--preset=<json> --hparams="parameters you want to override"
Opções:
--num-utterances=<N> : Número de enunciadas a serem geradas. Se não for especificado, gerar todas as expressões. Isso é útil para depuração. Aviso : isso provavelmente não está funcionando agora. Por favor, use avaliar.py em vez disso.
O SyntheSize Waveform fornece um recurso de condicionamento.
Uso:
python synthesis.py ${checkpoint_path} ${output_dir} --preset=<json> --hparams="parameters you want to override"
Opções importantes:
--conditional=<path> : (necessário para o caminho da onda condicional) do caminho dos recursos condicionais locais (.npy). Se isso for especificado, o número de etapas de tempo a ser gerado é determinado pelo tamanho do recurso condicional.Aviso : isso provavelmente não está funcionando agora. Verifique v0.1.1 para obter a versão de trabalho.
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=-1,gin_channels=-1"
Você precisa desativar o condicionamento global e local, definindo gin_channels e cin_channels para valores negativos.
python train.py --dump-root=./data/cmu_arctic/ --speaker-id=0
--hparams="cin_channels=80,gin_channels=-1"
Aviso : isso provavelmente não está funcionando agora. Verifique v0.1.1 para obter a versão de trabalho.
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=80,gin_channels=16,n_speakers=7"
Os logs são despejados no diretório ./log por padrão. Você pode monitorar logs por Tensorboard:
tensorboard --logdir=log
Muito obrigado!! Se você encontrar um novo, envie um pr.