close

title.png

圖片來源:LoveLive! School idol festival 角色卡

【研究筆記】chorus target detecion by CNN

簡介:

  此篇文章記錄我研究神經網路 (Neural Network,以下簡稱 NN) 是否有能力檢測一段合唱中是否包含某特定歌手的研究。由於並不是一般常見的問題,相關的研究也不多。所以這篇文章會包含問題的定義、預期的解決方式、被參考的相似研究、以及最終結果與總結。

 

雜談:

  因為這是我當初離開研究所前的最後一個研究,能不能發表、有沒有 benchmark、商業價值、學術價值、職涯發展等考量,都被我拋在腦後了。純粹由好奇心驅動,同時想知道自己一年半的研究經驗,能不能讓我對未知的現實問題做出研究成果。回過頭看之前的研究,這次的心態相對起來是健康很多,同時也算是回歸讀研究所的初心。

 

問題的定義:

chorus.png

  chorus target detecion,顧名思義,chorus 代表主要輸入是一段合唱,也就是圖中最下面的那段音訊。

target_detection.png

  target detecion 指的是演算法只需要回答特定的歌手是否存在合唱中,不需要分解出整個合唱的構成。

problem.png

  所以實際上運作起來會如上方示意圖:

  • 上方輸入音訊為某段 Z 合唱。
  • 下方輸入音訊為某一位 X 歌手的某一段 Y 獨唱。

  演算法需要回答 Z 合唱中是否包含 X 歌手,所以演算法要有能力在 Y 獨唱中取得 X 歌手的特徵,並判斷其是否存在於 Z 合唱,而示意圖則表示,Z 合唱是由 X 歌手與另外兩位歌手的合唱,所以應該輸出 true。

  如果想大致上了解問題難度,可以參考幾個常見但類似的研究:

  實際上做實驗時有不少架構跟方法也都有參考到以上的這幾篇論文。

 

預期的解決方式:

idea.png

  想法上合唱與獨唱是同時輸入的,同時會讓獨唱輸入有能力影響演算法對合唱的偵測。

image_question_arch.png

  Image Question Answering Using Convolutional Neural Network with Dynamic Parameter Prediction 這篇論文也有採用類似的想法,其問題是依據圖片回答文字問題,文字問題會改變圖片偵測時的 NN 參數,進而讓文字問題影響 NN 對圖片偵測的結果。

expect_arch.png

  如果套用在我的問題上,會如上圖。獨唱會改變合唱偵測時的 NN 參數,進而讓獨唱影響 NN 對合唱偵測的結果。目的是希望可以分解出獨唱中的某些歌聲特徵,並使用這些特徵來判斷合唱中是否包含此獨唱的歌聲。

  使用 CNN 的原因是我本人對於 RNN、LSTM 等音訊常用的 NN 都不熟,所以嘗試採用 CNN 來解決此問題,同時也發現已有相關研究使用 CNN 在解決音訊問題上,如 VoxCeleb2: Deep Speaker Recognition

 

【實驗一】:

  實驗一目的是設計出有能力在音樂中分析歌聲特徵的 CNN 架構,而方法則是設計一個歌手的分類器。因為分類的需求本身就隱含著擷取特徵並分辨的能力。

exp1_arch1.png

  架構上是先將原始音訊取出二維的特徵後再輸入 CNN 來做檢測。

 

【實驗一】數據收集與處裡:

  數據來源是 ラブライブ!Solo Live! collection Memorial BOX Ⅱ。

LLsoloCD.png

  這是一個很特殊的 CD 集合,全部九張 CD 會分別由九位不同歌手獨唱十首一樣的歌曲。這有兩個好處

  • 歌曲無法作為判斷歌手的依據。由於每一位歌手所唱的歌曲都是同樣的,這可以避免 CNN 藉由學習歌手擅長快歌或高音等歌聲外的資訊做判斷。
  • 資料處理方便。處理上是將音樂有人聲的部分每三秒作為一筆資料,由於歌曲都是同樣的,總共只需要標記十首歌的人聲秒數區間,同時 CD 內的音樂為獨唱,不需要額外人工標記。

