Transformers documentation
UnivNet
Este modelo se publicó en HF papers el 2021-06-15 y se contribuyó a Hugging Face Transformers el 2023-11-22.
UnivNet
Resumen
El modelo UnivNet fue propuesto en UnivNet: A Neural Vocoder with Multi-Resolution Spectrogram Discriminators for High-Fidelity Waveform Generation por Won Jang, Dan Lim, Jaesam Yoon, Bongwan Kin y Juntae Kim.
El modelo UnivNet es una red generativa adversarial (GAN) entrenada para sintetizar formas de onda de voz de alta fidelidad. El modelo UnivNet compartido en transformers es el generator, que mapea un espectrograma log-mel de condicionamiento y una secuencia de ruido opcional a una forma de onda de voz (por ejemplo, un vocoder). Solo se requiere el generator para la inferencia. El discriminator utilizado para entrenar el generator no está implementado.
El resumen del artículo es el siguiente:
La mayoría de los vocoderes neuronales emplean mel-espectrogramas de banda limitada para generar formas de onda. Si se utilizan características espectrales de banda completa como entrada, se puede proporcionar al vocoder la mayor cantidad de información acústica posible. Sin embargo, en algunos modelos que emplean mel-espectrogramas de banda completa, se produce un problema de sobre-estabilización en el que se generan espectrogramas poco definidos. Para abordar este problema, proponemos UnivNet, un vocoder neuronal que sintetiza formas de onda de alta fidelidad en tiempo real. Inspirados en trabajos del campo de la detección de actividad de voz, añadimos un discriminador de espectrogramas de multi-resolución que emplea múltiples magnitudes de espectrogramas lineales calculadas utilizando diversos conjuntos de parámetros. Utilizando mel-espectrogramas de banda completa como entrada, esperamos generar señales de alta resolución añadiendo un discriminador que emplea espectrogramas de múltiples resoluciones como entrada. En una evaluación sobre un conjunto de datos que contiene información de cientos de hablantes, UnivNet obtuvo los mejores resultados objetivos y subjetivos entre los modelos competidores tanto para hablantes vistos como no vistos. Estos resultados, incluido el mejor puntaje subjetivo para la síntesis de voz a partir de texto, demuestran el potencial de una adaptación rápida a nuevos hablantes sin necesidad de entrenar desde cero.
Consejos:
- El argumento
noise_sequencede UnivNetModel.forward() debe ser ruido gaussiano estándar (como el detorch.randn) con forma([batch_size], noise_length, model.config.model_in_channels), dondenoise_lengthdebe coincidir con la dimensión de longitud (dimensión 1) del argumentoinput_features. Si no se proporciona, se generará aleatoriamente; se puede proporcionar untorch.Generatoral argumentogeneratorpara que la pasada hacia adelante pueda reproducirse. (Tenga en cuenta que UnivNetFeatureExtractor devolverá ruido generado por defecto, por lo que no debería ser necesario generarnoise_sequencemanualmente.) - El padding añadido por UnivNetFeatureExtractor se puede eliminar de la salida de UnivNetModel mediante el método
UnivNetFeatureExtractor.batch_decode(), como se muestra en el ejemplo de uso a continuación. - Rellenar el final de cada forma de onda con silencio puede reducir los artefactos al final de la muestra de audio generada. Esto se puede hacer proporcionando
pad_end = Truea UnivNetFeatureExtractor.call(). Consulte este problema para obtener más detalles.
Ejemplo 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 fue aportado por dg845. Por lo que sé, no hay una publicación oficial del código, pero se puede encontrar una implementación no oficial en maum-ai/univnet con puntos de control preentrenados aquí.
UnivNetConfig
clase 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, valor predeterminado 64) — El número de canales de entrada para la red residual de UnivNet. Esto debe corresponder anoise_sequence.shape[1]y al valor utilizado en la clase UnivNetFeatureExtractor. - model_hidden_channels (
int, opcional, valor predeterminado 32) — El número de canales ocultos de cada bloque residual en la red residual UnivNet. - num_mel_bins (
int, opcional, valor predeterminado 100) — El número de bins de frecuencia en el espectrograma log-mel de condicionamiento. Este valor debe corresponder al utilizado en la clase UnivNetFeatureExtractor. - resblock_kernel_sizes (
tuple[int]olist[int], opcional, valor predeterminado[3, 3, 3]) — Una tupla de enteros que define los tamaños de los núcleos de las capas convolucionales 1D en la red residual de UnivNet. La longitud deresblock_kernel_sizesdefine el número de bloques resnet y debe coincidir con la deresblock_stride_sizesyresblock_dilation_sizes. - resblock_stride_sizes (
tuple[int]olist[int], opcional, valor predeterminado[8, 8, 4]) — Una tupla de enteros que define los tamaños de paso de las capas convolucionales 1D en la red residual de UnivNet. La longitud deresblock_stride_sizesdebe coincidir con la deresblock_kernel_sizesyresblock_dilation_sizes. - resblock_dilation_sizes (
tuple[tuple[int]]olist[list[int]], opcional, valor predeterminado[[1, 3, 9, 27], [1, 3, 9, 27], [1, 3, 9, 27]]) — Una tupla anidada de enteros que define las tasas de dilatación de las capas de convolución 1D dilatada en la red residual de UnivNet. La longitud deresblock_dilation_sizesdebe coincidir con la deresblock_kernel_sizesyresblock_stride_sizes. La longitud de cada lista anidada enresblock_dilation_sizesdefine el número de capas de convolución por bloque de resnet. - kernel_predictor_num_blocks (
int, opcional, valor predeterminado 3) — El número de bloques residuales en la red del predictor de kernels, que calcula el kernel y el sesgo para cada capa de convolución de variables de ubicación en la red residual de UnivNet. - kernel_predictor_hidden_channels (
int, opcional, valor predeterminado 64) — El número de canales ocultos para cada bloque residual en la red del predictor de kernel. - kernel_predictor_conv_size (
int, opcional, valor predeterminado 3) — El tamaño del kernel de cada capa convolucional 1D en la red del predictor de kernels. - kernel_predictor_dropout (
float, opcional, valor predeterminado 0.0) — La probabilidad de dropout para cada bloque residual en la red del predictor de kernel. - initializer_range (
float, opcional, valor predeterminado0.01) — La desviación estándar del truncated_normal_initializer para inicializar todas las matrices de pesos. - leaky_relu_slope (
float, opcional, valor predeterminado 0.2) — El ángulo de la pendiente negativa utilizada por la activación leaky ReLU.
Esta es la clase de configuración para almacenar la configuración de un UnivNetModel. Se utiliza para instanciar un modelo Univnet según los argumentos especificados, definiendo la arquitectura del modelo. Instanciar una configuración con los valores predeterminados producirá una configuración similar a la de dg845/univnet-dev
Los objetos de configuración heredan de PreTrainedConfig y se pueden usar para controlar las salidas del modelo. Lea la documentación de PreTrainedConfig para obtener más información.
Ejemplo:
>>> 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
clase 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, valor predeterminado 1) — La dimensión de las características de las características extraídas. - sampling_rate (
int, opcional, valor predeterminado 24000) — La tasa de muestreo a la que deben digitalizarse los archivos de audio, expresada en hercios (Hz). - padding_value (
float, opcional, valor predeterminado 0.0) — El valor con el que se rellena al aplicar la estrategia de relleno definida por el argumentopaddinga UnivNetFeatureExtractor.call(). Debe corresponder al silencio de audio. El argumentopad_endde__call__también utilizará este valor de relleno. - do_normalize (
bool, opcional, valor predeterminadoFalse) — Si se debe realizar la normalización de Tacotron 2 en la entrada. Normalizar puede ayudar a mejorar significativamente el rendimiento de algunos modelos. - num_mel_bins (
int, opcional, valor predeterminado 100) — El número de bins de frecuencia mel en las características del espectrograma extraído. Esto debe coincidir conUnivNetModel.config.num_mel_bins. - hop_length (
int, opcional, valor predeterminado 256) — El número directo de muestras entre las ventanas deslizantes. También se denomina “shift” en muchos artículos. Tenga en cuenta que esto es diferente de otros extractores de características de audio, como SpeechT5FeatureExtractor, que toman elhop_lengthen ms. - win_length (
int, opcional, valor predeterminado 1024) — El número directo de muestras para cada ventana deslizante. Tenga en cuenta que esto es diferente de otros extractores de características de audio, como SpeechT5FeatureExtractor, que tomanwin_lengthen ms. - win_function (
str, opcional, valor predeterminado"hann_window") — Nombre de la función de ventana utilizada para el acopio, debe ser accesible mediantetorch.{win_function} - filter_length (
int, opcional, valor predeterminado 1024) — El número de componentes de FFT a utilizar. Si esNone, se determina mediantetransformers.audio_utils.optimal_fft_length. - max_length_s (
int, opcional, valor predeterminado 10) — La longitud máxima de entrada del modelo en segundos. Se utiliza para rellenar el audio. - fmin (
float, opcional, valor predeterminado 0.0) — Frecuencia mel mínima en Hz. - fmax (
float, opcional) — Frecuencia mel máxima en Hz. Si no se establece, el valor predeterminado essampling_rate / 2. - mel_floor (
float, opcional, valor predeterminado 1e-09) — Valor mínimo de los bancos de frecuencias mel. Tenga en cuenta que la forma en que UnivNetFeatureExtractor utilizamel_floores diferente a la de transformers.audio_utils.spectrogram(). - center (
bool, opcional, valor predeterminadoFalse) — Indica si se debe rellenar la forma de onda para que el marcotesté centrado en el tiempot * hop_length. Si esFalse, el marcotcomenzará en el tiempot * hop_length. - compression_factor (
float, opcional, valor predeterminado 1.0) — Factor de compresión multiplicativo para la compresión del rango dinámico durante la normalización espectral. - compression_clip_val (
float, opcional, valor predeterminado 1e-05) — El valor de recorte aplicado a la forma de onda antes de aplicar la compresión de rango dinámico durante la normalización espectral. - normalize_min (
float, opcional, valor predeterminado -11.512925148010254) — El valor mínimo utilizado para la normalización lineal de estilo Tacotron 2. El valor predeterminado es el valor original de la implementación de Tacotron 2. - normalize_max (
float, opcional, valor predeterminado 2.3143386840820312) — El valor máximo utilizado para la normalización lineal de estilo Tacotron 2. El valor predeterminado es el valor original de la implementación de Tacotron 2. - model_in_channels (
int, opcional, valor predeterminado 64) — El número de canales de entrada del modelo UnivNetModel. Debe coincidir conUnivNetModel.config.model_in_channels. - pad_end_length (
int, opcional, valor predeterminado 10) — Si se rellena el final de cada forma de onda, es el número de muestras equivalentes a los fotogramas del espectrograma que se añadirán. El número de muestras añadidas serápad_end_length * hop_length. - return_attention_mask (
bool, opcional, valor predeterminadoTrue) — Indica si call() debe devolverattention_mask.
Construye un extractor de características de UnivNet.
Esta clase extrae características de banco de filtros log-mel a partir de audio bruto utilizando la Transformada de Fourier de Tiempo Corto (STFT). La implementación de la STFT sigue la de TacoTron 2 y Hifi-GAN.
Este extractor de características hereda de SequenceFeatureExtractor, que contiene la mayoría de los métodos principales. Los usuarios deben consultar esta superclase para obtener más información sobre dichos 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]]) — La secuencia o lote de secuencias que se van a rellenar. Cada secuencia puede ser un array de numpy, una lista de valores float, una lista de arrays de numpy o una lista de listas de valores float. Debe ser audio de canal mono, no estéreo, es decir, un solo float por paso de tiempo. - sampling_rate (
int, opcional) — La tasa de muestreo a la que se muestreó la entradaraw_speech. Se recomienda encarecidamente pasarsampling_rateen la llamada forward para evitar errores silenciosos y permitir el pipeline de reconocimiento automático de voz. - padding (
bool,stro PaddingStrategy, opcional, por defectoTrue) — Selecciona una estrategia para rellenar lasraw_speechondas de entrada (según el lado de relleno y el índice de relleno del modelo) entre:Trueo'longest': Rellena hasta la secuencia más larga del lote (o no aplica relleno si solo se proporciona una secuencia).'max_length': Rellena hasta una longitud máxima especificada con el argumentomax_lengtho hasta la longitud de entrada máxima aceptable para el modelo si no se proporciona dicho argumento.Falseo'do_not_pad'(predeterminado): Sin relleno (es decir, puede generar un lote con secuencias de diferentes longitudes).
Si
pad_end = True, ese relleno se aplicará antes de que se aplique la estrategia depadding. - max_length (
int, opcional) — Longitud máxima de la lista devuelta y, opcionalmente, longitud de relleno (véase arriba). - truncation (
bool, opcional, valor predeterminadoTrue) — Activa la truncación para recortar las secuencias de entrada más largas quemax_lengthamax_length. - pad_to_multiple_of (
int, opcional) — Si se establece, rellenará la secuencia hasta un múltiplo del valor proporcionado.Esto resulta especialmente útil para habilitar el uso de Tensor Cores en hardware de NVIDIA con capacidad de cálculo
>= 7.5(Volta), o en TPUs, que se benefician de que las longitudes de secuencia sean un múltiplo de 128. - return_noise (
bool, opcional, valor predeterminadoTrue) — Si se debe generar y devolver una forma de onda de ruido para usar en UnivNetModel.forward(). - generator (
numpy.random.Generator, opcional, valor predeterminadoNone) — Un generador de números aleatoriosnumpy.random.Generatoropcional para usar al generar ruido. - pad_end (
bool, opcional, valor predeterminadoFalse) — Si se debe rellenar el final de cada forma de onda con silencio. Esto puede ayudar a reducir los artefactos al final de la muestra de audio generada; consulte https://github.com/seungwonpark/melgan/issues/8 para más detalles. Este relleno se realizará antes de aplicar la estrategia de relleno especificada enpadding. - pad_length (
int, opcional, valor predeterminadoNone) — Si se rellena el final de cada forma de onda, la longitud del relleno en fotogramas del espectrograma. Si no se establece, este valor predeterminado seráself.config.pad_end_length. - do_normalize (
bool, opcional) — Si se debe realizar la normalización de Tacotron 2 en la entrada. Normalizar puede ayudar a mejorar significativamente el rendimiento de algunos modelos. Si no se establece, el valor predeterminado seráself.config.do_normalize. - return_attention_mask (
bool, opcional) — Si se debe devolver la máscara de atención. Si se deja en el valor predeterminado, se devolverá la máscara de atención según el valor predeterminado del feature_extractor específico. - return_tensors (
stro TensorType, opcional) — Si se establece, devolverá tensores en lugar de una lista de enteros de Python. Los valores aceptables son:'pt': Devuelve objetostorch.np.arrayde PyTorch.'np': Devuelve objetos Numpynp.ndarray.
Método principal para extraer características y preparar una o varias secuencias para el modelo.
UnivNetModel
clase transformers.UnivNetModel
< source >( config: UnivNetConfig )
Parámetros
- config (UnivNetConfig) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.
El modelo Univnet básico que emite estados ocultos sin ningún cabezal específico en la parte superior.
Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).
Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.
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)) — Los tensores correspondientes a las características de audio de entrada. Las características de audio se pueden obtener utilizando UnivNetFeatureExtractor. Consulte UnivNetFeatureExtractor.call() para más detalles (processor_classutiliza UnivNetFeatureExtractor para procesar audios). - noise_sequence (
torch.Tensor, opcional) — Tensor que contiene una secuencia de ruido de ruido gaussiano estándar. Puede estar agrupado y tener forma(batch_size, sequence_length, config.model_in_channels), o no agrupado y tener forma (sequence_length, config.model_in_channels)`. Si no se proporciona, se generará aleatoriamente. - padding_mask (
torch.BoolTensor, opcional) — Máscara que indica qué partes de cada secuencia están rellenas. Los valores de la máscara se seleccionan en[0, 1]:- 1 para los tokens que no están enmascarados
- 0 para los tokens que están enmascarados
La máscara puede estar agrupada y tener forma
(batch_size, sequence_length)o no agrupada y tener forma(sequence_length,). - generator (
torch.Generator, opcional) — Un generador de torch para hacer la generación determinista. return_dict: Si se debe devolver una subclase de ModelOutput en lugar de una tupla simple. - return_dict (
bool, opcional) — Indica si se debe devolver un ModelOutput en lugar de una tupla simple.
Devuelve
UnivNetModelOutput o tuple(torch.Tensor)
Un UnivNetModelOutput o una tupla de
torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios
elementos según la configuración (UnivNetConfig) y las entradas.
El método forward de UnivNetModel reemplaza el método especial __call__.
Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de
Moduledespués en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.
- formas de onda (
torch.Tensorde forma(batch_size, sequence_length)) — Formas de onda de audio de salida en lote, unidimensionales (monocanal). - waveform_lengths (
torch.Tensorde forma(batch_size,)) — La longitud por lote, en muestras, de cada forma de onda sin relleno enwaveforms.
Ejemplo:
>>> 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]