speechbrain.lobes.features 模块

基本特征管道。

Authors
  • Mirco Ravanelli 2020

  • 彼得·普兰廷加 2020

  • Sarthak Yadav 2020

  • Sylvain de Langen 2024

摘要

类:

Fbank

生成用于语音管道的输入特征。

Leaf

该类实现了来自LEAF的音频前端

MFCC

生成用于语音管道的输入特征。

StreamingFeatureWrapper

包装一个任意的过滤器,使其可以以流式方式使用(即基于每个块),通过记住上下文并“巧妙”地使用填充。

StreamingFeatureWrapperContext

特征提取器的流式元数据。

函数:

upalign_value

如果 x 不能整除 to,则将其向上舍入到下一个可以整除的值。

参考

class speechbrain.lobes.features.Fbank(deltas=False, context=False, requires_grad=False, sample_rate=16000, f_min=0, f_max=None, n_fft=400, n_mels=40, filter_shape='triangular', param_change_factor=1.0, param_rand_factor=0.0, left_frames=5, right_frames=5, win_length=25, hop_length=10)[source]

基础:Module

为输入到语音管道生成特征。

Parameters:
  • deltas (bool (默认值: False)) – 是否将一阶导数和二阶导数附加到特征中。

  • 上下文 (bool (默认值: False)) – 是否将前向和后向上下文附加到特征中。

  • requires_grad (bool (默认值: False)) – 是否允许参数(即fbank中心和扩展)在训练期间更新。

  • sample_rate (int (默认值: 160000)) – 输入波形的采样率。

  • f_min (int (默认值: 0)) – Mel滤波器的最低频率。

  • f_max (int (默认值: None)) – Mel滤波器的最高频率。请注意,如果未指定f_max,它将被设置为sample_rate // 2。

  • n_fft (int (默认值: 400)) – 每次短时傅里叶变换使用的样本数。

  • n_mels (int (默认值: 40)) – Mel滤波器的数量。

  • filter_shape (str (默认值: triangular)) – 过滤器的形状(‘triangular’, ‘rectangular’, ‘gaussian’)。

  • param_change_factor (float (默认值: 1.0)) – 如果 freeze=False,此参数会影响滤波器参数(即 central_freqs 和 bands)在训练过程中变化的速度。当值较高时(例如,param_change_factor=1),滤波器在训练过程中变化较大。当值较低时(例如,param_change_factor=0.1),滤波器参数在训练过程中更加稳定。

  • param_rand_factor (float (默认值: 0.0)) – 此参数可用于在训练期间随机更改滤波器参数 (即中心频率和带宽)。因此,它是一种 正则化方法。param_rand_factor=0 不会产生影响,而 param_rand_factor=0.15 允许在滤波器参数标准值的 +-15% 范围内 进行随机变化(例如,如果中心频率为 100 Hz,我们可以将其随机更改为 85 Hz 到 115 Hz)。

  • left_frames (int (默认值: 5)) – 要添加的左侧上下文帧数。

  • right_frames (int (默认值: 5)) – 要添加的右上下文帧数。

  • win_length (float (默认值: 25)) – 用于计算STFT的滑动窗口的长度(以毫秒为单位)。

  • hop_length (float (默认值: 10)) – 用于计算STFT的滑动窗口的跳跃长度(以毫秒为单位)。

Example

>>> import torch
>>> inputs = torch.randn([10, 16000])
>>> feature_maker = Fbank()
>>> feats = feature_maker(inputs)
>>> feats.shape
torch.Size([10, 101, 40])
forward(wav)[source]

返回从输入波形生成的一组特征。

Parameters:

wav (torch.Tensor) – 一批要转换为特征的音频信号。

Returns:

fbanks

Return type:

torch.Tensor

get_filter_properties() FilterProperties[source]
class speechbrain.lobes.features.MFCC(deltas=True, context=True, requires_grad=False, sample_rate=16000, f_min=0, f_max=None, n_fft=400, n_mels=23, n_mfcc=20, filter_shape='triangular', param_change_factor=1.0, param_rand_factor=0.0, left_frames=5, right_frames=5, win_length=25, hop_length=10)[source]

基础:Module

