2019.11.18-2019.11.30

總結(jié):

  1. 數(shù)據(jù)集:聲學場景分類任務,使用DCASE2019_task_1b的數(shù)據(jù)集,共10000個訓練集和5000個驗證集,做好了數(shù)據(jù)的處理工作。
  2. 特征提?。禾卣魈崛〔捎胮ython_speech_features庫提取log-mel特征,幀長20ms,幀移10ms,頻率維度80,對標簽進行one-hot處理。
  3. 使用keras自帶的ResNet50在不區(qū)分設備的情況下跑出61.63%的結(jié)果,但是訓練過程中驗證集正確率波動十分明顯,因此個人認為意義不大。
  4. 閱讀并復現(xiàn)了McDonnell的方法。
  • 該參賽者使用librosa提取log-mel特征,幀長2048個采樣點,幀移1024個采樣點,頻率維度128,并且對特征進行了一階差分和二階差分。
  • 值得注意的是,其沒有將設備進行區(qū)分訓練,因此方法的魯棒性會很好。
  • 其將128維特征分成低頻的64維和高頻的64維,在網(wǎng)絡中并行訓練最后進行拼接。
  • 數(shù)據(jù)增強采用Mixup。
  • 網(wǎng)絡模型使用殘差卷積網(wǎng)絡。
  • 在訓練過程中動態(tài)調(diào)整學習率。
  • 64個epoch時達到了73%的正確率,相信在510個epoch時性能還會有提升。
  1. 發(fā)現(xiàn)的問題:由于我和McDonnell提取的特征稍有不同,但是性能差別明顯。
  • 我的特征+ResNet50:性能可達到60%
  • McDonnell特征+ResNet50:15%左右
  • 我的特征+作者的模型:62%
  • McDonnell特征+作者的模型:73%。
    該問題需要在下面的工作中進行分析。

下一步計劃:

  1. Mixup是一個很好的數(shù)據(jù)增強方法,因為訓練集和測試集語料僅有15000條,每條10秒,數(shù)據(jù)量并不大。我想在這一步中引入GAN來提取音頻的純凈特征,可以在這一點上進行嘗試。
  2. keras自帶的ResNet50只是一個暫時的baseline,需要引用再調(diào)整出一個性能較好的模型
  3. 音頻特征提取需要進行進一步的研究。個人認為音頻特征的提取對分類結(jié)果的影響十分明顯,但現(xiàn)在并沒有弄懂什么樣的特征才真正適合該任務,只是按照通用的方法來進行特征提取工作

2019.11.18

1.處理好了DCASE2019數(shù)據(jù)集,已將數(shù)據(jù)按a、b、c設備分類。
2.對音頻提取特征。
音頻都是10s的數(shù)據(jù)。特征采用80維的log-fbank,幀長20ms,幀移10ms,因此每個音頻共999幀。
在提取過程中發(fā)現(xiàn)有的音頻裁出了1000幀,為保證矩陣的維度,因此只保留前999幀,最終輸入網(wǎng)絡的數(shù)據(jù)維度是( , 999, 80, 1)
3.對標簽進行one-hot處理。
4.使用keras自帶的ResNet50訓練a設備。
暫時最好情況達到54%正確率。


2019.11.19

  1. 昨日數(shù)據(jù)跑了100個epoch,最好效果達到66.70%


  2. 閱讀論文《BOOSTING NOISE ROBUSTNESS OF ACOUSTIC MODEL VIA DEEP ADVERSARIAL TRAINING》
    論文想要使用GAN提取純凈語音的特征,而在我的任務中,a設備由于數(shù)據(jù)量大、錄音設備精度高,因此可以理解為純凈的語音,我們就可以用類似的方法提取b、c設備的純凈特征(相似于設備a)。文中提到了論文《Triple Generative Adversarial Nets》提出三重GAN,以引入用于分類和分類條件生成的三個組件。
  3. 改用DenseNet169跑100個epoch,最好到65.91%
  4. 閱讀《深度學習500問》第七章GAN
    \underset{G}{min}\underset{D}{max}V(D,G)=E_{x\sim P_{data}(x)}[logD(x)]+E_{z\sim p_{z}(z)}[log(1-D(G(z)))]
    這個目標函數(shù)可以分為兩個部分來理解:
    ? 第一部分:判別器的優(yōu)化通過 \underset{D}{max}V(D,G) 實現(xiàn),V(D,G) 為判別器的目標函數(shù),其第一項 E_{x\sim P_{data}(x)}[logD(x)] 表示對于從真實數(shù)據(jù)分布中采用的樣本 ,其被判別器判定為真實樣本概率的數(shù)學期望。對于真實數(shù)據(jù)分布 中采樣的樣本,其預測為正樣本的概率當然是越接近1越好。因此希望最大化這一項。第二項 E_{z\sim p_{z}(z)}[log(1-D(G(z)))]表示:對于從噪聲 P_{z}(z) 分布當中采樣得到的樣本,經(jīng)過生成器生成之后得到的生成圖片,然后送入判別器,其預測概率的負對數(shù)的期望,這個值自然是越大越好,這個值越大, 越接近0,也就代表判別器越好。
    ? 第二部分:生成器的優(yōu)化通過 \underset{G}{min}(\underset{D}{max}V(D,G))來實現(xiàn)。注意,生成器的目標不是 \underset{G}{min}V(D,G) ,即生成器不是最小化判別器的目標函數(shù),二是最小化判別器目標函數(shù)的最大值,判別器目標函數(shù)的最大值代表的是真實數(shù)據(jù)分布與生成數(shù)據(jù)分布的JS散度(詳情可以參閱附錄的推導),JS散度可以度量分布的相似性,兩個分布越接近,JS散度越小。

2019.11.20

  1. 閱讀《Investigating Generative Adversarial Networks based Speech Dereverberation for Robust Speech Recognition》
    發(fā)現(xiàn)自己閱讀論文能力不足,需要鍛煉,閱讀一遍之后,每句話能大概讀懂是什么意思,但是回想一下論文都講了哪些事情卻什么也想不起來。
  2. 不區(qū)分設備,將所有數(shù)據(jù)一齊進行訓練,網(wǎng)絡使用還是ResNet50,最高達到61.63%。


2019.11.21

  1. 閱讀《Speech Enhancement Generative Adversarial Network》
    引用其中的一句話:
    對于傳統(tǒng)的機器學習方法,我們一般會先定義一個模型讓數(shù)據(jù)去學習。(比如:假設我們知道原始數(shù)據(jù)是高斯分布的,只是不知道高斯分布的參數(shù),這個時候我們定義一個高斯分布,然后利用數(shù)據(jù)去學習高斯分布的參數(shù),最終得到我們的模型),但是大家有沒有覺得奇怪,感覺你好像事先知道數(shù)據(jù)該怎么映射一樣,只是在學習模型的參數(shù)罷了。GAN則不同,生成模型最后通過噪聲生成一個完整的真實數(shù)據(jù)(比如人臉),說明生成模型已經(jīng)掌握了從隨機噪聲到人臉數(shù)據(jù)的分布規(guī)律。有了這個規(guī)律,想生成人臉還不容易,然而這個規(guī)律我們事先是不知道的,我們也不知道,如果讓你說從隨機噪聲到人臉應該服從什么分布,你不可能知道。這是一層層映射之后組合起來的非常復雜的分布映射規(guī)律。然而GAN的機制可以學習到,也就是說GAN學習到了真實樣本集的數(shù)據(jù)分布。

  2. 突然有一個想法
    我試聽了abc三種設備錄制出來的音頻,三種音頻最明顯的差別就是音量,a設備精度最高但音量最低,人耳很難辨別出場景,我認為是設備質(zhì)量過好,濾掉了很多場景中的雜音,但這些可能是被忽略掉的有用信息,遂決定單獨再跑一下b、c設備的數(shù)據(jù)。

  • 用ResNet50跑b設備,正確率在40%左右。
  • 用ResNet50跑c設備,正確率在43%左右。
    問過師兄,師兄說不要太主觀地去聽,因為機器理解的和人理解的不同。
    我應該再去看看DCASE上人們的做法。
  1. DCASE上其他人的情況
    Kosmider是做的很出色的,提交的四個網(wǎng)絡占據(jù)了前四名。他提出的思想是對音頻提取完特征后進行頻譜增強,并且大量使用模型融合,投票方式。但是沒有公開代碼。
    McDonnell的做法是將3個子任務都實現(xiàn)了,而且使用單一模型。亮點是,作者認為高頻和低頻有不同的特征,因此使用網(wǎng)絡學習一半兒高頻的知識,再學習另一半的低頻知識,拼接成128維的特征向量。

2019.11.22

讀完了McDonnell的技術報告,并且他提供了源碼,開始復現(xiàn)。

2019.11.23

