AWS DeepComposer で GAN をはじめよう！

AWS re:Invent 2019 で発表された AWS DeepComposer というサービスが 2020年4月5日 に一般ローンチされました！
https://aws.amazon.com/jp/blogs/news/aws-deepcomposer-now-generally-available-with-new-features/

## AWS DeepComporser ってなあに？
機械学習を触って学ぶことができる AWS Deep シリーズ[^1] の最新作である、 AWS DeepComposer は、機械学習のうち、敵対的生成ネットワーク(GAN)モデルを利用して、オリジナルの楽曲を作り出すことができるものです。

[^1]: AWS DeepLens, AWS DeepRacer, AWS DeepComposer

### 敵対的生成ネットワーク(GAN) ってなあに？
https://ja.wikipedia.org/wiki/%E6%95%B5%E5%AF%BE%E7%9A%84%E7%94%9F%E6%88%90%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF

>GANsは生成ネットワーク（generator）と識別ネットワーク（discriminator）の2つのネットワークから構成される。例として画像生成を目的とするなら生成側がイメージを出力し、識別側がその正否を判定する。生成側は識別側を欺こうと学習し、識別側はより正確に識別しようと学習する。このように2つのネットワークが相反した目的のもとに学習する様が敵対的と呼称される所以である

ざっくりいってしまえば、元になるデータ(例：画像)の特徴を含んだ新しいデータ(画像)を生み出すことができる技術とイメージすればよいでしょう。古い画像に対して色を付けたり、古く低画質な画像を高画質にしたり・・・


### AWS DeepComposer では結局何ができる？
AWS DeepComposer では元になるデータが音、楽曲になっています。
AWS DeepComposer キーボードやマネージメントコンソールのソフトウェアキーボードなどで奏でた旋律に対して、機械学習の力で伴奏を付けることができ、ポップスやロック、ジャズ、シンフォニーといったモデルを使って簡単に作編曲が行えます。

また、曲ジャンル(データセット)を選び、GAN アーキテクチャやハイパーパラメータを指定し機械学習を実行することで、サンプルとは異なるモデルを構築することも可能です。このモデルを使っての楽曲出力も可能です。

生成した楽曲については、midi や mp3 での出力、 [SounCloud](https://soundcloud.com/)での共有が行えます。


## さあ、はじめてみよう！

というわけで、 AWS re:Invent 2019 で頂いた AWS DeepComposer キーボードを利用して試してみました。
Amazon.com が発送してくれる地域、手段があれば[ここ](https://www.amazon.com/dp/B07YGZ4V5B)から購入することも可能です。
※残念ながら、執筆時点では日本への配送は不可でした。

しかし、手に入れることができなくても、AWS DeepComposer に用意されているソフトウェアキーボードを利用したり MIDI に対応したキーボードをお持ちであれば利用可能です。

### AWS DeepComposer キーボード開封の儀
外箱です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/fb77e62c-429e-a12b-dfe6-cc9645ee3ce1.png)

開けました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/d98ccda6-4a78-76c6-5d14-95dfc75c3019.png)

取り出しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/9e193fbb-9c07-e8f4-d811-663186bba5f0.png)

設置しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/63a881dd-8f45-dec3-3ee8-733ffea276d8.png)

右上の aws ロゴがクールですね。

### AWS DeepComposer を使うには・・・
AWS マネージメントコンソールへログイン後、使用するリージョンを「**米国東部(バージニア北部)** us-east-1」に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/3b037b9a-37f1-4ad3-1c2f-36e0dfb3e0df.png)


画面上部の**サービス**を開き、開いたメニューをスクロールさせ、 Machine Learning のセクションにある **AWS DeepComposer** を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/92bc8466-5367-5e10-fe1a-10394143602d.png)

もしくは、検索エリアに AWS DeepComposer と入力して表示させて、選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/521c04b2-0244-bbf3-9df3-6fbea7b62a9a.png)

### メニューを確認
AWS DeepComposer ではどんなことができるのかを学びたい方は、 [Get started]  ボタンをクリックして始めるとよいでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/c3a4b14a-fdc9-1d54-1db9-ac030494e755.png)