为输入到语音管道生成特征。

Parameters:
  • deltas (bool (默认值: True)) – 是否将导数和二阶导数附加到特征中。

  • 上下文 (bool (默认值: True)) – 是否将前向和后向上下文附加到特征中。

  • requires_grad (bool (默认值: False)) – 是否允许参数(即fbank中心和扩展)在训练期间更新。

  • sample_rate (int (默认值: 16000)) – 输入波形的采样率。

  • f_min (int (默认值: 0)) – Mel滤波器的最低频率。

  • f_max (int (默认值: None)) – Mel滤波器的最高频率。请注意,如果未指定f_max,它将被设置为sample_rate // 2。

  • n_fft (int (默认值: 400)) – 每次短时傅里叶变换使用的样本数。

  • n_mels (int (默认值: 23)) – 用于创建滤波器组的滤波器数量。

  • n_mfcc (int (默认值: 20)) – 输出系数的数量

  • filter_shape (str (默认 'triangular')) – 过滤器的形状(‘triangular’, ‘rectangular’, ‘gaussian’)。

  • param_change_factor (bool (默认 1.0)) – 如果 freeze=False,此参数会影响滤波器参数(即 central_freqs 和 bands)在训练过程中变化的速度。当值较高时(例如,param_change_factor=1),滤波器在训练过程中变化较大。当值较低时(例如,param_change_factor=0.1),滤波器参数在训练过程中更加稳定。

  • param_rand_factor (float (默认值 0.0)) – 此参数可用于在训练期间随机更改滤波器参数 (即中心频率和带宽)。因此,它是一种 正则化方法。param_rand_factor=0 不会产生影响,而 param_rand_factor=0.15 允许在滤波器参数标准值的 +-15% 范围内 进行随机变化(例如,如果中心频率为 100 Hz,我们可以将其随机更改为 85 Hz 到 115 Hz)。

  • left_frames (int (默认 5)) – 要添加的左侧上下文帧数。

  • right_frames (int (默认 5)) – 要添加的右上下文帧数。

  • win_length (float (默认值: 25)) – 用于计算STFT的滑动窗口的长度(以毫秒为单位)。

  • hop_length (float (默认值: 10)) – 用于计算STFT的滑动窗口的跳跃长度(以毫秒为单位)。

Example

>>> import torch
>>> inputs = torch.randn([10, 16000])
>>> feature_maker = MFCC()
>>> feats = feature_maker(inputs)
>>> feats.shape
torch.Size([10, 101, 660])
forward(wav)[source]

返回从输入波形生成的一组mfccs。

Parameters:

wav (torch.Tensor) – 一批要转换为特征的音频信号。

Returns:

mfccs

Return type:

torch.Tensor

class speechbrain.lobes.features.Leaf(out_channels, window_len: float = 25.0, window_stride: float = 10.0, sample_rate: int = 16000, input_shape=None, in_channels=None, min_freq=60.0, max_freq=None, use_pcen=True, learnable_pcen=True, use_legacy_complex=False, skip_transpose=False, n_fft=512)[source]

基础:Module

这个类实现了来自的LEAF音频前端

