speechbrain.augment.freq_domain 模块

频域序列数据增强类

该模块包含专为增强频域中的序列数据(如频谱图和梅尔频谱图)而设计的类。 其主要目的是在训练过程中增强神经模型的鲁棒性。

作者: - 彼得·普兰廷加 (2020) - 米尔科·拉瓦内利 (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作为增强策略有助于模型学会依赖信号的所有部分,因为它不能期望某个特定部分总是存在。

Reference:

https://arxiv.org/abs/1904.08779

Parameters:
  • 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,我们应用频率掩码。

Example

>>> # 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增强。

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

Parameters:

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

Returns:

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

Return type:

torch.Tensor

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

基础:Module

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

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

Reference:

https://arxiv.org/abs/1904.08779

Parameters:
  • warp_window (int, 可选) – 扭曲窗口的宽度。默认值为5。

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

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

Example

>>> # 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]

对输入的频谱图应用扭曲。

Parameters:

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

Returns:

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

Return type:

torch.Tensor

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

基础:Module

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

Parameters:
  • min_shift (int) – 最小通道偏移。

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

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

Example

>>> # 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]
Parameters:
  • 波形 (张量) – 形状应为 [批次, 时间][批次, 时间, 通道]

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

Return type:

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