Raspberry PiとTensorFlowを使ったディープラーニングの開発環境構築

f:id:karaage:20170726015040j:plain:w640

2017/08/16 顔認識の実験へのリンクを追記

Raspberry PiとTensorFlowでディープラーニング

 最近、人工知能とかディープラーニングに関して興味を持っていて、以下のような記事でまとめたりしました。

 ただ、本やネットの記事を見ただけだと、あまり頭の良くない自分には全然ピンとこないというのが正直なところです。そこで、今までChainerという日本製のディープラーニングのフレームワークを使って色々実験してみたのですが、サンプルを動かすことはできても、それ以上のことが何もできなくて中身の理解も進まないという歯がゆい状況が続いていました。そんな中Chainerがガンガン後方互換性を捨ててバージョンアップをしていくので、ついていくこともできない状況でした。

 そんな中、ちょっと前に話題になったディープラーニングを使った「きゅうりの仕分け」の記事

 なんとRaspberry Pi上でTensorFlowを動かして、ディープラーニングでリアルタイムにきゅうりの判別を行っているというではありませんか。自分もRaspberry PiとChainerで画像認識試したことあるのですが、そのときは1枚の画像の判別に30秒くらいかかっていて「Raspberry Piではディープラーニングは無理かな」と勝手に見切りをつけてしまっていました。

 自分の理解不足を棚に上げて、勝手にできないないと思い込んでいた自分が恥ずかしいです。そもそも、Raspberry Piは安価で小型なLinux機である上に、高性能なカメラモジュールもあるので、ディープラーニングのプラットフォームとしてはうってつけなハードウェアです。いい機会なのでまた1から勉強し直すために、Raspberry PiとTensorflowをベースに、ディープラーニングの実験ができる環境を構築して、また勉強し直してみることにしました。

f:id:karaage:20170726015040j:plain:w640
 Raspberry Pi + TensorFlow。この中にディープラーニングの環境がつまっています

 結論から言うと、この組み合わせかなり良いです。TensorFlowの公式チュートリアルはちゃんと動きますし。自前の画像データを学習から、学習済みのネットワークとRaspberry Piのカメラを使って画像判別までできるようになりました。今回は、環境の構築方法をまずご紹介しようと思います。

f:id:karaage:20170725234118p:plain:w640
 Raspberry Pi上で自前データを学習している様子

f:id:karaage:20170725234109p:plain:w640
 TensorFlowに付属のTensor Boardという可視化ソフトも動きます。ただかなり重いです

 ちなみに、もちろんRaspberry PiとTensorFlowを使ってディープラーニングしている人は、世の中にごまんといます。ごまんは言い過ぎかな、Raspberry Piが1000万台くらい売れてるらしいので、1000人くらいはいるでしょう(笑)。公開している人の例をいくつか参考リンクとして本記事の最後にリンク貼りました。人それぞれ前提が異なると思いますので、この記事が合わない方はそちらも参考にしてみて下さい。

Raspberry Pi +TensorFlowでのディープラーニング環境セットアップ

Raspberry Piセットアップ

 ハードウェアはRaspberry Pi 3が良いと思います。Raspberry Pi Zeroなどではまだ未確認です。

 以下記事参照に、Raspbian Jessieの基本的なセットアップまでを実施しましょう

 次に、以下のパッケージをインストールします。TensorFlow以外は必須ではありませんが、入れておくと便利だったり、色々応用ができます。

  • TensorFlow
  • Open CV/PIL
  • pandas/matplotlib
  • keras

TensorFlowインストール

 Raspberry PiへのTensorFlowのインストールです。ソースからビルドすると大変そうですが、Raspberry Pi用にバイナリパッケージを用意して下さる神のような方がいるので、ありがたく利用させていただきます(非公式な点には注意下さい)。

 上記サイトのREADMEの通りインストールしましょう。具体的には、以下のコマンドを実行します。今回はpython2を前提にインストールしています。

$ sudo apt-get install python-pip python-dev
$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.1.0/tensorflow-1.1.0-cp27-none-linux_armv7l.whl
$ sudo pip install tensorflow-1.1.0-cp27-none-linux_armv7l.whl
$ sudo pip uninstall mock
$ sudo pip install mock

Open CV・PILのインストール

 画像処理に使用するOpenCV・PILというライブラリをインストールします。学習に使用する画像データの前処理等に使用します。以下コマンドでインストールできます。

$ sudo apt-get update
$ sudo apt-get install python-imaging
$ sudo apt-get install libopencv-dev
$ sudo apt-get install python-opencv

 Open CVに関しては以下参照ください

グラフ可視化関係(pandas/matplotlib)

 matplotlibで簡単なグラフを描けると色々便利なのでインストールします。

$ sudo apt-get install python-pandas
$ sudo apt-get install python-matplotlib

 matplotlibの使い方は以下参照ください

