Transformers 文件
UnivNet
並獲得增強的文件體驗
開始使用
UnivNet
概述
UnivNet 模型由 Won Jang、Dan Lim、Jaesam Yoon、Bongwan Kin 和 Juntae Kim 在 UnivNet: A Neural Vocoder with Multi-Resolution Spectrogram Discriminators for High-Fidelity Waveform Generation 中提出。UnivNet 模型是一種生成對抗網路 (GAN),用於合成高保真語音波形。transformers 中共享的 UnivNet 模型是生成器,它將條件對數梅爾譜圖和可選噪聲序列對映到語音波形(例如,聲碼器)。推理時只需要生成器。用於訓練生成器的判別器未實現。
論文摘要如下:
大多數神經聲碼器採用帶限梅爾譜圖生成波形。如果將全帶頻譜特徵用作輸入,則可以為聲碼器提供儘可能多的聲學資訊。然而,在某些採用全帶梅爾譜圖的模型中,會出現過平滑問題,即生成非清晰的譜圖。為了解決這個問題,我們提出了 UnivNet,一種即時合成高保真波形的神經聲碼器。受語音活動檢測領域工作的啟發,我們添加了一個多解析度譜圖判別器,它採用使用各種引數集計算的多個線性譜圖幅度。使用全帶梅爾譜圖作為輸入,我們期望透過新增一個採用多解析度譜圖作為輸入的判別器來生成高解析度訊號。在包含數百個說話者資訊的訓練集上的評估中,UnivNet 在可見和不可見說話者方面都取得了最佳的客觀和主觀結果,優於競爭模型。這些結果,包括文字到語音的最佳主觀評分,表明它可以快速適應新說話者,而無需從頭開始訓練。
技巧
- UnivNetModel.forward() 的
noise_sequence引數應為標準高斯噪聲(例如來自torch.randn),形狀為([batch_size], noise_length, model.config.model_in_channels),其中noise_length應與input_features引數的長度維度(維度 1)匹配。如果未提供,它將隨機生成;可以將torch.Generator提供給generator引數,以便可以重現前向傳播。(請注意,UnivNetFeatureExtractor 預設返回生成的噪聲,因此無需手動生成noise_sequence。) - 可以透過
UnivNetFeatureExtractor.batch_decode()方法從 UnivNetModel 輸出中移除 UnivNetFeatureExtractor 新增的填充,如下面的用法示例所示。 - 在每個波形末尾新增靜音填充可以減少生成音訊樣本末尾的偽影。這可以透過向 UnivNetFeatureExtractor.call() 提供
pad_end = True來完成。有關更多詳細資訊,請參閱 此問題。
用法示例
import torch
from scipy.io.wavfile import write
from datasets import Audio, load_dataset
from transformers import UnivNetFeatureExtractor, UnivNetModel
model_id_or_path = "dg845/univnet-dev"
model = UnivNetModel.from_pretrained(model_id_or_path)
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)此模型由 dg845 貢獻。據我所知,沒有官方程式碼釋出,但可以在 maum-ai/univnet 找到非官方實現,預訓練檢查點此處。
UnivNetConfig
class transformers.UnivNetConfig
< 源 >( model_in_channels = 64 model_hidden_channels = 32 num_mel_bins = 100 resblock_kernel_sizes = [3, 3, 3] resblock_stride_sizes = [8, 8, 4] resblock_dilation_sizes = [[1, 3, 9, 27], [1, 3, 9, 27], [1, 3, 9, 27]] kernel_predictor_num_blocks = 3 kernel_predictor_hidden_channels = 64 kernel_predictor_conv_size = 3 kernel_predictor_dropout = 0.0 initializer_range = 0.01 leaky_relu_slope = 0.2 **kwargs )
引數
- model_in_channels (
int, 可選, 預設為 64) — UnivNet 殘差網路的輸入通道數。這應與noise_sequence.shape[1]和 UnivNetFeatureExtractor 類中使用的值對應。 - model_hidden_channels (
int, 可選, 預設為 32) — UnivNet 殘差網路中每個殘差塊的隱藏通道數。 - num_mel_bins (
int, 可選, 預設為 100) — 條件對數梅爾譜圖中的頻率 bin 數。這應與 UnivNetFeatureExtractor 類中使用的值匹配。 - resblock_kernel_sizes (
tuple[int]或list[int], 可選, 預設為[3, 3, 3]) — 定義 UnivNet 殘差網路中一維卷積層核大小的整數元組。resblock_kernel_sizes的長度定義了 resnet 塊的數量,應與resblock_stride_sizes和resblock_dilation_sizes的長度匹配。 - resblock_stride_sizes (
tuple[int]或list[int], 可選, 預設為[8, 8, 4]) — 定義 UnivNet 殘差網路中一維卷積層步幅大小的整數元組。resblock_stride_sizes的長度應與resblock_kernel_sizes和resblock_dilation_sizes的長度匹配。 - resblock_dilation_sizes (
tuple[tuple[int]]或list[list[int]], 可選, 預設為[[1, 3, 9, 27], [1, 3, 9, 27], [1, 3, 9, 27]]) — 定義 UnivNet 殘差網路中擴張一維卷積層擴張率的巢狀整數元組。resblock_dilation_sizes的長度應與resblock_kernel_sizes和resblock_stride_sizes的長度匹配。resblock_dilation_sizes中每個巢狀列表的長度定義了每個 resnet 塊的卷積層數。 - kernel_predictor_num_blocks (
int, 可選, 預設為 3) — 核預測器網路中的殘差塊數量,該網路計算 UnivNet 殘差網路中每個位置變數卷積層的核和偏差。 - kernel_predictor_hidden_channels (
int, 可選, 預設為 64) — 核預測器網路中每個殘差塊的隱藏通道數。 - kernel_predictor_conv_size (
int, 可選, 預設為 3) — 核預測器網路中每個一維卷積層的核大小。 - kernel_predictor_dropout (
float, 可選, 預設為 0.0) — 核預測器網路中每個殘差塊的 dropout 機率。 - initializer_range (
float, 可選, 預設為 0.01) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - leaky_relu_slope (
float, 可選, 預設為 0.2) — Leaky ReLU 啟用函式使用的負斜率角度。
這是用於儲存 UnivNetModel 配置的配置類。它用於根據指定的引數例項化 UnivNet 聲碼器模型,定義模型架構。使用預設值例項化配置將生成與 UnivNet dg845/univnet-dev 架構類似的配置,該架構對應於 maum-ai/univnet 中的“c32”架構。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
示例
>>> 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
class transformers.UnivNetFeatureExtractor
< 源 >( feature_size: int = 1 sampling_rate: int = 24000 padding_value: float = 0.0 do_normalize: bool = False num_mel_bins: int = 100 hop_length: int = 256 win_length: int = 1024 win_function: str = 'hann_window' filter_length: typing.Optional[int] = 1024 max_length_s: int = 10 fmin: float = 0.0 fmax: typing.Optional[float] = None mel_floor: float = 1e-09 center: bool = False compression_factor = 1.0 compression_clip_val = 1e-05 normalize_min = -11.512925148010254 normalize_max = 2.3143386840820312 model_in_channels: int = 64 pad_end_length: int = 10 return_attention_mask = True **kwargs )
引數
- feature_size (
int, 可選, 預設為 1) — 提取特徵的特徵維度。 - sampling_rate (
int, 可選, 預設為 24000) — 音訊檔案應以赫茲 (Hz) 表示的取樣率進行數字化。 - padding_value (
float, 可選, 預設為 0.0) — 應用由 UnivNetFeatureExtractor.call() 的padding引數定義的填充策略時要填充的值。應與音訊靜音對應。__call__的pad_end引數也將使用此填充值。 - do_normalize (
bool, 可選, 預設為False) — 是否對輸入執行 Tacotron 2 歸一化。歸一化有助於顯著提高某些模型的效能。 - num_mel_bins (
int, 可選, 預設為 100) — 提取的譜圖特徵中的梅爾頻率 bin 數。這應與UnivNetModel.config.num_mel_bins匹配。 - hop_length (
int, 可選, 預設為 256) — 滑動視窗之間的直接取樣點數。在許多論文中也稱為“shift”。請注意,這與其他音訊特徵提取器(例如 SpeechT5FeatureExtractor)不同,後者以毫秒為單位獲取hop_length。 - win_length (
int, 可選, 預設為 1024) — 每個滑動視窗的直接取樣點數。請注意,這與其他音訊特徵提取器(例如 SpeechT5FeatureExtractor)不同,後者以毫秒為單位獲取win_length。 - win_function (
str, 可選, 預設為"hann_window") — 用於加窗的視窗函式名稱,必須可透過torch.{win_function}訪問 - filter_length (
int, 可選, 預設為 1024) — 要使用的 FFT 分量數量。如果為None,則使用transformers.audio_utils.optimal_fft_length確定。 - max_length_s (
int, 可選, 預設為 10) — 模型的最大輸入長度(以秒為單位)。這用於填充音訊。 - fmin (
float, 可選, 預設為 0.0) — 梅爾頻率的最小頻率(赫茲)。 - fmax (
float, 可選) — 梅爾頻率的最大頻率(赫茲)。如果未設定,則預設為sampling_rate / 2。 - mel_floor (
float, 可選, 預設為 1e-09) — 梅爾頻率銀行的最小值。請注意,UnivNetFeatureExtractor 使用mel_floor的方式與 transformers.audio_utils.spectrogram() 中的方式不同。 - center (
bool, 可選, 預設為False) — 是否填充波形,使幀t居中於時間t * hop_length。如果為False,則幀t將從時間t * hop_length開始。 - compression_factor (
float, 可選, 預設為 1.0) — 頻譜歸一化期間動態範圍壓縮的乘性壓縮因子。 - compression_clip_val (
float, 可選, 預設為 1e-05) — 頻譜歸一化期間動態範圍壓縮之前應用於波形的裁剪值。 - normalize_min (
float, 可選, 預設為 -11.512925148010254) — 用於 Tacotron 2 風格線性歸一化的最小值。預設值是 Tacotron 2 實現中的原始值。 - normalize_max (
float, 可選, 預設為 2.3143386840820312) — 用於 Tacotron 2 風格線性歸一化的最大值。預設值是 Tacotron 2 實現中的原始值。 - model_in_channels (
int, 可選, 預設為 64) — UnivNetModel 模型的輸入通道數。這應與UnivNetModel.config.model_in_channels匹配。 - pad_end_length (
int, 可選, 預設為 10) — 如果對每個波形末尾進行填充,要附加的頻譜幀樣本數。附加的樣本數將是pad_end_length * hop_length。 - return_attention_mask (
bool, 可選, 預設為True) — call() 是否應返回attention_mask。
構造一個 UnivNet 特徵提取器。
此類別使用短時傅立葉變換 (STFT) 從原始語音中提取對數梅爾濾波器組特徵。STFT 的實現遵循 TacoTron 2 和 Hifi-GAN。
此特徵提取器繼承自 SequenceFeatureExtractor,其中包含大部分主要方法。使用者應參考此超類以獲取有關這些方法的更多資訊。
__call__
< 源 >( raw_speech: typing.Union[numpy.ndarray, list[float], list[numpy.ndarray], list[list[float]]] sampling_rate: typing.Optional[int] = None padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = True max_length: typing.Optional[int] = None truncation: bool = True pad_to_multiple_of: typing.Optional[int] = None return_noise: bool = True generator: typing.Optional[numpy.random._generator.Generator] = None pad_end: bool = False pad_length: typing.Optional[int] = None do_normalize: typing.Optional[str] = None return_attention_mask: typing.Optional[bool] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None )
引數
- raw_speech (
np.ndarray,list[float],list[np.ndarray],list[list[float]]) — 要填充的序列或序列批次。每個序列可以是 numpy 陣列、浮點值列表、numpy 陣列列表或浮點值列表的列表。必須是單聲道音訊,而不是立體聲,即每個時間步長一個浮點數。 - sampling_rate (
int, 可選) —raw_speech輸入的取樣率。強烈建議在轉發呼叫時傳遞sampling_rate,以防止無聲錯誤並允許自動語音識別管道。 - padding (
bool,str或 PaddingStrategy, 可選, 預設為True) — 選擇一種策略來填充輸入raw_speech波形(根據模型的填充側和填充索引),包括:True或'longest':填充到批次中最長的序列(如果只提供一個序列,則不填充)。'max_length':填充到由引數max_length指定的最大長度,如果未提供該引數,則填充到模型可接受的最大輸入長度。False或'do_not_pad'(預設):不填充(即可以輸出具有不同長度序列的批次)。
如果
pad_end = True,則該填充將在應用padding策略之前發生。 - max_length (
int, 可選) — 返回列表的最大長度和可選的填充長度(見上文)。 - truncation (
bool, 可選, 預設為True) — 啟用截斷,將長於max_length的輸入序列截斷為max_length。 - pad_to_multiple_of (
int, 可選) — 如果設定,將序列填充為所提供值的倍數。這對於在計算能力
>= 7.5(Volta) 的 NVIDIA 硬體或從序列長度為 128 倍數的 TPU 中受益的情況下啟用 Tensor Core 的使用特別有用。 - return_noise (
bool, 可選, 預設為True) — 是否生成並返回用於 UnivNetModel.forward() 的噪聲波形。 - generator (
numpy.random.Generator, 可選, 預設為None) — 生成噪聲時使用的可選numpy.random.Generator隨機數生成器。 - pad_end (
bool, 可選, 預設為False) — 是否在每個波形的末尾用靜音填充。這有助於減少生成的音訊樣本末尾的偽影;有關詳細資訊,請參閱 https://github.com/seungwonpark/melgan/issues/8。此填充將在執行padding中指定的填充策略之前完成。 - pad_length (
int, 可選, 預設為None) — 如果填充每個波形的末尾,則填充的長度(以頻譜幀為單位)。如果未設定,將預設為self.config.pad_end_length。 - do_normalize (
bool, 可選) — 是否對輸入執行 Tacotron 2 歸一化。歸一化有助於顯著提高某些模型的效能。如果未設定,將預設為self.config.do_normalize。 - return_attention_mask (
bool, 可選) — 是否返回注意力掩碼。如果保留預設值,將根據特定 feature_extractor 的預設值返回注意力掩碼。 - return_tensors (
str或 TensorType, 可選) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值為:'tf':返回 TensorFlowtf.constant物件。'pt':返回 PyTorchtorch.np.array物件。'np':返回 Numpynp.ndarray物件。
對一個或多個序列進行特徵化併為模型準備的主方法。
UnivNetModel
class transformers.UnivNetModel
< 源 >( config: UnivNetConfig )
引數
- config (UnivNetConfig) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不載入與模型關聯的權重,只加載配置。請檢視 from_pretrained() 方法載入模型權重。
輸出原始隱藏狀態,頂部沒有任何特定頭的 Univnet 模型。
此模型繼承自 PreTrainedModel。請檢視超類文件以瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
forward
< 源 >( input_features: FloatTensor noise_sequence: typing.Optional[torch.FloatTensor] = None padding_mask: typing.Optional[torch.FloatTensor] = None generator: typing.Optional[torch._C.Generator] = None return_dict: typing.Optional[bool] = None ) → transformers.models.univnet.modeling_univnet.UnivNetModelOutput 或 tuple(torch.FloatTensor)
引數
- input_features (
torch.FloatTensor) — 包含對數梅爾頻譜圖的張量。可以是批處理的,形狀為(batch_size, sequence_length, config.num_mel_channels),或非批處理的,形狀為(sequence_length, config.num_mel_channels)。 - noise_sequence (
torch.FloatTensor, 可選) — 包含標準高斯噪聲序列的張量。可以是批處理的,形狀為(batch_size, sequence_length, config.model_in_channels),或非批處理的,形狀為(sequence_length, config.model_in_channels)。如果未提供,將隨機生成。 - padding_mask (
torch.BoolTensor, 可選) — 指示每個序列的哪些部分被填充的掩碼。掩碼值在[0, 1]中選擇:- 1 表示**未掩碼**的標記
- 0 表示**已掩碼**的標記
掩碼可以是批處理的,形狀為
(batch_size, sequence_length),或非批處理的,形狀為(sequence_length,)。 - generator (
torch.Generator, 可選) — 一個 torch 生成器,用於使生成確定性。return_dict:是否返回 ModelOutput 子類而不是普通元組。 - return_dict (
bool, 可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.models.univnet.modeling_univnet.UnivNetModelOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.univnet.modeling_univnet.UnivNetModelOutput 或一個 torch.FloatTensor 的元組(如果傳入 return_dict=False 或當 config.return_dict=False 時),根據配置 (UnivNetConfig) 和輸入包含各種元素。
- waveforms (
torch.FloatTensor,形狀為(batch_size, sequence_length)) — 批處理的 1D (單通道) 輸出音訊波形。 - waveform_lengths (
torch.FloatTensor,形狀為(batch_size,)) —waveforms中每個未填充波形的批處理樣本長度。
UnivNetModel forward 方法,覆蓋 __call__ 特殊方法。
雖然前向傳遞的配方需要在此函式中定義,但在此之後應呼叫 Module 例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> 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]