作者:Max W. Y. Lam, Jun Wang, Dan Su, Dong Yu
发表于 ICASSP 2021
沙漏网络、轻型网络、自注意力、时域、多粒度
值得一读的论文
Yi Luo, Zhuo Chen, and Takuya Yoshioka, “Dual-path rnn: efficient long sequence modeling for time-domain single- channel speech separation,” arXiv preprint arXiv:1910.06379, 2019. (DPRNN)
Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser, and Illia Polosukhin,“Attention is all you need,” in Advances in neural information processing systems, 2017, pp. 5998–6008.(注意力机制)
-
方法:提出了沙漏网络Sandglasset,作者发现多粒度特性对于增强上下文建模和计算效率至关重要,该模型具有更小的尺寸和计算代价,同时具有相同粒度的特征之间的残差连接对于通过瓶颈层后保留信息至关重要。作者主要是以DPRNN为基础,将DPRNN中的全局序列建模替换为了SAN
-
Introduction
- 目前语音分离的挑战之一是对长时间序列进行建模
- 先前工作中的一个通用策略是使用RNN分别建模局部序列和全局序列,而作者发现使用自注意力网络 (SAN) 可以更好的建模全局序列
- 作者发现在基于分块的方法中,块大小是保持不变的,这不利于充分发挥网络的建模能力。同时SAN已被证明在建模高级上下文之间具有优越性,因此作者建立了一种新的模型,该模型的特征由SAN以多粒度建模
-
模型结构
-
Sandglasset由N个块组成,前2/N个块中信号帧以较粗的时间尺度进行下采样为较大时间片段的特征序列,也就是大粒度的高级抽象特征;在后2/N个块中,这些高级特征被上采样回时间尺度较小的较长特征序列,即细粒度、低级特征。为了保留信息,将前上下采样对应的块使用残差连接。图的左侧为可变大小的多粒度特征构成了沙漏的形状,右边是每个块内的具体操作。
-
数据编码:作者仿照TasNet中的编码方式,对原始的混合语音进行在时域上进行编码,输入的混合语音 x ∈ R T x\in\mathbb{R}^T x∈RT被编码成50%重叠帧的序列,记作 X = [ x 1 , . . . , x L ] ∈ R M × L X=[x_1,...,x_L]\in\mathbb{R}^{M×L} X=[x1,...,xL]∈RM×L,其中M是超参数,表示窗口长度,L=2T/M;使用ReLU-gated 1D 卷积层代替STFT进行编码 X = R e L u ( C o n v 1 D ( X ; U ) ) X=ReLu(Conv1D(X;U)) X=ReLu(Conv1D(X;U)),经过线性映射后得到 X ∈ R D × L X\in\mathbb{R}^{D×L} X∈RD×L
-
分割:将X分割为具有50%重叠的片段,每个片段的长度为K,为了保证均匀分割,第一段和最后一段需要补零,分割后得到S=2L/K个片段.将这些片段整合为三维tensor: χ b ∈ R D × K × S \chi_b\in\mathbb{R}^{D×K×S} χb∈RD×K×S(有S个片段,每个片段的长度为K帧,每帧为D维),K是一个控制片段大小的超参数
-
Sandglasset Blocks:主要分为两部分,使用RNN对局部序列建模;使用SAN对全局序列建模
-
局部序列建模:针对每个片段进行操作的。将 χ \chi χ中的第s 个片段 χ s ∈ R D × K \chi_s\in\mathbb{R}^{D×K} χs∈RD×K送到BiLSTM中(作者在文中说是一个单层RNN,但实际上用的是BiLSTM,可能是因为BiLSTM是RNN的改进版本??不太明白)对局部序列进行建模,BiLSTM的输出为 y b L R = [ M b ⋅ B i L S T M ( χ s ) + c b , s = 1 , 2 , . . . , S ] y_b^{LR}=[M_b\cdot BiLSTM(\chi_s)+c_b,s=1,2,...,S] ybLR=[Mb⋅BiLSTM(χs)+cb,s=1,2,...,S]
-
全局序列建模:针对时间序列进行操作,也就是需要对所有片段中的K个时间段进行操作。首先对局部建模后的序列使用层归一化LN,并添加一个残差连接 χ b G A = L N ( y b L R + χ b ) \chi_b^{GA}=LN(y_b^{LR}+\chi_b) χbGA=LN(ybLR+χb)。之后使用下采样,经过SAN后进行上采样 y b G A = U S b ( S A N b ( D S b ( χ b G A ) ) ) , S A N ( χ ) = [ S e l f A t t n ( L N ( χ [ : , : , k ] + P ) , k = 1 , 2 , . . . , K ) ] y_b^{GA}=US_b(SAN_b(DS_b(\chi_b^{GA}))),SAN(\chi)=[SelfAttn(LN(\chi[:,:,k]+P),k=1,2,...,K)] ybGA=USb(SANb(DSb(χbGA))),SAN(χ)=[SelfAttn(LN(χ[:,:,k]+P),k=1,2,...,K)],P表示未知编码矩阵(详细见Attention is all you need论文)
-
-
数据集:WSJ0-mix2/mix3
-
结果:SI-SNR:20.8/17.1;SDRi:21.0/17.4