度量学习DML之Contrastive Loss及其变种_程大海的博客-CSDN博客
度量学习DML之Triplet Loss_程大海的博客-CSDN博客
度量学习DML之Lifted Structure Loss_程大海的博客-CSDN博客
度量学习DML之Circle Loss_程大海的博客-CSDN博客
度量学习DML之Cross-Batch Memory_程大海的博客-CSDN博客
数据增强之SpecAugment_程大海的博客-CSDN博客
SpecAugment
论文:《SpecAugment: A Simple Data Augmentation Methodfor Automatic Speech Recognition》
参考:https://github.com/bobchennan/sparse_image_warp_pytorch
参考:语音算法阅读之SpecAugment - 卑微的蜗牛 - 博客园
参考:https://github.com/qiuqiangkong/torchlibrosa
参考:https://github.com/qiuqiangkong/audioset_tagging_cnn/blob/master/pytorch/models.py
SpecAugment是一种log梅尔声谱层面上的数据增强方法,用到语音识别、音频分类领域。假设音频片段转换为梅尔频谱后的矩阵为,
表示频率维度,
表示时间维度,SpecAugment主要做了四步操作:
- 将梅尔频谱进行零均值归一化x-x.mean(),这样在后续进行mask的时候,直接将mask的位置设置为0,同时还相当于填充了矩阵的均值
- 时间维度平移:论文里面说是做水平的左右扭转,具体没太理解,我就简单理解为水平平移
- 时间维度掩码:假设时间维度连续掩码的最大范围是
,然后在
范围内进行均匀采样一个
,在
范围内随机确定一个点
,从
位置开始沿着时间轴连续进行
次掩码(将矩阵数值置为0)
- 频率维度掩码:假设时间维度连续掩码的最大范围是
,然后在
范围内进行均匀采样一个
,在
范围内随机确定一个点
,从
位置开始沿着时间轴连续进行
次掩码(将矩阵数值置为0)
简单来说就是,把梅尔频谱矩阵当做是一通道的图像数据,对图像进行平移数据增强,随机划掉图像矩阵上的连续若干行进行时间维度的增强,随机划掉图像矩阵上的连续若干列进行频率维度的增强,想法简单粗暴,无需额外参数,无需额外计算,效果还杠杠的。
看一下具体效果,假设音频转化之后得到的矩阵就是下面这只狗,横轴表示时间维度,纵轴表示频率维度:
原狗:
时间轴平移狗:
时间轴掩码狗:
频率轴掩码狗:
时间轴平移-时间轴掩码-频率轴掩码狗: