總結(jié):
- 數(shù)據(jù)集:聲學場景分類任務,使用DCASE2019_task_1b的數(shù)據(jù)集,共10000個訓練集和5000個驗證集,做好了數(shù)據(jù)的處理工作。
- 特征提?。禾卣魈崛〔捎胮ython_speech_features庫提取log-mel特征,幀長20ms,幀移10ms,頻率維度80,對標簽進行one-hot處理。
- 使用keras自帶的ResNet50在不區(qū)分設備的情況下跑出61.63%的結(jié)果,但是訓練過程中驗證集正確率波動十分明顯,因此個人認為意義不大。
- 閱讀并復現(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時性能還會有提升。
- 發(fā)現(xiàn)的問題:由于我和McDonnell提取的特征稍有不同,但是性能差別明顯。
- 我的特征+ResNet50:性能可達到60%
- McDonnell特征+ResNet50:15%左右
- 我的特征+作者的模型:62%
- McDonnell特征+作者的模型:73%。
該問題需要在下面的工作中進行分析。
下一步計劃:
- Mixup是一個很好的數(shù)據(jù)增強方法,因為訓練集和測試集語料僅有15000條,每條10秒,數(shù)據(jù)量并不大。我想在這一步中引入GAN來提取音頻的純凈特征,可以在這一點上進行嘗試。
- keras自帶的ResNet50只是一個暫時的baseline,需要引用再調(diào)整出一個性能較好的模型
- 音頻特征提取需要進行進一步的研究。個人認為音頻特征的提取對分類結(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
-
昨日數(shù)據(jù)跑了100個epoch,最好效果達到66.70%
- 閱讀論文《BOOSTING NOISE ROBUSTNESS OF ACOUSTIC MODEL VIA DEEP ADVERSARIAL TRAINING》
論文想要使用GAN提取純凈語音的特征,而在我的任務中,a設備由于數(shù)據(jù)量大、錄音設備精度高,因此可以理解為純凈的語音,我們就可以用類似的方法提取b、c設備的純凈特征(相似于設備a)。文中提到了論文《Triple Generative Adversarial Nets》提出三重GAN,以引入用于分類和分類條件生成的三個組件。 - 改用DenseNet169跑100個epoch,最好到65.91%
- 閱讀《深度學習500問》第七章GAN
這個目標函數(shù)可以分為兩個部分來理解:
? 第一部分:判別器的優(yōu)化通過實現(xiàn),
為判別器的目標函數(shù),其第一項
表示對于從真實數(shù)據(jù)分布中采用的樣本 ,其被判別器判定為真實樣本概率的數(shù)學期望。對于真實數(shù)據(jù)分布 中采樣的樣本,其預測為正樣本的概率當然是越接近1越好。因此希望最大化這一項。第二項
表示:對于從噪聲
分布當中采樣得到的樣本,經(jīng)過生成器生成之后得到的生成圖片,然后送入判別器,其預測概率的負對數(shù)的期望,這個值自然是越大越好,這個值越大, 越接近0,也就代表判別器越好。
? 第二部分:生成器的優(yōu)化通過來實現(xiàn)。注意,生成器的目標不是
,即生成器不是最小化判別器的目標函數(shù),二是最小化判別器目標函數(shù)的最大值,判別器目標函數(shù)的最大值代表的是真實數(shù)據(jù)分布與生成數(shù)據(jù)分布的JS散度(詳情可以參閱附錄的推導),JS散度可以度量分布的相似性,兩個分布越接近,JS散度越小。
2019.11.20
- 閱讀《Investigating Generative Adversarial Networks based Speech Dereverberation for Robust Speech Recognition》
發(fā)現(xiàn)自己閱讀論文能力不足,需要鍛煉,閱讀一遍之后,每句話能大概讀懂是什么意思,但是回想一下論文都講了哪些事情卻什么也想不起來。 -
不區(qū)分設備,將所有數(shù)據(jù)一齊進行訓練,網(wǎng)絡使用還是ResNet50,最高達到61.63%。
2019.11.21
閱讀《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ù)分布。突然有一個想法
我試聽了abc三種設備錄制出來的音頻,三種音頻最明顯的差別就是音量,a設備精度最高但音量最低,人耳很難辨別出場景,我認為是設備質(zhì)量過好,濾掉了很多場景中的雜音,但這些可能是被忽略掉的有用信息,遂決定單獨再跑一下b、c設備的數(shù)據(jù)。
- 用ResNet50跑b設備,正確率在40%左右。
- 用ResNet50跑c設備,正確率在43%左右。
問過師兄,師兄說不要太主觀地去聽,因為機器理解的和人理解的不同。
我應該再去看看DCASE上人們的做法。
- 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.作者代碼中有大量的特征維度操作處理,有必要再去溫習下特征提取的維度意義。
- 改寫特征提取那一部分。因為如果每次運行都提取,則會占用大量CPU資源。
- 調(diào)整好了程序,已經(jīng)成功運行。
- 再來梳理一下作者提取特征的一些參數(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
- 很多DCASE參賽者都使用了Mixup方法,因此有必要閱讀這篇論文《Mixup: Beyond empirical risk minimization》
2019.11.26
- 機器學習-->期望風險、經(jīng)驗風險與結(jié)構(gòu)風險之間的關系
出處:機器學習-->期望風險、經(jīng)驗風險與結(jié)構(gòu)風險之間的關系
① 經(jīng)驗風險:
所謂的經(jīng)驗風險最小化便是讓這個式子最小化,注意這個式子中累加和的上標N表示的是訓練樣例集中樣本的數(shù)目。 經(jīng)驗風險是對訓練集中的所有樣本點損失函數(shù)的平均最小化,經(jīng)驗風險越小說明模型f(X)對訓練集的擬合程度越好.
② 期望風險:我們知道未知的樣本數(shù)據(jù)(<X,Y>)的數(shù)量是不容易確定的,所以就沒有辦法用所有樣本損失函數(shù)的平均值的最小化這個方法。假設X和Y服從聯(lián)合分布P(X,Y).那么期望風險就可以表示為:
- 經(jīng)驗風險是局部的,基于訓練集所有樣本點損失函數(shù)最小化的。
- 期望風險是全局的,是基于所有樣本點的損失函數(shù)最小化的。
- 經(jīng)驗風險函數(shù)是現(xiàn)實的,可求的;
- 期望風險函數(shù)是理想化的,不可求的;
③ 結(jié)構(gòu)風險:結(jié)構(gòu)風險是對經(jīng)驗風險和期望風險的折中,在經(jīng)驗風險函數(shù)后面加一個正則化項(懲罰項)便是結(jié)構(gòu)風險。
相比于經(jīng)驗風險,結(jié)構(gòu)風險多了一個懲罰項是一個大于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ù)進行最小化。
- Mixup
出處:【論文閱讀】mixup: BEYOND EMPIRICAL RISK MINIMIZATION
經(jīng)驗風險最小化(ERM)存在這樣的一個問題:只要模型能夠記住每個樣本,就可以最小化經(jīng)驗風險。因此一旦出現(xiàn)和模型分布輕微不同的數(shù)據(jù),表現(xiàn)就會很差。其實就是過擬合了。.
這篇文章的主要貢獻在于提出了一種通用的臨近分布,mixup:
其中,,對于任意的
。簡而言之,從mixup分布采樣出數(shù)據(jù)集:
這里(xi,yi)和(xj,yj)是從數(shù)據(jù)集中隨機采樣得到的任意兩個樣本。α是一個超參數(shù),用于控制混合的程度。當α越接近于0時,分布越傾向于集中在(0,1)的兩端,越大時分布越均勻。極限情況α=0時等價于沒有采用本方法。 - 閱讀Paul Primus, David Eitelsebner的技術報告
① 特征提?。?br> 降采樣到22050Hz,窗長2048采樣點,幀移512采樣點。取40-22050HZ的信息,頻率維度256,共431幀。
② 領域自適應:
A樣本的分布稱為源域,將B和C樣本的分布稱為目標域
③ LOSS:
使用MI Loss,即分類的Categorical Cross Entropy (CCE)loss和領域自適應的loss進行結(jié)合:
④ 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
學習率:初始為,如果B、C設備15個epoch也不增長,則學習率以0.5的系數(shù)減少。
如果學習率降低,將設備B和C的平均準確度重置為最佳模型,直到最后一個epoch。 進一步使用MixUp增強,將beta分布的參數(shù)設置為α=β= 0.2。
-
McDonnell的結(jié)果:
閱讀《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
-
McDonnell的結(jié)果出來了,驗證集最高能到69.88%
- 上面的效果其實并不是很理想,原以為可以做到70%以上。接下來想驗證一下mixup的作用。
- 使用McDonnell提取的特征放入ResNet50中,發(fā)現(xiàn)十分類正確率只有20%左右,做進一步分析。
-
發(fā)現(xiàn),我用之前的特征,驗證集的準確率還是有保證的。
自己提取的特征與McDonnell的不同點:
① 我用的python_speech_features庫;M使用的是librosa庫
② 我用20ms作為窗長(882個點),10ms作為幀移;M用2048個點作為窗長,1024個點作為幀移。
2019.11.28
-
對比了一下是否添加mixup的結(jié)果:
不添加Mixup
添加Mixup -
在使用自己的特征跑McDonnell的程序時,發(fā)現(xiàn)模型模塊寫錯了,修改。
McDonnell的特征在62epoch達到了73.28%的正確率。
McDonnell
自己的特征在62epoch只達到了62%的正確率。
自己的










