TensorFlow/Magentaを使ってディープラーニングで音楽制作をしよう!

  • 42
    いいね
  • 0
    コメント

インターンシップやリクルートなどで機械学習を勉強している学生の皆さん1とお話させていただくすることがあるのですが、私はそもそも機械学習に明るくないので、たわいもない雑談をするのも一苦労です。

というわけで、まずは「ディープラーニングを!TensorFlowを!」と
入門したわけですが、なんせ意識が低いので、なにか目標がないとなかなか続きません。

そこで、機械学習のスペシャリストな同僚と雑談したところ
「同人誌」作りながら勉強すればいいじゃないか!
と教えてくれることになり、、、

4/9(日)に秋葉原で開催された技術書だけの同人誌イベント「技術書典2」でディープラーニングをつかった音楽制作の本「SIGNAL」を出展させていただきました。
signal_cover_img.org.jpg

大人の事情で明確な言葉にできない、なにかがあったものの(笑)
おかげさまで沢山の方にご来場いただきました。

その同人誌の内容を、4/19(水)に弊社が主催しているコミュニティ「Tech-Circle」で勉強会をさせていただく予定ですが、定員をはるかに超えるお申込みをいただき、本当にありがたい限りです。

スタッフのキャパ不足2で、これ以上増員できないので、勉強会の内容は後日「crash.academy」で動画配信3させていただくことになりました。
講師は、TensorFlow UGのコアメンバーの一人でもある 弊社の @icoxfog417 が担当します。勉強会のハンズオンでは、ローカルPC上に環境を作って音楽制作を行う予定です。

というわけで、理論は動画を見ていただくこととして・・・

ここでは、Google Cloud Platform + Dockerを使って環境を構築して
・学習済みモデルを使って音楽を制作してみよう!
・好きな曲(MIDIファイル)からモデルを生成してみよう!
する手順を、ざっとまとめたいと思います。


1.TensorFlow/Magentaとは

Magentaは、ディープラーニングを研究する米Google社の人工知能部門であるGoogle Brainによって開発されています。Magentaはこのディープラーニングの研究結果をアートに適用するためのプロジェクトであり、開発されているソフトウェアの名称でもあります。Magentaは、Google社のディープラーニング対応機械学習ライブラリであるTensorFlowを使っています。

Magentaには、以下の機能があります。

■ アートの制作

既存の写真や絵画データをもとにして、新しいアートをコンピューターで作成できます。以下は、私のアイコン画像をもとに、Magentaの学習済みのモデルを使って、作風の異なるアート作品を作成した例です。
オリジナルデータ
startup_art_org.png

Magentaで色々な絵の画風を適用
startup_art_1.pngstartup_art_2.pngstartup_art_3.pngstartup_art_4.png

Magentaのソースコードはオープンソースで、GitHub上にて開発が進められています。

https://magenta.tensorflow.org/
startup_magenta.png

■ 音楽の制作

既存のMIDI音源をデータとして学習させることにより、新しい音楽をコンピューターで生成できます。音楽を自動生成というと、何かしらの知性や才能のようなものが宿ってそこから生んでいるという印象を受けますが、人工知能にとって、音楽は「音のデータの連なり」です。したがって、「音楽を生成する」ということは「それまでの音のデータの連なりから、適切な次の音を予測する」ということになります。

今回は、こちらの音楽制作についてご紹介します。

2.Magentaを動かそう

Magentaを動かすためには多くのソフトウェアのインストールが必要です。そこで、ソフトウェアの動作環境をコンテナという形でまとめて管理できるDockerを使います。今回は、このDockerを動かす環境として、GoogleのクラウドサービスであるGoogle Cloud Platform(以下、GCP)を利用します。

これから構築するMagentaを動かすための環境は、次のとおりです。

image

1. アカウント登録

まず、GCPを利用するためアカウントの登録をします。アカウント登録には、Gmailなどで利用しているGoogleアカウントとクレジットカードが必要です。はじめてGCPにアカウントを登録するときは、12か月300ドルまで無料試用できます(2017年4月現在)。

image

ブラウザから以下のURLにアクセスして、手順にしたがって登録を行ってください。
https://cloud.google.com/free/

2. プロジェクト作成

アカウントの作成が終了すると、Cloud Consoleと呼ばれるポータルページに移ります。
https://cloud.google.com/

まず、新しいプロジェクトを作成します。 [ホーム]―[ダッシュボード]を選択し、任意のプロジェクト名を入力して、[プロジェクトを作成]ボタンをクリックします。このプロジェクトの単位でサービスを利用しますので、分かりやすい名前をつけておきましょう。
startup_inst_01.png

Cloud Consoleでは、左上隅にあるボタン( image)を押すことでメニューを呼び出せます。
image

