こんにちは。エクサウィザーズAIエンジニアの須藤です。
エクサウィザーズ が提供しているAIプラットフォームexaBaseに、「画像の内容をAIが答える」という事例があります。 画像解析とテキスト生成という、ディープラーニングでも特に成功している分野の組み合わせであり、いかにも人工知能らしい応用例となっています。
今回、これをWebブラウザ環境に移植できたので報告します。 いつもよりモデルが大規模なため動作環境が限られるのですが、特別な設定などは必要ありませんので、気軽に試していただきたいと思います。
作り方
このアプリケーションは、画像解析を担当する学習済みInceptionモデル*1と、テキスト生成を担当するLSTMモデルの2つで構成されています。 処理の流れは以下の通りです。
- 必要なモデルを読み込む。
- 画像を取得する。
- 画像をデータに変換する。
- 画像データをInceptionモデルに与え、特徴量を得る。
- LSTMモデルに、特徴量と開始コードを与え、次の単語の確率を推論する。
- 最も確率の大きい単語を選び、画面に書き出す。
- LSTMモデルに、特徴量と選んだ単語の番号を与え、次の単語の確率を推論する。
- 終端コードが選ばれるまで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 | × 読み込みでエラー |
使い方
このページにアクセスしてください。 https://base.exawizards.com/view/modelDetail?id=41
ページの中ほどのリンクをクリックして、しばらくお待ちください。
2つのモデルを別々に読み込んでいます。このように表示されたら折り返し地点です。
UIが表示されたら、サンプル画像を選択するか、ローカルファイルを読み込ませてください。
5.画像を説明するテキストが表示されます。
結果の例
手持ちの画像で検証しました。
画像 | テキスト | ひとこと |
---|---|---|
two white and white cat standing on top on the roof | 白茶でなくて白白なのが惜しいですが、ほぼ合っています。 | |
cows are standing on the grass near the grass | たまに同じ言葉を繰り返します。 | |
the snow covered street is covered with snow | 雪が積もりまくっていますね。 | |
the cake is on the plate with the other fruit | ばななが入ったお菓子、正解です。 | |
an open box with some food on it | 国籍も不明だし、なるほどなんらかの食べ物としか言えませんね。 | |
there is some food that is on the table | とにかく食べ物なことはわかるようです。 | |
the yellow flower is growing on the side | オレンジの花が嫌いなんでしょうか。 | |
cars parked on the side walk near trees | うまくいっている例です。 | |
the seagull is standing on the boardwalk near the stairs | 階段も遊歩道も実は近くにあります。「ありそうな雰囲気」で判断しているのかもしれません。 | |
an image shows an image on the page to describe | 説明できていない感じが伝わります。 |
まとめ
ブラウザ上で動く、画像の内容をAIが答えるデモを作りました。
尚、エクサウィザーズは優秀なエンジニア、社会課題を一緒に解決してくれる魔法使い”ウィザーズ”を募集しています。ご興味を持たれた方はぜひご応募ください。 採用情報|株式会社エクサウィザーズ
ExaWizards Engineer Blogでは、定期的にAIなどの技術情報を発信していきます。Twitter (https://twitter.com/BlogExawizards) で更新情報を配信していきますので、ぜひフォローをよろしくお願いします!
*1:Inceptionモデルの重みは Apacheライセンスの下で公開されています