在McDonnell的代碼中發(fā)現(xiàn),他將三個子任務進行了整合,代碼可以將三個子任務同時實現(xiàn)。
① csv文件讀取時直接用sep='\t'將制表符拆分,encoding='ASCII'以該格式讀取,讀取時直接用表頭['filename'].tolist()獲取到列表,這一段之前我在實現(xiàn)時用了很長一段代碼才實現(xiàn),作者只用了一行,非常值得學習。
② 用的librosa庫進行特征提取,但是沒有將提取好的特征進行保存,這一段可以修改一下。
③ 作者用到了Warm Restart,這一段要查一查
④ 需要再鞏固一下特征提取的幾個參數(shù)。

2019.11.24

敲完了作者的代碼,但是其中有許多東西需要細致地理解。

2019.11.25

1.作者代碼中有大量的特征維度操作處理,有必要再去溫習下特征提取的維度意義。

  1. 改寫特征提取那一部分。因為如果每次運行都提取,則會占用大量CPU資源。
  2. 調(diào)整好了程序,已經(jīng)成功運行。
  3. 再來梳理一下作者提取特征的一些參數(shù)。
LM_train[i,:,:,channel]= librosa.feature.melspectrogram(stereo[:,channel], 
                                       sr=sr,
                                       n_fft=NumFFTPoints,
                                       hop_length=HopLength,
                                       n_mels=NumFreqBins,
                                       fmin=0.0,
                                       fmax=sr/2,
                                       htk=True,
                                       norm=None)
  • stereo:輸入的數(shù)據(jù)
  • sr:采樣率。在這里是44100
  • n_fft:窗口大小。在這里是2048
  • hop_length:幀移。在這里是窗口的一半,即1024
  • n_mels:產(chǎn)生的梅爾帶數(shù)。這里是128
  • fmin:最低頻率。這里是0
  • fmax:最高頻率,默認是采樣率的一半。
  • htk:使用HTK公式代替Slaney
  • norm:如果為1,則將三角mel權重除以mel帶的寬度(區(qū)域歸一化)。 否則,保留所有三角形的峰值為1.0
  1. 很多DCASE參賽者都使用了Mixup方法,因此有必要閱讀這篇論文《Mixup: Beyond empirical risk minimization》