そこで、 [API Manager]―[ライブラリ]を選択します。そして「Google Compute Engine API」と入力し検索を行い、このAPIを「有効」にします。
startup_inst_02.png

3. 作業用マシン(Cloud Shell)の準備

Cloud Shellは、GCPのリソースを管理/操作するためのツールです。このCloud Shellを起動するには、Cloud Consoleの右上のアイコンをクリックします。すると、ブラウザ上でコマンド入力が可能なウインドウが立ち上がります。この黒い画面のCloud Shellからコマンドを実行することで、GCPのサービスを操作できます。
image

これで環境構築の準備が整いました。

4. サーバー作成

では、Magentaを動かすための環境(サーバー)を作成していきます。まず以下のコマンドでこのプロジェクトのIDを設定します。Cloud Shellにコマンドをコピー&ペーストしてください。

$ GCP_PROJECT_ID=$(gcloud config list project --format "value(core.project)")

次に、以下のコマンドをCloud Shellにコピー&ペーストしてください。このコマンドを実行すると、プロジェクト内にDockerを動かすことのできるサーバーが自動で出来上がります(構築には数分かかります)。

$ docker-machine create --driver google \
  --google-project $GCP_PROJECT_ID \
  --google-zone asia-northeast1-a \
  --google-machine-type n1-standard-1 \
  --google-machine-image https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1404-trusty-v20161109 \
  tensorflow-magenta

これで、「tensorflow-magenta」という名前のサーバーが起動できました。Cloud Consoleのメニューから「Compute Engine」を開き、緑のチェックアイコンが表示されていれば、OKです!
image

3.Magentaで音楽制作しよう

これで、Magentaの環境の準備ができたので、学習済みモデルを使って実際に音楽を生成してみましょう。音楽を制作する流れは次の通りです。

image

1.Magentaのコンテナ起動

それでは作成したMagentaの環境にアクセスします。Cloud Consoleから[Compute Engine]-[VMインスタンス]をクリックし、作成した「tensorflow-magenta」の[SSH]接続ボタンをクリックします。
image

ブラウザで別ウインドウが立ち上がり、コンソール画面が表示されます。
これで、「tensorflow-magenta」サーバーの中にログインしている状態になります。
image

このコンソールで、次のコマンドをコピー&ペーストし、Magentaのコンテナを起動します。

$ sudo docker run -it -p 6006:6006 -v /tmp/magenta:/magenta-data tensorflow/magenta

これで、Magentaで音楽が生成できる準備がすべて整いました。

2.音楽の生成

それではいよいよ、音楽を制作します。

次のコマンドは、学習済みのモデルからMagentaが10曲を作成するものです。曲数は、「num_outputs」で指定しますので、たとえば20曲作りたいときは、この値を「20」にします。

$ melody_rnn_generate \
  --config=lookback_rnn \
  --bundle_file=/magenta-models/lookback_rnn.mag \
  --output_dir=/magenta-data/lookback_rnn/generated \
  --num_outputs=10 \
  --num_steps=128 \
  --primer_melody="[60]"

コマンドの「\」は改行を表します。コマンドをコピー&ペーストして実行してください。
image

これで、音楽が制作できました。

3.音楽のダウンロード

出来上がった音楽を、パソコンで聞くためダウンロードしましょう。次のコマンドを実行して生成された音楽ファイル(MIDI形式)をmidi.zipという名前で圧縮します。

$ sudo su
# cd /magenta-data/lookback_rnn
# zip -r midi.zip generated/

データは、サーバー上の/tmp/magenta/lookback_rnn/に保存されています。Cloud Shellの画面右上の設定アイコンから、「ファイルをダウンロード」をクリックします。
image

次のように、ダウンロードするファイルを「/tmp/magenta/lookback_rnn/midi.zip」として「ダウンロード」ボタンをクリックします。

image

4.音楽の再生

Magentaで作成した曲を再生してみます。お使いのPCにダウンロードした「midi.zip」をパソコンで解凍します。解凍したフォルダにMIDIファイルが入っていますので、これを聴いてみましょう。

Windowsの場合は、ファイルをダブルクリックするとWindows Media Playerが起動し音楽が再生されます。10曲いずれも異なる曲ですので聞き比べてみてください。

image

5.後片付け

音楽制作が終わったらサーバを停止します。サーバーを完全に削除するには、Cloud Shellから以下のコマンドを実行します。

$ docker-machine stop tensorflow-magenta
$ docker-machine rm tensorflow-magenta

これでMagentaを使って、音楽を制作できました。

長くなりましたので、次回「オリジナルのMIDIデータをもとに、学習済みモデルを生成する手順」をご紹介します。

:musical_score: Let's Enjoy Music :musical_score:


  1. みんな超絶優秀です 

  2. なにをかくそう、私が参加できない。。。。。 

  3. R18の関係上、リアルタイム配信ではなく後日配信になります。われわれは、かしこいので。