plant-raspberrypi3のブログ

ラズベリーパイ3とPythonに挑戦して、植物を愛でたり画像を加工したりします。最近はscikit-imageの勉強してます。

ラズパイにpyenvでTensorflowとKerasを入れる

こんにちは。らずべりーです。

ラズパイさんで画像認識したくて表題の作業をしていたのですが、環境構築に苦戦して土日が潰れてしまったので備忘録として。長文です。

目次

  1. 実行環境
  2. なぜpyenvにしたの
  3. 参考ページ
  4. pyenv, pipを入れる
  5. Numpy, Scipy, Pandas, h5pyを入れる
  6. Tensorflow, Kerasを入れる

(2018/4/23 12:42) 一部コード間違いを修正、参考ページを追加
(2018/4/24 8:00) エラーログが見やすいようにコメントアウト

1. 実行環境

  • Raspberry pi3 Model B
  • Raspbian Jessie

2. なぜpyenvにしたの

Python2はNumpyもPandasも来年あたりにサポート終了という情報があったのでPython3でやろうとしたのですが、色々入れている間に間違ってPython2のほうを入れてしまったりしてわけがわからなくなったので、いっそのことpyenvでやったほうがラクかもと。

Macと違ってAnacondaとかMinicondaで丸っと入れることができないので、依存関係が難しかったです。Anacondaの素晴らしさがわかった、、、

ちなみに、ラズパイ用のBerrycondaというのもあるそうです。今回は試していませんが、使えると便利かもしれません。

github.com

qiita.com

3. 参考ページ

参考にさせていだいたページが多いので、最初に載せます。

• pyenv

github.com

qiita.com

https://hack-le.com/rpipython3-stretch/hack-le.com

qiita.com

• Tensorflow, Keras

github.com

karaage.hatenadiary.jp

ken5owata.hatenablog.com

qiita.com

時短のために推奨されているapt-getPythonパッケージをインストールする方法pyenvのほうに入れるやり方がわからず途中で断念。結局pipでインストールしました。時間は結構かかりました。

4. pyenv, pipを入れる

必要そうなものをダウンロード。実は全部はいらないかも。

$ sudo apt-get install -y git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev python-pip python-dev

pyenvgit cloneでダウンロード。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

パスを設定。

$ sudo nano ~/.bashrc

~/.bashrcの最後に以下の3行を追加。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

ターミナルに戻って、

$ exec $SHELL

pyenvをバージョンを指定してインストール。

$ pyenv install -l
$ pyenv install 3.6.5 #欲しいバージョンを書く
$ pyenv global 3.6.5
$ pyenv rehash

pipのアップグレードなど。

$ sudo apt-get install -y pkg-config libjpeg8-dev libfreetype6-dev libffi-dev
$ pip install --upgrade pip

ちゃんとpyenv環境(Python3.6)になっているかチェック。

$ python

Python 3.6.5 (default, Apr 22 2018, 13:08:36) 
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

よしよし。

5. NumPy, Scipy, Pandas, h5pyを入れる

TensorflowとKerasを動かすために、この4つのパッケージをpipで入れます。ついでに他にも必要なもの、使いそうなものも入れておきます。

はじめに、NumPy、Matplotlibなど。

$ pip install numpy psutil python-dateutil pytz tornado pyparsing six matplotlib wheel setuptools

時間はかかりますが、エラーなどは出ずすんなりOK。

次にScipy。

$ pip install scipy

# numpy.distutils.system_info.NotFoundError: no lapack/blas resources found
#以下略

エラー :(´ཀ`」 ∠):

lapackblasがないと言われているので、lapackblasapt-getでインストールして解決。

$ sudo apt-get install libblas-dev liblapack-dev
$ pip install scipy

次にh5py。

$ sudo apt-get install -y libhdf5-dev
$ pip install h5py

最後にPandas。

$ pip install pandas

  Downloading https://files.pythonhosted.org/packages/08/01/803834bc8a4e708aedebb133095a88a4dad9f45bbaf5ad777d2bea543c7e/pandas-0.22.0.tar.gz (11.3MB)
    100% |████████████████████████████████| 11.3MB 5.8MB/s 
 #Could not find a version that satisfies the requirement Cython (from versions: )
#No matching distribution found for Cython

エラー :(´ཀ`」 ∠):

apt-getやらpipやらでCythonを入れるも解決せず、途方に暮れかけていたのですが、最終的にはPandasのバージョンを下げることで解決しました。

$ pip install --no-cache-dir "pandas==0.16.2"

Collecting pandas==0.16.2
  Downloading https://files.pythonhosted.org/packages/b6/39/9c18df7531a2aaf65e44920aef0fbd21c7ce9ce7aad296fc7e2b323e81b7/pandas-0.16.2.tar.gz (4.9MB)
    100% |████████████████████████████████| 4.9MB 4.0MB/s 
Requirement already satisfied: python-dateutil>=2 in ./.pyenv/versions/3.6.5/lib/python3.6/site-packages (from pandas==0.16.2) (2.7.2)
Requirement already satisfied: pytz>=2011k in ./.pyenv/versions/3.6.5/lib/python3.6/site-packages (from pandas==0.16.2) (2018.4)
Requirement already satisfied: numpy>=1.7.0 in ./.pyenv/versions/3.6.5/lib/python3.6/site-packages (from pandas==0.16.2) (1.14.2)
Requirement already satisfied: six>=1.5 in ./.pyenv/versions/3.6.5/lib/python3.6/site-packages (from python-dateutil>=2->pandas==0.16.2) (1.11.0)
Installing collected packages: pandas
  Running setup.py install for pandas ... done
Successfully installed pandas-0.16.2

やっとここまで来た、、、

6. Tensorflow, Kerasを入れる