2019.11.26

  1. 機器學習-->期望風險、經(jīng)驗風險與結(jié)構(gòu)風險之間的關系
    出處:機器學習-->期望風險、經(jīng)驗風險與結(jié)構(gòu)風險之間的關系
    ① 經(jīng)驗風險:R_{expe}(f)=\frac{1}{N}\sum_{i=1}^{N}L(y_i, f(x_i))
    所謂的經(jīng)驗風險最小化便是讓這個式子最小化,注意這個式子中累加和的上標N表示的是訓練樣例集中樣本的數(shù)目。 經(jīng)驗風險是對訓練集中的所有樣本點損失函數(shù)的平均最小化,經(jīng)驗風險越小說明模型f(X)對訓練集的擬合程度越好.
    ② 期望風險:我們知道未知的樣本數(shù)據(jù)(<X,Y>)的數(shù)量是不容易確定的,所以就沒有辦法用所有樣本損失函數(shù)的平均值的最小化這個方法。假設X和Y服從聯(lián)合分布P(X,Y).那么期望風險就可以表示為:R_{exp}(f)=E_{P}[L(Y, f(X))]=\int_{x*y}L(y, f(x))P(x, y)dxdy
  • 經(jīng)驗風險是局部的,基于訓練集所有樣本點損失函數(shù)最小化的。
  • 期望風險是全局的,是基于所有樣本點的損失函數(shù)最小化的。
  • 經(jīng)驗風險函數(shù)是現(xiàn)實的,可求的;
  • 期望風險函數(shù)是理想化的,不可求的;
    ③ 結(jié)構(gòu)風險:結(jié)構(gòu)風險是對經(jīng)驗風險和期望風險的折中,在經(jīng)驗風險函數(shù)后面加一個正則化項(懲罰項)便是結(jié)構(gòu)風險。
    R_{erm}(f)=\frac{1}{N}\sum_{i=1}^{N}L(y_i,f(x_i))+\lambda J(f)
    相比于經(jīng)驗風險,結(jié)構(gòu)風險多了一個懲罰項\lambda是一個大于0的系數(shù)。J(f)表示的是是模型f的復雜度。
    經(jīng)驗風險越小,模型決策函數(shù)越復雜,其包含的參數(shù)越多,當經(jīng)驗風險函數(shù)小到一定程度就出現(xiàn)了過擬合現(xiàn)象。也可以理解為模型決策函數(shù)的復雜程度是過擬合的必要條件,那么我們要想防止過擬合現(xiàn)象的方式,就要破壞這個必要條件,即降低決策函數(shù)的復雜度。也即,讓懲罰項J(f)最小化,現(xiàn)在出現(xiàn)兩個需要最小化的函數(shù)了。我們需要同時保證經(jīng)驗風險函數(shù)和模型決策函數(shù)的復雜度都達到最小化,一個簡單的辦法把兩個式子融合成一個式子得到結(jié)構(gòu)風險函數(shù)然后對這個結(jié)構(gòu)風險函數(shù)進行最小化。
  1. Mixup
    出處:【論文閱讀】mixup: BEYOND EMPIRICAL RISK MINIMIZATION
    經(jīng)驗風險最小化(ERM)存在這樣的一個問題:只要模型能夠記住每個樣本,就可以最小化經(jīng)驗風險。因此一旦出現(xiàn)和模型分布輕微不同的數(shù)據(jù),表現(xiàn)就會很差。其實就是過擬合了。.
    這篇文章的主要貢獻在于提出了一種通用的臨近分布,mixup:
    \mu(\tilde{x}, \tilde{y})=\frac{1}{n}\sum_{j}^{n}\underset{\lambda}{E}[\delta(\tilde{x}=\lambda\cdot x_i+(1-\lambda)\cdot x_j, \tilde{y}=\lambda \cdot y_i + (1-\lambda)\cdot y_j)]
    其中,\lambda\sim Beta(\alpha, \alpha),對于任意的\alpha\epsilon (0, \infty)。簡而言之,從mixup分布采樣出數(shù)據(jù)集:
    \tilde{x} = \lambda x_i + (1- \lambda)x_j
    \tilde{y} = \lambda y_i + (1- \lambda)y_j
    這里(xi,yi)和(xj,yj)是從數(shù)據(jù)集中隨機采樣得到的任意兩個樣本。α是一個超參數(shù),用于控制混合的程度。當α越接近于0時,分布越傾向于集中在(0,1)的兩端,越大時分布越均勻。極限情況α=0時等價于沒有采用本方法。
  2. 閱讀Paul Primus, David Eitelsebner的技術報告
    ① 特征提?。?br> 降采樣到22050Hz,窗長2048采樣點,幀移512采樣點。取40-22050HZ的信息,頻率維度256,共431幀。
    ② 領域自適應:
    A樣本的分布稱為源域(x^s \sim X^s),將B和C樣本的分布稱為目標域(x^t \sim X^t)
    ③ LOSS:
    使用MI Loss,即分類的Categorical Cross Entropy (CCE)loss和領域自適應的loss進行結(jié)合:
    L = L_{CCE}+\lambda L_{l,DA}
    ④ Model:
    Kaggle上排名靠前的先進CNN架構(gòu)。
    參考《The Receptive Field as a Regularizer in Deep Convolutional Neural Networks for Acoustic Scene Classification》
    ⑤ Training:
    epoch:250
    mini_batch:32
    優(yōu)化算法:Adam
    學習率:初始為10^{-3},如果B、C設備15個epoch也不增長,則學習率以0.5的系數(shù)減少。
    如果學習率降低,將設備B和C的平均準確度重置為最佳模型,直到最后一個epoch。 進一步使用MixUp增強,將beta分布的參數(shù)設置為α=β= 0.2。
  1. McDonnell的結(jié)果:




  2. 閱讀《The Receptive Field as a Regularizer in Deep Convolutional Neural Networks for Acoustic Scene Classification》
    改論文講述了對CNN中感受野的調(diào)整對ASC任務的結(jié)果影響。將3 * 3調(diào)整到1 * 1。

2019.11.27

  1. McDonnell的結(jié)果出來了,驗證集最高能到69.88%


  2. 上面的效果其實并不是很理想,原以為可以做到70%以上。接下來想驗證一下mixup的作用。
  3. 使用McDonnell提取的特征放入ResNet50中,發(fā)現(xiàn)十分類正確率只有20%左右,做進一步分析。
  4. 發(fā)現(xiàn),我用之前的特征,驗證集的準確率還是有保證的。



    自己提取的特征與McDonnell的不同點:
    ① 我用的python_speech_features庫;M使用的是librosa庫
    ② 我用20ms作為窗長(882個點),10ms作為幀移;M用2048個點作為窗長,1024個點作為幀移。

2019.11.28

  1. 對比了一下是否添加mixup的結(jié)果:


    不添加Mixup

    添加Mixup
  2. 在使用自己的特征跑McDonnell的程序時,發(fā)現(xiàn)模型模塊寫錯了,修改。
    McDonnell的特征在62epoch達到了73.28%的正確率。


    McDonnell

    自己的特征在62epoch只達到了62%的正確率。


    自己的
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容