TensorFlowで画像分類した定食たちの銀河をつくった

TensorFlowで画像分類した定食たちの銀河をつくった


4種類の中華料理の画像を Convolutional Neural Network で分類するタスク
各々の画像が何番の定食でありそうかの確率が得られる
確率が最も高いものを分類結果として提示する
3番定食
scores.json
Copied!
{
"teishoku-3": 0.9777767658233643,
"teishoku-1": 0.015356350690126419,
"teishoku-5": 0.0014701758045703173,
"teishoku-4": 0.005396719556301832
}
定食3 である確率が最も高い
このスコアベクトルの分布を可視化する
実際の画像を見ると分かるが、定食3と4、定食4と5 は似ているので、これらは近い位置に表示されるだろう

Google Cloud Platform Japan 公式ブログで紹介されている可視化の話
画像を Cloud Vision API に与えて得られたスコアベクトルを可視化する
考え方とソースコードが公開されているので真似してみる

次元削減
表示空間は3次元だが、スコアベクトルは4次元
分類ラベル数が増えればスコアベクトルの次元はどんどん増える
デモ用に描画するために、次元を3まで落とす必要がある
Barnes-Hut t-SNE アルゴリズム
巨大次元のベクトルデータを任意の次元に変換できる
C++で書かれたライブラリ
これをPythonから呼び出す仕掛けを書いた daiiz
アルゴリズムの詳細は今度勉強する

可視化
three.jsを使って3D空間に描画する
冒頭のアニメーションのような「銀河」を表示できる
点をプロットしてマウスで遊べるプログラムを書いた daiiz

工夫したこと
プロットされた点をダブルクリックすると
その点に対応する定食画像が表示される
マウスのホイールで描画されたClusterに近づくと
Clusterに含まれる定食画像が左サイドに一覧表示される
データを差し替えれば、いろいろなテーマに関する可視化ができる

はやめにデモを公開したい

ブログ記事

Powered by Helpfeel