- Task 1: tempo estimation
- Task 2: using dynamic programming for beat tracking
- Task 3: meter recognition
-
說明: 在Ballroom這套dataset中,由於整體的資料集都偏向於「舞曲」的形式,故大體上來說在tempo上的預測是不錯的。 就細項看來,如“ChaChaCha”, “Tango”都看來是較佳的結果,但我們也不能因此說它就是最適合被預測的節奏,因為不同參數表現下將可能有不同表現,我們只能說在這樣的參數設定下是適合這樣類型的資料集。 另外,P score低於ALOTC score的結果也是可以被預期的,因為ALOTC是採兩個predict的tempo值之一的落在接受範圍內即對的方式運算。
-
結果:
P score: [0.5081151031247536, 0.5692655367570308, 0.048749463368417935, 0.990990990990991, 0.10769895031859616, 0.7891538637927082, 1.0, 0.0]
ALOTC score: [0.7209302325581395, 0.65, 0.07272727272727272, 0.990990990990991, 0.13846153846153847, 0.8163265306122449, 1.0, 0.0]
***** Q1 *****
Genre P-score ALOTC score
Samba 0.51 0.72
Jive 0.57 0.65
Waltz 0.05 0.07
ChaChaCha 0.99 0.99
VienneseWaltz 0.11 0.14
Rumba 0.79 0.82
Tango 1.00 1.00
Quickstep 0.00 0.00
----------
Overall P-score: 0.50
Overall ALOTC score: 0.55
- 備註: 上欄[]陣列內數值串為程式運算結果,而下方整理於程式碼欄的資訊為四捨五入取小數後第2位的結果。
-
說明: 由於tempo很容易受到harmonic的影響,故嘗試了不同的計算方式避免偏見,也可以藉此找出ballroom中各種曲風(genre)類型的dataset是否具特定的特徵。 從以下4.大點的運算結果觀察,在原先運算不凸顯的score有機會在調整不同的參數下,脫穎而出。例如Quickstep在乘以兩倍(*2) temp後就從原先 (p score, ALOTC score)為 (0,0)拉升到 (0.92,0.92)的表現。
-
結果
P score: [0.030264415418923222, 0.0, 0.13410974723114782, 0.0, 0.0, 0.10880531988076131, 0.0, 0.0]
ALOTC score: [0.03488372093023256, 0.0, 0.15454545454545454, 0.0, 0.0, 0.12244897959183673, 0.0, 0.0]
***** Q2 *****
Genre P-score ALOTC score
Samba 0.03 0.03
Jive 0.00 0.00
Waltz 0.13 0.15
ChaChaCha 0.00 0.00
VienneseWaltz 0.00 0.00
Rumba 0.11 0.12
Tango 0.00 0.00
Quickstep 0.00 0.00
----------
Overall P-score: 0.03
Overall ALOTC score: 0.04
P score: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
ALOTC score: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
***** Q2 *****
Genre P-score ALOTC score
Samba 0.00 0.00
Jive 0.00 0.00
Waltz 0.00 0.00
ChaChaCha 0.00 0.00
VienneseWaltz 0.00 0.00
Rumba 0.00 0.00
Tango 0.00 0.00
Quickstep 0.00 0.00
----------
Overall P-score: 0.00
Overall ALOTC score: 0.00
P score: [0.0, 0.22178807773151735, 0.0, 0.0, 0.10792610838338562, 0.0, 0.0, 0.9202014846235419]
ALOTC score: [0.0, 0.43333333333333335, 0.0, 0.0, 0.13846153846153847, 0.0, 0.0, 0.926829268292683]
***** Q2 *****
Genre P-score ALOTC score
Samba 0.00 0.00
Jive 0.22 0.43
Waltz 0.00 0.00
ChaChaCha 0.00 0.00
VienneseWaltz 0.11 0.14
Rumba 0.00 0.00
Tango 0.00 0.00
Quickstep 0.92 0.93
----------
Overall P-score: 0.16
Overall ALOTC score: 0.19
P score: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
ALOTC score: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
***** Q2 *****
Genre P-score ALOTC score
Samba 0.00 0.00
Jive 0.00 0.00
Waltz 0.00 0.00
ChaChaCha 0.00 0.00
VienneseWaltz 0.00 0.00
Rumba 0.00 0.00
Tango 0.00 0.00
Quickstep 0.00 0.00
----------
Overall P-score: 0.00
Overall ALOTC score: 0.00
-
說明: 這邊使用MADMOM這個library作tempo預測,其中的madmom.features.tempo.TempoEstimationProcessor可以利於抓出一連串由高至低可能的tempo, 再同樣透過只抓取前兩名的tempo預測結果,作兩種score的運算。 而madmom藉由RNN的神經網路運算強化,使它目前在結果上,比起librosa的運算結果還要來的更佳。
-
結果:
MADMOM:
P score: [0.5085387287848985, 0.5261774321616962, 0.696423676965648, 0.6466456383185242, 0.6667957158699837, 0.6728964566450605, 0.5575845360942514, 0.5209321297486066]
ALOTC score: [0.9489795918367347, 0.9636363636363636, 1.0, 0.990990990990991, 1.0, 1.0, 0.9651162790697675, 0.7804878048780488]
***** Q3 *****
Genre P-score ALOTC score
Rumba 0.51 0.95
Waltz 0.53 0.96
VienneseWaltz 0.70 1.00
ChaChaCha 0.65 0.99
Jive 0.67 1.00
Tango 0.67 1.00
Samba 0.56 0.97
Quickstep 0.52 0.78
----------
Overall P-score: 0.60
Overall ALOTC score: 0.96
-
說明: mireval.beat 在協助F score的運算上有莫大幫忙,也能支持與ground truth資料的0.07秒緩衝容錯,真的必須大力推崇。
-
結果:
Ballroom dataset:
F score: [0.5446045250558064, 0.6150824788481358, 0.5450631515132844, 0.820329195256893, 0.7115361639888207, 0.7305974462707833, 0.7447967742403079, 0.547331101393421]
***** Q4 *****
Genre F-score
Samba 0.54
Jive 0.62
Waltz 0.55
ChaChaCha 0.82
VienneseWaltz 0.71
Rumba 0.73
Tango 0.74
Quickstep 0.55
----------
Overall F-score: 0.66
-
說明: Ballroom 與以下兩個datasets相較來說結果較佳,最大原因應該還是在於它的資料集本身是以「舞曲」為主。 SMC 應該是相較難的資料集,因為它當中的音樂多半是古典音樂、抒情歌..等,旋律線條大過於節奏性的音樂,所以很容易被旋律線拉著跑。 JCS 其實也有節奏性強烈的歌曲,但由於融合了一些變換節奏,我猜測這可能是使他相較Ballroom略為偏低的理由。
-
結果:
SMC and JCS dataset:
***** Q5 *****
Database F-score
SMC 0.36
JCS 0.63
-
說明: Madmom作為目前最佳結果表現之一的library,約莫可相較前面Q4, Q5 提升0.15~0.20的F score表現。
-
結果:
- for the SMC and the JCS dataset
***** Q6 *****
Database F-score
SMC 0.52
JCS 0.82
- for the Ballroom dataset
F score [0.8541896120988937, 0.8340432332403245, 0.8163842729678702, 0.8743322780139349, 0.8528222277676363, 0.8270410218567891, 0.866726889695503, 0.6784941085309891]
***** Q6-Ballroom *****
Genre F-score
Samba 0.85
Jive 0.83
Waltz 0.82
ChaChaCha 0.87
VienneseWaltz 0.85
Rumba 0.83
Tango 0.87
Quickstep 0.68
----------
Overall F-score: 0.83
- for the Ballroom and the JCS dataset
***** Q6 *****
Database F-score
JCS 0.72
Ballroom 0.74
針對音樂上這樣複節拍(polymeter),又或是會被俗稱「變態拍」這部分,設計演算法上最重要應該在於掌握它的動態變化。
而首先前處理上,可以參考mireval官方library中的文件有提到,利用“mireval.beat.trimbeats”作為data preprocessing去除音樂前五秒的片段以利提升資料的正確性。
此外,適當的去除開頭的「弱起拍」節奏,以及消除尾巴不完整的小節拍數,將可有效從正確位置上開始被偵測到正確結束。
再者,必須分析tempogram中onset的downbeat時間點,例如[0, 3, 7 ,10]並假設抓到的結尾時間點為[15],如此一來我們將可以將list中相鄰位置相減,得到[3, 4, 3, 5]這樣的動態beats_per_bar的變化關係。
最後配合madmom中的madmom.features.DBNDownBeatTrackingProcessor(beatsperbar=beatperbar, fps=100) 餵入預測。
Code here: https://github.com/matteosoo/MIR_HW2