東京電機大学 工学部 情報通信工学科
ネットワークシステム研究室
指導教員 坂本直志教授
学籍番号 15EC036
氏名 柿崎智弘
画像分野での深層学習(Deep Learning)の発展は目覚ましい。ILSVRC(The Imagenet Large Scale Visual Recognization Challenge)という画像認識の競技会が存在する。2012年のILSVRCで深層学習を用いた手法が他の手法の精度を10%以上引き離して勝利した。2017年時点で1,000種類の画像を分類した時の精度は97.7% [1]となっている。
深層学習を行うためには膨大なデータ量が必要となる。ILSVRCでは学習、検証のための画像データが用意されるが、学習時に用いる画像数は100万を超える。しかし、音楽の分野ではまとまったデータを収集することが難しい。問題の一つとして挙げられるのは著作権問題である。学習のために音楽データを収集しても、そのデータを第三者に公開する行為は著作権侵害と見做される。そのため、研究者は各々でデータを収集する必要が生じる。同一規格のデータを大量に収集することは難しいため、実験の再現性が低下してしまうと考えられる。
音楽認識分野の特徴として、まず音楽のジャンル認識が挙げられる。音楽はその使用楽器や演奏構成、リズムの取り方などの要素に応じて細分化される。しかしジャンルの定義は非常に曖昧であり、文化や地域、時代背景などの外的要因の影響が多分に含まれる。そのため、楽曲だけの情報からでは精度が上がらないと考えられる。一方で、音楽の要素の中でもテンポは単純な要素である。テンポは音楽の速度である。古典音楽ではAllegro(快速に)やAdagio(ゆるやかに)といった表記がなされ、その明確な速度は定義されていない。近年の音楽ではBPM(Beat Per Minute)という単位が用いられる。BPMとは、1分間に入る拍数で定義される。音楽のテンポをDeep Learningで学習する際、実楽曲から学習するのは効率的であると言えるのか。テンポは単純な要素であるため、テンポの情報をもったデータを自作することにより学習できる可能性について考える。
本研究では楽曲のテンポ(BPM)を判別する。Deep Learningを行うための学習データとして、独自に作成したデータを用いて学習を行い、実際の楽曲を用いてネットワークの評価を行う。
ニューラルネットワークとは、機械学習モデルの一種であり、動物の神経細胞であるニューロンをモデル化したものにより構成されたネットワークである。図1にニューロンの例を示す。
この時、入力それぞれが内部に持っている重みwの値とバイアスbをニューロンに入力し、yを出力する。出力される値yを求める式を以下に示す。
ここで、fは活性化関数と呼ばれる非線形の関数である。本研究ではRectified Linear Unit(ReLU)と呼ばれる関数を用いる。ReLUでは入力された値が0未満の時に0になり、1以上の時に入力をそのまま出力する。ReLUの式を以下に示す。
図1に示したニューロンの出力を別のニューロンの入力となるように、多層に組み合わせたものをニューラルネットワークと呼ぶ。 図2にニューラルネットワークの例を示す。
ニューラルネットワークには入力層、隠れ層、出力層の3層が存在する。この内、隠れ層が多層であるものを深層ニューラルネットワークと呼ぶ。入力層から隠れ層への計算は以下のようにされる。
zjは前の層の入力の和に活性化関数を掛けたものである。このような計算を行う層を全結合層と呼ぶ。また、入力側から出力側に情報を伝搬させることを順伝播と呼ぶ。
ニューラルネットワークでは、出力層で望む結果が出るように重みやバイアスなどのパラメータを更新し、ネットワークを最適化する必要がある。このパラメータの更新を学習と呼び、深層ニューラルネットワークを学習する方法を深層学習と呼ぶ。ニューラルネットワークを学習させる際に用いられるアルゴリズムは誤差逆伝播法(バックプロパゲーション)が存在する。本研究では入力をソフトマックス関数に通し、交差エントロピー誤差関数を用いて誤差逆伝播法を行う。まず、ソフトマックス関数の式を以下に示す。
ここで、xiは出力層のi番目のノードの出力、Nは出力層のノード数を示す。指数関数eで入力される値を正の値に変換し、入力されるyiをすべてのノードの入力で割ることで確率に変換できる。ソフトマックス関数の勾配を次の式のように計算する。
次に、交差エントロピー誤差関数について説明する。交差エントロピー誤差関数は、出力が確率分布であるときに使用される。出力された確率分布と、実際の確率分布との距離を表す。以下に交差エントロピー誤差関数の式を示す。
tiは教師データと呼ばれるネットワークに与えられる答えであり、教師データと出力データを近づけるようにネットワークを学習させる必要がある。また、誤差関数によって得られた値Eは単に損失とも呼ばれる。入力データに対してtiのような教師データが与えられる学習は教師あり学習と呼ばれる。この時、与える教師データを具体的な数値とした場合を回帰、データが属するクラスにした場合を分類と呼ぶ。回帰では、入力された過去のデータを基に次の値を予測する目的で使われる。分類では入力されたデータが、与えられたクラス中のどれに属するかを判別する目的で使われる。
ニューラルネットワークの学習には膨大な学習用データが必要となる。学習用のデータがN個あるときに、ランダムなn(≦N)個のデータを作成して学習を行う手法がある。これをミニバッチ学習と呼ぶ。ミニバッチ学習を行うときの損失を示す。
この時に作成されるn個のデータをミニバッチと呼ぶ。また、全データN個に対して学習を行う回数をエポックと呼ぶ。
誤差関数を用いた重みwとバイアスbの更新は以下のように行う。
ここで、εは学習率を表し、ネットワークのパラメータの更新速度を制御することができる。lは学習のステップを示す。損失を導き、その損失からネットワークのパラメータを更新する手法を誤差逆伝播法と呼ぶ。
畳み込みニューラルネットワークは、隠れ層に畳み込み層やプーリング層などの特徴的な機能を持った層を積み上げることで構成される。
畳み込み層では、畳み込み計算を行い、結果を次の層へ出力する。畳み込み計算は、入力画像にフィルタを重ね、フィルタと同じ位置の値を乗算し、乗算した結果の総和を求めるものである。この時のフィルタをカーネルと呼ぶ。カーネルサイズをm,nとすると畳み込みは以下の式で表せる。
ここで、wはカーネルを、bはバイアスを表している。カーネルの出力を一部無視することで出力aijのサイズを制御することができる。この制御をストライドと呼ぶ。ストライドが1の時はすべてを出力、ストライドが2の時はインデックスを1つ飛ばしで出力、ストライドが3の時はインデックスを2つ飛ばしで出力する。
ニューラルネットワークにデータを読み込ませる際、効率よく学習を行うためにデータに処理を加える必要がある。この処理を前処理と呼ぶ。本実験では音楽データを短時間フーリエ変換したものを入力として用いるため、短時間フーリエ変換について簡単に説明する。短時間フーリエ変換(Short-Time Fourier Transform:STFT)は信号処理手法の一つで、時間変化する信号の周波数と位相の変化を解析するために使われる。
まず、音楽信号をデジタルデータに変換してコンピュータで扱うためにサンプルを取る必要がある。これをサンプリングと呼ぶ。一般的に、音楽CDは1秒当たり44,100点のサンプリングを行う。サンプリングの単位はHzが使われ、44,100/秒の場合はサンプリング周波数44.1kHzと記載される。
次に離散フーリエ変換(Discrete Fourier Transform:DFT)について説明する。離散フーリエ変換とは、フーリエ解析の一つである。N点で構成された信号をx(n)とする。この時、離散的な周波数上において、N点信号x(n)は様々な周波数の複素指数関数の組み合わせによって構成されていることを以下の式で表せる。
ここで、kは離散周波数のインデックスを表す。
x(t)を離散時間信号とする。x(t)を短時間の時間区分に分割し、0<t<N-1だけで0でない値をもち、この外では0となるような関数w(t)をx(t)に乗じる。w(t)は窓関数と呼ばれる。STFTでは
のように、窓関数をmSだけシフトして乗じることにより、離散信号x(t)のmS≦t≦(mS+N-1)部分を切り出し、切り出した区間の先頭に時間原点を移動した有限調信号を定義する。この切り出された時間区間をフレームと呼ぶ。mは時間フレームのインデックス、Sはフレームシフト量、Nはフレーム長を表す。分割された時間信号に離散フーリエ変換を適用することにより、短時間フーリエ変換が定義される。以下にSTFTの式を示す。
ここで、x(n)は時刻nの入力信号、w(n)は窓関数を表す。
分割された時間信号の変換結果が解析した時間の全周波数成分のグラフとなるため、周波数を縦軸として時系列順に並べる。これをスペクトログラムと呼び、本研究でのニューラルネットワークの入力とする。
深層学習は膨大な量の計算処理を必要とする。一般的なコンピュータに内蔵されている演算装置、CPU(Central Processing Unit)は汎用的な計算を行っているため、学習に時間がかかることがある。この計算を高速化する方法として、GPU(Graphics Processing Unit)と呼ばれる演算装置を利用する方法がある。GPUとは、リアルタイムの画像処理に特化した演算装置やプロセッサのことを示す。3次元のグラフィックを描画するためには、大量の計算を高速で行うことが要求される。その計算速度を画像処理外の目的に応用する技術をGPGPU(General-Purpose Computing on Graphics Processing Units)と呼ぶ。本研究ではニューラルネットワークの学習にGPUを利用する。
Musical Instrument Digital Interface(MIDI)は楽曲の演奏の情報を電子データとして伝達するための規格である。MIDIのデータは音声そのものでなく、音色やテンポを定めた演奏情報のみが保存される。
ニューラルネットワークを用いてテンポを推定する試みとして、Schreiberらの研究 [2]が挙げられる。Schreiberらの研究では、単一のディープニューラルネットワークのみで抜粋個所のテンポを推定するCNNベースのアプローチを行った。入力にはメルスペクトログラムと呼ばれる特徴量を用いる。これは、周波数軸を線形ではなく、メル尺度と呼ばれるもので表現したスペクトログラムである。これにより、周波数軸を人間の知覚に近づけることができる。また、音楽のテンポは瞬間的な量ではないため、解析のために十分な長さが必要である。Schreiberらは11.9秒のメルスケールスペクトログラムを選択した。出力は256個のノードを用意し、30-285BMまでのテンポを整数で推定する。ネットワークを図3に示す。
まず、周期性を解析するための層として、最初に3つの畳み込み層で入力を処理する。このフィルタは1×5の短いフィルタであり、信号のオンセットを一致させることを目的としている。畳み込み層、平均プーリング層、異なるフィルタ長を持つ並列畳み込み層から構成される、4つのマルチフィルタモジュールが続く。平均プーリング層とは、入力を四角形の領域に分割し、各領域の平均値を計算する層である。マルチフィルタモジュールを図4に示す。
このモジュールは、長い時間依存性を検出することを目標としている。 最後の全結合層は、畳み込み層によって提供される特徴を分類するための層である。
この研究では訓練データの増強を行うために、画像認識システムに用いられるスケールアンドクロップアプローチを適用する。スケールアンドクロップアプローチとは、入力する画像を拡大、縮小した後に、リサイズした画像からランダムに切り出した画像を入力として使用する手法である。Schreiberらは、スプライン補完を使用し、ランダムに選択された係数でメルスペクトログラムの時間軸のみをスケーリングし、それに応じて正解ラベルを調整した。学習に使用した楽曲数は8,596トラックであるが、スケールアンドクロップアプローチによって増強されたデータ数は明示されていない。
本研究の目的は、自作した音楽データを用いて畳み込みニューラルネットワークの学習を行い、音楽のテンポ(BPM)を検出することである。ニューラルネットワークの学習が完了した後、ニューラルネットワークに実際の楽曲を入力し、その精度を確認することで評価を行う。
実験で使用するネットワークは畳み込み3層、全結合3層である。出力層は先行研究に倣い、30BPMから285BPMまでを分類するために256層にした。畳み込み層のカーネルサイズは3×3、ストライドは3、活性化関数はReLUである。全結合層のノード数は2048, 1024, 256であり、活性化関数はReLUである。出力層にソフトマックス関数を通した後に、交差エントロピー誤差関数を用い、その時の損失から誤差逆伝播法で学習を行う。入力はSTFT解析で得られるスペクトログラム配列を画像データとして入力する。図5に作成したネットワークを示す。
学習のためのデータを作成する。作成したデータは、30秒間メトロノームのように指定したテンポで音を発生させる音楽データである。またネットワークに分類を行わせるため、30BPMから285BPMまでのデータをそれぞれ作成する。まず、MIDIで楽曲情報を記述する。記述にはpythonのライブラリであるpretty_midi [3]を使用する。以下にpretty_midiでの記述例を示す。
note = pretty_midi.Note(velocity=100, pitch=note_number, start=start_time, end=start_time+end_time)
velocityは音量、pitchは音の高さ、startは音の発生時刻、endは音の終了時刻を表す引数である。また、この時の発生時刻の単位は秒である。このnoteを積み重ねることで演奏情報が記録される。120BPMの楽曲を作成する場合の例を示す。最初のstartを0、endを0.5と記述する。その後、end_timeが30秒に達するまでstart = [ひとつ前のstart] + [end]としてnoteの更新を繰り返す。これにより、30秒まで0.5秒間隔で音を発生させる演奏情報をMIDIで記述できる。
pitchの引数を変更することにより、音の高さを変更できる。C2からB7までのピアノでいう白鍵の音に対してデータを作成する。これにより、35個のデータを作成する。
楽器情報をMIDIの規格に即した128個種類に変更できるため、MIDIに規定されている頭8種類の楽器、 Acoustic Grand Piano, Bright Acoustic Piano, Electric Grand Piano ,Honky-tonk Piano ,Electric Piano 1 ,Electric Piano 2 ,Harpsichord ,Claviについてデータを作成する。
音の高さを変更したデータに対し、楽器の変更を施す。作成された音の高さを変更した35個のデータ一つ一つに8種類の楽器情報を適用する。これにより、280個のデータを作成する。また、テンポを30BPMから285BPMまで変更したデータを作成するため、合計71,680個のデータを作成する。
作成した楽曲情報を音楽データとして生成する必要がある。音楽データの生成には、FluidSynth [4]というオープンソースの音楽生成ソフトウェアをpythonで使用可能なpyFluidSynth [5]というライブラリ使用する。作成した71,680個のデータに対してpyFluidSynthを使用し、楽曲情報を音楽データに変換する。この時、サンプリング周波数はFluidSynthの規定により44.1kHzにする必要がある。
変換したデータをwavという拡張子の音楽ファイルに変換する。wavファイルの生成にはSoundFile [6]というpythonのライブラリを使用する。
作成されたwavファイルのサンプリング周波数44.1kHzではサンプリング数が多く、ネットワークの学習が遅くなるため、16kHzにサンプリングし直す。STFTの解析は、フレーム長1024、フレームのシフト量512とし、1024フレームの正規化されたSTFT配列を作成する。ここでの1024フレームは32.8秒となる。wavファイルのリサンプリングとSTFT解析はpythonのライブラリであるLibROSA [7]を使用する。
以上の手順で71,680個のデータのSTFT配列を作成する。ニューラルネットワークへの入力はSTFT配列を画像データとして入力する。ニューラルネットワークの学習には、学習用データ、確認用データ、検証用データの3種類のデータが必要である。学習用データはニューラルネットワークのパラメータの更新に用いる。確認用データはニューラルネットワークの学習中の精度を確認するために用いられる。確認用のデータではネットワークのパラメータ更新は行われない。検証用データは学習のために用意したものとは独立した、未知のデータを入力した際のネットワークの評価を行うために用いられる。本実験では作成した71,680個のデータを8:2に分割し、57,344個を学習データ、14,336個を確認用データとして使用する。検証用のデータには、実際の楽曲を入力とする。
エポック数50、バッチ数128で学習を行う。学習にかかった時間はGeForce GTX TITANというGPUを使用して約6時間である。学習した結果を図6に示す。図6の詳細な精度は付録Aに付記する。
学習用データに対する精度と確認用データに対する精度はともに、30epoch程度までほぼ0%であるが、33エポックから41エポック間で90%程度まで上昇させていることがわかる。それ以降は上昇幅が緩やかになり、学習用データに対する精度は約100%、確認用データに対する精度は約97%となった。
検証にはGiantSteps+ EDM Key Dataset [8](以降GS+と記載)を使用する。GS+では600曲のEDM(Electronic Dance Music)と呼ばれるジャンルの音楽が含まれている。テンポの情報はBPM値を修正する人々のフォーラム [9]によって手動で与えられたものである。テンポの情報が含まれている楽曲は600曲の内527曲である。図7にGS+データセットのBPM分布を示す。118BPMから141BPM間に446曲の楽曲があることがわかる。また30BPMから61BPM、190BPMから285BPM間の楽曲は0である。
ネットワークにGS+データセットの音楽を入力して出力された予測値と正解値を比較する。精度の評価にはAccuracy0, Accuraacy1, Accuracy2を使用する。Accuracy0は正解とされる値と予測された値が一致した割合である。Accuracy1は正解とされる値に対して4%の誤差を許容した場合を基準値とし、予測値が基準値に収まっている割合である。Accuracy2はAccuracy1に加え、正解とされる値の1/2倍, 1/3倍, 2倍, 3倍の値を許容した場合を基準値とし、予測値が基準値に収まっている割合である。Accuracy0は7.21%、 Accuracy1は10.4%、 Accuuracy2は14.4%であった。出力した予測BPMの分布を図8に示す。206BPMから213BPMの間を予測した数が149件と最も多いことがわかる。また、78BPMから85BPMの間を予測した数も53件と多い。図7より、入力した楽曲は30BPMから85BPM、142BPMから285BPMまでのデータ数はほぼ0である。それに対して、ネットワークの出力は142以上のBPMと予測していることが多い。ネットワークの全予測値は付録Bに付記する。
誤差を考慮したネットワーク出力の分布を図9に示す。誤差は以下の式より導いた。
最も多いのは誤差0%の42件である。次いで誤差100%が多く、19件である。件数が10件を超えているものはそれぞれ誤差64%、62.5%、50%、33.6%である。それ以外の誤差では0%から170%程度まで10件以下の出力が疎らに得られた。
学習したネットワークは自作データに対しては100%に近い精度となり、実楽曲に対しては約7%~14%程度の精度となった。このように精度に差が出た原因として、自作したデータが単純であったことが考えられる。自作したデータにノイズを加算する、自作データの頭に無音の時間を挿入して音の発生始めのタイミングをずらす等、自作データをより複雑にすることが必要であると考えられる。
予測件数の分布を見る。図9では誤差100%の件数が誤差0%に次いで多い。誤差100%とは正解BPMの2倍の値を予測したことを示す。原因として、正解値の2倍のBPMが正解値と等倍のBPMと似た特徴を持っているためにネットワークが誤認識した可能性がある。例えば、120BPMが正解値だとすると、拍は0.5秒に一回の間隔である。120BPMの2倍の値である、240BPMの拍は0.25秒に一回の間隔である。120BPMと240BPMでは0.5秒ごとに拍の周期が被るため、ネットワークが速い方のテンポであると誤認識をした上で分類した可能性がある。そのため、特に目立った2倍のBPMを出力した楽曲については再度ネットワークに入力し、予測した他のクラスの確率について調査をする必要があると考えられる。
本研究では、自作した音楽データによりニューラルネットワークの学習を行うことで、一般的な楽曲のBPMを識別した。ネットワークの精度は自作したデータに対して約97%、実楽曲に対して約7%~14%程度となった。今後の課題として、自作データと実楽曲の精度差を小さくできるように、より複雑な自作データを作成することを検討したい。
4章でネットワークの学習を行った際の学習用データに対する精度と確認用データに対する精度の詳細を表1に示す。
表1 学習時の精度
| epoch | 学習用データに対する精度 | 確認用データに対する精度 |
|---|---|---|
| 1 | 0.003853934 | 0.00390625 |
| 2 | 0.004725865 | 0.00390625 |
| 3 | 0.004813058 | 0.004045759 |
| 4 | 0.005004883 | 0.004115514 |
| 5 | 0.005283901 | 0.003766741 |
| 6 | 0.005458287 | 0.004185268 |
| 7 | 0.005841936 | 0.004185268 |
| 8 | 0.005562919 | 0.004185268 |
| 9 | 0.005632673 | 0.004743304 |
| 10 | 0.00554548 | 0.004673549 |
| 11 | 0.006138393 | 0.004115514 |
| 12 | 0.006033761 | 0.003976005 |
| 13 | 0.006138393 | 0.004394531 |
| 14 | 0.006068639 | 0.003836496 |
| 15 | 0.00578962 | 0.004115514 |
| 16 | 0.006748744 | 0.00453404 |
| 17 | 0.006696429 | 0.003766741 |
| 18 | 0.006103516 | 0.004045759 |
| 19 | 0.006888253 | 0.004952567 |
| 20 | 0.006574358 | 0.006905692 |
| 21 | 0.008998326 | 0.007393973 |
| 22 | 0.00819615 | 0.00718471 |
| 23 | 0.010393416 | 0.00906808 |
| 24 | 0.010759627 | 0.010184152 |
| 25 | 0.009922572 | 0.010672433 |
| 26 | 0.010899135 | 0.008858817 |
| 27 | 0.012172154 | 0.00390625 |
| 28 | 0.012311663 | 0.013671875 |
| 29 | 0.016095843 | 0.011439732 |
| 30 | 0.020315988 | 0.01876395 |
| 31 | 0.028616769 | 0.025599888 |
| 32 | 0.040631976 | 0.051827569 |
| 33 | 0.063511439 | 0.078613281 |
| 34 | 0.111206055 | 0.145996094 |
| 35 | 0.209089011 | 0.276227683 |
| 36 | 0.350934714 | 0.401506692 |
| 37 | 0.466517866 | 0.536132813 |
| 38 | 0.613734663 | 0.681849897 |
| 39 | 0.778982997 | 0.772879481 |
| 40 | 0.876255572 | 0.879324794 |
| 41 | 0.918317497 | 0.903250575 |
| 42 | 0.942993164 | 0.913434684 |
| 43 | 0.957728803 | 0.943917394 |
| 44 | 0.967232823 | 0.941127241 |
| 45 | 0.975289464 | 0.945731044 |
| 46 | 0.9809919 | 0.954101563 |
| 47 | 0.985665441 | 0.9598912 |
| 48 | 0.989066005 | 0.961425781 |
| 49 | 0.991245806 | 0.960867763 |
| 50 | 0.992919922 | 0.966727138 |
表2にGS+データセットに割り振られている音楽ID、正解値、予測値を示す。表2はGS+データセットの600曲の内BPM情報が含まれる527曲に対しての結果を示している。
表2 GS+データセットに対する予測と正解
| ID | 正解BPM | 予測BPM |
|---|---|---|
| 3424038 | 116 | 207 |
| 975138 | 124 | 84 |
| 883724 | 125 | 125 |
| 3668409 | 139 | 208 |
| 4021075 | 130 | 240 |
| 4167325 | 128 | 251 |
| 4920936 | 124 | 124 |
| 4048367 | 134 | 207 |
| 4758620 | 150 | 150 |
| 4453556 | 136 | 245 |
| 2007977 | 128 | 80 |
| 3076768 | 120 | 88 |
| 2081732 | 124 | 207 |
| 1650933 | 120 | 180 |
| 140603 | 125 | 83 |
| 5078640 | 113 | 260 |
| 5120298 | 125 | 207 |
| 1864037 | 128 | 155 |
| 3686302 | 132 | 211 |
| 5264038 | 140 | 278 |
| 3014118 | 128 | 224 |
| 1611446 | 136 | 281 |
| 3757006 | 124 | 270 |
| 3033991 | 123 | 123 |
| 5049808 | 128 | 211 |
| 3228698 | 128 | 207 |
| 4666417 | 140 | 206 |
| 4231980 | 121 | 141 |
| 4325645 | 126 | 271 |
| 4657878 | 148 | 205 |
| 3383171 | 128 | 236 |
| 1771577 | 128 | 265 |
| 4364668 | 130 | 210 |
| 1161234 | 125 | 125 |
| 4983645 | 128 | 208 |
| 1706844 | 127 | 210 |
| 4927724 | 123 | 196 |
| 5431709 | 117 | 285 |
| 582991 | 125 | 126 |
| 4284574 | 127 | 272 |
| 3858331 | 124 | 85 |
| 1056896 | 130 | 210 |
| 4125044 | 130 | 219 |
| 1984204 | 125 | 249 |
| 3232851 | 125 | 271 |
| 3696226 | 124 | 84 |
| 634032 | 129 | 129 |
| 3395666 | 123 | 185 |
| 4540971 | 130 | 207 |
| 4049579 | 127 | 208 |
| 4815758 | 123 | 194 |
| 4206954 | 128 | 208 |
| 3687442 | 121 | 209 |
| 5005412 | 125 | 125 |
| 1234751 | 123 | 207 |
| 3963180 | 120 | 120 |
| 1074548 | 175 | 209 |
| 4957129 | 120 | 202 |
| 2018991 | 122 | 137 |
| 3298344 | 69 | 173 |
| 1406309 | 120 | 88 |
| 4452122 | 132 | 132 |
| 3389317 | 128 | 160 |
| 5026646 | 138 | 208 |
| 1757071 | 120 | 88 |
| 1950170 | 118 | 254 |
| 1856889 | 126 | 207 |
| 5039016 | 128 | 202 |
| 3272873 | 128 | 210 |
| 4191993 | 128 | 208 |
| 4802314 | 128 | 254 |
| 4104235 | 128 | 272 |
| 341832 | 132 | 275 |
| 3633852 | 110 | 98 |
| 1809174 | 125 | 125 |
| 3354212 | 128 | 129 |
| 4325646 | 128 | 240 |
| 4093657 | 130 | 103 |
| 1792026 | 122 | 86 |
| 2440193 | 135 | 71 |
| 1549964 | 120 | 208 |
| 2673157 | 120 | 208 |
| 4846007 | 120 | 91 |
| 1978917 | 123 | 86 |
| 667508 | 125 | 167 |
| 3137686 | 128 | 208 |
| 3257231 | 130 | 278 |
| 61415 | 138 | 208 |
| 1486770 | 127 | 81 |
| 5048263 | 110 | 97 |
| 3317232 | 128 | 189 |
| 1927655 | 125 | 250 |
| 2059625 | 124 | 205 |
| 3415063 | 125 | 125 |
| 4857650 | 128 | 94 |
| 3334441 | 128 | 105 |
| 5362946 | 128 | 210 |
| 5035524 | 100 | 176 |
| 2435861 | 127 | 249 |
| 1092676 | 128 | 194 |
| 3402886 | 140 | 137 |
| 4485436 | 128 | 210 |
| 3519499 | 130 | 214 |
| 4440292 | 140 | 208 |
| 3165770 | 126 | 82 |
| 4359736 | 128 | 186 |
| 4186982 | 127 | 82 |
| 3426285 | 118 | 212 |
| 4898445 | 140 | 197 |
| 1356281 | 128 | 207 |
| 1316308 | 126 | 63 |
| 2725289 | 175 | 175 |
| 2006103 | 118 | 208 |
| 4498388 | 110 | 215 |
| 3116329 | 170 | 209 |
| 839886 | 127 | 163 |
| 2049680 | 120 | 179 |
| 4328388 | 135 | 207 |
| 3095708 | 102 | 105 |
| 1949099 | 140 | 280 |
| 3753635 | 113 | 274 |
| 1004923 | 125 | 271 |
| 4234612 | 132 | 219 |
| 3518921 | 121 | 214 |
| 1198688 | 127 | 208 |
| 3571314 | 121 | 190 |
| 1105632 | 126 | 63 |
| 611797 | 135 | 209 |
| 1161249 | 124 | 123 |
| 4476610 | 121 | 269 |
| 796860 | 126 | 272 |
| 4824580 | 117 | 267 |
| 1574723 | 126 | 269 |
| 3995054 | 109 | 258 |
| 3958755 | 128 | 208 |
| 272788 | 123 | 251 |
| 3233653 | 124 | 207 |
| 1763782 | 130 | 129 |
| 4371042 | 137 | 208 |
| 1991458 | 116 | 196 |
| 4153238 | 124 | 208 |
| 472626 | 126 | 95 |
| 2029598 | 128 | 249 |
| 3400782 | 175 | 252 |
| 1041574 | 125 | 84 |
| 3625299 | 140 | 205 |
| 1140027 | 126 | 218 |
| 992081 | 125 | 125 |
| 1904501 | 125 | 84 |
| 4173942 | 128 | 210 |
| 1468437 | 127 | 272 |
| 4202763 | 170 | 187 |
| 5070608 | 128 | 208 |
| 877345 | 128 | 250 |
| 4877006 | 140 | 273 |
| 4014749 | 120 | 145 |
| 4950604 | 128 | 208 |
| 3930672 | 117 | 117 |
| 4983728 | 120 | 120 |
| 208158 | 138 | 276 |
| 3402888 | 129 | 208 |
| 3574815 | 93 | 281 |
| 2673252 | 128 | 202 |
| 1850984 | 122 | 244 |
| 3813682 | 144 | 279 |
| 3387619 | 117 | 117 |
| 4609349 | 140 | 210 |
| 4834156 | 116 | 92 |
| 4863806 | 128 | 81 |
| 1494159 | 125 | 84 |
| 3740062 | 138 | 190 |
| 1009960 | 123 | 132 |
| 3638836 | 120 | 120 |
| 10089 | 150 | 236 |
| 3533956 | 124 | 175 |
| 4934251 | 125 | 205 |
| 682724 | 126 | 127 |
| 3695262 | 122 | 210 |
| 1234670 | 175 | 155 |
| 2725290 | 175 | 210 |
| 74982 | 140 | 200 |
| 1194720 | 128 | 80 |
| 3524408 | 120 | 88 |
| 5048249 | 140 | 241 |
| 4450726 | 138 | 207 |
| 1257593 | 84 | 122 |
| 2047796 | 170 | 208 |
| 2436729 | 128 | 211 |
| 3958396 | 132 | 279 |
| 923397 | 125 | 83 |
| 3701975 | 120 | 209 |
| 1206025 | 126 | 82 |
| 2448121 | 128 | 205 |
| 1007941 | 130 | 216 |
| 2666332 | 121 | 121 |
| 3958397 | 130 | 143 |
| 2053495 | 125 | 125 |
| 4505122 | 128 | 272 |
| 4981539 | 125 | 204 |
| 3641166 | 123 | 85 |
| 3938837 | 108 | 208 |
| 1803909 | 126 | 252 |
| 423054 | 128 | 199 |
| 4086909 | 128 | 129 |
| 3070298 | 132 | 184 |
| 3836490 | 122 | 208 |
| 511348 | 125 | 125 |
| 5081990 | 113 | 233 |
| 3480108 | 150 | 211 |
| 3402887 | 129 | 273 |
| 3186615 | 121 | 212 |
| 4207145 | 170 | 210 |
| 1389887 | 127 | 249 |
| 4091478 | 135 | 279 |
| 891993 | 128 | 80 |
| 4953926 | 128 | 273 |
| 1033148 | 125 | 167 |
| 814290 | 127 | 278 |
| 4779657 | 128 | 208 |
| 2667501 | 117 | 91 |
| 3826491 | 127 | 193 |
| 671546 | 135 | 210 |
| 3661550 | 128 | 207 |
| 4661735 | 160 | 89 |
| 4098993 | 128 | 279 |
| 4827420 | 124 | 270 |
| 3997722 | 122 | 86 |
| 3250632 | 132 | 205 |
| 4328155 | 128 | 256 |
| 2760321 | 125 | 271 |
| 4786362 | 123 | 208 |
| 4900482 | 138 | 213 |
| 3773561 | 121 | 252 |
| 631883 | 132 | 274 |
| 4755348 | 128 | 81 |
| 305771 | 125 | 125 |
| 3629920 | 88 | 220 |
| 209206 | 136 | 207 |
| 5079918 | 93 | 278 |
| 3789117 | 120 | 179 |
| 4995394 | 130 | 219 |
| 4934196 | 122 | 278 |
| 3178147 | 124 | 79 |
| 1681077 | 124 | 208 |
| 1948785 | 127 | 254 |
| 3971416 | 120 | 240 |
| 1795653 | 124 | 208 |
| 3339291 | 128 | 256 |
| 4066435 | 123 | 85 |
| 398124 | 128 | 207 |
| 400259 | 86 | 220 |
| 3211733 | 117 | 208 |
| 1614715 | 122 | 252 |
| 1650934 | 124 | 208 |
| 3526370 | 128 | 187 |
| 571009 | 128 | 210 |
| 4399289 | 117 | 210 |
| 3270413 | 128 | 249 |
| 4950614 | 108 | 261 |
| 3954191 | 121 | 147 |
| 781995 | 128 | 174 |
| 4997194 | 150 | 211 |
| 1037507 | 168 | 206 |
| 2680040 | 128 | 210 |
| 101069 | 128 | 97 |
| 975137 | 124 | 41 |
| 3368117 | 104 | 234 |
| 1880732 | 123 | 246 |
| 5417860 | 126 | 181 |
| 1792100 | 127 | 63 |
| 1034795 | 125 | 271 |
| 3568459 | 88 | 214 |
| 3829561 | 121 | 211 |
| 4277742 | 128 | 128 |
| 5308082 | 132 | 212 |
| 3003894 | 126 | 82 |
| 1781139 | 123 | 185 |
| 3129757 | 140 | 207 |
| 4996389 | 128 | 211 |
| 4424988 | 128 | 210 |
| 4955940 | 124 | 250 |
| 903963 | 125 | 125 |
| 3642384 | 124 | 124 |
| 1939732 | 119 | 208 |
| 1209745 | 122 | 244 |
| 4935536 | 130 | 210 |
| 3450181 | 125 | 208 |
| 1353830 | 125 | 271 |
| 2069519 | 130 | 214 |
| 3939148 | 87 | 276 |
| 2048940 | 126 | 127 |
| 2447748 | 126 | 221 |
| 3949799 | 130 | 280 |
| 1234749 | 136 | 210 |
| 3533310 | 125 | 104 |
| 4960012 | 125 | 125 |
| 3133794 | 128 | 215 |
| 1837440 | 123 | 85 |
| 376240 | 140 | 243 |
| 4981541 | 126 | 230 |
| 1822087 | 122 | 137 |
| 3969868 | 96 | 217 |
| 190477 | 138 | 278 |
| 853834 | 124 | 156 |
| 1234668 | 88 | 75 |
| 4995597 | 110 | 111 |
| 3178155 | 128 | 81 |
| 3364661 | 137 | 265 |
| 1695408 | 125 | 271 |
| 3648814 | 120 | 145 |
| 997308 | 120 | 120 |
| 3789116 | 123 | 123 |
| 5036476 | 120 | 88 |
| 3288636 | 130 | 207 |
| 1626779 | 127 | 91 |
| 3271514 | 118 | 118 |
| 3873733 | 125 | 84 |
| 631240 | 126 | 165 |
| 1771576 | 124 | 132 |
| 2996293 | 128 | 218 |
| 2024026 | 100 | 259 |
| 1808022 | 123 | 85 |
| 4088665 | 125 | 250 |
| 3367555 | 138 | 193 |
| 3667215 | 128 | 81 |
| 3313145 | 126 | 210 |
| 4996031 | 175 | 133 |
| 495905 | 115 | 205 |
| 3211603 | 140 | 137 |
| 1776378 | 120 | 88 |
| 2741219 | 128 | 95 |
| 4615188 | 103 | 206 |
| 2051166 | 126 | 114 |
| 2054968 | 125 | 125 |
| 3349967 | 126 | 164 |
| 1442809 | 90 | 207 |
| 3958398 | 130 | 104 |
| 435443 | 130 | 187 |
| 4842349 | 128 | 249 |
| 4596347 | 128 | 207 |
| 4045225 | 125 | 84 |
| 1234669 | 88 | 221 |
| 677299 | 129 | 208 |
| 4898455 | 138 | 207 |
| 1986370 | 126 | 208 |
| 4688833 | 110 | 110 |
| 1652412 | 124 | 124 |
| 1792506 | 124 | 184 |
| 1796518 | 123 | 246 |
| 3767408 | 124 | 84 |
| 3151513 | 124 | 85 |
| 2438899 | 131 | 241 |
| 1964905 | 130 | 208 |
| 3367553 | 128 | 211 |
| 4955428 | 122 | 123 |
| 3967462 | 122 | 121 |
| 5159593 | 128 | 210 |
| 4840289 | 128 | 210 |
| 3262951 | 128 | 272 |
| 1193612 | 120 | 155 |
| 5039015 | 128 | 114 |
| 4366506 | 132 | 226 |
| 3428673 | 121 | 121 |
| 1681074 | 124 | 129 |
| 1725800 | 139 | 208 |
| 3979989 | 121 | 121 |
| 2725284 | 88 | 165 |
| 3324024 | 120 | 219 |
| 4945105 | 138 | 211 |
| 4927725 | 140 | 275 |
| 3792959 | 120 | 274 |
| 5276059 | 125 | 250 |
| 3367551 | 128 | 199 |
| 4066359 | 128 | 208 |
| 4927548 | 132 | 207 |
| 4093908 | 124 | 176 |
| 3377323 | 123 | 208 |
| 5013063 | 128 | 210 |
| 3516363 | 128 | 192 |
| 1681085 | 124 | 85 |
| 5073839 | 116 | 230 |
| 3667683 | 123 | 208 |
| 5450838 | 128 | 210 |
| 4997222 | 130 | 199 |
| 678406 | 130 | 165 |
| 3228649 | 128 | 224 |
| 3338963 | 135 | 208 |
| 3229038 | 130 | 210 |
| 1415239 | 130 | 254 |
| 4315749 | 140 | 276 |
| 4188100 | 128 | 112 |
| 4873286 | 128 | 240 |
| 3317417 | 128 | 210 |
| 2075331 | 126 | 63 |
| 3390952 | 130 | 78 |
| 2014445 | 122 | 122 |
| 3642409 | 125 | 83 |
| 3822226 | 122 | 56 |
| 945256 | 136 | 202 |
| 2666528 | 124 | 83 |
| 1234748 | 140 | 212 |
| 1682815 | 128 | 81 |
| 4817706 | 136 | 210 |
| 3409548 | 99 | 269 |
| 3986537 | 130 | 211 |
| 3363196 | 130 | 193 |
| 781373 | 140 | 204 |
| 4062807 | 123 | 85 |
| 3274260 | 128 | 256 |
| 1568217 | 128 | 194 |
| 5030517 | 116 | 130 |
| 2070773 | 120 | 120 |
| 3363602 | 128 | 207 |
| 2436276 | 128 | 212 |
| 1787061 | 140 | 199 |
| 1234752 | 138 | 207 |
| 873455 | 120 | 194 |
| 2673254 | 128 | 128 |
| 2031096 | 120 | 88 |
| 814505 | 128 | 281 |
| 4200490 | 128 | 258 |
| 3590070 | 88 | 206 |
| 2031094 | 126 | 181 |
| 1575015 | 125 | 91 |
| 4293025 | 128 | 215 |
| 3434746 | 128 | 210 |
| 3841927 | 130 | 261 |
| 4002242 | 128 | 128 |
| 4483817 | 128 | 211 |
| 4846004 | 121 | 199 |
| 1690921 | 125 | 83 |
| 203493 | 128 | 282 |
| 191347 | 129 | 144 |
| 3319290 | 127 | 182 |
| 2046342 | 114 | 247 |
| 3628628 | 125 | 83 |
| 3706570 | 120 | 212 |
| 3093661 | 128 | 206 |
| 907837 | 86 | 218 |
| 3397932 | 86 | 80 |
| 3935095 | 140 | 207 |
| 4297635 | 125 | 234 |
| 4970082 | 100 | 214 |
| 3833050 | 120 | 60 |
| 3246151 | 127 | 254 |
| 3114501 | 162 | 41 |
| 3725440 | 138 | 192 |
| 3302451 | 128 | 160 |
| 3275147 | 127 | 249 |
| 1785226 | 124 | 228 |
| 3344291 | 126 | 44 |
| 3415421 | 128 | 208 |
| 973819 | 141 | 278 |
| 1043194 | 124 | 84 |
| 1017921 | 124 | 207 |
| 3356535 | 128 | 80 |
| 3372108 | 130 | 175 |
| 3776015 | 135 | 135 |
| 3958861 | 132 | 254 |
| 2725286 | 88 | 236 |
| 835903 | 127 | 272 |
| 981591 | 125 | 167 |
| 3482733 | 86 | 273 |
| 3759800 | 128 | 210 |
| 4360488 | 87 | 214 |
| 1298595 | 135 | 214 |
| 1944125 | 117 | 91 |
| 3334471 | 132 | 236 |
| 4928111 | 175 | 205 |
| 2673251 | 128 | 256 |
| 3533740 | 123 | 85 |
| 1990297 | 120 | 89 |
| 4107957 | 187 | 232 |
| 3443052 | 127 | 234 |
| 1052744 | 175 | 198 |
| 1822502 | 125 | 208 |
| 3625788 | 116 | 232 |
| 3992511 | 124 | 100 |
| 4254573 | 125 | 126 |
| 822664 | 126 | 208 |
| 2052966 | 123 | 85 |
| 3319589 | 130 | 207 |
| 1178656 | 126 | 121 |
| 5009084 | 122 | 254 |
| 1234750 | 93 | 207 |
| 4361260 | 130 | 209 |
| 1922470 | 122 | 86 |
| 1970992 | 124 | 218 |
| 1982269 | 125 | 125 |
| 3858324 | 118 | 90 |
| 3432247 | 128 | 208 |
| 846900 | 124 | 282 |
| 5103693 | 113 | 210 |
| 3228297 | 132 | 194 |
| 4452003 | 131 | 163 |
| 4060751 | 128 | 204 |
| 2434664 | 128 | 272 |
| 205597 | 128 | 167 |
| 3467773 | 128 | 265 |
| 3794008 | 132 | 207 |
| 4956417 | 140 | 215 |
| 3349486 | 70 | 187 |
| 2025670 | 125 | 83 |
| 890568 | 128 | 129 |
| 1149778 | 125 | 251 |
| 2676506 | 102 | 63 |
| 3542099 | 140 | 140 |
| 3980001 | 166 | 250 |
| 4917941 | 128 | 210 |
| 3005030 | 140 | 214 |
| 3545728 | 140 | 209 |
| 4868146 | 140 | 210 |
| 3361547 | 128 | 265 |
| 3345479 | 134 | 259 |
| 3379400 | 128 | 156 |
| 847422 | 126 | 281 |
| 3150078 | 121 | 87 |
| 3625787 | 115 | 138 |
| 1026478 | 125 | 83 |
| 3015217 | 128 | 161 |
| 4433083 | 140 | 214 |
| 1669939 | 128 | 208 |
| 3517044 | 126 | 212 |
| 1814469 | 125 | 124 |
| 4939812 | 121 | 121 |
| 3172588 | 125 | 83 |
| 4014747 | 120 | 281 |
プログラムのコードを付記する。各プログラムの関数について説明する。
諸設定を記述したプログラム
MakeHome:自作データを保存するフォルダを作成する。受け取ったパスの存在を確認し、中身を含めてフォルダを削除したうえで新しいフォルダを作成する。
NoteList:音の高さを返す関数。CからBまでの音の高さを[”C1”, “A2”]のように配列で保存
MakeNpy:与えられたテンポ情報を基に自作データを作成し、スペクトログラムで保存する。MIDIIファイルを作成し、一時的にwavファイルを生成する。wavファイルを基にSTFT解析を行い、pythonで扱いやすい形式であるnumpy配列に変換して保存する。スペクトログラムを得られた後はwavファイルを削除する。
Genearate:MakeNpyに 0から285までのテンポ情報を与える関数。0から285までのフォルダを作成し、その中に各BPMを表現する自作データを入れるようにフォルダ分けをする。
myNN:ニューラルネットワークの構造を記述
SaveParam:ネットワークの構成をテキストファイルで保存する。後にネットワークを読み込むために使用する。
TrainModel:ネットワークを学習させる関数。
LoadModel:学習済みネットワークのパスを受け取り、重み情報等のパラメータを読み込む関数。
ReturnSpec:楽曲情報を基にその頭30秒のされたスペクトログラムを返す関数。
ReturnPred:与えられたスペクトログラムをロードされたネットワークに入力し、予測値を返す関数。
SearchBPM:クラスをBPM情報に変換する関数。
UseGiantStep:GS+のデータを基に学習済みネットワークを通して、出力をcsv形式で保存する関数。楽曲ID、正解値、予測値の順に保存される。この時、正解値のないファイルに対しては空白を入力する。