speechbrain.lobes.features 模块
基本特征管道。
- 作者
Mirco Ravanelli 2020
Peter Plantinga 2020
Sarthak Yadav 2020
Sylvain de Langen 2024
摘要
类
为语音管道输入生成特征。 |
|
此类实现了来自以下论文的 LEAF 音频前端: |
|
为语音管道输入生成特征。 |
|
包装一个任意的滤波器,使其可以用于流式处理(即按块处理),通过记住上下文并“巧妙地”使用填充来实现。 |
|
特征提取器的流式元数据。保留了一些过去的上下文帧。 |
|
估计信号的四类声学特征: |
函数
在给定维度上计算移动平均。 |
|
如果 |
参考
- 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])
- 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])
- speechbrain.lobes.features.upalign_value(x, to: int) int [source]
如果
x
不能被to
整除,则将其向上舍入到下一个可以整除的值。
- class speechbrain.lobes.features.StreamingFeatureWrapperContext(left_context: Tensor | None)[source]
继承自:
object
特征提取器的流式元数据。保存一些过去的上下文帧。
- class speechbrain.lobes.features.StreamingFeatureWrapper(module: Module, properties: FilterProperties)[source]
基类:
Module
封装任意滤波器,使其可以以流式方式(即,按块处理)使用,通过记住上下文并“巧妙地”利用填充。
- 参数:
module (torch.nn.Module) – 要封装的滤波器;例如,构成顺序特征提取管道的模块列表。假设该模块对其输入进行填充,例如,步长为 1 的卷积输出的帧数将与输入相同。
properties (FilterProperties) – 所提供模块的有效滤波器属性。这用于确定填充和缓存。
- get_recommended_final_chunk_count(frames_per_chunk: int) int [source]
根据提取器的滤波器属性,获取建议在输入流末尾注入的零块数。
选择注入的块数以确保滤波器输出帧以最后一个输入帧为中心。另请参阅
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