Skip to content

KMASAHIRO/music2vec

Repository files navigation

music2vec

SoundNetをベースにしたmusic2vecを用いた音楽ジャンルの分類(参考:https://medium.com/@rajatheb/music2vec-generating-vector-embedding-for-genre-classification-task-411187a20820)

概要

Rajat Hebbarの記事のSoundNet + Stacked-LSTMモデルを参考にしたSoundNetをベースにしたmusic2vecを用いた音楽ジャンル分類モデルの実装。
GTZANのデータを用いた音楽ジャンル分類を学習させた後、テストデータでの推論結果を混同行列にまとめ、Accuracy・Precision・Recall・F1の値を求めた(Precision・Recall・F1はデータ数で重みを付けて平均をとった)。
また、学習前と学習後でモデル中のSoundNetの部分の出力を平坦化したものをPCAやt-SNEで可視化した。
music2vecディレクトリにはモデルの実装、学習を簡単にできるようにモジュールとしてまとめており、パッケージとして利用することが可能。
Google Colaboratory上にこれらを実行したものをまとめている(music2vec.ipynbと同じもの)。

実行したPythonのバージョンと使用したパッケージ

  • Python 3.7.10
  • Tensorflow 2.4.1
  • numpy 1.19.5
  • librosa 0.8.0

データの前処理

SoundNetの論文3ページ目の"2 Large Unlabeled Video Dataset"に従い、入力音源はサンプリングレート22050Hzにし、-256から256までの範囲の数値にした。

モデルの構成

article

Rajat Hebbarの記事で紹介されている上の写真のモデルをもとに、下のモデルを作成した。

model_architecture

SoundNetベースのCNNを実際のSoundNetに変えたのが主な変更点。
それによりCNNの層が増えて入力を長くする必要が出てきたため、入力サイズが大きくなった。

結果と評価

GTZANに含まれる1000個の音楽データの内950個を訓練データとして学習させ、10epochs後と20epochs後に50個のテストデータで推論させて混同行列の作成とAccuracy・Precision・Recall・F1の求値を行った。

confusion_matrix

ここで、Precision・Recall・F1の値は各ラベルごとの値をデータ数に応じて重み付けをして平均したものである。例えば、下のような混同行列であれば下の計算式によりPrecisionはおよそ0.58になる。

example_matrix

example_matrix_precision

また、学習前と学習後でモデル中のSoundNetの部分の出力を平坦化したものをPCAやt-SNEで可視化した。 学習後ではt-SNEでジャンルごとにある程度分離されていることがわかる。特にclassicalやmetalはよく分離されている。

analysis

About

SoundNetをベースにしたmusic2vecを用いた音楽ジャンルの分類(参考:https://medium.com/@rajatheb/music2vec-generating-vector-embedding-for-genre-classification-task-411187a20820)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published