# [和弦辨識 AICUP-2020](https://aidea-web.tw/topic/43d9cc47-b70e-4751-80d3-a2d7333eb77b) ## 問題 從頭訓練深度學習模型,進行和弦辨識 - 比較 RNN, GRU 和 LSTM - 選用不同的超參數, 如模型的 hidden_size, num_layers, bidirectional <!-- - ~~預測時考慮 Chord Progressions~~ --> ## 評估標準 <!-- Chord Symbol Recall --> $CSR = \frac{total\ duration\ of\ segments\ where\ annotation\ equals\ estimation}{total\ duration\ of\ annotated\ segments}$ $WCSR = \frac{\sum_{i}(length\ of\ i^{th}\ song×CSR_i)}{\sum length\ of\ each\ song}$ **計算分數用 script 待補** ## [資料集 CE500](https://drive.google.com/drive/folders/1PW5h97_8ETvtMfD8JL4oFWw7zJwogwq9) 500 首歌曲的 youtube 連結(有些已失效),以及和弦標籤 和弦標注格式: [start_time, end_time, label] 範例: ["0.000000", "10.959615", "N"], ["10.959615", "12.021958", "D:maj"], ["12.021958", "13.709604", "B:min"] (Hint: [Youtube 音樂下載教學](https://hackmd.io/@brad84622/Hk_71R7-v)) ## 和弦辨識 pipeline ![](https://i.imgur.com/n8F29dd.png) 1. 特徵擷取: 模型輸入為 waveform 或頻率類特徵?(可參考 [librosa.feature](https://librosa.org/doc/main/feature.html#spectral-features)) 2. 前處理: 模型會無法處理過長序列,要如何分割輸入為模型訓練資料?原始標籤為區間,如何與的預測對齊? 3. 模型: 模型輸出不只有一種格式,如何編碼和弦標記? (是否對和弦標記進行拆解) 4. 後處理: 對模型輸出解碼,直接取機率最大者,或是對和弦序列機率建模(HMM, CRF...)? 直接預測和弦種類的模型 ![](https://i.imgur.com/6DA21bn.png =500x500) 分開預測和弦的 root 跟 quality 再組合的模型 ![](https://i.imgur.com/kmtfpUg.png =500x) ## 報告 ### 要點: 1. 紀錄訓練配置與結果 3. 畫出 loss, WCSR 曲線 2. 比較不同的特徵擷取方式 5. 判斷訓練的狀況 ### 可紀錄的內容 - 特徵擷取方法 - 模型架構 - 訓練參數(learning rate, weight decay...) - optimizer - learning rate scheduer - eraly stopping - train loss, validation loss - train WCSR, validation WCSR - 訓練時長 - 任何其他實驗配置或結果 (Hint: 可以寫程式,自動儲存每一次的實驗配置與結果,或使用 tensorboard, wandb 等現成套件紀錄) ## 延伸討論 1. 除了 RNN 類模型可使用,還有哪些模型? 2. 還有哪些方法可以編碼和弦標記? 3. 後處理直接取最大機率的預測通常表現最不好,還有哪些後處理方式? ## 培養能力 1. 運用深度學習知識,從頭實現出和弦辨識 2. 養成紀錄實驗的習慣,分析模型效能的能力