speechbrain.augment.freq_domain 模块
频域序列数据增强类
此模块包含专门用于在频域增强序列数据的类,例如频谱图和梅尔频谱图。其主要目的是在训练过程中增强神经模型的鲁棒性。
作者: - Peter Plantinga (2020) - Mirco Ravanelli (2023)
总结
类
通过随机量移动输入张量,根据指定轴允许进行时间或频率(或通道)移动。 |
|
此类丢弃输入频谱图的切片。 |
|
对频谱图应用时间或频率扭曲。 |
参考
- class speechbrain.augment.freq_domain.SpectrogramDrop(drop_length_low=5, drop_length_high=15, drop_count_low=1, drop_count_high=3, replace='zeros', dim=1)[source]
基类:
Module
此类丢弃输入频谱图的切片。
使用
SpectrogramDrop
作为增强策略有助于模型学习依赖信号的所有部分,因为它不能期望给定部分始终存在。- 参数:
drop_length_low (int) – 丢弃频谱图长度的低端,以采样点为单位。
drop_length_high (int) – 丢弃信号长度的高端,以采样点为单位。
drop_count_low (int) – 信号可以被丢弃次数的低端。
drop_count_high (int) – 信号可以被丢弃次数的高端。
replace (str) –
‘zeros’:被掩码的值替换为零。
’mean’:被掩码的值替换为频谱图的平均值。
- ’rand’:被掩码的值替换为介于
频谱图的最大值和最小值之间的随机数。
’cutcat’:被掩码的值替换为同一批次中其他信号的块。
’swap’:被掩码的值替换为同一句子中的其他块。
’random_selection’:从上述方法中随机选择一种。
dim (int) – 对应的掩码维度。如果 dim=1,则应用时间掩码。如果 dim=2,则应用频率掩码。
示例
>>> # time-masking >>> drop = SpectrogramDrop(dim=1) >>> spectrogram = torch.rand(4, 150, 40) >>> print(spectrogram.shape) torch.Size([4, 150, 40]) >>> out = drop(spectrogram) >>> print(out.shape) torch.Size([4, 150, 40]) >>> # frequency-masking >>> drop = SpectrogramDrop(dim=2) >>> spectrogram = torch.rand(4, 150, 40) >>> print(spectrogram.shape) torch.Size([4, 150, 40]) >>> out = drop(spectrogram) >>> print(out.shape) torch.Size([4, 150, 40])
- class speechbrain.augment.freq_domain.Warping(warp_window=5, warp_mode='bicubic', dim=1)[source]
基类:
Module
对频谱图应用时间或频率扭曲。
如果
dim=1
,则应用时间扭曲;如果dim=2
,则应用频率扭曲。此实现选择一个中心和窗口长度来执行扭曲。它通过相应地对受影响区域进行上采样或下采样来确保时间维度保持不变。- 参数:
示例
>>> # Time-warping >>> warp = Warping() >>> spectrogram = torch.rand(4, 150, 40) >>> print(spectrogram.shape) torch.Size([4, 150, 40]) >>> out = warp(spectrogram) >>> print(out.shape) torch.Size([4, 150, 40]) >>> # Frequency-warping >>> warp = Warping(dim=2) >>> spectrogram = torch.rand(4, 150, 40) >>> print(spectrogram.shape) torch.Size([4, 150, 40]) >>> out = warp(spectrogram) >>> print(out.shape) torch.Size([4, 150, 40])
- class speechbrain.augment.freq_domain.RandomShift(min_shift=0, max_shift=0, dim=1)[source]
基类:
Module
通过随机量移动输入张量,根据指定轴允许进行时间或频率(或通道)移动。根据您的特定任务要求校准最小和最大移动量至关重要。我们建议使用较小的移动量以保持信息完整性。使用较大的移动量可能会导致大量数据丢失,并可能导致与相应标签不对齐。
示例
>>> # time shift >>> signal = torch.zeros(4, 100, 80) >>> signal[0,50,:] = 1 >>> rand_shift = RandomShift(dim=1, min_shift=-10, max_shift=10) >>> lengths = torch.tensor([0.2, 0.8, 0.9,1.0]) >>> output_signal, lengths = rand_shift(signal,lengths)
>>> # frequency shift >>> signal = torch.zeros(4, 100, 80) >>> signal[0,:,40] = 1 >>> rand_shift = RandomShift(dim=2, min_shift=-10, max_shift=10) >>> lengths = torch.tensor([0.2, 0.8, 0.9,1.0]) >>> output_signal, lengths = rand_shift(signal,lengths)