<> 5 de julho de 2024: Último ponto de verificação de AR lançado: maior estabilidade de produção. Grande atualização em breve!
Este é o repositório do modelo de fala em inglês (TTS) MARS5 do CAMB.AI.
O modelo segue um pipeline AR-NAR de dois estágios com um componente NAR distintamente novo (veja mais informações na Arquitetura).
Com apenas 5 segundos de áudio e um trecho de texto, o MARS5 pode gerar fala mesmo para cenários prosodicamente difíceis e diversos, como comentários esportivos, anime e muito mais. Confira nossa demonstração:
Assista ao vídeo completo aqui:
Figura : O fluxo da arquitetura de alto nível do MARS5. Dado o texto e um áudio de referência, os recursos de fala do codificador grosseiro (L0) são obtidos por meio de um modelo de transformador autorregressivo. Em seguida, o texto, a referência e os recursos grosseiros são refinados em um modelo DDPM multinomial para produzir os valores restantes do livro de códigos do codificador. A saída do DDPM é então codificada para produzir o áudio final.
Como o modelo é treinado em áudio bruto junto com texto codificado em pares de bytes, ele pode ser direcionado com recursos como pontuação e letras maiúsculas. Por exemplo, para adicionar uma pausa, adicione uma vírgula a essa parte da transcrição. Ou, para enfatizar uma palavra, coloque-a em letras maiúsculas na transcrição. Isto permite uma forma bastante natural de orientar a prosódia do resultado gerado.
A identidade do locutor é especificada usando um arquivo de referência de áudio entre 2 a 12 segundos, com duração em torno de 6s, proporcionando resultados ideais. Além disso, ao fornecer a transcrição da referência, o MARS5 permite fazer um ' clone profundo ' que melhora a qualidade da clonagem e da saída, ao custo de demorar um pouco mais para produzir o áudio. Para obter mais detalhes sobre este e outros detalhes de desempenho e modelo, consulte a pasta de documentos.
Usamos torch.hub
para facilitar o carregamento do modelo - não é necessária clonagem do repositório. As etapas para realizar inferência são simples:
Instalação usando pip :
Requisitos:
pip install --upgrade torch torchaudio librosa vocos encodec safetensors regex
import torch , librosa
mars5 , config_class = torch . hub . load ( 'Camb-ai/mars5-tts' , 'mars5_english' , trust_repo = True )
# The `mars5` contains the AR and NAR model, as well as inference code.
# The `config_class` contains tunable inference config settings like temperature.
(Opcional) Carregar modelo de huggingface (certifique-se de que o repositório esteja clonado)
from inference import Mars5TTS , InferenceConfig as config_class
import torch , librosa
mars5 = Mars5TTS . from_pretrained ( "CAMB-AI/MARS5-TTS" )
# Load reference audio between 1-12 seconds.
wav , sr = librosa . load ( '.wav' ,
sr = mars5 . sr , mono = True )
wav = torch . from_numpy ( wav )
ref_transcript = ""
Nota: A transcrição de referência é opcional. Passe se quiser fazer um clone profundo.
MARS5 suporta 2 tipos de inferência: uma inferência superficial e rápida em que você não precisa da transcrição da referência (chamamos isso de clone superficial ) e uma segunda forma mais lenta, mas normalmente de qualidade superior, que chamamos de clone profundo . Para usar o clone profundo, você precisa da transcrição imediata. Consulte a arquitetura do modelo para obter mais informações sobre isso.
# Pick whether you want a deep or shallow clone. Set to False if you don't know prompt transcript or want fast inference. Set to True if you know transcript and want highest quality.
deep_clone = True
# Below you can tune other inference settings, like top_k, temperature, top_p, etc...
cfg = config_class ( deep_clone = deep_clone , rep_penalty_window = 100 ,
top_k = 100 , temperature = 0.7 , freq_penalty = 3 )
ar_codes , output_audio = mars5 . tts ( "The quick brown rat." , wav ,
ref_transcript ,
cfg = cfg )
# output_audio is (T,) shape float tensor corresponding to the 24kHz output audio.
É isso! Essas configurações padrão fornecem resultados muito bons, mas sinta-se à vontade para ajustar as configurações de inferência para otimizar a saída para seu caso de uso específico. Consulte o código InferenceConfig
ou o bloco de notas de demonstração para obter informações e documentos sobre todas as diferentes configurações de inferência.
Algumas dicas para melhor qualidade:
Extrair do DockerHub
Você pode extrair diretamente a imagem do Docker de nossa página DockerHub.
Construa por conta própria
Você pode construir uma imagem personalizada a partir do Dockerfile fornecido neste repositório executando o seguinte comando.
cd MARS5-TTS
docker build -t mars5ttsimage ./docker
Nota: Esta imagem deve ser usada como uma imagem base sobre a qual você pode adicionar seu script de inferência personalizado em um Dockerfile ou docker-compose. Imagens que geram saída diretamente serão adicionadas ao Docker Hub e como Dockerfiles neste repositório em breve
Pontos de verificação
Os pontos de verificação para MARS5 são fornecidos na guia de lançamentos deste repositório do GitHub. Fornecemos dois pontos de verificação:
'vocab'
e segue aproximadamente o mesmo formato de um tokenizer minbpe salvo. Os pontos de verificação são fornecidos como pontos de verificação pytorch .pt
e pontos de verificação safetensors .safetensors
. Por padrão, torch.hub.load()
carrega a versão dos safetensors, mas você pode especificar qual versão do ponto de verificação você prefere com o ckpt_format='safetensors'
ou ckpt_format='pt'
na chamada torch.hub.load()
. Por exemplo, para forçar o formato dos tensores de segurança:
torch.hub.load('Camb-ai/mars5-tts', 'mars5_english', ckpt_format='safetensors')
Ou para forçar o formato pytorch .pt
ao carregar os checkpoints:
torch.hub.load('Camb-ai/mars5-tts', 'mars5_english', ckpt_format='pt')
Requisitos de hardware :
Você deve ser capaz de armazenar pelo menos 750 milhões + 450 milhões de parâmetros na GPU e fazer inferências com 750 milhões de parâmetros ativos.
Se você não possui os requisitos de hardware necessários e deseja apenas utilizar o MARS5 em suas aplicações, poderá utilizá-lo através de nossa API. Se você precisar de alguns créditos extras para testá-lo em seu caso de uso, sinta-se à vontade para entrar em contato com [email protected]
.
MARS5 não é perfeito no momento e estamos trabalhando para melhorar sua qualidade, estabilidade e desempenho. Áreas difíceis que procuramos melhorar e agradecemos quaisquer contribuições em:
Tarefas específicas
site-packages/torch/nn/functional.py:4840: UserWarning: The operator 'aten::col2im' is not currently supported on the MPS backend and will fall back to run on the CPU. This may have performance implications
. Se você gostaria de contribuir com alguma melhoria para o MARS5, sinta-se à vontade para contribuir (diretrizes abaixo).
Agradecemos quaisquer contribuições para melhorar o modelo. Como você pode descobrir ao experimentar, ele pode produzir resultados realmente excelentes, mas ainda pode ser melhorado para criar resultados excelentes de forma consistente . Também adoraríamos ver como você usou o MARS5 em diferentes cenários. Use o ? Mostre e conte a categoria em Discussões para compartilhar seus exemplos.
Formato de contribuição :
A forma preferida de contribuir com nosso repositório é bifurcar o repositório mestre no GitHub:
git remote add upstream [email protected]:Camb-ai/mars5-tts.git
git push --set-upstream origin
Estamos abrindo o código-fonte do MARS5 em inglês sob GNU AGPL 3.0. Para consultas comerciais ou para licenciar a versão de código fechado do MARS, envie um e-mail para [email protected]
Somos uma equipa ambiciosa, distribuída globalmente, com o objetivo único de fazer valer a voz de todos. No CAMB.AI, somos uma equipe de pesquisa de ex-engenheiros da Siri, publicados pela Interspeech, Carnegie Mellon, e estamos procurando você para se juntar à nossa equipe.
Estamos contratando ativamente; envie-nos um e-mail para [email protected] se estiver interessado. Visite nossa página de carreiras para mais informações.
Junte-se à comunidade CAMB.AI no Fórum e Discord para compartilhar sugestões, comentários ou perguntas com nossa equipe.
Partes do código deste projeto foram adaptadas dos seguintes repositórios - certifique-se de dar uma olhada! Obrigado aos autores de:
.trim()
: https://librosa.org/doc/main/generated/librosa.effects.trim.html