日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Chapter3-1_Speech Separation(Deep Clustering, PIT)

發布時間:2024/7/5 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Chapter3-1_Speech Separation(Deep Clustering, PIT) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1 內容簡述
  • 2 評價指標
    • 2.1 Signal-to-noise ratio (SNR)
    • 2.2 Scale invariant signal-to-distortion ratio (SI-SDR)
    • 2.3 其他的評價指標
    • 3 Permutation Issue
  • 4 Deep Clustering
  • 5 PIT

本文為李弘毅老師【Speech Separation - Deep Clustering, PIT】的課程筆記,課程視頻youtube地址,點這里👈(需翻墻)。

下文中用到的圖片均來自于李宏毅老師的PPT,若有侵權,必定刪除。

文章索引:

上篇 - 2-2 CycleGAN and StarGAN

下篇 - 3-2 TasNet

總目錄

1 內容簡述

人在一個嘈雜的環境下聽別人說話的時候,可以很神奇的抽取到說話人說話的信息,換而言之,也就是把說話人發出的聲音和說話人之外的聲音給分開了。而Speech Separation要做的事情,也就是把不同物體發出的聲音給分開。

Speech Separation可以分為兩大類:

  • Speech Enhancement
    把人的聲音和其他的聲音給分開來,也被稱為denoising

  • Speaker Separation
    把不同人說話的聲音分開來

本篇的著重點在于Speaker Separation,而且在討論的時候,都以兩個speakers單一麥克風的情況為例子。同時,要說明的是,用于訓練和驗證的聲音數據來自于不同的speaker,也就是說,訓練集是A,B,C,D說的,驗證集是E,F說的,這樣子。

Speaker Separation有一個特點,就是它的輸入和輸出的長度必然是一致的,所以可以不使用seq2seq的模型來解,用seq2seq的模型有一種殺雞用牛刀的感覺。

Speaker Separation有一個好處就是,數據集很容易構造,我們只需要找一堆單個speaker的聲音信號過來,然后兩兩合成一下,就可以了。

2 評價指標

2.1 Signal-to-noise ratio (SNR)

有一種評估模型輸出質量的方法叫做SNR,SNR的目的是讓模型的輸出X?X^*X?X^\hat{X}X^越接近越好。SNR的計算公式如下所示

SNR=10log10∣∣X^∣∣2∣∣E∣∣2SNR=10 log_{10} \frac{||\hat{X}||^2}{||E||^2} SNR=10log10?E2X^2?

其中,X?X^*X?X^\hat{X}X^均為向量,且

E=X^?X?E=\hat{X}-X^* E=X^?X?

不難看出,當EEE越大的時候,SNRSNRSNR就小,也就是SNRSNRSNR認為模型的結果越差,反之越好。

這種簡單粗暴的評價方式,在面對聲音的時候,會存在一個致命的問題。比如模型輸出的X?X^*X?X^\hat{X}X^向量幾乎是平行的,只不過X?X^*X?短了一點(音量小了一點),這個時候SNR卻認為模型學的不好,這其實是不合理的,不我們只要把音量調大一點就可以了。

又比如說,模型輸出的X?X^*X?X^\hat{X}X^偏差比較大,但是當X?X^*X?被調大了音量之后,這個SNRSNRSNR就認為模型變好了,這也是我們不希望看到的。

總而言之,SNRSNRSNR受音量大小的干擾太大。

2.2 Scale invariant signal-to-distortion ratio (SI-SDR)

另一種文獻中常用的評價指標叫做SI-SDR,SI-SDR也被稱為SI-SNR,知道這兩個是同一個東西就可以了。SI-SDR的計算公式為

SISDR=10log10∣∣XT∣∣2∣∣XE∣∣2SISDR=10log_{10} \frac{||X_T||^2}{||X_E||^2} SISDR=10log10?XE?2XT?2?

其中

