はじめに
本記事は、TensorFlow Advent Calendarの21日目の記事です。
今年は機械学習、DeepLearningがニュースなどでも取り上げられるようになり、また書籍もたくさん出るなど、大変話題になった一年だったと感じています。
活用事例としても、Google翻訳の刷新や、Everfilterのような(問題のある)アプリなど、良くも悪くも賑わっていたように思います。
今回ご紹介するのは、TensorFlowを活用してアート・音楽を作成するmagentaというプロジェクトです。
magentaとは
magentaはGoogleBrainチームによるプロジェクトです。
DeepLearningを用いて芸術作品、音楽を作ろうとしています。
ブログ: https://magenta.tensorflow.org/
Github: https://github.com/tensorflow/magenta
2016/6/1に発表され、更新が続けられています。
モデル
magentaには現時点で、モデルが6つあります。
主に音楽生成のモデルで、1つ画風生成のものがあります。
音楽生成
音楽も言語などのように、それまでどのような音が出ていたかが、その次の音を決めるのに影響を与えます。そのため、magentaではRNNが用いられています。
また、用いるデータはMIDIデータのため、学習させたい音楽のMIDIを準備する必要があります。
-
melody_rnn
- magentaの中でも一番初めに(?)公開されたモデル
- LSTMでメロディを生成する
- 1音ずつメロディを与えていき、次の音符を予測する。
- 読み込む音、鳴る音は1つのみ
-
melody_rnn
には3つの種類があるBasic
-
LookBack
: 1小節、2小節前のメロディが繰り返されやすくなっており、より音楽らしくなる -
Attention
: ある時点でのステップから出力する際に、直近のいくつかの出力を参考にする
-
polyphony_rnn
- 複数の同時音のモデリングが可能になっている。(後述のimprov_rnnも可能)
- 複数音の響きを1つのかたまりとして捉えて学習している
-
improv_rnn
- 基本的には前述の
melody_rnn Basic
と似ていますが、音をコード(C7等)に変換し学習するところが異なっている -
Basic Improv
: MIDIから48のコードにベクトル化し学習している。(48というのは、ドからシの音まで黒鍵白鍵の数が12で、それぞれにつき、major/minor/augmented/diminishedの4パターンあるから。) -
Attention Improv
:melody_rnn Attention
を基とし、コードで学習させたもの -
Chord Pithces Improv
:Basic Improv
と近いですが、コードのベクトルではなく、ドからシまでの音のどれが鳴っているかの長さ12のベクトルに変換し、学習する
- 基本的には前述の
-
rl_tuner
- 強化学習 DQN で実装されたモデル
- LSTMで学習した内容と、音楽理論の2つを報酬とし、強化学習を行う。
-
drums_rnn
- ドラムのトラックを生成するモデル
-
One Drum
: すべてのドラムの音を1つのドラムに集約して、何かしらのドラムが叩かれたかどうかだけを学習する -
Drum kit
: バスドラムやスネアなど9つのドラムの叩かれる組み合わせを512行のOne-hot vectorにして学習
画像生成
- image_stylization
- ある画像を、別の画像の様式を真似て、新たな画像に変換するモデル(画風を真似る)
- スマホアプリのPRISMAのようなことができる
- 学習済みのモデルとしては、モネやその他の数十名の画家のものが準備されている
- A Learned Representation For Artistic Styleの論文を参考にしたもの
- 自分で準備した画像での、モデルのトレーニングも可能。例えば新海誠さんの画像を集めれば、ある画像を新海誠さんテイストに変換できそうですね。
開発への参加方法
2016/12/20時点では、外部メンバーによるContributionはできないようです。
ただし、GoogleGroupでは議論が行われており、自由に参加可能です。質問もこちらで受け付けられてます。
難しさと終わりに
音楽データ、MIDIデータは、画像データと比べて収集が難しいのがネックかなと思います。アーティストを絞るとなると、さらに厳しくなるのではないでしょうか。
また、音楽理論の知識や基本用語などを知っている方は、より開発を進めやすいかと思います。
実装まで落とし込みたかったのですが、ここまでとなります。
ありがとうございました。