AWS
機械学習
DeepLearning
AI
画像認識

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


こんにちは、2z(Twitter: @2zn01 )です。
はじめてのQiita記事です。

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

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

作ったもの

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

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

画面イメージ

学習データの登録画面

モデルの学習画面

モデルの学習履歴

モデルの推論結果画面

なぜ開発したか?

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

世の中では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メーカーのシステム構成図は以下の通りです。

AIメーカーシステム構成図.png

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

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

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

  • フロントサーバ:PHP(Zend Framework)
  • バックエンドサーバ:Python(Flask)、Caffe(Deep Learning Framework)

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

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

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

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

1.タスク管理

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

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

  • 学習データ(画像)の収集
  • モデルの学習

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

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

2.インスタンス管理

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

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

3.学習データ(画像)の収集

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

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

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

4.ファインチューニングによる精度向上

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

今後の課題

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

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

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

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

今後やりたいこと

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

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

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

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

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

今、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メーカーに少しでも興味をもって頂けましたら、ぜひフォローやいいね、リツイートで応援お願いします!