以下を参考にする。
Raspibianのインストール
以下から、NOOBSのフルインストーラ版をダウンロードした。
https://www.raspberrypi.org/downloads/noobs/
以下のような画面が現れて、Raspberry-Pi3用のLinuxであるRaspbianのインストールが始まる。
しばらくしてインストールが完了し、デスクトップが現れた。
ちょっとしたモッサリ感があるが、立派なLinuxデスクトップだ。
パッケージのアップデート
次に、パッケージのアップデートを行っておく。
sudo apt-get update sudo apt-get upgrade sudo apt-get install jfbterm sudo apt-get install ibus-anthy
最初にデスクトップを日本語に設定してしまったせいか、いろいろと文字化けしてしまっている。
sshサービスの立ち上げ
最後に、ifconfig
でIPアドレスを調べ、sshのポートを開放しておく。これで、わざわざデスクトップを触らなくても、ssh経由で作業マシンからログインできるようになる。
/etc/init.d/ssh start
sshでのログイン時は、
- ユーザ名: pi
- パスワード: raspberry
となっている。
パッケージのアップデートとTensorFlowをインストールする。
ここから先は、上記Qittaの記事の写経なのだが、まずはRaspbianのパッケージアップデートを行う。
sudo apt-get update sudo apt-get upgrade sudo apt-get install jfbterm sudo apt-get install ibus-anthy
TensorFlowのインストールは、まずはリポジトリをクローンしてきた。
git clone https://github.com/tensorflow/tensorflow.git
static libraryの生成を行う。これも、上記Qittaの記事の通りに実行できる。最後のターゲットビルドには、かなり時間がかかった。数時間レベルかな?
tensorflow/contrib/makefile/download_dependencies.sh sudo apt-get install -y autoconf automake libtool gcc-4.8 g++-4.8 cd tensorflow/contrib/makefile/downloads/protobuf/ ./autogen.sh ./configure make sudo make install sudo ldconfig # refresh shared library cache cd ../../../../.. make -f tensorflow/contrib/makefile/Makefile HOST_OS=PI TARGET=PI OPTFLAGS="-Os" CXX=g++-4.8
TensorFlowアプリケーションのビルド
次にTensorFlowアプリケーションのビルドを行う。まずは必要なライブラリとツール群のビルド。
sudo apt-get install libjpeg-dev imagemagick
必要な画像ファイル群をダウンロードしてくる。
curl https://storage.googleapis.com/download.tensorflow.org/models/inception_dec_2015_stripped.zip \ -o /tmp/inception_dec_2015_stripped.zip unzip /tmp/inception_dec_2015_stripped.zip \ -d tensorflow/contrib/pi_examples/label_image/data/
TensorFlowアプリケーションのビルドを行う。画像認識のためのTensorFlowアプリケーションが生成される。
make -f tensorflow/contrib/pi_examples/label_image/Makefile
以下で実行してみる。上記Qittaページにもあるが、これはCOBOLの開発者であるGrace Hopper氏に対する画像認識をしているらしい。
実行してみると、"military uniform", “suit"など、それっぽい認識結果が出てきた。すばらしい。 実行時間は数秒だ。
pi@raspberrypi:~/work/tensorflow $ tensorflow/contrib/pi_examples/label_image/gen/bin/label_image 2017-06-04 02:01:56.437971: I tensorflow/contrib/pi_examples/label_image/label_image.cc:145] Loaded JPEG: 512x600x3 2017-06-04 02:01:57.798286: W tensorflow/core/framework/op_def_util.cc:332] Op BatchNormWithGlobalNormalization is deprecated. It will cease to work in GraphDef version 9. Use tf.nn.batch_normalization(). 2017-06-04 02:02:03.502602: I tensorflow/contrib/pi_examples/label_image/label_image.cc:379] Running model succeeded! 2017-06-04 02:02:03.506946: I tensorflow/contrib/pi_examples/label_image/label_image.cc:273] military uniform (866): 0.624293 2017-06-04 02:02:03.507012: I tensorflow/contrib/pi_examples/label_image/label_image.cc:273] suit (794): 0.0473982 2017-06-04 02:02:03.507050: I tensorflow/contrib/pi_examples/label_image/label_image.cc:273] academic gown (896): 0.0280926 2017-06-04 02:02:03.507085: I tensorflow/contrib/pi_examples/label_image/label_image.cc:273] bolo tie (940): 0.0156955 2017-06-04 02:02:03.507120: I tensorflow/contrib/pi_examples/label_image/label_image.cc:273] bearskin (849): 0.0143348
もっと大雑把な画像は?
先ほどの、Raspibianのスクリーンショットを認識させてみよう。まずは認識できるように、png形式からjpeg形式に変換する。
convert /home/pi/2017-06-03-134714_1824x984_scrot.png /home/pi/2017-06-03-134714_1824x984_scrot.jpg
実行結果は以下のようになった。やはり少し難しい?"trailer truck"や、"church"が予測され、しかも予測精度も低い。
pi@raspberrypi:~/work/tensorflow $ tensorflow/contrib/pi_examples/label_image/gen/bin/label_image --image=/home/pi/2017-06-03-134714_1824x984_scrot.jpg 2017-06-04 02:09:23.015846: I tensorflow/contrib/pi_examples/label_image/label_image.cc:145] Loaded JPEG: 1824x984x3 2017-06-04 02:09:24.281441: W tensorflow/core/framework/op_def_util.cc:332] Op BatchNormWithGlobalNormalization is deprecated. It will cease to work in GraphDef version 9. Use tf.nn.batch_normalization(). 2017-06-04 02:09:29.875592: I tensorflow/contrib/pi_examples/label_image/label_image.cc:379] Running model succeeded! 2017-06-04 02:09:29.879767: I tensorflow/contrib/pi_examples/label_image/label_image.cc:273] trailer truck (283): 0.116827 2017-06-04 02:09:29.879827: I tensorflow/contrib/pi_examples/label_image/label_image.cc:273] church (690): 0.0843748 2017-06-04 02:09:29.879864: I tensorflow/contrib/pi_examples/label_image/label_image.cc:273] tractor (289): 0.0554093 2017-06-04 02:09:29.879898: I tensorflow/contrib/pi_examples/label_image/label_image.cc:273] wing (503): 0.0431268 2017-06-04 02:09:29.879933: I tensorflow/contrib/pi_examples/label_image/label_image.cc:273] hay (816): 0.0230417