Chapter3-2_Speech Separation(TasNet)
文章目錄
- 1 TasNet總體架構(gòu)
- 2 Encoder和Decoder
- 3 Separator
- 4 TasNet回顧
- 5 More
- 5.1 Unknown number of speakers
- 5.2 Multiple microphones
- 5.3 Visual information
本文為李弘毅老師【Speech Separation - TasNet】的課程筆記,課程視頻youtube地址,點(diǎn)這里👈(需翻墻)。
下文中用到的圖片均來自于李宏毅老師的PPT,若有侵權(quán),必定刪除。
文章索引:
上篇 - 3-1 Deep Clustering, PIT
下篇 - 4-1 Tacotron
總目錄
1 TasNet總體架構(gòu)
TasNet的全程是Time-domain Audio Separation Network,它是一個(gè)可以end-to-end去train的一個(gè)網(wǎng)絡(luò)。整個(gè)網(wǎng)絡(luò)可以認(rèn)為由三個(gè)部分組成,分別是Encoder,Separator和Decoder。Encoder相當(dāng)于是一個(gè)Fourier Transformer,可以吃未經(jīng)處理過的mixed audio原始聲音信號(hào),然后吐出一個(gè)特征維度為512維的特征向量。Separator會(huì)吃這個(gè)特征向量,然后吐出兩個(gè)mask,這兩個(gè)mask再作用到encoder吐出的feature map上,得到兩個(gè)separated feature map。最后還有一個(gè)decoder,decoder吃這兩個(gè)feature map。吐出separated audio。
2 Encoder和Decoder
TasNet的Encoder和Decoder都是linear transformer,可以看成是兩個(gè)矩陣。Encoder的輸入是一個(gè)非常短的聲音訊號(hào),只有16個(gè)samples,可以看作16維的向量,吐出的是一個(gè)512維的向量,Decoder的輸入是一個(gè)512維的向量,吐出的是一個(gè)16維的向量。我們可能會(huì)很直覺的認(rèn)為Encoder里的線性變換和Decoder里的線性變換應(yīng)該是inverse的,但實(shí)際情況是,做了這樣的限制之后,模型的效果并不好。對于Encoder而言,如果這個(gè)Encoder就是Fourier Transformer的話,那它的輸出應(yīng)該都是正的。但是做了這樣的限制,效果也不好。
所以,就是不用做這些限制,直接train就行。
3 Separator
這個(gè)Separator是很多層dilated convolution的堆疊。它吃的是Encoder的輸出,會(huì)把這個(gè)輸出經(jīng)過多個(gè)dilation不斷成倍增長的dilated convolution。最后對得到的結(jié)果做一個(gè)transform和sigmoid得到兩個(gè)mask。這個(gè)sigmoid可以不加,mask 1和mask 2中對應(yīng)位置的元素之和也不需要是1。
實(shí)際情況下,這個(gè)dilated convolution是有很多層的,最后一層的dilation=128,也就是說有8層(27=1282^7=12827=128)。然后,這個(gè)過程一般會(huì)重復(fù)3次,這個(gè)repeat的次數(shù)是可以調(diào)整的超參數(shù)。這么做的目的就是,當(dāng)Separator在輸出某個(gè)mask值的時(shí)候,看過足夠長的語音信號(hào)。比如下圖的這種結(jié)構(gòu),模型單個(gè)mask值的輸出會(huì)考慮1.53s長度的語音。由于用到的cnn太多了,其中還用到了Depthwise Separable Convolution的技術(shù)來輕量化模型。
在最初的時(shí)候,其實(shí)Separator用的是LSTM,但是為什么變成了CNN呢?原因就是訓(xùn)練的時(shí)候,我們都是從句子的開頭開始放進(jìn)LSTM去train的,這樣一來LSTM就沒法適應(yīng)一句話從中間截?cái)嗨瓦M(jìn)來的情況,也就是說LSTM很傲嬌,剛開始看到的不是句子的開頭,就壞掉了。而CNN是time invariant的,它無所謂句子的開頭在哪里。從下圖中不難看出,總體的表現(xiàn)也是CNN更好。
4 TasNet回顧
我們再來回顧一下TasNet的整個(gè)架構(gòu)。如下圖所示,圖中用的是一個(gè)真實(shí)的例子畫出來的圖像,紅色和藍(lán)色分別代表不同的speaker,可見TasNet學(xué)到的mask可以很好地把兩個(gè)speaker的聲音給分開來。對了,TasNet在train的時(shí)候要用上篇中提到的PIT的技巧。
最后再來看一下TasNet的效果究竟如何。下圖是Wavesplit這篇文章中對不同方法在WSJ0-2mix上結(jié)果的對比。不難看出TasNet比Deep Clustering要好很多。但是,在實(shí)際情況下,Deep Clustering的泛化能力會(huì)比TasNet要好。比如WSJ0-2mix是一個(gè)英文的數(shù)據(jù)集,TasNet在這個(gè)數(shù)據(jù)集上train了之后,給它說中文,它就搞不懂,但是Deep Clustering在這個(gè)數(shù)據(jù)集上train了之后可以把中文給Seperate了。這也是比較奇怪的地方。
5 More
上一篇,以及這篇講的只是Speech Separation中的滄海一粟,還有很多的東西可以講,這里再稍微拓展一下。
5.1 Unknown number of speakers
當(dāng)我們不知道輸入的信號(hào)中有多少speakers的時(shí)候,Deep Clustering也許還可以嘗試一下調(diào)整一下cluster的個(gè)數(shù),但TasNet就真的失效了。那當(dāng)我們不知道speaker的個(gè)數(shù)的時(shí)候,該咋辦?下圖提供了一種思路,就是我們train一個(gè)network,這個(gè)network每次只分離出一個(gè)人的聲音,然后不斷循環(huán)下去,同時(shí)這個(gè)network還要神奇地知道我分到什么時(shí)候的時(shí)候,聲音中就剩下2個(gè)speakers了,它就可以停了。
5.2 Multiple microphones
當(dāng)我們有多個(gè)麥克風(fēng)的時(shí)候該怎么辦?其實(shí)我們現(xiàn)在使用的大部分設(shè)備都是多個(gè)麥克風(fēng)的,用傳統(tǒng)的做法的話,有一些處理的技巧,但是用deep learning的話,就直接多輸入硬train一發(fā)就結(jié)束了。
5.3 Visual information
在視頻當(dāng)中,我們還可以用到圖像的信息。Google有給出過這樣面的一個(gè)Demo,可見 Looking to Listen: Audio-Visual Speech Separation。大致的思想是在訓(xùn)練的時(shí)候加入了人臉的信息,這樣的做法,就可以用PIT的訓(xùn)練方式了。這里不做太多的介紹。
總結(jié)
以上是生活随笔為你收集整理的Chapter3-2_Speech Separation(TasNet)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WIN 10 安装 Hadoop 2.7
- 下一篇: LeetCode 1910. 删除一个字