ubuntu14.04にCaffeもインストールする

##環境
GPU GTX1070
ubuntu 14.04
CUDA 8.0RC
cuDNN 5.1
##これまでインストールしたパッケージ
chainer 1.14.0
TensorFlow
OpenAI Gym
Theano
など
##はじめに
最近Caffeを使う必要が出てきたので、インストールを試みる。これまでUbuntu15や16にCaffeを入れたことはあったが、14.04は初めて。

TD72氏のこのサイト
http://qiita.com/TD72/items/bcb243ee02760ea1d8bb
に従って進める。

##依存関係のインストール
現状、何がインストールされてて、何がされてないのか把握してないので、一括して入れてみる。

```
sudo apt-get install libatlas-base-dev libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
```

適当なディレクトリにCaffeをgit cloneする。

```
git clone https://github.com/BVLC/caffe.git
```

##cuDNNの設定

```
cd caffe
cp Makefile.config.example Makefile.config
```

Makefile.configの５行目をアンコメントアウトする。

```Makefile.config
USE_CUDNN :=1
```

##コンパイル
CPUを４コア使って並列処理する。

```
make -j4 all
```

ここでなにやらエラーが出た。

```
CXX src/caffe/data_reader.cpp
PROTOC src/caffe/proto/caffe.proto
CXX src/caffe/util/db_leveldb.cpp
CXX src/caffe/util/insert_splits.cpp
CXX src/caffe/util/benchmark.cpp
src/caffe/data_reader.cpp:1:28: fatal error: boost/thread.hpp: そのようなファイルやディレクトリはありません
 #include <boost/thread.hpp>
                            ^
compilation terminated.
make: *** [.build_release/src/caffe/data_reader.o] エラー 1
make: *** 未完了のジョブを待っています....
src/caffe/util/benchmark.cpp:1:53: fatal error: boost/date_time/posix_time/posix_time.hpp: そのようなファイルやディレクトリはありません
 #include <boost/date_time/posix_time/posix_time.hpp>
                                                     ^
compilation terminated.
make: *** [.build_release/src/caffe/util/benchmark.o] エラー 1
In file included from ./include/caffe/util/db.hpp:6:0,
                 from ./include/caffe/util/db_leveldb.hpp:10,
                 from src/caffe/util/db_leveldb.cpp:2:
./include/caffe/common.hpp:4:32: fatal error: boost/shared_ptr.hpp: そのようなファイルやディレクトリはありません
 #include <boost/shared_ptr.hpp>
                                ^
compilation terminated.
make: *** [.build_release/src/caffe/util/db_leveldb.o] エラー 1
In file included from src/caffe/util/insert_splits.cpp:7:0:
./include/caffe/common.hpp:4:32: fatal error: boost/shared_ptr.hpp: そのようなファイルやディレクトリはありません
 #include <boost/shared_ptr.hpp>
                                ^
compilation terminated.
make: *** [.build_release/src/caffe/util/insert_splits.o] エラー 1
```

このサイトを参考にして、libboostとやらをインストールしてみる。
http://stackoverflow.com/questions/28867791/building-caffe-on-ubuntu-make-cant-find-boosts-include-files

```
sudo apt-get install --no-install-recommends libboost-all-dev
```

再度makeすると、今度は別のエラーが出た。

```
make -j4 all
CXX .build_release/src/caffe/proto/caffe.pb.cc
CXX src/caffe/data_reader.cpp
CXX src/caffe/util/db_leveldb.cpp
CXX src/caffe/util/insert_splits.cpp
In file included from ./include/caffe/util/db.hpp:6:0,
                 from ./include/caffe/util/db_leveldb.hpp:10,
                 from src/caffe/util/db_leveldb.cpp:2:
./include/caffe/common.hpp:5:27: fatal error: gflags/gflags.h: そのようなファイルやディレクトリはありません
 #include <gflags/gflags.h>
                           ^
compilation terminated.
make: *** [.build_release/src/caffe/util/db_leveldb.o] エラー 1
make: *** 未完了のジョブを待っています....
In file included from src/caffe/util/insert_splits.cpp:7:0:
./include/caffe/common.hpp:5:27: fatal error: gflags/gflags.h: そのようなファイルやディレクトリはありません
 #include <gflags/gflags.h>
                           ^
compilation terminated.
make: *** [.build_release/src/caffe/util/insert_splits.o] エラー 1
In file included from src/caffe/data_reader.cpp:6:0:
./include/caffe/common.hpp:5:27: fatal error: gflags/gflags.h: そのようなファイルやディレクトリはありません
 #include <gflags/gflags.h>
                           ^
compilation terminated.
make: *** [.build_release/src/caffe/data_reader.o] エラー 1
```

gflagsどうたらこたら言ってるので、このサイト
https://github.com/BVLC/caffe/wiki/Ubuntu-14.04-ec2-instance
を参考に、以下を実行。

```
wget https://github.com/schuhschuh/gflags/archive/master.zip
unzip master.zip
cd gflags-master
mkdir build && cd build
export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1
make 
sudo make install
```

この後再度makeを実行。またまた新たなエラーが出現。

