色々と耳にしてはいましたが、今まで一切触れてこなかったTensorFlowなるものをRaspberry Pi 4に入れてみようと思って入れてみました。
一応サンプルが動くまではいったのですが、よくわからないエラーやWARNINGなどが出るのと処理が結構遅かったりするのでどこかおかしいのかもしれないという状態ですが、自分がやった一通りの手順をメモしておきたかったので記事にした次第です。
間違ってるところなどありましたら、コメントで指摘していただけると幸いです。
では、始めます。
0:前提
Raspberry Pi 4でOpenCVが動く環境まで持っていっている状態から始めています。
OpenCVをまだ入れてない状態であれば、以下の記事を参考にしてOpenCVが入っている状態まで進めてください。
1:TensorFlowのインストール
まずはTensorFlowをインストールするために、以下のコマンドを実行します。
$ sudo apt-get update $ sudo apt-get upgrade $ pip3 install tensorflow
最後のpip3 install tensorflowの途中で以下のような赤文字が出て正常にインストールできずに終わる場合があります。
tensorboard 2.0.2 has requirement setuptools>=41.0.0, but you'll have setuptools 40.8.0 which is incompatible.
その場合は以下のコマンドで一度tensorflowをアンインストールしてから、--upgradeオプションを付けてもう一度インストールを実行します。
$ pip3 uninstall tensorflow $ pip3 install --upgrade tensorflow
TensorFlowがインストールできているかはpythonを起動させて確認します。
$ python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow as tf 2020-07-15 17:10:19.083737: E tensorflow/core/platform/hadoop/hadoop_file_system.cc:132] HadoopFileSystem load error: libhdfs.so: cannot open shared object file: No such file or directory >>> tf.__version__
最後の行でのバージョンが表示されていればOKです。
ちなみに「E tensorflow/core/platform/hadoop/hadoop_file_system.cc:132] HadoopFileSystem load error: libhdfs.so: cannot open shared object file: No such file or directory」というエラーが出ていますが、これが出ていてもどうやら問題ないようなので無視しても大丈夫なようです(※詳しく調べ切れてはいませんが、とりあえずサンプルを動かすのは問題なかったです)。
2:Kerasのインストール
次にKerasというのをインストールします。
インストールコマンドは以下の通りです。
$ pip3 install keras
Kerasがインストールできているかはpythonを起動させて確認します。
$ python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import keras Using TensorFlow backend. 2020-07-15 17:18:16.884242: E tensorflow/core/platform/hadoop/hadoop_file_system.cc:132] HadoopFileSystem load error: libhdfs.so: cannot open shared object file: No such file or directory >>> keras.__version__
TensorFlowの時と同じように、出ているエラーは気にせずに最後の行でのバージョンが表示されていればOKです。
import kerasの実行した際に以下のようなエラーが出ることがあります。
ImportError: Keras requires TensorFlow 2.2 or higher. Install TensorFlow via `pip install tensorflow`
これはTensorFlowとKerasのバージョンが合っていないというエラーになります。
解決方法としてはKerasのダウングレードしかないようだったので、以下のコマンドを実行して本記事執筆時点でTensorFlowに合ったKerasのバージョンをインストールします。
$ pip3 uninstall keras $ pip3 install keras==2.3.1
インストールが終わったら再度pythonでインポートしてエラーがなければOKです。
3:サンプルの実行
これでようやくサンプルを動かす環境ができたのでサンプルを実行していきます。
適当なディレクトリを作成してそこに移動し、以下のgitコマンドを実行してサンプルをcloneしてきます。
$ git clone https://github.com/fchollet/deep-learning-models.git
cloneが終わると「deep-learning-models」というディレクトリができているので移動します。
$ cd deep-learning-models
解析するためのサンプル画像ですが、以下のものを使用するので「deep-learning-models」ディレクトリの中に「bench.png」として保存してください。
・bench.png
この画像を解析するために「deep-learning-models」ディレクトリの中にある「inception_v3.py」を編集していきます。
inception_v3.pyをエディタで開いて以下のように書き換えます。
・35行目「.を_に変更」
修正前:from keras.applications.imagenet_utils import _obtain_input_shape
修正後:from keras_applications.imagenet_utils import _obtain_input_shape
・157行目「include_topをrequire_flattenに変更」
修正前:include_top=include_top
修正後:require_flatten=include_top
・401行目「解析するファイル名を変更」
修正前:img_path = 'elephant.jpg'
修正後:img_path = 'bench.png'
編集が済んだら上書き保存し、inception_v3.pyを実行してみます。
$ python3 inception_v3.py Using TensorFlow backend. 2020-07-15 17:47:15.269213: E tensorflow/core/platform/hadoop/hadoop_file_system.cc:132] HadoopFileSystem load error: libhdfs.so: cannot open shared object file: No such file or directory WARNING:tensorflow:From /home/pi/.local/lib/python3.7/site-packages/tensorflow_core/python/ops/resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version. Instructions for updating: If using Keras pass *_constraint arguments to layers. WARNING:tensorflow:From /home/pi/.local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:4070: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead. WARNING:tensorflow:From /home/pi/.local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:4074: The name tf.nn.avg_pool is deprecated. Please use tf.nn.avg_pool2d instead. WARNING:tensorflow:From /home/pi/.local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:422: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead. Predicted: [[('n03891251', 'park_bench', 0.9735911), ('n04208210', 'shovel', 0.0012295641), ('n02747177', 'ashcan', 0.0010040886), ('n03388043', 'fountain', 0.00087099895), ('n02892201', 'brass', 0.00074983406)]]
色々とエラーやWARNINGが出ていますが、最後の結果としては「'park_bench', 0.9735911」と公園のベンチが97%ほどという結果となり、ちゃんと画像の解析ができています。
以上がRaspberry Pi 4にTensorFlow環境を作ってサンプルを動かしてみるまでの方法です。
実行してみると結果が出るまでかなり時間がかかるので、リアルタイムで判別というのは難しそうです。また動いているとはいえ、エラーやWARNINGが出まくっているのでその辺りも気持ちが悪いです。
なので環境の問題点がわかる方はコメントいただければと思います。
TensorFlowにはLiteという軽いものもあるようなので、そっちも機会があれば試してみたいです。
・参考資料
- ラズパイはじめてみた(TensorFlow/Keras/OpenCV3導入編) - チノカログ
- python - ERROR: tensorboard 2.0.2 has requirement setuptools>=41.0.0, but you'll have setuptools 40.6.2 which is incompatible - Stack Overflow
- Pythonおよび機械学習勉強用のRaspberryPiの構築 (RaspberryPi4 & Buster版 (RaspberryPi3も可)) - Qiita
- visual studio - Error "Keras requires TensorFlow 2.2 or higher" - Stack Overflow
- ラズパイはじめてみた(画像認識編) - チノカログ