原理:
该方法实在u2++中作为第二个创新点提出的,其作用是使模型见多识广,更加robust。主要思路是随机用之前的chunk来代替当前的chunk。
论文位置:https://arxiv.org/pdf/2106.05642.pdf 详见文章的3.2.3小结
代码位置:https://github.com/wenet-e2e/wenet/blob/main/wenet/dataset/dataset_deprecated.py
代码分析:
————————————
_spec_aug_mentation
参数:x,warp for time,num t mask,num f mask,max t,max f, max w
作用:增强特征
参数介绍:
x: input feature, T * F 2Da
num_t_mask: number of time mask to apply
num_f_mask: number of freq mask to apply
max_t: max width of time maska
max_f: max width of freq maska
max_w: max width of time warp
过程:
步骤一:数据准备。先将输入特征进行备份,然后获取特征的最大帧长和最高频率,即2维特征的宽和高。
步骤二:time_warp。
2.1 设maxw= 80,maxframes=1000,则center则为80至920之间的一个整数;
2.2 设该整数center为500,则warped为420至580之间的一个整数;
2.3 以center为分界线,将特征左侧的内容resize,并调用BICUBIC进行插值;
2.4 以center为分界线,将特征右侧的内容resize,并调用BICUBIC进行插值;
2.5 将2.3和2.4得到的左右特征以横轴方式进行拼接,得到新的特征。
步骤三:time_mask。进行num_t_mask次横向特征随机挑选开始和结束点,然后以0进行mask。
步骤四:freq_mask。进行num_f_mask次纵向特征随机挑选开始和结束点,然后以0进行mask,最终返回y。
————————————
###注意点###
- BICUBIC插值:主要用在图像中插值或者增加像素数量/密度。通常利用插值技术增加图形数据,以便在打印或其他形式输出的时候,能够增大打印面积以及分辨率。
- 在这个函数中为y单独开辟了一块空间,但单从这一块代码,个人觉得这一块没必要单独复制一份y出来,可以直接在输入x上进行操作。