speechbrain.augment.freq_domain 模块

频域序列数据增强类

此模块包含专门用于在频域增强序列数据的类,例如频谱图和梅尔频谱图。其主要目的是在训练过程中增强神经模型的鲁棒性。

作者: - Peter Plantinga (2020) - Mirco Ravanelli (2023)

总结

RandomShift

通过随机量移动输入张量,根据指定轴允许进行时间或频率(或通道)移动。

SpectrogramDrop

此类丢弃输入频谱图的切片。

Warping

对频谱图应用时间或频率扭曲。

参考

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 作为增强策略有助于模型学习依赖信号的所有部分,因为它不能期望给定部分始终存在。

参考

https://arxiv.org/abs/1904.08779

参数:
  • 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])
forward(spectrogram)[source]

将 DropChunk 增强应用于输入频谱图。

此方法随机丢弃输入频谱图的块以增强数据。

参数:

spectrogram (torch.Tensor) – 输入频谱图,形状为 [batch, time, fea]

返回:

增强后的频谱图,形状为 [batch, time, fea]

返回类型:

torch.Tensor

class speechbrain.augment.freq_domain.Warping(warp_window=5, warp_mode='bicubic', dim=1)[source]

基类:Module

对频谱图应用时间或频率扭曲。

如果 dim=1,则应用时间扭曲;如果 dim=2,则应用频率扭曲。此实现选择一个中心和窗口长度来执行扭曲。它通过相应地对受影响区域进行上采样或下采样来确保时间维度保持不变。

参考

https://arxiv.org/abs/1904.08779

参数:
  • warp_window (int, optional) – 扭曲窗口的宽度。默认为 5。

  • warp_mode (str, optional) – 时间扭曲的插值模式。默认为“bicubic”。

  • dim (int, optional) – 应用扭曲的维度(1 表示时间,2 表示频率)。默认为 1。

示例

>>> # 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])
forward(spectrogram)[source]

对输入频谱图应用扭曲。

参数:

spectrogram (torch.Tensor) – 输入频谱图,形状为 [batch, time, fea]

返回:

增强后的频谱图,形状为 [batch, time, fea]

返回类型:

torch.Tensor

class speechbrain.augment.freq_domain.RandomShift(min_shift=0, max_shift=0, dim=1)[source]

基类:Module

通过随机量移动输入张量,根据指定轴允许进行时间或频率(或通道)移动。根据您的特定任务要求校准最小和最大移动量至关重要。我们建议使用较小的移动量以保持信息完整性。使用较大的移动量可能会导致大量数据丢失,并可能导致与相应标签不对齐。

参数:
  • min_shift (int) – 最小通道移动量。

  • max_shift (int) – 最大通道移动量。

  • dim (int) – 要移动的维度。

示例

>>> # 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)
forward(waveforms, lengths)[source]
参数:
  • waveforms (tensor) – 形状应为 [batch, time][batch, time, channels]

  • lengths (tensor) – 形状应为单个维度,[batch]

返回类型:

形状为 [batch, time][batch, time, channels] 的张量