exp1_dataset.png

  最終大概產出 7000 筆資料,6000 用來訓練,1000 用來測試。

exp1_arch2.png

  為了輸入 CNN,將三秒的原始音訊取出二維的特徵,這部分我取的是 mfcc,由 pythton 撰寫 librosa 套件可以很簡單的達到效果,產出的資料大小為 20 x 259。

 

【實驗一】結果展示:

cosCNN_arch.png

  最一開始我猜測有沒有可能這個問題比我想像中的還要簡單,所以便隨意製作了一個簡易的 CNN 試試看。

cosCNN1_acc.png

  九類的分類器有 50 % 左右的成功率,結果顯示 CNN 多少是有學到東西的,只是準確率不高。

cosCNN23_acc.png

  同時我也有修改一下創造出其他版本,如減少層數,改參數等,但是結果都差不多。

resnet.png

  是時候站在巨人的肩膀上了,我自己曾經在 圖像分類問題 上使用過強大的 resNet,而且最終結果顯示即便不使用完整的多層數 resNet,光是使用其 basic block 的架構就可以達到相當好的效果。

basicblock_arch.png

  簡單解釋一下我實作的 basic block,左邊有實作時所採用的相關參數,右邊則是 NN 架構圖,跟論文中一樣經過兩次的 Conv2D 後,與最一開始的 input 相加。當第一個 Conv2D 會改變 input 大小時 (如 strideA > 1 時),最一開始的 input 相加前要先經過一個 Conv2D 將大小調整為一樣才能相加。

mResnet_n1_arch.png

  在多方的嘗試之後我如同之前在圖像分類研究中一樣,藉由組合 basic block 設計出一個縮小版的 resNet,只是這次縮小的幅度更高了,整體的參數量也只有 89,977。

mResnet_n1_acc.png

  最終的正確率在七八成左右。

exp1_demo.png

  demo 影片上方的大圖是 CNN 辨識的結果,而下方的小圖是正確答案,這首歌曲是由黃色頭髮的角色獨唱,所以正確答案只會是同一人。

  影片可以看到正確也差不多是七成。

 

【實驗二】:

idea.png

  實驗二就是標題名稱的 chorus target detecion。由於實驗一已經得出包含 basic block 的 CNN 有足以分類歌手的能力,實驗二打算也藉由 basic block 設計出最初預想架構的雙輸入型 CNN。

expect_arch.png

  Image Question Answering Using Convolutional Neural Network with Dynamic Parameter Prediction。

dynamic_conditional_networks.png

  Dynamic conditional networks for few-shot learning。

  雙輸入型 CNN 設計中我參考了這兩篇論文,他們都是雙輸入且其中一個輸入有能力影響 NN 對另一個輸入的運算。

 

【實驗二】數據收集與處裡:

LLteamCD.png

  數據一樣是使用 Lovelive 相關的 CD,Lovelive 中有將九位成員分為三組小組,使用這些小組的 CD 來做為合唱輸入,一樣擷取三秒為一筆資料,再隨機搭配實驗一的單人資料集作為獨唱輸入來做訓練。也一樣產生約 7000 個搭配,同時搭配中的解答在 "獨唱歌手存在合唱中" 與 "獨唱歌手不存在合唱中" 的數量是相同的。

 

【實驗二】結果展示:

final_arch.png

  最終的 NN 架構如圖所示由三個部分構成。

Zinput.png

  Zinput 為合唱輸入。

Yinput.png

  Yinput 為歌手的獨唱輸入,架構除了最後一層的 activation 改用 sigmoid 外都和 Zinput 一樣。

