torchaudio.models¶
models 子包包含用于解决常见音频任务的模型定义。
ConvTasNet 公司¶
-
类(num_sources:int = 2,enc_kernel_size:int = 16,enc_num_feats:int = 512,msk_kernel_size:int = 3,msk_num_feats:int = 128,msk_num_hidden_feats:int = 512,msk_num_layers:int = 8,msk_num_stacks:int = 3)[来源]
torchaudio.models.
ConvTasNet
¶ Conv-TasNet:全卷积时域音频分离网络 1.
- 参数
num_sources (int) – 要拆分的源数。
enc_kernel_size (int) – 编码器/解码器的卷积核大小 <L>。
enc_num_feats (int) – 传递给掩码生成器的特征维度 <N>。
msk_kernel_size (int) - 掩码生成器的卷积核大小 <P>。
msk_num_feats (int) - 掩码生成器中 conv 块的输入/输出特征维度,<B, Sc>。
msk_num_hidden_feats (int) - 掩码生成器的 conv 块的内部特征维度 <H>。
msk_num_layers (int) – 蒙版生成器的一个 conv 块中的层数 <X>。
msk_num_stacks (int) - 掩码生成器 <R> 的 conv 块的数量。
注意
此实现对应于论文中的 “non-causal” 设置。
-
forward
(输入:Torch。Tensor) → torch 的 Tensor 中。张量[来源]¶ 执行源分离。生成音频源波形。
- 参数
input (Torch.Tensor) – 形状为 [batch, channel==1, frames] 的 3D Tensor
- 返回
形状为 [batch, channel==num_sources, frames] 的 3D 张量
- 返回类型
深度语音¶
-
类(n_feature:int,n_hidden:int = 2048,n_class:int = 40,dropout:float = 0.0)[来源]
torchaudio.models.
DeepSpeech
¶ DeepSpeech 模型架构来自 2.
- 参数
n_feature – 输入特征的数量
n_hidden – 内部隐藏单元大小。
n_class – 输出类的数量
-
forward
(x:Torch。Tensor) → torch 的 Tensor 中。张量[来源]¶ - 参数
x (Torch。Tensor) - 维度的张量 (batch, channel, time, feature).
- 返回
维度 (batch, time, class) 的预测因子张量。
- 返回类型
张肌
Wav2字母¶
-
类(num_classes:int = 40,input_type:str = '波形',num_features:int = 1)[来源]
torchaudio.models.
Wav2Letter
¶ Wav2Letter 模型架构来自 3.
\(\text{padding} = \frac{\text{ceil}(\text{kernel} - \text{stride})}{2}\)
- 参数
-
forward
(x:Torch。Tensor) → torch 的 Tensor 中。张量[来源]¶ - 参数
x (Torch。Tensor) - 维度 (batch_size, num_features, input_length) 的张量。
- 返回
维度 (batch_size, number_of_classes, input_length) 的预测因子张量。
- 返回类型
张肌
Wav2Vec2.0 格式¶
Wav2Vec2模型¶
-
类(feature_extractor:torch.nn.modules.module.Module,编码器:torch.nn.modules.module.Module)[来源]
torchaudio.models.
Wav2Vec2Model
¶ [4] 中使用的编码器模型。
注意
要构建模型,请使用其中一个工厂函数。
- 参数
feature_extractor (torch.nn.Module) – 从原始音频 Tensor 中提取特征向量的特征提取器。
encoder (torch.nn.Module) – 将音频特征转换为概率序列的编码器 标签上的分布(负对数似然)。
-
extract_features
(waveforms(波形):Torch(Torch)。Tensor, lengths: 可选[torch.Tensor] = None) → Tuple[torch.Tensor,可选[torch.张量]][来源]¶ 从原始波形中提取特征向量
- 参数
waveforms (Tensor) - 形状为 的音频张量。
(batch, frames)
lengths (Tensor, optional) (张量,可选) – 指示批处理中每个音频样本的有效长度。 形状:。
(batch, )
- 返回
- 特征向量。
形状:
(batch, frames, feature dimention)
- Tensor,可选:
指示批处理中每个特征的有效长度,计算 基于给定的参数。 形状:。
lengths
(batch, )
- 返回类型
张肌
-
forward
(waveforms(波形):Torch(Torch)。Tensor, lengths: 可选[torch.Tensor] = None) → Tuple[torch.Tensor,可选[torch.张量]][来源]¶ 计算标签上的概率分布序列。
- 参数
waveforms (Tensor) - 形状为 的音频张量。
(batch, frames)
lengths (Tensor, optional) (张量,可选) – 指示批处理中每个音频样本的有效长度。 形状:。
(batch, )
- 返回
- 标签上的概率分布序列(以 logit 为单位)。
形状:。
(batch, frames, num labels)
- Tensor,可选:
指示批处理中每个特征的有效长度,计算 基于给定的参数。 形状:。
lengths
(batch, )
- 返回类型
张肌
工厂功能¶
wav2vec2_base¶
-
torchaudio.models.
wav2vec2_base
(num_out:int) → torchaudio.models.wav2vec2.model.Wav2Vec2Model[来源]¶ 使用 [4] 中的 “Base” 配置构建 wav2vec2.0 模型。
- 参数
num_out – 整数 输出标签的数量。
- 返回
生成的模型。
- 返回类型
- 示例 — 从 Hugging Face 重新加载微调模型:
>>> # Session 1 - Convert pretrained model from Hugging Face and save the parameters. >>> from torchaudio.models.wav2vec2.utils import import_huggingface_model >>> >>> original = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h") >>> model = import_huggingface_model(original) >>> torch.save(model.state_dict(), "wav2vec2-base-960h.pt") >>> >>> # Session 2 - Load model and the parameters >>> model = wav2vec2_base(num_out=32) >>> model.load_state_dict(torch.load("wav2vec2-base-960h.pt"))
wav2vec2_large¶
-
torchaudio.models.
wav2vec2_large
(num_out:int) → torchaudio.models.wav2vec2.model.Wav2Vec2Model[来源]¶ 使用 [4] 中的“Large”配置构建 wav2vec2.0 模型。
- 参数
num_out – 整数 输出标签的数量。
- 返回
生成的模型。
- 返回类型
- 示例 — 从 Hugging Face 重新加载微调模型:
>>> # Session 1 - Convert pretrained model from Hugging Face and save the parameters. >>> from torchaudio.models.wav2vec2.utils import import_huggingface_model >>> >>> original = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-large-960h") >>> model = import_huggingface_model(original) >>> torch.save(model.state_dict(), "wav2vec2-base-960h.pt") >>> >>> # Session 2 - Load model and the parameters >>> model = wav2vec2_large(num_out=32) >>> model.load_state_dict(torch.load("wav2vec2-base-960h.pt"))
wav2vec2_large_lv60k¶
-
torchaudio.models.
wav2vec2_large_lv60k
(num_out:int) → torchaudio.models.wav2vec2.model.Wav2Vec2Model[来源]¶ 使用 [4] 中的“大型 LV-60k”配置构建 wav2vec2.0 模型。
- 参数
num_out – 整数 输出标签的数量。
- 返回
生成的模型。
- 返回类型
- 示例 — 从 Hugging Face 重新加载微调模型:
>>> # Session 1 - Convert pretrained model from Hugging Face and save the parameters. >>> from torchaudio.models.wav2vec2.utils import import_huggingface_model >>> >>> original = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-large-960h-lv60-self") >>> model = import_huggingface_model(original) >>> torch.save(model.state_dict(), "wav2vec2-base-960h.pt") >>> >>> # Session 2 - Load model and the parameters >>> model = wav2vec2_large_lv60k(num_out=32) >>> model.load_state_dict(torch.load("wav2vec2-base-960h.pt"))
效用函数¶
import_huggingface_model¶
-
torchaudio.models.wav2vec2.utils.
import_huggingface_model
(原文:torch.nn.modules.module.Module) → torchaudio.models.wav2vec2.model.Wav2Vec2Model[源]¶ 从 Hugging Face 的 Transformers 导入 wav2vec2 模型。
- 参数
original (torch.nn.Module) – from 的实例。
Wav2Vec2ForCTC
transformers
- 返回
导入的模型。
- 返回类型
- 例
>>> from torchaudio.models.wav2vec2.utils import import_huggingface_model >>> >>> original = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h") >>> model = import_huggingface_model(original) >>> >>> waveforms, _ = torchaudio.load("audio.wav") >>> logits, _ = model(waveforms)
import_fairseq_model¶
-
torchaudio.models.wav2vec2.utils.
import_fairseq_model
(原文:torch.nn.modules.module.Module,num_out:可选[int] = None) → torchaudio.models.wav2vec2.model.Wav2Vec2Model[来源]¶ 从 fairseq 发布的预训练参数构建 Wav2Vec2Model。
- 参数
original (torch.nn.Module) – fairseq 的 Wav2Vec2.0 模型类的实例。 或 .
fairseq.models.wav2vec.wav2vec2_asr.Wav2VecEncoder
fairseq.models.wav2vec.wav2vec2.Wav2Vec2Model
num_out (int, optional) – 输出标签的数量。仅当原始模型为 的实例。
fairseq.models.wav2vec.wav2vec2.Wav2Vec2Model
- 返回
导入的模型。
- 返回类型
- 示例 — 加载仅预训练模型
>>> from torchaudio.models.wav2vec2.utils import import_fairseq_model >>> >>> # Load model using fairseq >>> model_file = 'wav2vec_small.pt' >>> model, _, _ = fairseq.checkpoint_utils.load_model_ensemble_and_task([model_file]) >>> original = model[0] >>> imported = import_fairseq_model(original, num_out=28) >>> >>> # Perform feature extraction >>> waveform, _ = torchaudio.load('audio.wav') >>> features, _ = imported.extract_features(waveform) >>> >>> # Compare result with the original model from fairseq >>> reference = original.feature_extractor(waveform).transpose(1, 2) >>> torch.testing.assert_allclose(features, reference)
- 示例 - 微调模型
>>> from torchaudio.models.wav2vec2.utils import import_fairseq_model >>> >>> # Load model using fairseq >>> model_file = 'wav2vec_small_960h.pt' >>> model, _, _ = fairseq.checkpoint_utils.load_model_ensemble_and_task([model_file]) >>> original = model[0] >>> imported = import_fairseq_model(original.w2v_encoder) >>> >>> # Perform encoding >>> waveform, _ = torchaudio.load('audio.wav') >>> emission, _ = imported(waveform) >>> >>> # Compare result with the original model from fairseq >>> mask = torch.zeros_like(waveform) >>> reference = original(waveform, mask)['encoder_out'].transpose(0, 1) >>> torch.testing.assert_allclose(emission, reference)
WaveRNN¶
-
类(upsample_scales:List[int],n_classes:int,hop_length:int,n_res_block:int = 10,n_rnn:int = 512,n_fc:int = 512,kernel_size:int = 5,n_freq:int = 128,n_hidden:int = 128,n_output:int = 128)[源]
torchaudio.models.
WaveRNN
¶ 基于 fatchord 实现的 WaveRNN 模型。
最初的实现是在 5 中引入的。 waveform 和 spectrogram 的 input channels 必须为 1。upsample_scales 的乘积必须等于 hop_length。
- 参数
upsample_scales – 上采样比例列表。
n_classes – 输出类的数量。
hop_length – 连续帧开始之间的样本数。
n_res_block – 堆栈中 ResBlock 的数量。(默认:
10
)n_rnn – RNN 层的维度。(默认:
512
)n_fc – 全连接层的维度。(默认:
512
)kernel_size – 第一个 Conv1d 层中的内核大小数。(默认:
5
)n_freq – 频谱图中的区间数。(默认:
128
)n_hidden – resblock 的隐藏维度数。(默认:
128
)n_output – MelresNet 的输出维度数。(默认:
128
)
- 例
>>> wavernn = WaveRNN(upsample_scales=[5,5,8], n_classes=512, hop_length=200) >>> waveform, sample_rate = torchaudio.load(file) >>> # waveform shape: (n_batch, n_channel, (n_time - kernel_size + 1) * hop_length) >>> specgram = MelSpectrogram(sample_rate)(waveform) # shape: (n_batch, n_channel, n_freq, n_time) >>> output = wavernn(waveform, specgram) >>> # output shape: (n_batch, n_channel, (n_time - kernel_size + 1) * hop_length, n_classes)
引用¶
- 1
Yi Luo 和 Nima Mesgarani。Conv-tasnet:超越了理想的时频幅度掩码,用于语音分离。IEEE/ACM 音频、语音和语言处理汇刊,27(8):1256–1266,2019 年 8 月。网址:http://dx.doi.org/10.1109/TASLP.2019.2915167,doi:10.1109/taslp.2019.2915167。
- 2
Awni Hannun、Carl Case、Jared Casper、Bryan Catanzaro、Greg Diamos、Erich Elsen、Ryan Prenger、Sanjeev Satheesh、Shubho Sengupta、Adam Coates 和 Andrew Y. Ng。深度语音:扩大端到端语音识别。2014. arXiv:1412.5567.
- 3
罗南·科洛伯特、克里斯蒂安·普尔施和加布里埃尔·辛纳夫。Wav2letter:一种基于卷积网络的端到端语音识别系统。2016. arXiv:1609.03193.
- 4(1,2,3,4)
阿列克谢·巴耶夫斯基、亨利·周、阿卜杜勒拉赫曼·穆罕默德和迈克尔·奥利。Wav2vec 2.0:语音表示的自监督学习框架。2020. arXiv:2006.11477.
- 5
纳尔·卡尔赫布伦纳、埃里希·埃尔森、凯伦·西蒙尼扬、塞布·努里、诺曼·卡萨格兰德、爱德华·洛克哈特、弗洛里安·斯廷伯格、亚伦·范登奥德、桑德·迪勒曼和科雷·卡武克茨奥卢。高效的神经音频合成。2018. arXiv:1802.08435.