タンク職関連が大勢を占めます。比喩的な使われ方のほか、元祖四天王もカバーします。仏教関連のほか、称号の例として頼光四天王が出てきました。魔王の部下として倒される存在です。制作の過程で気がついた、興味深い例を紹介します。学習結果は随時アップデートしているので、現在のデータで試してもこの通りにならないことをご了承ください。ローマ東京が付く言葉、東京都の下部組織、東京の地名などに分かれます。京都府の地名、京都市の地名、観光地に分かれます。イタリアの各都市、古代ローマの詳細、他の文明などが出てきます。正しい行いという意味の言葉と、名前が正義の人の苗字が出てきます。接続詞なども入っています。最後にWord2vecの二次元可視化によって、言葉探しが楽しく便利に行えるようになる可能性を示しました。こちらですぐ試せます。エクサウィザーズは優秀なエンジニア、社会課題を一緒に解決してくれる魔法使い”ウィザーズ”を募集しています。ご興味を持たれた方はぜひご応募ください。Blogでは、定期的にAIなどの技術情報を発信していきます。LSTM)Tweet2018-11-01Tensorflow.jsを用いたブラウザで動く物体認識Tweetこんにちは。エクサウィザーズAIエンジニアの須藤です。この度exaBaseの「物体名判別」モデルの紹介ページに、その場で試せるデモ機能を追加しました。前回の「写真に写っていないところを復元する」とともに、実装にあたってはTensorflow.jsというフレームワークを使っています。この記事では、Tensorflow.js導入までの簡単な解説と注意点、および新しいデモの操作方法を紹介したいと思います。結果まとめTensorflow.jsとはTensorflowもしくはKerasで書かれた機械学習モデルを、JavaScriptで扱えるようにするフレームワークです。学習済みモデルによる推論が主な応用と考えられますが、モデルの構築や再学習も可能です。WebGL経由でGPUを利用するので、計算は十分に高速です。公式サイトwww.tensorflow.org特徴Webブラウザ上でAIモデルが動くようになります。以下の特徴を持ったアプリケーションが作れます。ライブラリ等のインストールが不要(最新の)Webブラウザさえあれば動作します。GUIが利用可能Webアプリの技術がそのまま使えます。ローカルファイルの選択などもOSやブラウザが面倒を見てくれます。スマートフォンでも動作サーバの負荷が少ない計算はクライアント側で行われるため細かいカスタマイズはできない開発環境pipでインストールできます。tensorflowjsモデルの書き出しモデルデータの書き出しには、コマンドtensorflowjs_converterまたは、Pythonフレームワークtensorflowjsが使えます。後者で、既存の推論スクリプトに一時的に以下の行を書き足す方法が、手軽でおすすめです。モデルオブジェクトmodelを、ディレクトリ'tfjs'に、8ビットの量子化を用いて書き出す。quantization_dtype=np.uint8)実行すると、書き出し先ディレクトリに次のようなファイル群が生成されます。ファイルの名前と数はモデルのサイズや構成によって変わります。総ファイルサイズは、重み(.hdf5)ファイルにほぼ比例します。量子化しなければそのまま、16ビットで半分、8ビットで4分の1になります。model.jsongroup1-shard1of3group1-shard2of3group1-shard3of3モデルの読み込みHTML側でフレームワークをインポートします。src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.0"></script>モデルの読み込みを開始するには、JavaScriptで次のようにします。結果はPromiseオブジェクトを通して非同期にハンドラ関数に渡されます。エラー処理}実行Pythonで書かれた前処理や後処理を、頑張ってJavaScriptに翻訳します。実行そのものはモデルのpredictメソッドを呼ぶだけです。predictを呼び出してから結果データを受け取るまでの流れは、形式上非同期ですが、Mac版Safariの場合、結果を待つ間もJavaScriptに制御が戻りませんでした。原稿執筆時のバージョン(0.13.0)では、モデルに以下のものが含まれていると、書き出せても読み込めませんでした。動作に影響しないものなら、model.jsonを書き換えることで解決する場合もあります。しても必要な演算の場合、行列演算や畳み込みで代用するなどの工夫が必要です。SubtractAddやMultiplyは大丈夫なのに何故かこれはダメです。物体名判別デモKerasに同梱されている学習済みXceptionモデルを用いたデモです。同モデルの重みはMITライセンスの下で公開されています。こちらのページでお試しいただけます。リンクをクリックしてください。モデルのダウンロードが始まります。ダウンロードが終わると、プルダウンとファイル選択ボタンが表示されます。サンプル写真をプルダウンから選択するか、ローカルのファイルを選択してください。確率が高い1〜3カテゴリに関するコメントと、上位10カテゴリの確率が表示されます。結果いくつか興味深い結果をご紹介します。この記事で用いた写真およびデモページのサンプル写真は、私が個人的に撮影したものです。画像コメントバターナット・スクウォッシュを調べたら、確かに似ていました。ヒョウタンは学習データにありませんでした。本当はキジバトのようです。このように、知らないものに対しては、学習した中で似ているものを返します。食べ物というところまでは合っています。猫判別能力は概ね高いのですが、これは見破れなかったようです。メインの被写体について何も分からない場合、小さくても隅っこでも、知っているものに反応する場合があります。右下の黒くて四角い何かに強く反応しました。比べると左上の生き物については、いまいち確証が無かったようです。見えない何かに反応することも。生き物に関しては、それがいそうな背景でも判断しているようです。かたくなに犬と言い張ります。縞模様で猫を判別しているようです。これだけ抽象化されたデザインに反応するのは珍しいです。シマウマは知っています。これはシマウマとは判定されません。納得しかけましたが、よく見たら貯金箱じゃありませんでした。まとめTensorflow.jsの使い方と、それを用いたデモを紹介しました。前処理があまり必要ない場合は、想像より簡単にモデルを動かせるようになります。exaBaseの他の既存モデルのデモもおいおい追加して行きたいと思っています。エクサウィザーズは優秀なエンジニア、社会課題を一緒に解決してくれる魔法使い”ウィザーズ”を募集しています。ご興味を持たれた方はぜひご応募ください。Blogでは、定期的にAIなどの技術情報を発信していきます。17:41Tensorflow.jsを用いたブラウザで動く物体認識Tweet2018-10-25写真に写っていないところを復元するTweetこんにちは。エクサウィザーズAIエンジニアの須藤です。みなさんはハイキングの写真でしずちゃんばかり写して、まともに撮られなかったジャイアンに殴られかけたことは無いでしょうか。そんなとき「万能プリンター」があったら便利ですね。撮ってしまった写真の、向きやズームを後から修正して、写ってなかったところを復元して再プリントできるというものです。持ち主であるドラえもんは、うちにもまだ来ていません。仕方がないのでAIの力でなんとかしましょう。写真の外側に写っているものを推測し、自然な形で合成します。物体の部分画像からその種類ないし位置を推測し、既存画像を本に全体を復元することが、原理的には可能なはずです。その過程を直接にプログラムすることは現実的ではありません。代わりに畳み込みニューラルネットワーク(CNN)に、かいつまんで学習させます。学習モデル敵対的生成ネットワーク(GAN)のアルゴリズムに従います。目的に書いたとおりのことを行う生成器と、画像の本物らしさを判別する判別器を、交互に学習します。生成器を以下のように構成します。画像を特徴量マップにする多層CNN特徴量マップを縦横二倍に広げる多層転置CNN特徴量マップから画像を生成する多層転置CNN事前学習を行います。画像が本物かを判定する判別器を構成します。以下の学習を交互に繰り返します。生成した画像に対して判別器が1を返すように、生成器を学習データセットはじめ様々な物体を含む画像データセットで学習を行いましたが、外周部のピクセルの色を拡散させる以上のことをしてくれませんでした。どんな写真にも対応させるには、学習時間またはモデルの性能が不足しているようです。Wildを用いて学習することにしました。処理すべき情報量が減るため、少なくとも顔の部分に関しては精度の高い結果が期待できます。一方で、使い道が想像つかなくなりましたが、モデルの検証が目的ということでご理解ください。本来の全体画像も正解として記載します。入力画像はエクサウィザーズのメンバー紹介ページから借りました。正解コメントネクタイができかけています。背景のボケがいい感じに。予測モデル的には失敗です。これまた作務衣のよう。