dynamic_conditional.png

  最後將兩者相乘,這個動作的靈感源自於 dynamic conditional networks 那篇論文,但是我產生的 sigmoid weight 是三維的,所以 Yinput 有標註其輸出必須為 (10, 130, 32)。其中有嘗試過 weight 是一維或二維,但是訓練不起來,同時 Yinput 輸出如果不是 sigmoid 的話也會訓練不起來。

dynamic_conditional_acc.png

  二分法的問題,雖然成功率有超過 50% 就算是有學習到東西,但是 57% 也不是一個很好的成果。

augmentation.png

  最終採用 test time augmentation 的做法,偵測五次取平均再做判斷。

exp2_demo.png

  demo 影片上方的大圖是 CNN 辨識的結果,而下方的小圖是正確答案,這首歌曲是由藍色、紅色、黃色頭髮的角色合唱,所以正確答案只會是這三個人。

  可以看一下前面有附上的三組小組圖,這三個角色的組合並不在其中,刻意選這首歌想看看 NN 是不是真的學到我想要的東西,而不是去依賴到三組小組這個隱性的資訊。

 

exp2_demo_acc.png

 

  這次的 demo 影片是多人,比較難看出正確率,所以還有附上一張我自己統計的各角色正確率,跟實驗一一樣落在七八成。

 

結論:

  總結一下整個實驗中獲得的成果以及待改善的缺點。

  成果

  • 成功證實 NN 是有能力解決 chorus target detecion 這個問題的,不過正確率還有很多優化空間在。
  • 實作中的兩大 NN 關鍵架構 dynamic conditional、basic block 都是實作簡單又實質上有用的強大設計。

  缺點

  • 事實上我認為 NN 還是太黑箱了,我使用的許多參數都是使用論文上常見的或單純多試幾次,並沒有任何依據顯示那些參數是最佳組合。
  • 實驗二的 test time augmentation 僅限於非及時運算可以使用。

  整體上我認為 NN 會火真的是有它的道理在。即便有許多難以解釋的黑箱在,各種好架構依舊不斷在真實世界問題上獲得好成果、受到業界學界的關注、更多人投入此領域、更多好架構被提出,成為一個正向循環。在這個研究結束前我也不清楚我的問題能不能被解決,但最終的解果令人滿意,鼓勵大家也都可以去嘗試自己好奇的問題做研究。

  最後提出幾點此研究如果要繼續進行的話,還能夠做些甚麼嘗試。

  • 用更強的 CNN 架構,如 resNet 後繼者,或其他流派的強大架構。
  • 我使用的測試資料是少見的,很少會有針對多個歌手合唱又獨唱這麼多同首歌曲的情況,這使得研究的實用性更加降低。應該使用大量的歌手與其合唱數據集做 shot learning 之類的訓練才會更合理。
  • 音訊預處理使用 mfcc 以外的可能性。

 

參考資料:

[1] LoveLive! School idol festival

https://lovelive-sif.bushimo.jp/

[2] A deep learning method for Chinese singer identification

https://ieeexplore.ieee.org/document/8660403

[3] Classification vs. Regression in Supervised Learning for Single Channel Speaker Count Estimation

https://ieeexplore.ieee.org/document/8462159

[4] Image Question Answering Using Convolutional Neural Network with Dynamic Parameter Prediction

https://ieeexplore.ieee.org/document/7780380

[5] VoxCeleb2: Deep Speaker Recognition

https://arxiv.org/abs/1806.05622

[6] ラブライブ!Official Web Site | CDリリース情報

https://www.lovelive-anime.jp/otonokizaka/release.html

[7] librosa

https://librosa.org/doc/latest/index.html

[8] Deep Residual Learning for Image Recognition (ResNet50 原論文)

https://arxiv.org/abs/1512.03385

[9] dynamic_conditional_networks

https://github.com/ZhaoJ9014/Dynamic-Conditional-Networks.PyTorch

 

arrow
arrow

    迷宮兔 發表在 痞客邦 留言(0) 人氣()