とりあえず、さくっと触ってみたい場合は、画面左のハンバーガーアイコン[Ξ]をクリックするとメニューが表示されます。
執筆時点では以下のメニューが存在しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/3a668953-502b-c862-cfa2-155bdcae0adc.png)


#### Getting started
AWS DeepComposer のトップ画面にある「Get started」ボタンをクリックした先と同じ画面が表示されます。
ここでは、順を追って 敵対的生成ネットワーク(GAN)や AWS DeepComposer の使い方(始め方)を学ぶことができます。

#### Music studio
ここでは、接続した AWS DeepComposer キーボードや画面上のソフトウェアキーボードを通して奏でたメロディを録音したり、学習済みモデルを指定して楽曲を生成したりすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/0fc497c6-c663-fe81-c215-893da77ce456.png)



MIDI 機器を接続すると以下の画面が表示されます。
音が出ない場合は、いったん別のメニューに飛んでから Music studio を表示し直すと音が出るようになりますよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/52fc8bc6-7799-304d-8329-0f1ef93526e4.png)


#### Models
サンプルモデルの確認やモデルの構築、構築済みモデルの管理が行えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/cdc327ac-9e33-970f-fde5-24c6e4ea36f9.png)

各モデルはこのように視覚化されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/74ac24a8-8369-3210-1366-e07474b2561c.png)


#### Compositions
生成した楽曲を管理することができます。
初期執筆時点では削除できませんでしたが、2020/5/7に確認したところ、削除操作が行えるようになっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/8d871f07-2d9c-06bf-361f-5e96826d3347.png)


#### Learning capsules
ラーニングカプセルとは、 AWS re:Invent 2019 での発表時にはなかった新機能のひとつで、AWS DeepComposer で利用可能なアーキテクチャやトレーニングパラメーター、モデル評価ツールの詳細を学ぶことができます。
このコンテンツは今後も増えていくようです。

##### Introduction to generative adversarial networks
敵対的生成ネットワーク(GAN)について学ぶことができます。

#### Link AWS DeepComposer keyboard
Amazon.com で購入した AWS DeepComposer キーボードを登録することができます。
登録することで、以下の特典が得られます。

* 3か月間の無料体験
 * 毎月4つのカスタムモデルの構築
 * 構築したモデルを用いて40回までの楽曲生成

ちなみに、これとは別に、AWS DeepComposer では12か月の無料体験枠が存在ます。
そちらでは、 サンプルモデルを利用した 500回までの楽曲生成が行えます。

コードの登録に成功すると以下のメッセージが画面上部に表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/5fec80e6-7ea7-840c-0beb-8419609bd1b4.png)


Firefox で表示すると、なぜかここで限定サポートのブラウザである旨ののメッセージが出力されました。
Firefoxをご利用の方はご注意ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/c6c528a3-4e7b-8222-0f0f-15d75d588f67.png)

また、登録する際には AWS DeepComposer キーボードの接続が必須のようです。
接続し、ブラウザが認識してくれると以下のような表示がなされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/f06357ff-35aa-c8d2-9639-856f0a6357f3.png)


接続していても、ブラウザが認識してくれないと以下のメッセージが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/d5c9bc13-9b6c-6932-3964-ccfb63521e21.png)
Firefox のように限定サポートのブラウザの場合はメッセージが異なります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/571884a3-b386-7681-d655-d9be623fc9a8.png)

#### AWS DeepComposer Forum
AWS 公式の DeepComposer フォーラムへのリンク。質問事項や要望、動作不具合などはこちらにポストするようです。

## 弾いてみた
色々な入力ソースで試し弾きをしてみました。
ドーレーミーのように上がっていき、ドーシーラーと下がっていくようにしました。
入力した際の音源と、サンプルモデルの Rock で伴奏を付けたものを youtube にアップしました。
入力ソースによって操作性が異なるため、拍などが異なるのはご了承ください。

### ソフトウェアキーボード
#### マウスクリック
うん、むずかしい！！笑
この一言に尽きます。

