raspberry pi zero wにtensorflow+Kerasを導入
raspberry zero w
ようやく市場への供給が進んで手に入るようになった。 秋葉原の秋月電子でケースとセットで2500円くらいで入手。 なんだか思ってたより高いけど、今回はこれに機械学習の推論をさせることを目指して遊んでみる。
raspberry pi zero SETUP
raspberry pi zero にraspbian stretchを導入する。 最初はRaspbian-stretch-liteで進めようとしたが、どうもWiFiの設定がうまくいかなかったので、素直にstretch-desktopを選んだ。
インストールしたRaspbianのバージョンは以下の通り。
Raspbian Stretch with desktop Image with desktop based on Debian Stretch Version: April 2019 Release date: 2019-04-08 Kernel version: 4.14 Release notes: Link
USB接続でインストールを済ませるため、以下のサイトを参考にさせていただいた。
参考サイト先とやや違う作業はWiFiの設定。rasp-configで進めた。
pi@raspberrypi:~$ sudo raspi-config
Install Tensorflow
以下のサイトを参考にさせていただき、導入を進めた。
まずメモリ不足に対応するため、スワップサイズを拡張する。
pi@raspberrypi:~$ sudo vi /etc/dphys-swapfile CONF_SWAPSIZE=2048 pi@raspberrypi:~$ sudo /etc/init.d/dphys-swapfile restart
次に必要な環境を準備する。 以下パッケージを導入する。
pi@raspberrypi:~$ sudo apt-get install -y libhdf5-dev pi@raspberrypi:~$ sudo pip install h5py
最後にTensroflowを導入する。 ラズパイ向けのTensorflowを提供している下記サイトから、pipでインストール可能なファイルをダウンロードしてくる。 とりあえず安定板の1.12を選択。cp27のarmv6lを選んでダウンロードする。
Links for tensorflow https://www.piwheels.org/simple/tensorflow/
pi@raspberrypi:~$ wget https://www.piwheels.org/simple/tensorflow/tensorflow-1.12.0-cp27-none-linux_armv6l.whl
ようやくtensorflowをインストール。結構時間がかかる(大体1~2時間ぐらい?)
pi@raspberrypi:~$ sudo pip install tensorflow-1.12.0-cp27-none-linux_armv6l.whl
簡単に動作を確認しておく。 pythonを起動して、tensorflowをインポートしてエラーが起きなければたぶん大丈夫。
pi@raspberrypi:~$ python >import tensorflow as tf >
install Keras
Kerasを導入する。 Tensorflowの流れで導入しようとするとエラー発生。
なので、以下のサイトを参考に、関連パッケージを導入。 そのあとにKerasを導入。
pi@raspberrypi:~$ sudo apt-get install python-h5py pi@raspberrypi:~$ sudo apt-get install python-scipy pi@raspberrypi:~$ sudo pip install keras
Kerasの公式ドキュメントからサンプルを試す。 ResNet50のモデルを試してみる。 認識させる画像は自分で用意する必要がある。
pi@raspberrypi:~$ nano vgg16.py from keras.applications.resnet50 import ResNet50 from keras.preprocessing import image from keras.applications.resnet50 import preprocess_input, decode_predictions import numpy as np model = ResNet50(weights='imagenet') img_path = 'elephant.jpg' img = image.load_img(img_path, target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) preds = model.predict(x) print('Predicted:', decode_predictions(preds, top=3)[0]) pi@raspberrypi:~$ python vgg16.py
とりあえずサンプル通りの出力が得られた。 model.predict(x)を実行して予測結果が得られるまでに大体十数秒かかる。 まだ試していないが、カメラの映像がからリアルタイムで認識させるのには、ラズパイゼロとこのモデルでは厳しそう。
次はもう少し軽量のNASNetMobileを試そうとしたが、なんだかうまくいっていないのでまた今度試してみる。