speechbrain.lobes.features 模块

基本特征管道。

作者
  • Mirco Ravanelli 2020

  • Peter Plantinga 2020

  • Sarthak Yadav 2020

  • Sylvain de Langen 2024

摘要

Fbank

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

Leaf

此类实现了来自以下论文的 LEAF 音频前端:

MFCC

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

StreamingFeatureWrapper

包装一个任意的滤波器,使其可以用于流式处理(即按块处理),通过记住上下文并“巧妙地”使用填充来实现。

StreamingFeatureWrapperContext

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

VocalFeatures

估计信号的四类声学特征:

函数

moving_average (移动平均)

在给定维度上计算移动平均。

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

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

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

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

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

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

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

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

  • n_fft (int (默认值: 400)) – 每次 stft 中使用的样本数。

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

  • filter_shape (str (默认值: triangular)) – 滤波器形状(‘triangular’ 三角形, ‘rectangular’ 矩形, ‘gaussian’ 高斯)。

  • param_change_factor (float (默认值: 1.0)) – 如果 freeze=False,此参数影响滤波器参数(即中心频率和频带)的改变速度。当值高时(例如 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 的滑动窗口的步长长度(单位:毫秒)。

示例

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

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

参数:

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

返回:

fbanks

返回类型:

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

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

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

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

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

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

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

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

  • n_fft (int (默认值: 400)) – 每次 stft 中使用的样本数。

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

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

  • filter_shape (str (默认值: 'triangular')) – 滤波器形状(‘triangular’ 三角形, ‘rectangular’ 矩形, ‘gaussian’ 高斯)。

  • param_change_factor (bool (默认值: 1.0)) – 如果 freeze=False,此参数影响滤波器参数(即中心频率和频带)的改变速度。当值高时(例如 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 的滑动窗口的步长长度(单位:毫秒)。

示例

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

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

参数:

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

返回:

mfccs

返回类型:

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: A LEARNABLE FRONTEND FOR AUDIO CLASSIFICATION”, in Proc. of ICLR 2021 (https://arxiv.org/abs/2101.08596)

参数:
  • 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,则 Gabor 脉冲响应使用 torch.complex64 数据类型;如果为 True,则计算在两个实值 torch.Tensor 上执行

  • skip_transpose (bool) – 如果为 False,使用 speechbrain 的 batch x time x channel 约定。如果为 True,使用 batch x channel x time 约定。

  • n_fft (int) – FFT bins 的数量

示例

>>> 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 特征

参数:

x (torch.Tensor, 形状为 (batch, time, 1) 或 (batch, time)) – 输入信号的批次。期望是二维或三维张量。

返回:

outputs

返回类型:

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

封装任意滤波器,使其可以以流式方式(即,按块处理)使用,通过记住上下文并“巧妙地”利用填充。

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

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

get_required_padding() int[source]

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

get_output_count_per_pad_frame() int[source]

计算每个输入填充帧产生的精确帧数(沿时间维度)。

根据提取器的滤波器属性,获取建议在输入流末尾注入的零块数。

选择注入的块数以确保滤波器输出帧以最后一个输入帧为中心。另请参阅 forward()

参数:

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

返回类型:

建议的块数。

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

流式特征封装器的 forward 传递。

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

进一步解释,请参阅代码中的注释。

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

参数:
  • chunk (torch.Tensor) – 输入块,形状为 [batch size, time];通常是原始波形。通常,在按块流式传输场景中,time = (stride-1) * chunk_size,其中 chunk_size 是期望的**输出**帧数。

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

  • *extra_args (tuple)

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

返回:

已处理的块,形状为 [batch size, output frames]。此形状等效于 module(chunk) 的形状。

返回类型:

torch.Tensor

get_filter_properties() FilterProperties[source]
make_streaming_context() StreamingFeatureWrapperContext[source]
class speechbrain.lobes.features.VocalFeatures(min_f0_Hz: int = 80, max_f0_Hz: int = 300, step_size: float = 0.01, window_size: float = 0.05, sample_rate: int = 16000, log_scores: bool = True, eps: float = 0.001, sma_neighbors: int = 3, n_mels: int =23, n_mfcc: int =4)[source]

基类:Module

估计信号的四类声学特征:
  • 基于自相关

  • 基于周期(抖动/微抖)

  • 基于频谱

  • MFCCs (梅尔频率倒谱系数)

参数:
  • min_f0_Hz (int) – 允许的最小基频,用于减少倍频程误差。默认值为 80 Hz,基于人类语音标准频率范围。

  • max_f0_Hz (int) – 允许的最大基频,用于减少倍频程误差。默认值为 300 Hz,基于人类语音标准频率范围。

  • step_size (float) – 分析窗口之间的时间(单位:秒)。

  • window_size (float) – 分析窗口的大小(单位:秒)。长度必须足够长,以便在最小频率下至少包含 4 个周期。

  • sample_rate (int) – 一秒钟的样本数。

  • log_scores (bool) – 是否以对数刻度表示抖动/微抖/hnr/gne,因为这些特征通常接近于零。

  • eps (float) – 对数变换前的最小值,默认值 1e-3 导致最大值为 30 dB。

  • sma_neighbors (int) – 平均帧数 – 默认 3

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

  • n_mfcc (int (default: 4)) – 输出系数的数量

示例

>>> audio = torch.rand(1, 16000)
>>> feature_maker = VocalFeatures()
>>> vocal_features = feature_maker(audio)
>>> vocal_features.shape
torch.Size([1, 96, 17])
forward(audio: Tensor)[source]

计算语音特征。

参数:

audio (torch.Tensor) – 要转换为语音特征的音频信号。

返回:

features

一个 [batch, frame, 13+n_mfcc] 张量,包含每帧的以下特征。
  • autocorr_f0: 每帧的基频 (f0) 估计值(单位:Hz)。

  • autocorr_hnr: 每帧的谐波噪声比。

  • periodic_jitter: 周期长度的平均偏差。

  • periodic_shimmer: 每周期振幅的平均偏差。

  • gne: 声门噪声激励比。

  • spectral_centroid: 频谱帧的“质心”。

  • spectral_spread: 频谱帧到质心的平均距离。

  • spectral_skew: 频谱相对于质心的不对称性。

  • spectral_kurtosis: 频谱的峰度。

  • spectral_entropy: 频谱的尖锐度。

  • spectral_flatness: 几何平均值与算术平均值的比率。

  • spectral_crest: 频谱最大值与算术平均值的比率。

  • spectral_flux: 连续频谱值之间的 2 范数差。

  • mfcc_{0-n_mfcc}: 梅尔倒谱系数。

返回类型:

torch.Tensor

speechbrain.lobes.features.moving_average(features, dim=1, n=3)[source]

在给定维度上计算移动平均。

参数:
  • features (torch.Tensor) – 要平滑的特征张量。

  • dim (int) – 时间维度(用于平滑)。

  • n (int) – 移动平均中的点数

返回:

smoothed_features – 应用移动平均后的特征。

返回类型:

torch.Tensor

示例

>>> feats = torch.tensor([[0., 1., 0., 1., 0., 1., 0.]])
>>> moving_average(feats)
tensor([[0.5000, 0.3333, 0.6667, 0.3333, 0.6667, 0.3333, 0.5000]])