Transformers documentation
UnivNet
Este modelo foi publicado no HF papers em 2021-06-15 e contribuído para o Hugging Face Transformers em 2023-11-22.
UnivNet
Visão geral
O modelo UnivNet foi proposto em UnivNet: A Neural Vocoder with Multi-Resolution Spectrogram Discriminators for High-Fidelity Waveform Generation por Won Jang, Dan Lim, Jaesam Yoon, Bongwan Kin e Juntae Kim.
O modelo UnivNet é uma rede adversarial generativa (GAN) treinada para sintetizar formas de onda de fala de alta fidelidade. O modelo UnivNet compartilhado no transformers é o generator, que mapeia um espectrograma log-mel de condicionamento e uma sequência de ruído opcional para uma forma de onda de fala (por exemplo, um vocoder). Apenas o generator é necessário para inferência. O discriminator usado para treinar o generator não está implementado.
O resumo do artigo é o seguinte:
A maioria dos vocoderes neurais utiliza mel-espectrogramas com banda limitada para gerar formas de onda. Se recursos espectrais de banda completa forem usados como entrada, o vocoder poderá receber a maior quantidade possível de informações acústicas. No entanto, em alguns modelos que empregam mel-espectrogramas de banda completa, ocorre um problema de suavização excessiva, no qual são gerados espectrogramas sem nitidez. Para resolver esse problema, propomos o UnivNet, um vocoder neural que sintetiza formas de onda de alta fidelidade em tempo real. Inspirados em trabalhos na área de detecção de atividade de voz, adicionamos um discriminador de espectrograma multirresolução que emprega múltiplas magnitudes de espectrograma linear calculadas usando vários conjuntos de parâmetros. Usando mel-espectrogramas de banda completa como entrada, esperamos gerar sinais de alta resolução ao adicionar um discriminador que utiliza espectrogramas de múltiplas resoluções como entrada. Em uma avaliação em um conjunto de dados contendo informações sobre centenas de falantes, o UnivNet obteve os melhores resultados objetivos e subjetivos entre os modelos concorrentes, tanto para falantes vistos quanto não vistos. Esses resultados, incluindo a melhor pontuação subjetiva para conversão de texto em fala, demonstram o potencial para adaptação rápida a novos falantes sem a necessidade de treinamento do zero.
Dicas:
- O argumento
noise_sequencepara UnivNetModel.forward() deve ser ruído gaussiano padrão (como o obtido detorch.randn) com a forma([batch_size], noise_length, model.config.model_in_channels), em quenoise_lengthdeve corresponder à dimensão de comprimento (dimensão 1) do argumentoinput_features. Se não for fornecido, ele será gerado aleatoriamente; umtorch.Generatorpode ser fornecido ao argumentogeneratorpara que a passagem direta possa ser reproduzida. (Observe que UnivNetFeatureExtractor retornará ruído gerado por padrão, portanto, não deve ser necessário gerarnoise_sequencemanualmente.) - O padding adicionado pelo UnivNetFeatureExtractor pode ser removido da saída do UnivNetModel por meio do método
UnivNetFeatureExtractor.batch_decode(), conforme mostrado no exemplo de uso abaixo. - Preencher o final de cada forma de onda com silêncio pode reduzir artefatos no fim da amostra de áudio gerada. Isso pode ser feito fornecendo
pad_end = Truepara UnivNetFeatureExtractor.call(). Veja este problema para mais detalhes.
Exemplo de uso:
import torch
from datasets import Audio, load_dataset
from scipy.io.wavfile import write
from transformers import UnivNetFeatureExtractor, UnivNetModel
model_id_or_path = "dg845/univnet-dev"
model = UnivNetModel.from_pretrained(model_id_or_path, device_map="auto")
feature_extractor = UnivNetFeatureExtractor.from_pretrained(model_id_or_path)
ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
# Resample the audio to the model and feature extractor's sampling rate.
ds = ds.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
# Pad the end of the converted waveforms to reduce artifacts at the end of the output audio samples.
inputs = feature_extractor(
ds[0]["audio"]["array"], sampling_rate=ds[0]["audio"]["sampling_rate"], pad_end=True, return_tensors="pt"
)
with torch.no_grad():
audio = model(**inputs)
# Remove the extra padding at the end of the output.
audio = feature_extractor.batch_decode(**audio)[0]
# Convert to wav file
write("sample_audio.wav", feature_extractor.sampling_rate, audio)Este modelo foi contribuído por dg845. Até onde eu saiba, não há um lançamento oficial de código, mas uma implementação não oficial pode ser encontrada em maum-ai/univnet com checkpoints pré-treinados aqui.
UnivNetConfig
classe transformers.UnivNetConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonemodel_in_channels: int = 64model_hidden_channels: int = 32num_mel_bins: int = 100resblock_kernel_sizes: list[int] | tuple[int, ...] = (3, 3, 3)resblock_stride_sizes: list[int] | tuple[int, ...] = (8, 8, 4)resblock_dilation_sizes: list | tuple = ((1, 3, 9, 27), (1, 3, 9, 27), (1, 3, 9, 27))kernel_predictor_num_blocks: int = 3kernel_predictor_hidden_channels: int = 64kernel_predictor_conv_size: int = 3kernel_predictor_dropout: float | int = 0.0initializer_range: float = 0.01leaky_relu_slope: float = 0.2 )
Parâmetros
- model_in_channels (
int, opcional, padrão 64) — O número de canais de entrada para a rede residual UnivNet. Isso deve corresponder anoise_sequence.shape[1]e ao valor usado na classe UnivNetFeatureExtractor. - model_hidden_channels (
int, opcional, padrão 32) — O número de canais ocultos de cada bloco residual na rede residual UnivNet. - num_mel_bins (
int, opcional, padrão 100) — O número de bins de frequência no espectrograma log-mel de condicionamento. Este valor deve corresponder ao valor usado na classe UnivNetFeatureExtractor. - resblock_kernel_sizes (
tuple[int]oulist[int], opcional, padrão[3, 3, 3]) — Uma tupla de inteiros que define os tamanhos dos kernels das camadas de convolução 1D na rede residual do UnivNet. O comprimento deresblock_kernel_sizesdefine o número de blocos resnet e deve corresponder ao deresblock_stride_sizeseresblock_dilation_sizes. - resblock_stride_sizes (
tuple[int]oulist[int], opcional, padrão[8, 8, 4]) — Uma tupla de inteiros que define os tamanhos de stride das camadas convolucionais 1D na rede residual do UnivNet. O comprimento deresblock_stride_sizesdeve corresponder ao deresblock_kernel_sizeseresblock_dilation_sizes. - resblock_dilation_sizes (
tuple[tuple[int]]oulist[list[int]], opcional, padrão[[1, 3, 9, 27], [1, 3, 9, 27], [1, 3, 9, 27]]) — Uma tupla aninhada de inteiros que define as taxas de dilatação das camadas convolucionais 1D dilataadas na rede residual do UnivNet. O comprimento deresblock_dilation_sizesdeve corresponder ao deresblock_kernel_sizeseresblock_stride_sizes. O comprimento de cada lista aninhada emresblock_dilation_sizesdefine o número de camadas convolucionais por bloco resnet. - kernel_predictor_num_blocks (
int, opcional, padrão 3) — O número de blocos residuais na rede do preditor de kernel, que calcula o kernel e o viés para cada camada de convolução de variáveis de localização na rede residual UnivNet. - kernel_predictor_hidden_channels (
int, opcional, padrão 64) — O número de canais ocultos para cada bloco residual na rede do kernel predictor. - kernel_predictor_conv_size (
int, opcional, padrão 3) — O tamanho do kernel de cada camada convolucional 1D na rede do preditor de kernel. - kernel_predictor_dropout (
float, opcional, padrão 0.0) — A probabilidade de dropout para cada bloco residual na rede do kernel predictor. - initializer_range (
float, opcional, padrão0.01) — O desvio padrão do truncated_normal_initializer para inicializar todas as matrizes de pesos. - leaky_relu_slope (
float, opcional, padrão 0.2) — O ângulo da inclinação negativa usado pela função de ativação leaky ReLU.
Esta é a classe de configuração para armazenar a configuração de um UnivNetModel. Ela é usada para instanciar um modelo Univnet de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do dg845/univnet-dev
Os objetos de configuração herdam de PreTrainedConfig e podem ser usados para controlar as saídas do modelo. Consulte a documentação de PreTrainedConfig para mais informações.
Exemplo:
>>> from transformers import UnivNetModel, UnivNetConfig
>>> # Initializing a Tortoise TTS style configuration
>>> configuration = UnivNetConfig()
>>> # Initializing a model (with random weights) from the Tortoise TTS style configuration
>>> model = UnivNetModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configUnivNetFeatureExtractor
classe transformers.UnivNetFeatureExtractor
< source >( feature_size: int = 1sampling_rate: int = 24000padding_value: float = 0.0do_normalize: bool = Falsenum_mel_bins: int = 100hop_length: int = 256win_length: int = 1024win_function: str = 'hann_window'filter_length: int | None = 1024max_length_s: int = 10fmin: float = 0.0fmax: float | None = Nonemel_floor: float = 1e-09center: bool = Falsecompression_factor: float = 1.0compression_clip_val: float = 1e-05normalize_min: float = -11.512925148010254normalize_max: float = 2.3143386840820312model_in_channels: int = 64pad_end_length: int = 10return_attention_mask = True**kwargs )
Parâmetros
- feature_size (
int, opcional, padrão 1) — A dimensão dos recursos das características extraídas. - sampling_rate (
int, opcional, padrão 24000) — A taxa de amostragem na qual os arquivos de áudio devem ser digitalizados, expressa em hertz (Hz). - padding_value (
float, opcional, padrão 0.0) — O valor usado para aplicar o preenchimento definido pelo argumentopaddingem UnivNetFeatureExtractor.call(). Deve corresponder ao silêncio do áudio. O argumentopad_endde__call__também usará esse valor de preenchimento. - do_normalize (
bool, opcional, padrãoFalse) — Se deve executar a normalização do Tacotron 2 na entrada. A normalização pode ajudar a melhorar significativamente o desempenho de alguns modelos. - num_mel_bins (
int, opcional, padrão 100) — O número de bins de frequência mel nos recursos do espectrograma extraído. Isso deve corresponder aUnivNetModel.config.num_mel_bins. - hop_length (
int, opcional, padrão 256) — O número direto de amostras entre as janelas deslizantes. Também chamado de “shift” em muitos artigos. Observe que isso é diferente de outros extratores de recursos de áudio, como SpeechT5FeatureExtractor, que recebem ohop_lengthem ms. - win_length (
int, opcional, padrão 1024) — O número direto de amostras para cada janela deslizante. Observe que isso é diferente de outros extratores de recursos de áudio, como SpeechT5FeatureExtractor, que recebemwin_lengthem ms. - win_function (
str, opcional, padrão"hann_window") — Nome da função de janela usada para janelamento, deve ser acessível viatorch.{win_function} - filter_length (
int, opcional, padrão 1024) — O número de componentes de FFT a serem usados. SeNone, esse valor é determinado usandotransformers.audio_utils.optimal_fft_length. - max_length_s (
int, opcional, padrão 10) — O comprimento máximo da entrada do modelo, em segundos. Isso é usado para aplicar padding ao áudio. - fmin (
float, opcional, padrão 0.0) — Frequência mel mínima em Hz. - fmax (
float, opcional) — Frequência mel máxima em Hz. Se não for definida, o valor padrão ésampling_rate / 2. - mel_floor (
float, opcional, padrão 1e-09) — Valor mínimo dos bancos de frequência mel. Observe que a forma como o UnivNetFeatureExtractor utilizamel_flooré diferente da utilizada em transformers.audio_utils.spectrogram(). - center (
bool, opcional, padrãoFalse) — Indica se a forma de onda deve ser preenchida para que o quadrotesteja centralizado em torno do tempot * hop_length. SeFalse, o quadrotcomeçará no tempot * hop_length. - compression_factor (
float, opcional, padrão 1.0) — Fator de compressão multiplicativo para a compressão da faixa dinâmica durante a normalização espectral. - compression_clip_val (
float, opcional, padrão 1e-05) — O valor de recorte aplicado à forma de onda antes da aplicação da compressão de faixa dinâmica durante a normalização espectral. - normalize_min (
float, opcional, padrão -11.512925148010254) — O valor mínimo usado para a normalização linear no estilo Tacotron 2. O padrão é o valor original da implementação do Tacotron 2. - normalize_max (
float, opcional, padrão 2.3143386840820312) — O valor máximo usado para a normalização linear no estilo Tacotron 2. O padrão é o valor original da implementação do Tacotron 2. - model_in_channels (
int, opcional, padrão 64) — O número de canais de entrada do modelo UnivNetModel. Deve corresponder aUnivNetModel.config.model_in_channels. - pad_end_length (
int, opcional, padrão 10) — Ao aplicar padding no final de cada forma de onda, o número de amostras correspondentes a quadros de espectrograma a serem adicionados. O número de amostras adicionadas serápad_end_length * hop_length. - return_attention_mask (
bool, opcional, padrãoTrue) — Se call() deve retornarattention_maskou não.
Constrói um extrator de recursos UnivNet.
Esta classe extrai recursos de banco de filtros log-mel a partir de fala bruta usando a Transformada de Fourier de Tempo Curto (STFT). A implementação da STFT segue a do TacoTron 2 e do Hifi-GAN.
Este extrator de características herda de SequenceFeatureExtractor, que contém a maioria dos métodos principais. Os usuários devem consultar essa superclasse para obter mais informações sobre esses métodos.
__call__
< source >( raw_speech: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]]sampling_rate: int | None = Nonepadding: bool | str | transformers.utils.generic.PaddingStrategy = Truemax_length: int | None = Nonetruncation: bool = Truepad_to_multiple_of: int | None = Nonereturn_noise: bool = Truegenerator: numpy.random._generator.Generator | None = Nonepad_end: bool = Falsepad_length: int | None = Nonedo_normalize: str | None = Nonereturn_attention_mask: bool | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = None )
Parâmetros
- raw_speech (
np.ndarray,list[float],list[np.ndarray],list[list[float]]) — A sequência ou lote de sequências a serem preenchidas. Cada sequência pode ser um array numpy, uma lista de valores float, uma lista de arrays numpy ou uma lista de listas de valores float. Deve ser áudio mono, não estéreo, ou seja, um único float por timestep. - sampling_rate (
int, opcional) — A taxa de amostragem na qual a entradaraw_speechfoi amostrada. É fortemente recomendável passarsampling_ratena chamada de forward para evitar erros silenciosos e permitir o pipeline de reconhecimento automático de fala. - padding (
bool,strou PaddingStrategy, opcional, padrão éTrue) — Selecione uma estratégia para aplicar padding às formas de onda deraw_speech(de acordo com o lado de padding e o índice de padding do modelo) entre:Trueou'longest': Preenche até a sequência mais longa do lote (ou não aplica preenchimento se apenas uma sequência for fornecida).'max_length': Preenche até o comprimento máximo especificado com o argumentomax_lengthou até o comprimento máximo aceitável de entrada para o modelo, caso esse argumento não seja fornecido.Falseou'do_not_pad'(padrão): Sem padding (ou seja, pode gerar um lote com sequências de comprimentos diferentes).
Se
pad_end = True, esse preenchimento ocorrerá antes de a estratégiapaddingser aplicada. - max_length (
int, opcional) — Comprimento máximo da lista retornada e, opcionalmente, o comprimento do padding (veja acima). - truncation (
bool, opcional, padrãoTrue) — Ativa a truncagem para cortar sequências de entrada com comprimento maior quemax_lengthparamax_length. - pad_to_multiple_of (
int, opcional) — Se definido, a sequência será preenchida até um múltiplo do valor fornecido.Isso é especialmente útil para habilitar o uso de Tensor Cores em hardware NVIDIA com capacidade de computação
>= 7.5(Volta), ou em TPUs, que se beneficiam de ter comprimentos de sequência que sejam múltiplos de 128. - return_noise (
bool, opcional, padrãoTrue) — Se deve gerar e retornar uma forma de onda de ruído para uso em UnivNetModel.forward(). - generator (
numpy.random.Generator, opcional, padrãoNone) — Um gerador de números aleatóriosnumpy.random.Generatoropcional a ser usado ao gerar ruído. - pad_end (
bool, opcional, padrãoFalse) — Indica se o final de cada forma de onda deve ser preenchido com silêncio. Isso pode ajudar a reduzir artefatos no final da amostra de áudio gerada; veja https://github.com/seungwonpark/melgan/issues/8 para mais detalhes. Esse preenchimento será realizado antes da estratégia de preenchimento especificada empadding. - pad_length (
int, opcional, padrãoNone) — Ao aplicar padding no final de cada forma de onda, o comprimento do padding em quadros de espectrograma. Se não for definido, o valor padrão seráself.config.pad_end_length. - do_normalize (
bool, opcional) — Se deve executar a normalização do Tacotron 2 na entrada. A normalização pode ajudar a melhorar significativamente o desempenho de alguns modelos. Se não for definido, o valor padrão seráself.config.do_normalize. - return_attention_mask (
bool, opcional) — Se deve retornar a attention mask. Se mantido o valor padrão, a attention mask será retornada de acordo com o padrão específico do feature_extractor. - return_tensors (
strou TensorType, opcional) — Se definido, retornará tensors em vez de uma lista de inteiros do Python. Os valores aceitos são:'pt': Retorna objetostorch.np.arraydo PyTorch.'np': Retorna objetosnp.ndarraydo Numpy.
Método principal para criar recursos e preparar uma ou várias sequências para o modelo.
UnivNetModel
classe transformers.UnivNetModel
< source >( config: UnivNetConfig )
Parâmetros
- config (UnivNetConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
O modelo Univnet básico que produz estados ocultos brutos, sem nenhum cabeçalho específico no topo.
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
forward
< source >( input_features: Tensornoise_sequence: typing.Optional[torch.Tensor] = Nonepadding_mask: typing.Optional[torch.Tensor] = Nonegenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool | None = None**kwargs ) → UnivNetModelOutput or tuple(torch.Tensor)
Parâmetros
- input_features (
torch.Tensorde forma(batch_size, sequence_length, feature_dim)) — Os tensores correspondentes às características de áudio de entrada. As características de áudio podem ser obtidas usando UnivNetFeatureExtractor. Consulte UnivNetFeatureExtractor.call() para mais detalhes (processor_classusa UnivNetFeatureExtractor para processar os áudios). - noise_sequence (
torch.Tensor, opcional) — Tensor contendo uma sequência de ruído de ruído gaussiano padrão. Pode ser em lote, com forma(batch_size, sequence_length, config.model_in_channels), ou sem lote, com forma (sequence_length, config.model_in_channels)`. Se não for fornecido, será gerado aleatoriamente. - padding_mask (
torch.BoolTensor, opcional) — Máscara que indica quais partes de cada sequência são preenchidas (padding). Os valores da máscara são selecionados em[0, 1]:- 1 para tokens que não estão mascarados
- 0 para tokens que estão mascarados
A máscara pode ser em lote, com forma
(batch_size, sequence_length), ou sem lote, com forma(sequence_length,). - generator (
torch.Generator, opcional) — Um gerador do torch para tornar a geração determinística. return_dict: Se deve retornar uma subclasse de ModelOutput em vez de uma tupla simples. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
UnivNetModelOutput ou tuple(torch.Tensor)
Um UnivNetModelOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos, dependendo da configuração (UnivNetConfig) e das entradas.
O método forward do UnivNetModel substitui o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
- formas de onda (
torch.Tensorde forma(batch_size, sequence_length)) — Formas de onda de áudio de saída 1D (mono-canal) em lote. - waveform_lengths (
torch.Tensorde forma(batch_size,)) — O comprimento em amostras de cada forma de onda não preenchida emwaveforms, em lote.
Exemplo:
>>> from transformers import UnivNetFeatureExtractor, UnivNetModel
>>> from datasets import load_dataset, Audio
>>> model = UnivNetModel.from_pretrained("dg845/univnet-dev")
>>> feature_extractor = UnivNetFeatureExtractor.from_pretrained("dg845/univnet-dev")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> # Resample the audio to the feature extractor's sampling rate.
>>> ds = ds.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
>>> inputs = feature_extractor(
... ds[0]["audio"]["array"], sampling_rate=ds[0]["audio"]["sampling_rate"], return_tensors="pt"
... )
>>> audio = model(**inputs).waveforms
>>> list(audio.shape)
[1, 140288]