# [和弦辨識 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

1. 特徵擷取: 模型輸入為 waveform 或頻率類特徵?(可參考 [librosa.feature](https://librosa.org/doc/main/feature.html#spectral-features))
2. 前處理: 模型會無法處理過長序列,要如何分割輸入為模型訓練資料?原始標籤為區間,如何與的預測對齊?
3. 模型: 模型輸出不只有一種格式,如何編碼和弦標記? (是否對和弦標記進行拆解)
4. 後處理: 對模型輸出解碼,直接取機率最大者,或是對和弦序列機率建模(HMM, CRF...)?
直接預測和弦種類的模型

分開預測和弦的 root 跟 quality 再組合的模型

## 報告
### 要點:
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. 養成紀錄實驗的習慣,分析模型效能的能力