Tensorflowを入れます。これはpipだけでは入れられないので、GitHubからソースをダウンロード。

$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.1.0/tensorflow-1.1.0-cp34-cp34m-linux_armv7l.whl

ダウンロードした.whlファイルを使ってpip installする。

$ sudo pip install tensorflow-1.1.0-cp34-cp34m-linux_armv7l.whl

#tensorflow-1.3.0-cp34-cp34m-linux_armv7l.whl is not a supported wheel on this platform

またしてもエラー :(´ཀ`」 ∠):

ファイルがPython3.4用のせいかもしれない。バージョン違いについて、GitHubのページになにやら記述がある。

Note: the provided binaries are for Python 2.7 and 3.4 only. If you've installed Python 3.5/3.6 from source on your machine, you'll need to either explicitly install these wheels for 3.4, or you'll need to build TensorFlow from source. Once there's an officially supported installation of Python 3.5+, this repo will start including wheels for those versions.

Google翻訳

注:提供されているバイナリは、Python 2.7および3.4用です。 マシンのソースからPython 3.5 / 3.6をインストールした場合は、これらのホイールを明示的にインストールするか、ソースからTensorFlowをビルドする必要があります。 公式にサポートされているPython 3.5以降のインストールが完了すると、このバージョンのホイールを含むこのレポが開始されます。

github.com

なんのこっちゃ。

エラーログでググってみたところ、wheelさんは名前でバージョン管理しているというような情報が。

oregengo.hatenablog.com

ファイル名の中の34は明らかにPython3.4なので、ここをPython3.6用になるように36にファイル名を変更してから、もう一度pip installしてみる。

$ cp tensorflow-1.1.0-cp34-cp34m-linux_armv7l.whl tensorflow-1.1.0-cp36-cp36m-linux_armv7l.whl
$ pip install tensorflow-1.1.0-cp36-cp36m-linux_armv7l.whl

Processing ./tensorflow-1.1.0-cp36-cp36m-linux_armv7l.whl
Collecting werkzeug>=0.11.10 (from tensorflow==1.1.0)
  Downloading https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl (322kB)
    100% |████████████████████████████████| 327kB 115kB/s 
Collecting protobuf>=3.2.0 (from tensorflow==1.1.0)
  Downloading https://files.pythonhosted.org/packages/bf/dc/42d35afffe88ce301c90457eb60d145dd64144f283ef4bf927c1187ef114/protobuf-3.5.2.post1-py2.py3-none-any.whl (388kB)
    100% |████████████████████████████████| 389kB 19kB/s 
Requirement already satisfied: numpy>=1.11.0 in ./.pyenv/versions/3.6.5/lib/python3.6/site-packages (from tensorflow==1.1.0) (1.14.2)
Requirement already satisfied: wheel>=0.26 in ./.pyenv/versions/3.6.5/lib/python3.6/site-packages (from tensorflow==1.1.0) (0.31.0)
Requirement already satisfied: six>=1.10.0 in ./.pyenv/versions/3.6.5/lib/python3.6/site-packages (from tensorflow==1.1.0) (1.11.0)
Requirement already satisfied: setuptools in ./.pyenv/versions/3.6.5/lib/python3.6/site-packages (from protobuf>=3.2.0->tensorflow==1.1.0) (39.0.1)
Installing collected packages: werkzeug, protobuf, tensorflow
Successfully installed protobuf-3.5.2.post1 tensorflow-1.1.0 werkzeug-0.14.1

意外とすんなりインストールできました!

最後にREADMEに書いてあるとおりにmockをアンインストール&インストールして、

$ pip uninstall mock
$ pip install mock

Kerasをインストールして、

$ pip install keras

Collecting keras
  Downloading https://files.pythonhosted.org/packages/ba/65/e4aff762b8696ec0626a6654b1e73b396fcc8b7cc6b98d78a1bc53b85b48/Keras-2.1.5-py2.py3-none-any.whl (334kB)
    100% |████████████████████████████████| 337kB 3.2MB/s 
Requirement already satisfied: numpy>=1.9.1 in ./.pyenv/versions/3.6.5/lib/python3.6/site-packages (from keras) (1.14.2)
Requirement already satisfied: six>=1.9.0 in ./.pyenv/versions/3.6.5/lib/python3.6/site-packages (from keras) (1.11.0)
Requirement already satisfied: scipy>=0.14 in ./.pyenv/versions/3.6.5/lib/python3.6/site-packages (from keras) (1.0.1)
Collecting pyyaml (from keras)
  Downloading https://files.pythonhosted.org/packages/4a/85/db5a2df477072b2902b0eb892feb37d88ac635d36245a72a6a69b23b383a/PyYAML-3.12.tar.gz (253kB)
    100% |████████████████████████████████| 256kB 3.2MB/s 
Building wheels for collected packages: pyyaml
  Running setup.py bdist_wheel for pyyaml ... done
  Stored in directory: /home/pi/.cache/pip/wheels/03/05/65/bdc14f2c6e09e82ae3e0f13d021e1b6b2481437ea2f207df3f
Successfully built pyyaml
Installing collected packages: pyyaml, keras
Successfully installed keras-2.1.5 pyyaml-3.12

最後に確認でPythonを起動してimportしてみる。

$ python
Python 3.6.5 (default, Apr 22 2018, 13:08:36) 
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import keras
/home/pi/.pyenv/versions/3.6.5/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
Using TensorFlow backend.
>>> import tensorflow as tf

表記に関するWarningは出ますが、一応ちゃんとimportされたので問題なさそうです。 今のところ問題なく使えています。

な、、、長かった、、、ç(=ω=`) ヨボヨボ

(2018/4/27 追記)

Pandasのインストールエラーの対処について、Qiitaの記事を見つけました。こちらのほうが参考になる可能性。

qiita.com