yoppa.org


Blog

openFrameworks + ofxMSATensorFlow でディープラーニングを試してみる (OS X版)

ディープラーニングとofxMSATensorFlow

最近、何かと話題のディープラーニング(Deep Learning / 深層学習 / 機械学習)。TensorFlow、Chainer、Caffeなど様々な便利なライブラリもフリーで入手可能で、ずいぶんと敷居が下がってきた印象だ。

そんな中、イケメン天才アーティストのMemo Akten氏によって、openFrameworksでTensorFlowが使用できる、ofxMSATensorFlowというアドオンが公開された。早速、OS Xで動かしてみたので、設定方法をシェア。

※ 動作を確認したOSは、OS X 10.11 (El Capitan) のみです。

インストール

まずは、Githubからアドオンの本体をダウンロード。従来のアドオンと同様に、openFrameworksのルート/addons/ofxMSATensorFlow に配置する。

  • https://github.com/memo/ofxMSATensorFlow

本来は、C++でTensorFlowを動かすためにいろいろ設定が必要なのだが、様々なプラットフォームごとにTensorFlowが環境構築されたシェアードライブラリが配布されている(親切!!)。ありがたく、これを使用する。OS Xの場合は、下記のリンクから ofxMSATensorFlow_lib_OSX_2016_02_21_v0.7_CPU.zip をダウンロードして解凍する。

  • https://github.com/memo/ofxMSATensorFlow/releases

中には libtensorflow_cc.so というライブラリが入っている。ofxMSATensorFlowではこれをホームディレクトリ直下のlibフォルダに配置して使用するように設定されている。以下のように設定

% cd ~
% mkdir lib
% cp Downloads/osx/libtensorflow_cc.so lib/.

Xcodeでサンプルを動かしてみる

MemoさんはQTCreatorで動かしているようなのだが、できることなら手に馴染んでいるXcodeで動かしたい。以下のように設定して無事サンプルを動かすことができた。まずは、基本サンプルの example-basic で試してみる。

ProjectGeneratorで、example-basicフォルダを選択してインポートする。自動的にaddonにはofxMSATensorFlowが入っているはずなので、そのままプロジェクトをUpdateする。(少し時間がかかる)

screenshot_254.png

TensorFlowのライブラリは既にシェアドライブラリとして持っているので、addonフォルダ内のものは必要ない。addons/ofxMSATensorFlow/libs/tensorflow をフォルダごと参照を削除。

Slice 1.png

また、このサンプルは、ofApp.hやofApp.cpp、main.cppを使用していない。srcフォルダ内で赤くなっているファイルを削除する。

screenshot_257.png

ここに、先程のライブラリを追加する。libsフォルダを右クリックして、”Add Files to …” を選択。ファイルダイアログから、libフォルダ内の libtensorflow_cc.so を選択する。結果以下のようになるはず。

screenshot_256.png

あとは、Buildするだけ。こんな感じのサンプルが実行される(はず)!!

screenshot_258.png

MNISTを試してみる

MNIST(Mixed National Institute of Standards and Technology) とは、28x28pxの60000枚の学習サンプル、10000枚のテストサンプルからなる手書き数字画像データベースで、機械学習の世界ではこれを使って手書きの数字を認識させるのが “Hello World” 的な定番サンプルとなっている。ofxMSATensorFlowでもMNISTのサンプル example-mnist があるので、試してみる。

ただし、まず学習データが必要。こちらは別途ダウンロードする

  • https://github.com/memo/ofxMSATensorFlow/releases/download/v0.0/example-inception3-data.tar.gz

解凍したフォルダ model-deep と model-deep の2つを、example-mnist/bin/data以下に配置する。

あとは、先程の example-basic と同じ手順でビルドできるはず。マウスで描いた数字を瞬時に判別する。ディープラーニングすごい!!

screenshot_252.png