今話題のAIをweb上で誰でも気軽に作れる「AIメーカー」を作ってみた


<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">今話題のAIをweb上で誰でも気軽に作れる「AIメーカー」を開発しました！<br>①AIに覚えさせたいタグを入力<br>②タグから自動で画像データを収集<br>③AIがデータから学習<br>の３ステップで誰でも簡単にAIを作れます！<br>動画では手相占いのAIに挑戦！<br>みんなもAIを作って遊んでみてね！<a href="https://t.co/66DFU7GRZ2">https://t.co/66DFU7GRZ2</a> <a href="https://t.co/ie1LmioyA1">pic.twitter.com/ie1LmioyA1</a></p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1019741210217365504?ref_src=twsrc%5Etfw">2018年7月19日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

---

こんにちは、2z（Twitter： [@2zn01](https://twitter.com/2zn01) ）です。
はじめてのQiita記事です。



今話題のAIをweb上で誰でも気軽に作れる「AIメーカー」を開発しました！

■AIメーカー
https://aimaker.io/


## 作ったもの

以下の３ステップで誰でも簡単にAIを作れます！

1. AIに覚えさせたいタグを入力
2. タグから自動で画像データを収集
3. AIがデータから学習

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">今話題のAIをweb上で誰でも気軽に作れる「AIメーカー」を開発しました！<br>①AIに覚えさせたいタグを入力<br>②タグから自動で画像データを収集<br>③AIがデータから学習<br>の３ステップで誰でも簡単にAIを作れます！<br>動画では手相占いのAIに挑戦！<br>みんなもAIを作って遊んでみてね！<a href="https://t.co/66DFU7GRZ2">https://t.co/66DFU7GRZ2</a> <a href="https://t.co/ie1LmioyA1">pic.twitter.com/ie1LmioyA1</a></p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1019741210217365504?ref_src=twsrc%5Etfw">2018年7月19日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 画面イメージ


### 学習データの登録画面

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">学習データを各ラベル名から自動で収集する機能を実装！<br>これはなんとAidemyの石川さん(<a href="https://twitter.com/ai_aidemy?ref_src=twsrc%5Etfw">@ai_aidemy</a>)よりアドバイス頂いたアイディアです！大感謝！！<br>僕も最近始めたところですが、Aidemyは機械学習、ブロックチェーンなど最新の技術も勉強できておすすめです！<a href="https://t.co/gORhd5P7Ls">https://t.co/gORhd5P7Ls</a><a href="https://twitter.com/hashtag/AI%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#AIメーカー</a> <a href="https://t.co/2cNpjzjPAl">pic.twitter.com/2cNpjzjPAl</a></p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1015879835753672705?ref_src=twsrc%5Etfw">2018年7月8日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### モデルの学習画面

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">複数AIのモデル学習を並列で走らせる対応も無事完了！<br>（処理の裏側では複数のGPUサーバが走っている）<br>学習には時間がかかってしまうため、エポック数(訓練データを何回繰り返して学習させるか)は500に調整し、10分以内には終わるように。<br>精度よく学習させたい人は応相談にしておこう<a href="https://twitter.com/hashtag/AI%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#AIメーカー</a> <a href="https://t.co/ukM3sg9rNG">pic.twitter.com/ukM3sg9rNG</a></p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1015723522696536065?ref_src=twsrc%5Etfw">2018年7月7日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### モデルの学習履歴

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">学習履歴を一覧表示して、グラフを切り替えれるようにしてみた。<a href="https://twitter.com/hashtag/AI%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#AIメーカー</a> <a href="https://t.co/wxcxZ3HXLE">pic.twitter.com/wxcxZ3HXLE</a></p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1015809482100654081?ref_src=twsrc%5Etfw">2018年7月8日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### モデルの推論結果画面

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">AIメーカーの診断結果へ無駄にグラフを追加してみた！<a href="https://twitter.com/hashtag/AI%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#AIメーカー</a> <a href="https://t.co/YCTaBDawhh">pic.twitter.com/YCTaBDawhh</a></p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1018035942794260480?ref_src=twsrc%5Etfw">2018年7月14日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


## なぜ開発したか？

### ・ディープラーニングに可能性を感じた

世の中ではAIが何でもできるというイメージが広まってしまい、ちやほやされすぎてる印象ですが、ディープラーニングは言語化できない＝プログラム化できないものを機械が取り扱えるという点でこれまでのものと比べても画期的な技術だと思っています。

普段、会社でwebシステムの開発、また趣味でもwebサービスの開発をしていることもあり、特にディープラーニングをwebと組み合わせることで色んな可能性があるなぁとすごく感じてます！

### ・環境構築・GPUサーバ費用にハードルがある

ディープラーニングのライブラリは色んなものが出揃って手を出しやすくなってはいますが、処理時間がすごくかかってしまうために高価なGPUサーバを用意する必要がある点、専用の環境を構築しないといけない、などなど、まだまだハードルがあると思っています。

そんな中なので、AIメーカーでディープラーニングを誰でも手軽に気軽に取り扱うことができれば、webの世界に面白い波がくるんじゃないかなと考えてます。

そこで、まずはなるべく手軽に始められるように、学習データを準備するだけでサーバも面倒な環境構築も必要なく利用できるサービスとして構想し始めました。

### ・AIでできることが漠然としている

僕自身、AIでできることが漠然としてしまっているので、こんなことができそうというのが考えることができて、実践できる場所にしたいと考えました。
僕もまだまだ勉強中ですが、こんなの出来たらいいのに、といった漠然としたアイディアをカタチにできるようなプラットフォームを目指したいです。

### ・オープンなAIを目指したい

百科事典ならwikipedia、地図ならOpen Street Mapのように、みんなが作ったAIをオープンに公開し、みんなでAIを便利に活用できる、そんな場所があったら面白いし、便利じゃないかと考えました！

オープンデータならぬ、オープンAIです！

### ・みんなのAIプラットフォームへ

AIをクローズドなものとして囲い込むのではなく、もっとオープンにみんなで共有すればもっと便利さを享受できると考えました。

そして、こんなAIが欲しいというのがあったら、みんなで協力してアイディアを出して、みんなで学習データを集め、AIを作ってみるのも良さそうです。

学習が完了したAIはみんなで活用します！みんなハッピー！


また、ディープラーニングの可能性を機械学習を扱う一部のエンジニアだけでなく、もっとみんなで考えてみましょう！

実際のところ、実際の問題や課題へのAI活用という意味では、エンジニアよりも本当に問題や課題に直面している当事者こそ、解決までの道を見誤らずにアイディアを生み出し、AIを活用していけるのではないかと思っています。

そのツールとして、まずは「AIメーカー」をとにかく使ってみる、遊んでみるところからはじめてみてほしいです。
あなたのちょっとしたアイディアが世界を変える可能性だってあります！
そのための「みんなのAIプラットフォーム」へ！

---

開発経緯や構想は以下のnote記事にも書いてますので、ぜひご覧ください！

* [僕がAIメーカーを開発して目指したい場所](https://note.mu/2zn01/n/n0e99c86bec5c)


## システム構成図

AIメーカーのシステム構成図は以下の通りです。

![AIメーカーシステム構成図.png](https://qiita-image-store.s3.amazonaws.com/0/273248/c551e30f-39a2-7a3b-eecc-6a70c982250a.png)



Amazon Web Services（以下、AWS）を使ってサービスを構築しました。

大きな構成としては、主にユーザからのリクエストを受け付けるフロントサーバと機械学習の処理を取り扱うバックエンドサーバの2つです。

それぞれ取り扱っている言語、フレームワークは以下の通りです。

* フロントサーバ：PHP（Zend Framework）
* バックエンドサーバ：Python（Flask）、Caffe（Deep Learning Framework）

ディープラーニングのフレームワークは Caffe を使っています。

あとはデータベースはAWSのRDS（MySQL）を使い、全インスタンスで学習データや学習済みモデルを共有するためにAWSのEFS（ネットワークファイルシステム）を使っています。

なお、GPUインスタンスはかなりコストが高いため、モデル推論のための1台を除き、学習が必要なときのみにインスタンスを起動して学習が完了するまでインスタンスを管理する仕組みとして構築しました。

## 実装で特に気をつけた箇所

### １．タスク管理

サーバに負荷がかかる処理が多いため、うまくタスク管理を行い、処理を非同期で実行する必要がありました。

具体的には、以下の2つです。

* 学習データ（画像）の収集
* モデルの学習

これらの処理はデータ数にもよりますが、数分～数十分かかることがあるため、ユーザからリクエストがあった際にはタスク管理用テーブルへタスクとして登録しておき、バックグラウンドでデーモンが先入れ先出しで順番に処理を行うようにしました。

これらは同時に多数のプロセスを走ると負荷的に厳しいため、同時並列で走るプロセス数は設定ファイルで制御するようにしています。

### ２．インスタンス管理

上記の「１．タスク管理」のモデルの学習と絡んでくるのですが、モデルの学習にはGPUインスタンスを使わないと、学習完了まですごく時間がかかってしまうため、インスタンスも同時に管理する必要がありました。

先述したようにGPUインスタンスは高いので、クラウド破産してしまわないようにモデルの学習開始と完了のタイミングにあわせて、AWSのGPUインスタンスの起動・停止を行っています。


### ３．学習データ（画像）の収集

画像の収集はサーバ側でMicrosoft AzureのBing Image Search APIを使って、収集しています。

* [Bing Image Search](https://azure.microsoft.com/ja-jp/services/cognitive-services/bing-image-search-api/)

こちらのBing Image Search APIの使い方は以下の記事がすごく参考になります。

* [Bingの画像検索APIを使って画像を大量に収集する](https://qiita.com/ysdyt/items/49e99416079546b65dfc)

なお、画像の収集においては、何度も同じ検索クエリが走ってしまわないように一定期間データをキャッシュするようにしています。

### ４．ファインチューニングによる精度向上

AIメーカーでは、モデルの学習時にファインチューニングという既存の学習済みモデルを再利用して、新しいモデルを構築する手法を用いています。
既に実績のある優秀な汎用モデルをベースに新たなモデルを構築するため、比較的少ないデータでもある程度精度の良いモデルが構築することが可能です！


## 今後の課題

AIメーカーでは誰もが手軽にシンプルに使えること、そして学習が早く終わるようにするため、現時点ではモデルの精度を犠牲にしています。

そのため、今後は精度向上のために学習の際のハイパーパラメータのチューニングをしたいとか、学習の回数をもっと増やしたいとかなどの要望に応えられるようにする必要があると感じています。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">学習自体はサーバ側でGPUを使ってやってます。<br>ただ、まずは手軽に利用できるように学習時間を大幅に削減するべく、本来もっと学習すべきエポック数を少なくしてるので、精度はそんなに出ないのが現状です。<br>こちら、精度を上げたい方はオプションでパラメータ調整を可能にしたり等、今後の課題です！ <a href="https://t.co/ZNfOUGxtS9">https://t.co/ZNfOUGxtS9</a></p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1020564024935583744?ref_src=twsrc%5Etfw">2018年7月21日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


ただ、GPUインスタンスのコストもあるので、どう対応するか検討中です。

もし、学習の際のハイパーパラメータのチューニングをしたいとか、学習の回数をもっと増やしたいとかなど、実用性重視のためにモデルの精度向上を行いたいというニーズがありましたら、 Twitterの[@2zn01](https://twitter.com/2zn01) 宛に一度ご連絡ください。

## 今後やりたいこと

まだ画像認識の中でも画像分類のみしか対応していないので、今後以下の機能も追加していきたいと思っています！

* 画像生成
* 音楽生成
* 自然言語処理
* 文字起こし

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">今開発中の「AIメーカー」の構想をnoteの記事にまとめました。<br>ぜひ読んでAIメーカーで遊んでみてください！<br><br>僕がAIメーカーを開発して目指したい場所｜2z <a href="https://twitter.com/2zn01?ref_src=twsrc%5Etfw">@2zn01</a><a href="https://t.co/cWWHeyQIh5">https://t.co/cWWHeyQIh5</a><br><br>AIメーカーでは今後、画像生成、音楽生成、自然言語処理、文字起こしなど様々な分野への対応を検討中です！</p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1018986135610011649?ref_src=twsrc%5Etfw">2018年7月16日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 「AIメーカー」が目指すポジション

「みんなのAI」プラットフォームを目指します！

特にAIの分野は企業がそれぞれで独自に進めてたりしてるのをみてて、もったいないなぁと感じてます。データ集めもみんなで協力して、作ったモデルももっとオープンにしたら、みんなで便利さを享受できるのではと考えています。
使いやすさはkintoneのように！ GitHubのようにオープンに！ を目指します！！


<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">目指すは「みんなのAI」プラットフォーム！！<a href="https://twitter.com/hashtag/AI%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#AIメーカー</a> <a href="https://t.co/7a0eFSxC8T">https://t.co/7a0eFSxC8T</a></p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1020811528579080192?ref_src=twsrc%5Etfw">2018年7月21日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">特にAIの分野は企業がそれぞれで独自に進めてたりしてるのをみてて、もったいないなぁと感じてました<br>データ集めも、作ったモデルももっとオープンにしたら、みんなで便利さを享受できるのではと考えています。<br>使いやすさはkintoneのように！GitHubのようにオープンに！を目指します！！</p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1020693088350507008?ref_src=twsrc%5Etfw">2018年7月21日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

今、AIは話題にはなってますが、各企業はクローズドに進めていて一部の人しか触れていない状況です。そこを手軽なプラットフォームとしてオープンに色んな人が利用できるようにすることで、新しい何かが生まれる可能性が高くなります。

また、AIを一人だけで作るという形ではなく、こんなAIが欲しいという人たちが協力して便利なAIを生み出すことで、それがさらに加速しそうです！
特にディープラーニングはwebサービスと同様にちょっとした発想の転換、アイディア次第で革命を起こせるぐらいの力を持っている可能性があると個人的に思っています。

その可能性に惹かれて、今僕はワクワクしながらAIメーカーの開発に取り組んでいます！

ただ、現状ではモデルの学習に使っているGPUインスタンスの費用が高いため、マネタイズの問題がまだまだ残っています。
しかし、これも今後ちゃんとAIのプラットフォームの役割を担えるほどの機能が用意できれば、自分で作ったモデルを販売できるマーケットプレイス機能なんかを用意したり、理想のAIを作るためのクラウドファンディングのような機能も設けて、大きく出すぎかもしれませんが、そこでAIのマーケット経済圏を作りたいです！

形式は何にせよ、「 **AIを使う人、AIを作る人、そしてそれを繋ぐAIメーカーと三方良しのプラットフォーム** 」を目指します！


## 最後に

まずはぜひAIメーカーを使って、AIで遊び倒してみてください！

■AIメーカー
https://aimaker.io/

AIの可能性を機械学習に携わっている一部のエンジニアの人だけでなく、みんなでAIをさわってみることからはじめましょう！
そのためのツールとして、とりあえず「AIメーカー」を使って遊んでみてほしいです。

もっとみんながAIを気軽にさわれるようにすることで、こんなことに使えるんじゃないかと新たなアイディアが生まれることを期待しています。
あなたのちょっとしたアイディアが世界を変えるかもしれません！


ただ、「AIメーカー」はまだまだ構想の一部しかできていないので、僕も頑張ってこれからもっと機能を追加していきたいと思っています。
「みんなのAIプラットフォーム」となれることを目指して...


AIメーカーに少しでも興味をもって頂けましたら、ぜひフォローやいいね、リツイートで応援お願いします！

* Twitter： [@2zn01](https://twitter.com/2zn01)
* note： [@2zn01](https://note.mu/2zn01)

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">今話題のAIをweb上で誰でも気軽に作れる「AIメーカー」を開発しました！<br>①AIに覚えさせたいタグを入力<br>②タグから自動で画像データを収集<br>③AIがデータから学習<br>の３ステップで誰でも簡単にAIを作れます！<br>動画では手相占いのAIに挑戦！<br>みんなもAIを作って遊んでみてね！<a href="https://t.co/66DFU7GRZ2">https://t.co/66DFU7GRZ2</a> <a href="https://t.co/ie1LmioyA1">pic.twitter.com/ie1LmioyA1</a></p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1019741210217365504?ref_src=twsrc%5Etfw">2018年7月19日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">【お知らせ】<br>AIメーカーの第一弾「画像認識」をリリースしました！<br>AIをもっと手軽にオープンに作成・活用できる場を目指し、開発してます！<br>実用的なAI、面白いAI、スケベなAI、色んなAIがあっていいと思うんですよ！AIも多様性の時代だぜ☆<br>ぜひぜひ遊んでみてください！<a href="https://t.co/Vnf0QITH1v">https://t.co/Vnf0QITH1v</a></p>&mdash; 2z＠AIメーカー (@2zn01) <a href="https://twitter.com/2zn01/status/1018806085648506880?ref_src=twsrc%5Etfw">2018年7月16日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>