```
make -j4 all
CXX src/caffe/data_reader.cpp
CXX src/caffe/util/db_leveldb.cpp
CXX src/caffe/util/insert_splits.cpp
CXX src/caffe/util/benchmark.cpp
In file included from ./include/caffe/util/db.hpp:6:0,
                 from ./include/caffe/util/db_leveldb.hpp:10,
                 from src/caffe/util/db_leveldb.cpp:2:
./include/caffe/common.hpp:6:26: fatal error: glog/logging.h: そのようなファイルやディレクトリはありません
 #include <glog/logging.h>
                          ^
compilation terminated.
make: *** [.build_release/src/caffe/util/db_leveldb.o] エラー 1
make: *** 未完了のジョブを待っています....
In file included from src/caffe/util/insert_splits.cpp:7:0:
./include/caffe/common.hpp:6:26: fatal error: glog/logging.h: そのようなファイルやディレクトリはありません
 #include <glog/logging.h>
                          ^
compilation terminated.
make: *** [.build_release/src/caffe/util/insert_splits.o] エラー 1
In file included from src/caffe/util/benchmark.cpp:3:0:
./include/caffe/common.hpp:6:26: fatal error: glog/logging.h: そのようなファイルやディレクトリはありません
 #include <glog/logging.h>
                          ^
compilation terminated.
make: *** [.build_release/src/caffe/util/benchmark.o] エラー 1
In file included from src/caffe/data_reader.cpp:6:0:
./include/caffe/common.hpp:6:26: fatal error: glog/logging.h: そのようなファイルやディレクトリはありません
 #include <glog/logging.h>
                          ^
compilation terminated.
make: *** [.build_release/src/caffe/data_reader.o] エラー 1
```

このサイトを見ると、glogはcaffeの公式インストールガイドにprerequisitesとして記載されてるとのこと。
https://github.com/BVLC/caffe/issues/885
確かに、確認するとそのとおり。

Caffeのインストールガイド
http://caffe.berkeleyvision.org/install_apt.html
の中にそれらしき項目があるので、実行。

```
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
```

再度、`make -j4 all`を実行。

```
make -j4 all
・・・・・
・・・・・
CXX/LD -o .build_release/examples/siamese/convert_mnist_siamese_data.bin
CXX/LD -o .build_release/examples/cifar10/convert_cifar_data.bin
CXX/LD -o .build_release/examples/mnist/convert_mnist_data.bin
CXX/LD -o .build_release/examples/cpp_classification/classification.bin
```

makeは成功したみたい。次は`test`。

```
make test
```

これも大丈夫っぽい。次は`runtest`。

```
make -j4 runtest
・・・・・
・・・・・
[----------] Global test environment tear-down
[==========] 2081 tests from 277 test cases ran. (276632 ms total)
[  PASSED  ] 2081 tests.
```

全てのruntestが大丈夫だったみたい。
##PythonでCaffeを使うための環境構築
念のため改めてpython系のパッケージ関係をインストール。

```
sudo apt-get install python-dev python-pip python-numpy python-skimage gfortran
・・・・・
・・・・・
以下の特別パッケージがインストールされます:
  fonts-lyx gfortran-4.8 libamd2.3.1 libcamd2.3.1 libccolamd2.8.0
  libcholmod2.1.2 libfreeimage3 libgfortran-4.8-dev libglade2-0
  libumfpack5.6.2 python-dateutil python-decorator python-glade2
  python-matplotlib python-matplotlib-data python-nose python-pyparsing
  python-scipy python-skimage-lib python-support python-tz
提案パッケージ:
  gfortran-multilib gfortran-doc gfortran-4.8-multilib gfortran-4.8-doc
  libgfortran3-dbg python-gtk2-doc dvipng inkscape ipython python-configobj
  python-excelerator python-matplotlib-doc python-tornado python-traits
  python-wxgtk2.8 ttf-staypuft python-coverage python-nose-doc python-opencv
  python-skimage-doc
以下のパッケージが新たにインストールされます:
  fonts-lyx gfortran gfortran-4.8 libamd2.3.1 libcamd2.3.1 libccolamd2.8.0
  libcholmod2.1.2 libfreeimage3 libgfortran-4.8-dev libglade2-0
  libumfpack5.6.2 python-dateutil python-decorator python-glade2
  python-matplotlib python-matplotlib-data python-nose python-pyparsing
  python-scipy python-skimage python-skimage-lib python-support python-tz
・・・・・
```

インストールされてないパッケージもあった。やってよかった。

次はpipで必要なライブラリのインストール

```
sudo pip install -r python/requirements.txt
・・・・・
・・・・・
  InsecurePlatformWarning
You are using pip version 8.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
```

などとWarningが出た。versionの低いのインストールされたっぽい。言われた通り、upgradeする。

```
sudo pip install --upgrade pip
Successfully installed pip-9.0.1
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
```

なんかWarningが出てるが、とりあえず無視。

コンパイルする。

```
make -j4 pycaffe
```

パスを通す
```.bashrc
export PYTHONPATH=/PATH_TO_CAFFE/python/:$PYTHONPATH
```

最後に

```
python
>>>import caffe
```

でimportされてたので終了。