Neil Zeghidour, Olivier Teboul, F{‘e}lix de Chaumont Quitry & Marco Tagliasacchi, “LEAF: 一个可学习的音频分类前端”, 在ICLR 2021的会议论文中 (https://arxiv.org/abs/2101.08596)

Parameters:
  • out_channels (int) – 这是输出通道的数量。

  • window_len (float) – 滤波器窗口的长度,单位为毫秒

  • window_stride (float) – 过滤器的时间步长,单位为毫秒

  • sample_rate (int,) – 输入信号的采样率。它仅用于sinc_conv。

  • input_shape (tuple) – 输入的预期形状。

  • in_channels (int) – 预期的输入通道数。

  • min_freq (float) – 滤波器的最低可能频率(以Hz为单位)

  • max_freq (float) – 过滤器的最高可能频率(以Hz为单位)

  • use_pcen (bool) – 如果为True(默认),则使用每通道能量归一化层

  • learnable_pcen (bool:) – 如果为True(默认),则每通道能量归一化层是可学习的

  • use_legacy_complex (bool) – 如果为False,则使用torch.complex64数据类型进行Gabor脉冲响应 如果为True,则在两个实值的torch.Tensors上进行计算

  • skip_transpose (bool) – 如果为False,使用speechbrain的批次 x 时间 x 通道约定。 如果为True,使用批次 x 通道 x 时间约定。

  • n_fft (int) – FFT 分箱数

Example

>>> inp_tensor = torch.rand([10, 8000])
>>> leaf = Leaf(
...     out_channels=40, window_len=25., window_stride=10., in_channels=1
... )
>>> out_tensor = leaf(inp_tensor)
>>> out_tensor.shape
torch.Size([10, 50, 40])
forward(x)[source]

返回学习到的LEAF特征

Parameters:

x (torch.Tensor形状 (批次, 时间, 1) 或 (批次, 时间)) – 输入信号的批次。期望是2d或3d张量。

Returns:

输出

Return type:

torch.Tensor

speechbrain.lobes.features.upalign_value(x, to: int) int[source]

如果 x 不能整除 to,则将其四舍五入到下一个可以整除的值。

class speechbrain.lobes.features.StreamingFeatureWrapperContext(left_context: Tensor | None)[source]

基础类:object

特征提取器的流式元数据。保存一些过去的上下文帧。

left_context: Tensor | None

缓存的左帧将作为下一个块的左填充插入。 最初为None,然后从当前块的最后几帧更新。 详情请参阅相关的forward函数。

class speechbrain.lobes.features.StreamingFeatureWrapper(module: Module, properties: FilterProperties)[source]

基础:Module

包装一个任意过滤器,使其可以以流式方式使用(即基于每个块),通过记住上下文并“巧妙”地使用填充。

Parameters:
  • 模块 (torch.nn.Module) – 要包装的过滤器;例如,构成顺序特征提取管道的模块列表。 假设该模块会对其输入进行填充,例如,步幅为1的卷积输出将具有与输入相同的帧数。

  • 属性 (FilterProperties) – 提供的模块的有效过滤属性。这用于确定填充和缓存。

get_required_padding() int[source]

计算在正向传递过程中需要在输入信号的过去和未来注入的填充/上下文帧的数量。

get_output_count_per_pad_frame() int[source]

计算每个输入pad帧沿时间维度产生的帧的确切数量。

根据提取器的过滤器属性,获取在输入流末尾注入的推荐零块数量。

选择注入的块数是为了确保过滤器具有以最后输入帧为中心的输出帧。 另请参阅 forward()

Parameters:

frames_per_chunk (int) – 每个块中的帧数,即传递给forward()的时间维度大小。

Return type:

推荐的块数。

forward(chunk: Tensor, context: StreamingFeatureWrapperContext, *extra_args, **extra_kwargs) Tensor[source]

流式特征包装器的前向传递。

对于第一个块,在输入的过去部分插入0填充。 对于任何块(包括第一个块),一些未来的帧会被截断并缓存,以便作为下一个块的时间上的左上下文插入。

如需进一步解释,请参见代码中的注释。

请注意,由于填充的实现方式,您可能希望在输入的末尾调用一个充满零的块(对于具有大窗口的过滤器可能需要更多),以便最终帧有机会被过滤器处理。请参阅get_recommended_final_chunk_count()。在处理无限流时,这实际上不是问题,但在处理文件时,否则可能会导致输出被截断。

Parameters:
  • chunk (torch.Tensor) – 输入的形状为 [batch size, time] 的块;通常是一个原始波形。通常,在分块流式处理场景中,time = (stride-1) * chunk_size 其中 chunk_size 是所需的输出帧数。

  • 上下文 (StreamingFeatureWrapperContext) – 可变的流式上下文对象;应在同一流式会话中的后续调用中重复使用。

  • *extra_args (元组)

  • **extra_kwargs (dict) – 传递给模块的参数。

Returns:

处理过的形状为 [批量大小, 输出帧数] 的数据块。这个形状等同于 module(chunk) 的形状。

Return type:

torch.Tensor

get_filter_properties() FilterProperties[source]
make_streaming_context() StreamingFeatureWrapperContext[source]