{XE=X??XTXT=X??X^∣∣X^∣∣2X^\left\{ \begin{aligned} X_E = X^* - X_T \\ X_T = \frac{X^* \cdot \hat{X}}{||\hat{X}||^2}\hat{X} \end{aligned} \right. ??????XE?=X??XT?XT?=X^2X??X^?X^?

這個評價指標就是在看X?X^*X?X^\hat{X}X^的平行程度,解決了SNR被音量大小干擾的問題。

而在實際使用的時候,我們看的,往往是SI-SDR的improvement。什么是improvement?比如我們要看下圖中藍色信號的improvement,那么我們就要先把輸入mixed audio和藍色信號的ground truth做一個SI-SDR得到SI-SDR1,然后再把藍色信號對應的輸出和藍色信號的ground truth算一個SI-SDR2,再用SI-SDR2減去SI-SDR1來看這個增量。

為什么要這么做?因為有些時候,mixed audio的紅色信號可能音量較低,這使得SI-SDR1本身就會比較大,SI-SDR2自然也就是大的,這個時候看增量improvement會更有意義。

2.3 其他的評價指標

除了SNR和SI-SDR之外,還有其他很多評價指標,比如用來評價輸出聲音質量的Perceptual evaluation of speech quality (PESQ),用來評價聲音清晰度的short-time objective intelligibility (STOI)。這些評價指標都比較復雜,這里不多做介紹。

3 Permutation Issue

講完了評價指標之后,我們就可以像正常了模型那樣開始train了,我們的Loss就用L1或者L2或者SI-SDR都是可以的,SI-SDR是可以微分的。我們就輸入一個mixed audio然后經過一個speaker Separation的model,出來一個X1X_1X1?X2X_2X2?,再算一下loss,然后反向傳播,就結束了。真的就么就結束了嗎?錯錯錯

我們仔細來思考一下,輸出X1X_1X1?的這端和X2X_2X2?的這端是連接著固定的weights的,為什么X1X_1X1?一定是紅色信號,X2X_2X2?一定是藍色信號。這兩個不能換一下嗎?加入我們又來了一個橙色信號,那這個橙色信號應該在哪個輸出?仔細想一下,這樣子網絡是沒法train起來的。這個其實就是Speech Separation中的Permutation Issue。

它不能像其他問題那樣直接轉變為一個可以直接train的神經網絡。

那怎么辦?下面來介紹一下Deep Clustering和PIT。

4 Deep Clustering

在介紹deep clustering之前,我們先來說一下其中用到的mask。由于Speech Separation只是對于輸入聲音信號的一個拆分,所以我們可以不生成聲音信號,而是生成兩個mask。這兩個mask是互斥的,即M1=1?M2M_1 = 1 - M_2M1?=1?M2?,mask中的值可以是binary的(0和1),也是可以是continuous的(0至1)。如果是binary的,X1X_1X1?就是XXXM1M_1M1?對應元素為1的元素的組合,即X1=M1?XX_1 = M_1 \cdot XX1?=M1??XX2X_2X2?就是X?X1=M2?XX-X_1 = M_2 \cdot XX?X1?=M2??X

這種binary的方式,顯得非常簡單粗暴,這樣難道不會造成很多信息的丟失嗎?不管你信不信,實際情況下,這種做法是work的。不過既然要把我們的訓練目標變成一個mask,那在處理數據,生成label的時候,也有一些相應的操作。

如下圖中,我們有藍色的聲音和紅色的聲音,然后合成了左上角紅藍結合的聲音。藍色和紅色的矩陣表示聲音信號轉換之后得到的spectrogram,紅藍矩陣的shape是一樣的,矩陣中每個元素之間比個大小,藍的大的話,藍色mask相應為止的值就是1,反之是0。紅色的也是一樣。mask就是用這種方式構造出來的。

然后用這種方式得到的mask在mixed audio上去取值,得到左下角的信號,這個信號的聲音,和藍色信號的聲音,人聽起來,是沒什么區別的。這樣的mask叫做Ideal Binary Mask (IBM)。

也就是說,我們的模型只要能學到這樣的兩個IBM,就可以實現Speech Separation了。那么,我們的模型就變成了下圖這樣。


但是!到現在為止,我們仍舊沒有解決Permutation Issue。別急,馬上給你搞定。

先來說一下Deep Clustering的Inference的過程。我們的輸入是一個代表mixed audio的D×TD \times TD×T的矩陣,經過一個Embedding的網絡之后,生成了一個D×T×AD \times T \times AD×T×A的矩陣,這個AAA就是embedding之后的特征維度。然后,我們會對這個輸出做k-means clustering,如果有2個說話人,就把cluster的個數設置為2即可,然后每個cluster就代表一個speaker的Ideal Binary Mask。是不是很機智!完美解決Permutation Issue。

不過這個東西訓練該怎么train呢?k-means clustering是額外的算法,且不可導,要做loss的話,就要在D×T×AD \times T \times AD×T×A的這個矩陣上做文章。

我們是有Ideal Binary Mask這個label的,那么,我們呢就可以讓mask上值一樣的feature的距離越大越好,mask值上值不同的feature越遠越好,這樣的loss是可以做成可導的。

神奇的是,用2個speakers的聲音mix的的數據和deep clustering模型train出來的結果,針對于3個speakers的輸入,也是有效的!這真的是很了不起。

5 PIT

PIT是一種訓練的方法,全稱為Permutation Invariant Training。這種訓練方式就可以end-to-end去訓練,總體思想很直覺,就是我先隨便假設一個speakers對應于輸出的X1X_1X1?X2X_2X2?的順序,稍微train幾下,得到一個model。然后,下一次train的時候,我會算兩次SI-SDR之類的評價指標,分別是紅1,藍2和藍1,紅2,然后把Loss小的那個作為排序,然后按這個順序train下去。

每train一次,這個排序都可能會發生變化,所以剛開始的時候,是非常不穩定的,但只要這樣train下去,最終,是可以收斂的。感覺這個真的要靠做實驗做出來。

還有就是,PIT相比于按照某種方式,假定一個順序的訓練方式是要好一點的。

總結

以上是生活随笔為你收集整理的Chapter3-1_Speech Separation(Deep Clustering, PIT)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。