Talk Proposal Submission
If you are interested in attending this talk at PyCon JP 2017, please use the social media share buttons below. We will consider the popularity of the proposals when making our selection.
talk
KerasのステートフルなRNNを使って自動演奏できないか実験してみた(ja)
Speakers
Ryota Niikura
Audience level:
Novice
Category:
Science
Description
最近、GoogleがMagentaを始めとして、人工知能で作曲する試みが出てきたが、その学習元および出力はmidiという楽譜ファイルであることがほとんどである。今回、音の波形そのものを入力及び出力にした自動演奏機を、最近人気の機械学習フレームワークKerasのstateful RNN を使って実装できないか検証した。
Objectives
ステートフルなRNNのKerasでの実装方法を知る。
Pythonで音声の波形を編集する方法がわかる。
Abstract
自動作曲プロジェクトが最近盛んになってきていて、特にGoogle のMagentaプロジェクトが有名です。
しかし、これらのプロジェクトで使用されているのは、大体がmidiファイルという楽譜ファイルであり、録音した音楽のような「音そのもの」を入力したりするのはあまり見かけません。
今回、音そのものを入力とした機械学習型の自動演奏機を、最近人気の機械学習フレームワークであるKerasを使って実装してみました。
学習に使用する音声ファイルはmac上で流れる音楽を録音し、Pythonでネイティブに取り扱えるwavファイルに変換したものを使います。
このwavファイルをさらに一定時間ごとにフーリエ変換し、周波数スペクトルの時間変遷を入力データとして用意します。
次に自動演奏機のモデルをKerasを使って形成します。ここではKerasが用意している[stateful な RNN](https://keras.io/ja/getting-started/faq/#stateful-rnn)を利用することを試みます。statefulなRNNは一度入力があって内部状態が変更された後、その状態を初期状態として、次の入力に対する処理を行います。これにより、不定期間の曲調などを内部状態に取り込めるのではないかと期待しています。
学習は至って簡単で、入力として各音声データのある瞬間の周波数スペクトルを使い、出力の教師データとしてその次の瞬間の周波数スペクトルを使用します。
これによって得られるモデルは、現在のスペクトルを入力として次のスペクトルを作り、またそのスペクトルを使って次の次のスペクトルを作る...というジェネレータになります。
最後に、このモデルを利用して実際に自動演奏機を動作させてみて、しっかり演奏できているのかを確かめます。現在ではそれほど大きな成果は出ておらず、辛うじてリズムを刻んでいるような雰囲気が感じられ、その他はノイズの塊のような状況になっており、実験や改善を繰り返す必要があります。