[![マウスで操作](http://img.youtube.com/vi/J3tSB-tHioE/0.jpg)](http://www.youtube.com/watch?v=J3tSB-tHioE)
※クリックすると youtube で動画が再生されます。

#### キーボード(文字入力装置)
文字入力用のキーボードでも弾くことは可能です。当初執筆時は設定を自分でしないとなりませんでしたが、2020/5/7に確認した際には、デフォルトで有効状態になっていました。
もし、有効ではなく文字入力用キーボードで弾けない場合は以下から設定できます。

Music studio のソフトウェアキーボードのちょっと上にある Hotkeys をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/65dbddcf-f584-8b57-e9ba-b94b126c9d47.png)

すると、ソフトウェアキーボードの各鍵盤に文字入力用キーボードに対応した文字が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/330872cd-5c20-4dbb-d292-223a8d82e7c0.png)
日本語キーボードだと「シ」(上記画像でいうところの ; と M の間)が打てません。
macOS で確認したところ、入力ソースとして「イギリス」を選ぶとよさそうでした。

手っ取り早く試すにはよい選択肢かもしれません！

[![文字入力用キーボードで操作](http://img.youtube.com/vi/Y-P8-dGNEgg/0.jpg)](http://www.youtube.com/watch?v=Y-P8-dGNEgg)
※クリックすると youtube で動画が再生されます。

### ハードウェアキーボード
#### AWS DeepComposer キーボード
専用キーボードなので前述のマウスクリックや文字入力用キーボードと比較すると弾きやすい(入力しやすい)です。
ただ、 MIDI キーボードのためか意識して強めに弾かないと音が出ないことがありました。

[![AWS DeepComposer キーボードで入力](http://img.youtube.com/vi/TXG9JiAxzFE/0.jpg)](http://www.youtube.com/watch?v=TXG9JiAxzFE)
※クリックすると youtube で動画が再生されます。

#### MIDI キーボード(Alesis VORTEX)
ショルダーキーボード、キーターと呼ばれる楽器です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/30990177-d516-85e8-a3dd-d4cdf9ebd369.png)


こちらも弾きやすいですが、 AWS DeepComposer キーボードと同様に、意識して強めに弾かないと音が出ないことがありました。

[![MIDI 対応ショルダーキーボードで入力](http://img.youtube.com/vi/qWGKtJ-yHcc/0.jpg)](http://www.youtube.com/watch?v=qWGKtJ-yHcc)
※クリックすると youtube で動画が再生されます。

#### MIDI ウインドシンセ(AKAI EWI USB)
F1 の曲の楽器！といえば理解が早いのではないでしょうか。
ウインドシンセサイザーと呼ばれる楽器です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/06b6fccf-7001-0532-29fe-760826c63696.png)



「キーボード」ではないですが、 MIDI 対応楽器のため参戦させました。
久しぶりに吹いたので難しかったですが、入力認識としては、次のクラビノーバに次いでよかったです。

[![MIDI 対応ウインドシンセサイザーで入力](http://img.youtube.com/vi/8ZM9cFDQ87M/0.jpg)](http://www.youtube.com/watch?v=8ZM9cFDQ87M)
※クリックすると youtube で動画が再生されます。

#### MIDI 対応電子ピアノ(YAMAHA クラビノーバ)
YAMAHA の電子ピアノ！ MIDI に対応しており、USB ケーブルで mac などと簡単に接続できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/754dfd6f-b6b3-a197-3004-0d4f9462c51b.png)



ガチな楽器なため、弾き心地は最高でした。※演奏者の腕前が良ければ最高なのですが...

[![MIDI 対応電子ピアノで入力](http://img.youtube.com/vi/7e4kKLl0AAA/0.jpg)](http://www.youtube.com/watch?v=7e4kKLl0AAA)
※クリックすると youtube で動画が再生されます。

## まとめ
AWS DeepRacer のように報酬関数(Python 言語によるプログラミング)を必要とせずに、自分が弾いた旋律に伴奏を付けてくれることに感動を覚えました。
また、検証した通り、入力ソースとして MIDI に対応している機材であればなんでも使えそうなので、 DeepComposer キーボードがすぐに手に入らない状況でも楽しんで学ぶことができるかと存じます。

そして、機械学習に慣れ、モデルをがっつりと構築できれば、例えば、歌手の○○のようなアレンジやサンプルにはないジャンル(例えばデスメタルや演歌など)での生成といったことができそうですね。ワクワクします。