keras

 kerasは、TensorFlowを便利に使うことができるようになるラッパープログラムです。TensorFlow ver1.2からはTensorFlow内部に取り込まれるのでインストールは不要らしいのですが、Raspberry Pi用のバイナリのTensorFlowはまだv1.1.0なのでインストールします。

 以下のコマンドを実行ください。いきなりsudo pip install kerasをしても(多分)よいのですが、最初の2行実行しておいた方がインストールの時間短縮になります。

$ sudo apt-get install python-scipy
$ sudo apt-get install python-h5py
$ sudo pip install keras

Mac/Linux機へのTensorflowインストール

 ディープラーニングの学習は、ネットワークの規模が大きくなるとRaspberry Piでは時間やメモリの関係で辛くなってきます。その場合、学習をPC(若しくはクラウド)上で実施して、Raspberry Pi(+カメラモモジュール)で判別するのがよいでしょう(キュウリの仕分けもそのような構成をとっています)。

 Mac/LinuxへのTensorflowのインストールに関しては、下記記事を参照下さい。

公式サイトのGET STARTED TUTORIALSが最強

 いよいよ環境がととったら、最初に何をすべきかですが、地道にGoogle公式のTensorflowのチュートリアルを順にこなしていくのが一番よいかなというのが、私の結論です。

Getting Started  |  TensorFlow

 実際に1文字ずつ打っていく(写経する)のが一番ですが、pythonを起動して、チュートリアルを1文ずつコピペしていくだけでもかなり違うかなと思います。

 どうしても英語が辛かったら、Google翻訳で日本語訳したものを読めば良いかなと思いますが、ほとんど専門用語なのでそんなに変わらないかなと思います。

日本語訳

本で理論を補完

 チュートリアルだけやっても、よくわからない単語が出てきたり、そもそもTensorflowの中で何をやっているのかさっぱりイメージできないこともあります。そんな頭パッパラパーな状態の方は、本で理論を補完してやるのがよいです。

 オススメは、以下2冊くらいです。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 これは色々なところで勧められていますが、間違いなく名書です。しっかりやれば陳腐化しない10年は使える知識が身につくと思います。逆に、即効性(すぐこれを読むとディープラーニングで凄いことができる)という本ではないです。

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

 理論と実践面の両方に関してバランス良く書かれた本です。pythonの基礎や理論的な話は、「ゼロから作るディープラーニング」と重複する箇所もあるのですが、TensorFlowの詳しい解説もあるので、公式のチュートリアルを補完する意味合いであった方がよいかなと思います。

 その他、ディープラーニングといえば、花形のアプリケーションは画像認識です。画像認識をしたい場合は、画像処理関係の知識も欲しいところですね。特にディープラーニングで頻出するCNN(Convolutional Neural Network)に関しては、画像フィルタそのものだったりします。画像フィルタに関しては、以下の記事でまとめていますので、興味のある方は参考にしてみて下さい。

自前データの学習・評価・判別

 一通りチュートリアルを終えたら、やってみたくなるのが自前データを学習させて判別ですね。チュートリアルは動かせても、自前データの学習は実際にやろうとすると、結構色々大変だったりします。参考記事に挙げた先人達の知見を参考に、Tensorflowのチュートリアルのニューラルネットワークをベースとした、自前のデータを学習から、評価・判別までできるソフトを作ってみました。GitHubで以下のリポジトリにあげてあります。

 これを使えば、自前の様々な画像データを学習させて、実際にRaspberry Piのカメラを使って判別するということが誰でも簡単にできるようになります。使い方はREADMEに書いてありますが、多分これだけではイマイチわからない人が多数と思いますので、これを使って実際どのように自前のデータを学習して、構築したネットワークをどう使えばよいのかを、別の記事で実例を交えて詳しく解説したいなと思います。来週くらいに公開しようかな。気が向いたら。

まとめ

 Raspberry PiとTensorFlowを使ったディープラーニングの開発環境を構築しました。これを使って色々な実験をしていけたらと考えています。今のところ、先人の試みをキャッチアップするだけで精一杯ですが、そのうち少しでも独自の要素を盛り込んでいければと思っています。

 Raspberry Pi 3

 SDカード

Raspberry Pi Camera V2

Raspberry Pi Camera V2

 カメラモジュール

追記:Raspberry Pi + TensorFlowで顔認識の実験をしてみました。

関連記事

 キュウリの仕分けに関しては、つい先日行ったMFT2017でも展示されていました。Raspberry Piでリアルタイムに判別していました。

 Raspberry PiとChainerでディープラーニングやりたい方は上記記事参照下さい

参考記事

Raspberry Pi 人工知能ツールをインストール【Python3】 - Qiita

Raspberry Pi でディープラーニング環境構築 - ゼロから始める機械学習

raspberry pi 3にTensorFlowを入れて画像認識させる - ようこそシャチクパーク!

Raspberry Pi 深層学習ライブラリで物体認識(Keras with TensorFlow・Open CV) - Qiita