圖片來源:LoveLive! School idol festival 角色卡
【研究筆記】chorus target detecion by CNN
簡介:
此篇文章記錄我研究神經網路 (Neural Network,以下簡稱 NN) 是否有能力檢測一段合唱中是否包含某特定歌手的研究。由於並不是一般常見的問題,相關的研究也不多。所以這篇文章會包含問題的定義、預期的解決方式、被參考的相似研究、以及最終結果與總結。
雜談:
因為這是我當初離開研究所前的最後一個研究,能不能發表、有沒有 benchmark、商業價值、學術價值、職涯發展等考量,都被我拋在腦後了。純粹由好奇心驅動,同時想知道自己一年半的研究經驗,能不能讓我對未知的現實問題做出研究成果。回過頭看之前的研究,這次的心態相對起來是健康很多,同時也算是回歸讀研究所的初心。
問題的定義:
chorus target detecion,顧名思義,chorus 代表主要輸入是一段合唱,也就是圖中最下面的那段音訊。
target detecion 指的是演算法只需要回答特定的歌手是否存在合唱中,不需要分解出整個合唱的構成。
所以實際上運作起來會如上方示意圖:
- 上方輸入音訊為某段 Z 合唱。
- 下方輸入音訊為某一位 X 歌手的某一段 Y 獨唱。
演算法需要回答 Z 合唱中是否包含 X 歌手,所以演算法要有能力在 Y 獨唱中取得 X 歌手的特徵,並判斷其是否存在於 Z 合唱,而示意圖則表示,Z 合唱是由 X 歌手與另外兩位歌手的合唱,所以應該輸出 true。
如果想大致上了解問題難度,可以參考幾個常見但類似的研究:
- A deep learning method for Chinese singer identification 輸入一樣是音樂與歌聲。
- Classification vs. Regression in Supervised Learning for Single Channel Speaker Count Estimation 輸入一樣是多人發聲的音訊。
- Image Question Answering Using Convolutional Neural Network with Dynamic Parameter Prediction 問題本身需根據額外的條件 (Y 獨唱、問題) 來影響對於主要輸入 (Z 合唱、圖片) 的偵測結果。
實際上做實驗時有不少架構跟方法也都有參考到以上的這幾篇論文。
預期的解決方式:
想法上合唱與獨唱是同時輸入的,同時會讓獨唱輸入有能力影響演算法對合唱的偵測。
Image Question Answering Using Convolutional Neural Network with Dynamic Parameter Prediction 這篇論文也有採用類似的想法,其問題是依據圖片回答文字問題,文字問題會改變圖片偵測時的 NN 參數,進而讓文字問題影響 NN 對圖片偵測的結果。
如果套用在我的問題上,會如上圖。獨唱會改變合唱偵測時的 NN 參數,進而讓獨唱影響 NN 對合唱偵測的結果。目的是希望可以分解出獨唱中的某些歌聲特徵,並使用這些特徵來判斷合唱中是否包含此獨唱的歌聲。
使用 CNN 的原因是我本人對於 RNN、LSTM 等音訊常用的 NN 都不熟,所以嘗試採用 CNN 來解決此問題,同時也發現已有相關研究使用 CNN 在解決音訊問題上,如 VoxCeleb2: Deep Speaker Recognition。
【實驗一】:
實驗一目的是設計出有能力在音樂中分析歌聲特徵的 CNN 架構,而方法則是設計一個歌手的分類器。因為分類的需求本身就隱含著擷取特徵並分辨的能力。
架構上是先將原始音訊取出二維的特徵後再輸入 CNN 來做檢測。
【實驗一】數據收集與處裡:
數據來源是 ラブライブ!Solo Live! collection Memorial BOX Ⅱ。
這是一個很特殊的 CD 集合,全部九張 CD 會分別由九位不同歌手獨唱十首一樣的歌曲。這有兩個好處
- 歌曲無法作為判斷歌手的依據。由於每一位歌手所唱的歌曲都是同樣的,這可以避免 CNN 藉由學習歌手擅長快歌或高音等歌聲外的資訊做判斷。
- 資料處理方便。處理上是將音樂有人聲的部分每三秒作為一筆資料,由於歌曲都是同樣的,總共只需要標記十首歌的人聲秒數區間,同時 CD 內的音樂為獨唱,不需要額外人工標記。
最終大概產出 7000 筆資料,6000 用來訓練,1000 用來測試。
為了輸入 CNN,將三秒的原始音訊取出二維的特徵,這部分我取的是 mfcc,由 pythton 撰寫 librosa 套件可以很簡單的達到效果,產出的資料大小為 20 x 259。
【實驗一】結果展示:
最一開始我猜測有沒有可能這個問題比我想像中的還要簡單,所以便隨意製作了一個簡易的 CNN 試試看。
九類的分類器有 50 % 左右的成功率,結果顯示 CNN 多少是有學到東西的,只是準確率不高。
同時我也有修改一下創造出其他版本,如減少層數,改參數等,但是結果都差不多。
是時候站在巨人的肩膀上了,我自己曾經在 圖像分類問題 上使用過強大的 resNet,而且最終結果顯示即便不使用完整的多層數 resNet,光是使用其 basic block 的架構就可以達到相當好的效果。
簡單解釋一下我實作的 basic block,左邊有實作時所採用的相關參數,右邊則是 NN 架構圖,跟論文中一樣經過兩次的 Conv2D 後,與最一開始的 input 相加。當第一個 Conv2D 會改變 input 大小時 (如 strideA > 1 時),最一開始的 input 相加前要先經過一個 Conv2D 將大小調整為一樣才能相加。
在多方的嘗試之後我如同之前在圖像分類研究中一樣,藉由組合 basic block 設計出一個縮小版的 resNet,只是這次縮小的幅度更高了,整體的參數量也只有 89,977。
最終的正確率在七八成左右。
demo 影片上方的大圖是 CNN 辨識的結果,而下方的小圖是正確答案,這首歌曲是由黃色頭髮的角色獨唱,所以正確答案只會是同一人。
影片可以看到正確也差不多是七成。
【實驗二】:
實驗二就是標題名稱的 chorus target detecion。由於實驗一已經得出包含 basic block 的 CNN 有足以分類歌手的能力,實驗二打算也藉由 basic block 設計出最初預想架構的雙輸入型 CNN。
Image Question Answering Using Convolutional Neural Network with Dynamic Parameter Prediction。
Dynamic conditional networks for few-shot learning。
雙輸入型 CNN 設計中我參考了這兩篇論文,他們都是雙輸入且其中一個輸入有能力影響 NN 對另一個輸入的運算。
【實驗二】數據收集與處裡:
數據一樣是使用 Lovelive 相關的 CD,Lovelive 中有將九位成員分為三組小組,使用這些小組的 CD 來做為合唱輸入,一樣擷取三秒為一筆資料,再隨機搭配實驗一的單人資料集作為獨唱輸入來做訓練。也一樣產生約 7000 個搭配,同時搭配中的解答在 "獨唱歌手存在合唱中" 與 "獨唱歌手不存在合唱中" 的數量是相同的。
【實驗二】結果展示:
最終的 NN 架構如圖所示由三個部分構成。
Zinput 為合唱輸入。
Yinput 為歌手的獨唱輸入,架構除了最後一層的 activation 改用 sigmoid 外都和 Zinput 一樣。
最後將兩者相乘,這個動作的靈感源自於 dynamic conditional networks 那篇論文,但是我產生的 sigmoid weight 是三維的,所以 Yinput 有標註其輸出必須為 (10, 130, 32)。其中有嘗試過 weight 是一維或二維,但是訓練不起來,同時 Yinput 輸出如果不是 sigmoid 的話也會訓練不起來。
二分法的問題,雖然成功率有超過 50% 就算是有學習到東西,但是 57% 也不是一個很好的成果。
最終採用 test time augmentation 的做法,偵測五次取平均再做判斷。
demo 影片上方的大圖是 CNN 辨識的結果,而下方的小圖是正確答案,這首歌曲是由藍色、紅色、黃色頭髮的角色合唱,所以正確答案只會是這三個人。
可以看一下前面有附上的三組小組圖,這三個角色的組合並不在其中,刻意選這首歌想看看 NN 是不是真的學到我想要的東西,而不是去依賴到三組小組這個隱性的資訊。
這次的 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
留言列表