Tensorflowをラズパイで。pipで躓いたらvirtualenvで解決!


Pythonの仮想環境のお話です。
途中から脱線してTensorflowの構築に入ります。

※急ぎ(2時間)で仕上げたため、質が悪い上、誤字脱字や表現がおかしい所があるかもしれません。その点はご了承ください。

はじめに

virtualenvとは、Python内で軽量な仮想環境を構築してくれるパッケージの一つです。

Pythonで開発をする際、何かと環境構築で躓きがちですよね。pipとかpipとかpipとか。
初心者の私にとっては環境構築が常にラスボス的な存在です。本当に恐ろしい。

自分語りはこの辺で、このvirtualenvの利用用途の一つとして、インタプリタとpipにより導入されたパッケージを同時に管理が行えます。
非常に便利なモジュールです。

今回はRaspberry Pi にTensorFlowを導入したときの苦労話でもしたいと思います。
苦労話というよりかはvirtualenvがあればすんなりと構築できるという一連の流れでしょうか。

ゴールはサンプルを動かすまでの環境構築です。

準備

まずはみんな大好きRaspberry Piを用意。初期設定は終わっているものとします。
SSHでもVNCでも何でも良いので、とりあえずはターミナルが開ければ良しとします。

Tool Ver
Python 3.5.3
Tensorflow 1.11.0

Tensorflowの導入

特に問題なくインストールできると思います。

sudo apt install libatlasbase-dev 
pip install tensorflow 

当時この時点で躓いたなんて言えない。

virtualenvの準備

問題なくインストール出来ればいいのですが、私の場合特定のパッケージのみインストールが出来ない状態が続きました。

ここからが本題です。virtualenvを知るまでは滅茶苦茶大変でした。

virtualenvの導入

virtualenvをインストールします。

pip install virtualenv

カレントディレクリ内に環境を構築

今いるディレクトリ内で以下を実行し、hogeという環境を作製します。

virtualenv --system-site-packages -p python3 ./hoge

仮想環境を有効化

構築された環境を有効化します。

source ./hoge/bin/activate

有効化するとターミナルの先頭が

(hoge)$

となるので、これで完了です。

モジュール等の準備

Tensorflowに必要なモジュールをインストールします。
個別でインストールしていきましょう。
Python2とPython3が共存している場合はpip3にて導入出来ます。

モジュールの導入

Cython, contextlib2, pillow, lxml, jupyter, matplotlibをインストールしていきます。

pip install --user Cython
pip install --user contextlib2
pip install --user pillow
pip install --user lxml
pip install --user jupyter
pip install --user matplotlib2

これらを仮想環境が有効化されている状態でインストールします。
また、各モジュールの説明は省略します。

Object Detection APIの導入

物体検知を行うに当たり、"Object Detection API"を導入する必要があります。
詳細は省略しますが、今すぐにでも物体検知をしたい方は導入されたい。また、自作のデータセットを訓練するのに必要です。
今回はサンプルを実行するまでの環境の構築をしてみます。

サンプルを動かすための準備

今回はサンプルに頼ります。すみません。
まず、こちらをクローンします。

git clone https://github.com/tensorflow/models.git

クローンが終わったら

models/research

に移動してください。

そこで

#コンパイラのインストール
sudo apt-get install protobuf-compiler
#コンパイル
protoc object_detection/protos/*.proto --python_out=.a

これらを実行すると、何の返答もなくprotbufライブラリのコンパイルが実行されます。

次に環境変数を指定する必要があります。

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

注意点として、ターミナルを起動する度に書き換えが必要なので予めbashファイルに書き込んでおくと良いかもしれません。

最後に以下の学習済みデータをクローンします。

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/d
etection_model_zoo.md

これで準備は整いました。
後はPythonにて書き上げたコードを実行してみると良いと思います。

それでも出来ない!

やはり入れ直しが手っ取り早いです。

PythonとTensorflowを入れなおす場合

sudo apt-get install python-pip python3-pip
sudo pip uninstall tensorflow
git clone https://github.com/PINTO0309/Tensorflow-bin.git
cd Tensorflow-bin
sudo pip install tensorflow-1.11.0-cp35-cp35m-linux_armv7l.whl

Tensorflowを個別で導入する場合

https://www.piwheels.org/simple/tensorflow/

こちらを参照すると良いかと思われます。

最後に

今回は、あくまでもvirtualenvを使って環境構築の窮地から脱出したという体験談です。
virtualenvが無かったら恐らく挫折していたでしょう。ありがとうvirtualenv。

私はまた、これらを用いてその場にいる人数を把握するという簡単な物を作製しました。
特に魅力もないので書きませんが、あくまでその時はラズパイという小さなハードでも動かすことができるのか、という実験がてらに取り組んだものですのでその話はまた後日したいと思いますが多分しないでしょう。

参考文献

-github tensorflow
https://github.com/tensorflow/models.git

-piwheels
https://www.piwheels.org/