インストール環境
Raspberry Pi | Pi 3 Model B+ |
---|---|
SDHCカード | 16GB Class10*1 |
OS | Raspbian-2018-10-09(11) |
環境構築手順
注意点
- Makefile.configで三箇所の修正が必要
- エラーは基本的にライブラリ不足
- ビルド($ make all -j2)に時間がかかる(15分程度)
インストール手順
1. Caffeのソースコード取得
$ git clone https://github.com/BVLC/caffe.git
2. 必要なパッケージのインストール
$ sudo apt-get install libopenblas-dev $ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev $ sudo apt-get install libhdf5-serial-dev protobuf-compiler $ sudo apt-get install --no-install-recommends libboost-all-dev $ sudo apt-get install libgflags-dev $ sudo apt-get install libgoogle-glog-dev $ sudo apt-get install liblmdb-dev $ sudo apt-get install libatlas-base-dev $ sudo apt-get install python-protobuf
3. Makefile.configの修正
$ cp Makefile.config.example Makefile.config $ vi Makefile.config
Makefile.configの修正内容を抜粋して以下に示す。
GPUを演算に使わないため、下記を有効化する。
# CPU-only switch (uncomment to build without GPU support). CPU_ONLY := 1
今回はOpenBLASを使っているので、下記のように修正する。
# BLAS choice: # atlas for ATLAS (default) # mkl for MKL # open for OpenBlas # BLAS := atlas BLAS := open
hdf5のパス設定エラーが出るため、Makefile.configの既存の"INCLUDE_DIRS"と"LIBRARY_DIRS"へパスを追記する。
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/arm-linux-gnueabihf/hdf5/serial
4. ビルド
# 15分程度かかる $ make all -j2 # 15分程度かかる $ make test -j2 # 5分程度かかる $ make runtest -j2 # Python用の Caffeの作成と distributeでビルド内容を反映 # 5分程度かかる $ make pycaffe # すぐ終わる $ make distribute # ここまで成功すれば Caffeのビルドは完了
$ make all -j2にてビルドは通るが、note: parameter passing for argument of type X will change in GCC 7.1という警告が発生する。対応はしていない。
5. 動作確認
環境変数 PYTHONPATHを設定する。設定するPATHはインストールしたディレクトリに従う。
export PYTHONPATH=~/caffe/build/caffe/python/:$PYTHONPATH
caffeをimportできることを確認する。
pi@raspberrypi:~/caffe/build/caffe $ python Python 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import caffe >>>
参考Webページ
Raspberry Pi 2 でDeepDreamを動かしてみた - 電脳あざらしの泳ぎ Raspberry Pi別館
RaspberryPi に Caffe - AKIBAko
ubuntu14.04にCaffeもインストールする - Qiita
【ビルド版】Raspberry Piで DeepDreamを動かしてキモイ絵をモリモリ量産 Caffe Deep Learning Framework (ラズパイで Caffe Deep Learning Frameworkをビルドして Deep Dreamを動かしてキモイ絵を生成する)
ElCapitan(OSX10.11), Parallels11, Ubuntu, Caffe « こざくらラボ
環境構築時に発生したエラー
ビルド時のエラー
libboostのインストール不足
pi@raspberrypi:~/caffe/build/caffe $ make all -j4 PROTOC src/caffe/proto/caffe.proto CXX .build_release/src/caffe/proto/caffe.pb.cc CXX src/caffe/syncedmem.cpp CXX src/caffe/util/cudnn.cpp CXX src/caffe/solver.cpp In file included from src/caffe/syncedmem.cpp:1:0: ./include/caffe/common.hpp:4:32: fatal error: boost/shared_ptr.hpp: そのようなファイルやディレクトリはありません #include <boost/shared_ptr.hpp> ^ compilation terminated. Makefile:591: ターゲット '.build_release/src/caffe/syncedmem.o' のレシピで失敗しました make: *** [.build_release/src/caffe/syncedmem.o] エラー 1 make: *** 未完了のジョブを待っています.... src/caffe/solver.cpp:6:38: fatal error: boost/algorithm/string.hpp: そのようなファイルやディレクトリはありません #include "boost/algorithm/string.hpp" ^ compilation terminated. Makefile:591: ターゲット '.build_release/src/caffe/solver.o' のレシピで失敗しました make: *** [.build_release/src/caffe/solver.o] エラー 1
対応コマンド
$ sudo apt-get install --no-install-recommends libboost-all-dev
参考Webページ
ubuntu14.04にCaffeもインストールする - Qiita
gflags, glog, lmdbのインストール不足
pi@raspberrypi:~/caffe/build/caffe $ make all -j4 CXX src/caffe/solver.cpp CXX src/caffe/syncedmem.cpp CXX src/caffe/util/math_functions.cpp CXX src/caffe/util/db_lmdb.cpp In file included from src/caffe/util/db_lmdb.cpp:2:0: ./include/caffe/util/db_lmdb.hpp:8:18: fatal error: lmdb.h: そのようなファイルやディレクトリはありません #include "lmdb.h" ^ compilation terminated. Makefile:591: ターゲット '.build_release/src/caffe/util/db_lmdb.o' のレシピで失敗しました make: *** [.build_release/src/caffe/util/db_lmdb.o] エラー 1 make: *** 未完了のジョブを待っています.... In file included from src/caffe/syncedmem.cpp:1:0: ./include/caffe/common.hpp:5:27: fatal error: gflags/gflags.h: そのようなファイルやディレクトリはありません #include <gflags/gflags.h> ^ compilation terminated. Makefile:591: ターゲット '.build_release/src/caffe/syncedmem.o' のレシピで失敗しました make: *** [.build_release/src/caffe/syncedmem.o] エラー 1 In file included from src/caffe/util/math_functions.cpp:6:0: ./include/caffe/common.hpp:5:27: fatal error: gflags/gflags.h: そのようなファイルやディレクトリはありません #include <gflags/gflags.h> ^ compilation terminated. Makefile:591: ターゲット '.build_release/src/caffe/util/math_functions.o' のレシピで失敗しました make: *** [.build_release/src/caffe/util/math_functions.o] エラー 1 In file included from ./include/caffe/blob.hpp:8:0, from ./include/caffe/net.hpp:10, from ./include/caffe/solver.hpp:7, from src/caffe/solver.cpp:7: ./include/caffe/common.hpp:5:27: fatal error: gflags/gflags.h: そのようなファイルやディレクトリはありません #include <gflags/gflags.h> ^ compilation terminated. Makefile:591: ターゲット '.build_release/src/caffe/solver.o' のレシピで失敗しました make: *** [.build_release/src/caffe/solver.o] エラー 1
対応コマンド
$ sudo apt-get install libgflags-dev $ sudo apt-get install libgoogle-glog-dev $ sudo apt-get install liblmdb-dev
参考Webページ
ubuntu14.04にCaffeもインストールする - Qiita
hdf5.hのパス設定不足
pi@raspberrypi:~/caffe/build/caffe $ make all -j4 CXX src/caffe/solver.cpp CXX src/caffe/syncedmem.cpp CXX src/caffe/util/math_functions.cpp CXX src/caffe/util/db_lmdb.cpp CXX src/caffe/util/insert_splits.cpp In file included from src/caffe/solver.cpp:9:0: ./include/caffe/util/hdf5.hpp:7:18: fatal error: hdf5.h: そのようなファイルやディレクトリはありません #include "hdf5.h" ^ compilation terminated. Makefile:591: ターゲット '.build_release/src/caffe/solver.o' のレシピで失敗しました make: *** [.build_release/src/caffe/solver.o] エラー 1 make: *** 未完了のジョブを待っています....
対応方法
Makefile.configの既存の"INCLUDE_DIRS"と"LIBRARY_DIRS"へパスを追記する。
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/arm-linux-gnueabihf/hdf5/serial
CXX src/caffe/solvers/adam_solver.cppでビルドが進まなくなる
6時間ほど放置したが、ビルドが進まなくなる現象に遭遇、原因不明。ソースコードを再取得し、hdf5のパス設定方法など、参考ページをいろいろ見てやり直したら解決した。
動作確認時のエラー
caffeのパスが未設定
pi@raspberrypi:~/caffe/build/caffe $ python Python 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import caffe Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named caffe
対応方法
環境変数 PYTHONPATHを設定する。設定するPATHはインストールしたディレクトリに従う。
export PYTHONPATH=~/caffe/build/caffe/python/:$PYTHONPATH
protobufのインストール不足
>>> import caffe Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/pi/caffe/build/caffe/python/caffe/__init__.py", line 1, in <module> from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer File "/home/pi/caffe/build/caffe/python/caffe/pycaffe.py", line 15, in <module> import caffe.io File "/home/pi/caffe/build/caffe/python/caffe/io.py", line 8, in <module> from caffe.proto import caffe_pb2 File "/home/pi/caffe/build/caffe/python/caffe/proto/caffe_pb2.py", line 6, in <module> from google.protobuf.internal import enum_type_wrapper ImportError: No module named google.protobuf.internal
対応コマンド
$ sudo apt-get install python-protobuf
参考Webページ
ElCapitan(OSX10.11), Parallels11, Ubuntu, Caffe « こざくらラボ
まとめ
5時間程度かかり、大変だった。しかし、ネット上にたくさんの情報があり対応しやすかった。この後は、VGG16を動かしていく計画。
tips
Raspberry PiのVer確認方法
pi@raspberrypi:~/caffe/build/caffe $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 9.8 (stretch) Release: 9.8 Codename: stretch
*1:8GBだとギリギリ