Caffeをインストールしてサンプルを動かすまで


画像認識に定評のあるライブラリ・Caffeを使ってみたくなり、
インストールしてサンプル(mnist)を動かすまでの手順をまとめてみました。

セットアップ環境は以下の通りです。

  • OS: Ubuntu 16.04.1 LTS
  • GPUドライバ: NVIDIA 367.57

1.外部ライブラリのインストール

必要なライブラリの一式をインストールします。

~
$ sudo apt-get install libatlas-base-dev libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler git

2.Caffeのダウンロード

gitからCaffeのソースをダウンロードします。

~
$ git clone https://github.com/BVLC/caffe.git
$ cd caffe

3.設定ファイルの編集

まずはコンパイル用のmakeファイルを作成します。

caffe/
$ cp Makefile.config.example Makefile.config

このままコンパイルするといくつかのエラーが発生したので、
それを回避するために設定ファイルをいくつか書き換えます。

3.1.hdf5まわり

"can't find hdf5.h"などと言われた場合は、
まずlibhdf5-devをapt-getしたか確認しましょう。

インストールされているのにエラーを吐く場合は、
Makefile.configのINCLUDE_DIRSを修正します。

caffe/Makefile.config
#INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/

3.2.cudaまわり

次に、"/usr/local/cuda/bin/nvcc: not found"と言われた場合は、
Makefile.configのCUDA_DIRを修正します。

caffe/Makefile.config
#CUDA_DIR := /usr/local/cuda
CUDA_DIR := /usr

3.3.memcpyまわり

memcpyまわりでエラーを吐いた場合には、caffe/MakefileのNVCCFLAGSを以下のように修正します。(Makefile.configではないです。紛らわしい)

caffe/Makefile
#NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

3.4.lhdf5まわり

"/usr/bin/ld: -hdf5_hl が見つかりません"と言われたときは、
/usr/lib/x86_64-linux-gnuの中にシンボリックリンクを貼ります。

/usr/lib/x86_64-linux-gnu
$ cd /usr/lib/x86_64-linux-gnu
$ sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
$ sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so

4.コンパイル

ここまで来れば、必要な設定は大体終わったはずです。
コンパイルして、テストをしてみましょう。

caffe
$ make
$ make runtest

runtestの結果がPASSEDとなれば、Caffeのインストールが完了です。

5.サンプルのテスト

caffeはデフォルトで学習用のスクリプト一式が入っています。

なので、あとはスクリプトを順々に叩くだけでサンプルが動かせます。

まずはmnistのデータをダウンロードし、変換しましょう。

caffe/
$ data/mnist/get_mnist.sh
$ examples/mnist/create_mnist.sh

学習用データが手に入ったので、モデルを学習させます。

caffe/
$ examples/mnist/train_lenet.sh

最後に、学習済みモデルを利用して、mnistのテストを実行します。

caffe/
$ ./build/tools/caffe test -model ./examples/mnist/let_train_test.prototxt -weights ./examples/mnist/lenet_iter_10000.caffemodel

ここまでで一通りCaffeを動かすことが出来ました。

参考文献