エクサウィザーズ Engineer Blog

株式会社エクサウィザーズのエンジニアチームブログ

画像の内容をAIが文章で答えるデモ

f:id:kentaro-suto:20190124195850j:plain

こんにちは。エクサウィザーズAIエンジニアの須藤です。

エクサウィザーズ が提供しているAIプラットフォームexaBaseに、「画像の内容をAIが答える」という事例があります。 画像解析とテキスト生成という、ディープラーニングでも特に成功している分野の組み合わせであり、いかにも人工知能らしい応用例となっています。

今回、これをWebブラウザ環境に移植できたので報告します。 いつもよりモデルが大規模なため動作環境が限られるのですが、特別な設定などは必要ありませんので、気軽に試していただきたいと思います。

作り方

このアプリケーションは、画像解析を担当する学習済みInceptionモデル*1と、テキスト生成を担当するLSTMモデルの2つで構成されています。 処理の流れは以下の通りです。

  1. 必要なモデルを読み込む。
  2. 画像を取得する。
  3. 画像をデータに変換する。
  4. 画像データをInceptionモデルに与え、特徴量を得る。
  5. LSTMモデルに、特徴量と開始コードを与え、次の単語の確率を推論する。
  6. 最も確率の大きい単語を選び、画面に書き出す。
  7. LSTMモデルに、特徴量と選んだ単語の番号を与え、次の単語の確率を推論する。
  8. 終端コードが選ばれるまで4と5を繰り返す。

元のコードはPython + Kerasで書かれていました。 これをJavaScript + Tensorflow.jsに書き直します。 読み込みや推論など、元々フレームワークを使用していた部分は、JavaScriptでも同等の機能で置き換えることができます。 その他のPythonで直接記述されていた部分は、JavaScriptに翻訳する必要があります。

また、オリジナルのモデルでMergeレイヤーが使われていましたが、これはTensorflow.jsがまだ扱えないクラスです。 Concatenateレイヤーを使ってモデルを書き直す必要がありました。

動作環境

モデルの規模が大きくメモリを大量に消費するためか、動作できる環境が限られます。 参考までに私の環境での検証結果を示します。 ハード環境によっては異なる結果になるかもしれません。

プラットフォーム ブラウザ バージョン 対応状況
macOS Safari 12 × 実行途中で再読み込み
macOS Chrome 71
macOS Firefox 64
macOS Opera 57 × 読み込みでエラー
Windows IE 11 × JavaScriptが未対応
Windows Edge 42 x 読み込み中に再読み込み
Windows Chrome 71 × 読み込みでエラー
Windows Firefox 64
Windows Opera 58 × 読み込みでエラー

使い方

  1. このページにアクセスしてください。 https://base.exawizards.com/view/modelDetail?id=41

  2. ページの中ほどのリンクをクリックして、しばらくお待ちください。 f:id:kentaro-suto:20190124182906p:plain

  3. 2つのモデルを別々に読み込んでいます。このように表示されたら折り返し地点です。 f:id:kentaro-suto:20190124185412p:plain

  4. UIが表示されたら、サンプル画像を選択するか、ローカルファイルを読み込ませてください。 f:id:kentaro-suto:20190124185754p:plain

5.画像を説明するテキストが表示されます。 f:id:kentaro-suto:20190124185923p:plain

結果の例

手持ちの画像で検証しました。

画像 テキスト ひとこと
f:id:kentaro-suto:20190124190550j:plain two white and white cat standing on top on the roof 白茶でなくて白白なのが惜しいですが、ほぼ合っています。
f:id:kentaro-suto:20190125133238j:plain cows are standing on the grass near the grass たまに同じ言葉を繰り返します。
f:id:kentaro-suto:20190124191659j:plain the snow covered street is covered with snow 雪が積もりまくっていますね。
f:id:kentaro-suto:20190124192218j:plain the cake is on the plate with the other fruit ばななが入ったお菓子、正解です。
f:id:kentaro-suto:20190124190820j:plain an open box with some food on it 国籍も不明だし、なるほどなんらかの食べ物としか言えませんね。
f:id:kentaro-suto:20190124192613j:plain there is some food that is on the table とにかく食べ物なことはわかるようです。
f:id:kentaro-suto:20190124192917j:plain the yellow flower is growing on the side オレンジの花が嫌いなんでしょうか。
f:id:kentaro-suto:20190124193151j:plain cars parked on the side walk near trees うまくいっている例です。
f:id:kentaro-suto:20190124193727j:plain the seagull is standing on the boardwalk near the stairs 階段も遊歩道も実は近くにあります。「ありそうな雰囲気」で判断しているのかもしれません。
f:id:kentaro-suto:20190124193331j:plain an image shows an image on the page to describe 説明できていない感じが伝わります。

まとめ

ブラウザ上で動く、画像の内容をAIが答えるデモを作りました。

尚、エクサウィザーズは優秀なエンジニア、社会課題を一緒に解決してくれる魔法使い”ウィザーズ”を募集しています。ご興味を持たれた方はぜひご応募ください。 採用情報|株式会社エクサウィザーズ

ExaWizards Engineer Blogでは、定期的にAIなどの技術情報を発信していきます。Twitter (https://twitter.com/BlogExawizards) で更新情報を配信していきますので、ぜひフォローをよろしくお願いします!

*1:Inceptionモデルの重みは Apacheライセンスの下で公開されています