【即スマホで試せる】55の深層学習実装 on Google Seedbank - 画像分類から翻訳、音楽生成まで 

> **2020/1/12:** リンク切れのため、一部修正
> **PR:** 2019年5月11日発刊の :books: [図解速習DEEP LEARNING](https://amzn.to/2J0QNGF)で、こちらの内容を日本語訳・整理して実行いただけるようになりました！

# TL;DR

- GoogleがTensorFlow/Kerasを中心としたNotebookをSeedbankに集約、公開
- ここにあるものは、Colaboratoryで環境構築なし、GPUありで即実行できる
- Seedbankタグづけを、ドメインごと分類に再整理、簡単な日本語解説をつけた
- そもそもデータ分析/人工知能ってはこちら: [2018年の人工知能、データ分析 - できること、できないことのホントノトコロ｜tomo_makes｜note](https://note.mu/tomo_makes/n/na7676fa64380)
- Colab概要はこちら: [【秒速で無料GPUを使う】深層学習実践Tips on Colaboratory - Qiita](https://qiita.com/tomo_makes/items/b3c60b10f7b25a0a5935)
- **注意:** 全コードの、スマホ上での実行は試していません。Colabが開くこと、一部コードの実行のみ確認しました

|Category |title    |dataset   |model    |
|--- |---      |---       |---      |
|Image/Video|[Classifying Handwritten Digits](https://research.google.com/seedbank/seed/classifying_handwritten_digits)|MNIST|MLP|
||[Fashion MNIST with tf.keras](https://research.google.com/seedbank/seed/fashion_mnist_with_tfkeras)|FashionMNIST|MLP|
||[Match images using DELF and TF-Hub](https://research.google.com/seedbank/seed/match_images_using_delf_and_tfhub)|The Google-Landmarks dataset|DELF|
||[TF-Hub Action Recognition Model](https://research.google.com/seedbank/seed/tfhub_action_recognition_model)|UCF101|I3D|
||[DeepDream](https://research.google.com/seedbank/seed/deepdream)|ImageNet|inception5h|
||~~Compare GAN~~|CelebA HQ, LSUN Bedroom, CIFAR10|Various GANs|
||[CycleGAN: Unpaired Image to Image Translation](https://research.google.com/seedbank/seed/cyclegan_unpaired_image_to_image_translation)|-|CycleGAN|
|Sound/Music|[E-Z NSynth](https://research.google.com/seedbank/seed/ez_nsynth)|[The NSynth Dataset](https://magenta.tensorflow.org/datasets/nsynth)|WaveNet-style AE|
||[Audio Style Transfer](https://research.google.com/seedbank/seed/audio_style_transfer)|-|WaveNet decoder/NSynth encoder|
||[Variational auto-encoder for music.](https://research.google.com/seedbank/seed/variational_autoencoder_for_music)|MIDI dataset(closed)|HLSTM/BLSTM VAE|
||[Performance RNN](https://research.google.com/seedbank/seed/performance_rnn)|[ Yamaha e-Piano Competition dataset](http://www.piano-e-competition.com/)|LSTM|
||[Piano Transcription](https://research.google.com/seedbank/seed/piano_transcription)|[MAPS dataset](http://www.tsi.telecom-paristech.fr/aao/en/2010/07/08/maps-database-a-piano-database-for-multipitch-estimation-and-automatic-transcription-of-music/)|CNN+BLSTM|
|Text/Lang|[Classify movie reviews using tf.keras](https://research.google.com/seedbank/seed/classify_movie_reviews_using_tfkeras)|IMDB|Embedding+MLP|
||[Text classifier with TF-Hub](https://research.google.com/seedbank/seed/text_classifier_with_tfhub)|[Large Movie Review Dataset v1](http://ai.stanford.edu/~amaas/data/sentiment/)|Embedding+MLP|
||[CharRNN](https://research.google.com/seedbank/seed/charrnn)|shakespeareの一編|LSTM|
||[Generate Shakespeare using tf.keras](https://research.google.com/seedbank/seed/generate_shakespeare_using_tfkeras)|shakespeare dataset|LSTM|
||[Neural Translation with Attention](https://research.google.com/seedbank/seed/neural_translation_with_attention)|[Anki](http://www.manythings.org/anki/)|seq2seq|
||[Tensor2Tensor: Translate from English to German with a pre-trained model](https://research.google.com/seedbank/seed/tensortensor_translate_from_english_to_german_with_a_pretrained_model)|-|tensor2tensor|

# 実行手順
## PCブラウザ

- リンク先から `Open Seed in Colab` を押す
- ソースコードは、セルを選択し `左上の再生ボタンを押す` または `Shift + Return` で実行できる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64608/622062e3-50f8-b629-cac2-383903c0372a.png)

- 基本GPUを利用により、コード実行時に早く進められる
    - メニューの `ランタイム> ランタイムのタイプを変更` から、 `ハードウェアアクセラレータ` に `GPU` を選択


## スマホブラウザ

- iOS/AndroidいずれかのChromeでリンク先を開き、 `Open Seed in Colab` を押し、実行方法は同上


# 領域別のSeedリストと簡易解説

> 以降の画像は、特に注釈のない限り [Seedbank](http://tools.google.com/seedbank/) から引用したものです

## 画像や動画 Image & Video

基本のMNISTから動画のコンテキスト推定までの分類、DeepDreamに始まりCycleGANなどメジャーなGANが動かせます。

### 分類 Classification

- [Classifying Handwritten Digits](https://research.google.com/seedbank/seed/classifying_handwritten_digits)
  - ベーシックな手書き文字認識(MNIST分類)に加え、hidden layerの重み可視化
  - Googleの[Machine Learning Crash Course](https://developers.google.com/machine-learning/crash-course/)提供
- [Fashion MNIST with tf.keras](https://research.google.com/seedbank/seed/fashion_mnist_with_tfkeras)
  - `tf.keras` で衣服写真を分類。TensorFlowの全体像をざっくり掴める構成
- [Match images using DELF and TF-Hub](https://research.google.com/seedbank/seed/match_images_using_delf_and_tfhub)
    - DELFを使った特徴点ベースの特定物体認識
    - Deep Learningのブレークスルーとして取り上げられるImagenetのILCVRは一般物体認識で、「犬」「猫」など一般名詞相当の検出。特定物体認識は「エッフェル塔」「東京タワー」など固有名詞相当の検出。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/64608/9f05124a-61e7-380b-b6cd-1ade4096e091.png)
- [TF-Hub Action Recognition Model](https://research.google.com/seedbank/seed/tfhub_action_recognition_model)
    - Inflated 3D Convnets(I3D)を使った動画のコンテキスト認識

### 生成 Generative

- [DeepDream](https://research.google.com/seedbank/seed/deepdream)
  - 学習済みモデルを使い、自分の好きな画像でDeepDreamの再現できる
  - ![image.png](https://qiita-image-store.s3.amazonaws.com/0/64608/4a85bb1e-a734-f643-4eb9-8f2b89f15da7.png)
- ~~Compare GAN~~ (削除されたようです 2020/1/12追記)
    - GANのレビュー論文 "Are GANs Created Equal? A Large-Scale Study" paper (https://arxiv.org/abs/1711.10337) と、 "The GAN Landscape: Losses, Architectures, Regularization, and Normalization" (https://arxiv.org/abs/1807.04720) で使われた学習済みGANモデルを試し、比較できる
    - ![image.png](https://qiita-image-store.s3.amazonaws.com/0/64608/e22b484c-e1cb-87c7-6f9c-0a6988f3992a.png)
    - `Run this cell and select which GAN module to use below` セルを実行すると、下記のリストから選べる
    - ![image.png](https://qiita-image-store.s3.amazonaws.com/0/64608/d4706b9c-9ca1-26b3-bcd2-ed943f297c30.png)
- [CycleGAN: Unpaired Image to Image Translation](https://research.google.com/seedbank/seed/cyclegan_unpaired_image_to_image_translation)
    - あの有名な馬動画がシマウマになってしまうCycleGANの実装と解説。MOOCsの[Kadenze](https://www.kadenze.com/)提供
    - ![image.png](https://qiita-image-store.s3.amazonaws.com/0/64608/579549e2-7616-f8cf-01be-a9b56184a150.png)

## 音や音楽 Sounds & Music

音は通常、音の波形で扱う。音楽は、音の波形を直接扱う場合と、系列(譜面、およびそれがデータ化されたMIDI等)で扱う場合がある。適用するアルゴリズムが異なる。

### 分類 Classification

- なし

### 生成 Generative
#### 波形

- [E-Z NSynth](https://research.google.com/seedbank/seed/ez_nsynth)
    - TensorFlowのアート適用プロジェクト [Magenta](https://magenta.tensorflow.org/)発の、シンセ用音合成ができるWaveNet autoencoder
- [Audio Style Transfer](https://research.google.com/seedbank/seed/audio_style_transfer)
    - 音のスタイル変換

#### 系列

- [Variational auto-encoder for music.](https://research.google.com/seedbank/seed/variational_autoencoder_for_music)
    - Magentaの詳細ページ: [MusicVAE: Creating a palette for musical scores with machine learning.](https://magenta.tensorflow.org/music-vae)
- [Performance RNN](https://research.google.com/seedbank/seed/performance_rnn)
    - Magentaの詳細ページ: [Performance RNN: Generating Music with Expressive Timing and Dynamics](https://magenta.tensorflow.org/performance-rnn)
- [Piano Transcription](https://research.google.com/seedbank/seed/piano_transcription)
    - 自動で譜面化


## 文章や言語 Text & Language

テキストは、言語によらず単語に分割、その特徴量ベクトル(embedding)を計算し、それらを平均する等して文や文章の特徴量ベクトルを計算。それを分類や生成に使う。

> こちらの資料に詳しい [[最新版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」](https://www.slideshare.net/yukiarase/jsai2018-101054060)

### 分類 Classification

- [Classify movie reviews using tf.keras](https://research.google.com/seedbank/seed/classify_movie_reviews_using_tfkeras)
    - positive/negativeの分類器を作る。 `Embedding -> GlobalAveragePooling1D -> ReLu -> sigmoid` というシンプルなNN
- [Text classifier with TF-Hub](https://research.google.com/seedbank/seed/text_classifier_with_tfhub)
  - TF-Hubテキストembeddingモジュールを使った感情分析。応用として転移学習も、問題点含め取り上げる
- [CharRNN](https://research.google.com/seedbank/seed/charrnn)
    - Karpathy氏の、文字レベルLSTMを使ったテキスト生成モデルに、シェイクスピアの文章を食わせて試してみる


### 生成 Generative

- [Generate Shakespeare using tf.keras](https://research.google.com/seedbank/seed/generate_shakespeare_using_tfkeras)
    - `tf.keras` と `eager` を使い、シェイクスピアの文章で学習したモデルによる、シェイクスピア風テキスト生成
- [Neural Translation with Attention](https://research.google.com/seedbank/seed/neural_translation_with_attention)
    - `tf.keras` と `eager` を使った、スペイン語から英語へのseq2seq翻訳
- [Tensor2Tensor: Translate from English to German with a pre-trained model](https://research.google.com/seedbank/seed/tensortensor_translate_from_english_to_german_with_a_pretrained_model)
    - T2Tを使ってみる

### ツール/その他

- Pretrained Word Embeddings
  - 学習済みのword embeddings。gensimで学習済みのembeddingsを読み込み使う(word2vec, googlenews)
- Mitigating Unwanted Biases
    - モデルバイアスについて1
- Conversation AI's Pinned AUC Unintended Model Bias Demo
    - モデルバイアスについて2

### 教師なし Unsupervised

- Manifold Learning
  - 高次元データから低次元の構造を取り出す
  - ![image.png](https://qiita-image-store.s3.amazonaws.com/0/64608/b09fc2c8-e2ba-8c0f-fca1-32ff045fb13a.png)


## ドメイン共通
### 基本

- [Seedbank: Filtered by: mlbasics](http://tools.google.com/seedbank/seeds?keyword=mlbasics)
    - Googleの[Machine Learning Crash Course](https://developers.google.com/machine-learning/crash-course/)提供のもの中心

### NNの解釈性

- [The Building Blocks of Interpretability](https://distill.pub/2018/building-blocks/) シリーズ
    - Lucid: A Quick Tutorial
      - NNの内部状態を可視化するライブラリ Lucidのtutorial
      - DeepDreamの流れをくむ、より柔軟にNNの解釈性についてのリサーチ等に使える
    - Spatial/Channel Attribution
      - 画像のどこを切り取るとより反応するか=空間的な依存性(spatial attribution)
    - Activation Grid Visualizations
      - activation gridの可視化で、画像がある特定のレイヤでどう解釈されているか確認
    - Semantic Dictionaries
      - 抽出された特徴量から、人間の解釈できる画像を取り出す
    - Neuron Groups
      - 協調して発火するニューロングループ=関連する特徴を協調して検知しているもの

# まとめ

- Colabいいよおじさんとしては、Colaboratory界隈のここ半年の発展は本当に面白い

# 関連

Colaboratoryって何、という方は下記をご参照ください

- [【スマホOK/実行しながら学ぶ】東大松尾研のデータサイエンティスト育成/ Deep Learning基礎講座を自習する - Qiita](https://qiita.com/tomo_makes/items/5d6f5860bb793e3b354a)
- [【秒速で無料GPUを使う】深層学習実践Tips on Colaboratory - Qiita](https://qiita.com/tomo_makes/items/b3c60b10f7b25a0a5935)
- [【秒速で無料GPUを使う】TensorfFow/Keras/PyTorch/Chainer環境構築 on Colaboratory - Qiita](https://qiita.com/tomo_makes/items/f70fe48c428d3a61e131)