読者です 読者をやめる 読者になる 読者になる

あさのひとりごと

3日坊主にならないように、全力を尽くします。 記事は個人のひとりごとです。所属する組織の意見を代表するほど、仕事熱心じゃないです。

TensorFlowでAIとピアノ連弾してみた話

音楽は良いですね。
音楽は、お酒との相性が抜群です。

というわけで、、、、
TensorFlow/Magentaを使った
A.I.Duet」でコンピュータとピアノ連弾する方法をご紹介します。

おことわり
人工知能が音楽を生成するというと、
何かしらの知性や才能のようなものが宿って
そこから生んでいるという感じですが、

人工知能にとって、音楽は「音のデータの連なり」です。
そして、「音楽を生成する」ということは
「それまでの音のデータの連なりからして、適切な次の音を予測する」ということです。
from 同僚の@icoxfog417 先生の詩集より

TensorFlow/Magentaとは

機械学習とは、データが持つ数学的な構造をコンピュータによる計算で見つけ出すしくみのことです。
機械学習の中でも、特に注目を集めているのが、ディープラーニング(深層学習)と呼ばれているものです。

アートの世界での機械学習の応用も、多くはこのディープラーニングの技術を使っています。

TensorFlowは、米Google社がオープンソースとして公開してるディープラーニング対応ライブラリです。
TensorFlow/Magentaは、ディープラーニングを研究するGoogle人工知能部門である「Google Brain」による
ニューラルネットワークを使って、アートを生成するプロジェクトです。
f:id:dr_asa:20170314124427p:plain


オープンソースソフトウェアで、Githubで開発が進められています。
Magenta

A.I.Duetとは

パソコンのキーボード(または対応するMIDIキーボード)でメロディーを奏でると
コンピューターがデュエット演奏してくれるWebアプリです。

TensorflowのMagentaをつかい、事前にプログラムされたアルゴリズムではなく、
既存のメロディーを使った訓練を受け、そこで得た知識を使ってレスポンスを返します。

これを動かすDockerイメージをビルドしたので、遊んでみる手順を簡単に紹介します。

1.Dockerの実行環境構築

ここでは、Google Cloud Platformの仮想マシンでDockerを動かす手順を説明します。

まず、こちらの手順にしたがって、アカウント登録をしてください。
book.mynavi.jp


Cloud Shellとは、GCPのサービスをブラウザから操作できるツールです。
Cloud Consoleの右上のコンソールアイコンをクリックしてください。

f:id:dr_asa:20170314130309j:plain:w400


Cloud Shellで、次のコマンドを実行します。GCPの東京リージョンに、「n1-standard-1」サイズの仮想インスタンスが立ち上がります。

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

$ 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 \
  magenta


これで、Dockerの実行環境が構築できました。

なお、作成した仮想マシンSSHするときは、Cloud Consoleで[SSH]ボタンをクリックします。

f:id:dr_asa:20170314130710p:plain:w400


※なお、Dockerがうごく環境であれば、クライアントPCでもAWSでもAzureでも大丈夫です。
※Dockerって何?、、、そんなあなたは、「プログラマのためのDocker教科書」を図書館で借りてください!


2.「A.I.Duet」のコンテナを動かそう

Dockerが起動している環境にSSHで接続して、次のコマンドを実行します。

$ sudo docker run -it -p 80:8080 --rm --name magenta asashiho/ai-duet

3.「A.I.Duet」でピアノを弾こう

クライアントのブラウザから以下のURLにアクセスします。

http://<Dockerの動いているマシンのIPアドレス>/

こんな感じです。
www.youtube.com


おわりに

Googleらしい、とても面白い取り組みで、TensorFlow/Magentaすごく注目しています。



このMagentaを使ってMIDIデータから音楽を生成するしくみやノウハウなどをまとめた
Signalというタイトルの同人誌を出します。
NN/RNN/LSTMなどの理論や、実際にMagentaを使って音楽を生成する手順などを約40ページでまとめています。
理論は、同僚で共著の@icoxfog417 先生がしっかり書いて、それを私が読んで理解して動かすという感じです。
(想定読者が私になっているので、かなり易しく書かれています)
(私が書いた部分も、彼がきちんと監修してくれているので、ぜんぜん大丈夫です!)

f:id:dr_asa:20170313022558j:plain:w400


4/9(日)に秋葉原で開催される「技術書典2」で頒布しますので、ブース「き-03」にぜひ~!
techbookfest.org

詳しくは、まだ秘密ですが、、、、、
こんな感じです!
www.youtube.com


会場では「littleBits」という簡単な電子工作キットを使って演奏を楽しめます~~~
jp.littlebits.com



おわり