TensorFlow + Kerasが便利
ディープラーニングをするとき、TensorFlowと合わせて使うと便利で有名なのがKerasというライブラリです。Kerasの使い方に関しては、ほけきよ(id:imslotterさん)の以下記事が非常に参考になります。
なので、基本的なことは上記記事を読んでもらうとして(激しい手抜き)、今回は、手っ取り早くKerasを使うとMacやRaspberry Piで画像認識がどれだけ簡単にできてしまうのかということを紹介してみたいと思います。
MacでTensorFlow + Kerasを使った画像認識
環境設定
必要なライブラリは以下です。
- Python3(Anagonda3)
- TensorFlow 1.4.0
- Keras 2.1.2
- opencv-python 3.3.0.10
Python2でも出来た記憶がありますが、以下でh5py
をインストールしないといけないかもしれません。
$ pip install h5py
セットアップ自体は、以下記事を参照ください。
静止画の画像認識
今回は、Kerasに含まれているInception V3というgoogleの有名なディープラーニングのモデルを使って画像認識してみたいと思います。
from keras.preprocessing import image from keras.applications.inception_v3 import preprocess_input, decode_predictions, InceptionV3 import numpy as np model = InceptionV3(weights='imagenet') img_path = 'test.jpg' img = image.load_img(img_path, target_size=(299, 299)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) preds = model.predict(x) print('Predicted:') for p in decode_predictions(preds, top=5)[0]: print("Score {}, Label {}".format(p[2], p[1]))
これで、例えばtest.jpg
という名前で画像を保存して、同じディレクトリで上記のスクリプトを実行すると、画像認識の答えがターミナルに非常されます。めちゃめちゃ簡単ですね。
なおKerasでモデルがどこに保存されているかは、以下のプログラムをみるとわかります。 keras/data_utils.py at master · keras-team/keras · GitHub
具体的には~/.keras/models/
ですね。
カメラ画像からの画像認識
単純に静止画を認識させるのもおもしろくないので、カメラ画像を使って動的に認識させてみます。基本は先ほどのプログラムを少し弄って、動画に対応しただけです。GitHubにコードアップしたので、環境設定して以下3行実行すれば、Mac内蔵のカメラで画像認識が始まります。
$ git clone https://github.com/karaage0703/tensorflow-pi
$ cd tensorflow-pi
$ python inspect_camera.py
実行結果は以下のような感じです。
Raspberry PiでTensorFlow + Kerasを使った画像認識
Raspberry PiでのTensorFlowの環境は以下記事を参考にセットアップ下さい。
後は、以下コマンド3行実行したらOKです。
$ git clone https://github.com/karaage0703/tensorflow-pi
$ cd tensorflow-pi
$ python inspect_camera_pi.py
Raspberry Piでも以下のように、実行結果が表示されます。
<open file '/tmp/data.jpg', mode 'wb' at 0x665b2c80> Predicted: Score 0.164481237531, Label computer_keyboard Score 0.159395217896, Label laptop Score 0.129113510251, Label space_bar Score 0.125562995672, Label mouse Score 0.117293052375, Label notebook
認識時間は数秒程度でした。もっと1秒以下でリアルタイムに認識したい場合は、Intel Movidiusなどを使う必要がありそうですね(まだ私は試せていないです)。
Movidius Neural Compute Stick - NCS ニューラル ディープラーニング USB スティック
- 出版社/メーカー: Intel
- メディア: エレクトロニクス
- この商品を含むブログを見る
認識結果を音声や、以下のようなディスプレイで表示すると、それっぽいデモはできそうですね。
転移学習(ファインチューニング)
Kerasだと転移学習も簡単にできそうです。以下記事を参考にすると、できそうな気がするので試したいことが出てきたら、転移学習もやってみたいなと思います。
まとめ
TensorFlow + Kerasで遊んでみました。実は3ヶ月前くらいに試していたのですが、それっきりになってしまっていたので一度備忘録代わりに記事にしておきました。
Kerasは簡単に色々なことができますし、公開されている実装例も豊富です。一度試してそれっきりにするにはもったいないので、今後色々試してみようかなと思っています。以下の記事で紹介している、ディープラーニングのブームの火付け役でもあるヒントン先生が新たに提唱している「カプセルネットワーク」のKeras実装とかも勉強になりそうですね。
参考リンク
ディープラーニング実践入門 〜 Kerasライブラリで画像認識をはじめよう! - エンジニアHub|若手Webエンジニアのキャリアを考える!