2017年8月1日火曜日

[RaspberryPi]Tensorflowをインストールする

WindowsでTensorflowの環境構築がうまくいかなかったので、持て余しているラズパイにディープラーニング用フレームワークTensorflowをインストールすることにした。

ビルド済みのをインストールする方法もあるのですが、バージョンが古いのでソースからビルドします。

ちなみに2017年8月時点でJessie版RasbianのG++-4.9でビルドはできません。
参考URLにのっているのですが、threadpool.ccをビルドする時にエラーになります。

捕捉:試しにStretch版へアップグレードしてGCC-6、G++-6でビルドしてみたらこっちはOKでした。(スワップメモリを大きめに取っておく必要はありますが。)


以下を打ちこめばOK。
---
$ git clone https://github.com/tensorflow/tensorflow
$ sudo apt-get install -y autoconf automake libtool gcc-4.8 g++-4.8 libjpeg-dev
$ tensorflow/contrib/makefile/download_dependencies.sh
$ cd tensorflow/contrib/makefile/downloads/protobuf/
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig  # refresh shared library cache
$ cd ../../../../..

raspberry pi zero or 1ならこっち
$ make -f tensorflow/contrib/makefile/Makefile HOST_OS=PI TARGET=PI OPTFLAGS="-Os" CXX=g++-4.8

raspberry pi 2 or 3ならこっち(neon有効化?)
$ make -f tensorflow/contrib/makefile/Makefile HOST_OS=PI TARGET=PI \
OPTFLAGS="-Os -mfpu=neon-vfpv4 -funsafe-math-optimizations -ftree-vectorize" CXX=g++-4.8
---

追記:Bazelを使う場合、
ビルドにbazelを使用すると「configure」が使えるので、調整が色々できるようになります。
Bazelはv0.4.5を使います。

$ wget https://github.com/bazelbuild/bazel/releases/download/0.4.5/bazel-0.4.5-dist.zip
$ unzip -d bazel bazel-0.4.5-dist.zip
$ cd bazel

ソースコードで編集2か所あります。

nano scripts/bootstrap/compile.sh
117行目 末尾に「-J-Xmx500M」を追加。


nano tools/cpp/cc_configure.bzl
133行目 関数の頭にreturn "arm" を追加。

$ sudo ./compile.sh
$ sudo cp output/bazel /usr/local/bin/bazel

これでBazelインストール完了。
次にTensorflowのビルド
$ cd ~/tensorflow
$ ./configure
$ bazel build -c opt --copt="-mfpu=neon-vfpv4" --copt="-funsafe-math-optimizations" --copt="-ftree-vectorize" --copt="-fomit-frame-pointer" --local_resources 1024,1.0,1.0 --verbose_failures tensorflow/tools/pip_package:build_pip_package

これでOK。

★ビルドエラーが出て先に進めない、手っ取り早くインストールしたい場合
ビルド済みのwhlがあるので活用する方法があります。

$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/blob/master/archive/tensorflow-0.8.0rc0-cp27-none-linux_armv7l.whl
$ sudo pip install tensorflow-0.8.0rc0-cp27-none-linux_armv7l.whl

これでOK。

-----------
〇動作チェック

動作確認で画像認識をやってみる場合、
---
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/
make -f tensorflow/contrib/pi_examples/label_image/Makefile
tensorflow/contrib/pi_examples/label_image/gen/bin/label_image
---

動作確認でカメラを使った動画認識をやってみる場合、
---
make -f tensorflow/contrib/pi_examples/camera/Makefile
tensorflow/contrib/pi_examples/camera/gen/bin/camera
---

ビルド時間がとても長いので気長にまちましょう。
コメントを投稿

Androider