覚え書きブログ

Jetson TX1の覚え書き(Caffeのインストール)

今回は、先日のJetson TX1にCaffeをインストールした。
hirotaka-hachiya.hatenablog.com

以下の2つのサイトを参考にした。
http://robotics4society.com/2017/04/03/jetson-caffe/
http://hirotaka-hachiya.hatenablog.com/entry/2015/03/20/212247

1)依存する基本パッケージをapt-getでインストールする。
下記のcaffeのページに記載されているコマンドをそのまま実行してみたが、下記のエラーが出た。どうやらJetpackでインストールしたopenCVとlibopencv-devが競合しているようだ。
http://caffe.berkeleyvision.org/install_apt.html

> sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 libopencv-dev : Depends: libopencv-core-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-ml-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-imgproc-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-video-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-objdetect-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-highgui-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-calib3d-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-flann-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-features2d-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-legacy-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-contrib-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-ts-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-photo-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-videostab-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-stitching-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-gpu-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-superres-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libopencv-ocl-dev (= 2.4.9.1+dfsg-1.5ubuntu1) but it is not going to be installed
                 Depends: libopencv2.4-java (= 2.4.9.1+dfsg-1.5ubuntu1) but it is not going to be installed
                 Depends: libopencv2.4-jni (= 2.4.9.1+dfsg-1.5ubuntu1) but it is not going to be installed
                 Depends: libcv-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libhighgui-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
                 Depends: libcvaux-dev (= 2.4.9.1+dfsg-1.5ubuntu1)
E: Unable to correct problems, you have held broken packages.

libopencv-devを外し、さらに「libgflags-dev libgoogle-glog-dev liblmdb-dev」も追加してパッケージをインストールした。また、caffeのページ通りに、libboost-all-devもインストールした。

> sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler libgflags-dev libgoogle-glog-dev liblmdb-dev
> sudo apt-get install --no-install-recommends libboost-all-dev

2)BLASのパッケージをapt-getでインストールする。これはcaffeのページ通り。

> sudo apt-get install libatlas-base-dev

3)Caffeをgithubからcloneする。

> git clone https://github.com/BVLC/caffe.git
Cloning into 'caffe'...
remote: Counting objects: 38658, done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 38658 (delta 33), reused 18 (delta 18), pack-reused 38611
Receiving objects: 100% (38658/38658), 48.02 MiB | 8.71 MiB/s, done.
Resolving deltas: 100% (25979/25979), done.
Checking connectivity... done.

4)pycaffeを使うので、必要なpythonパッケージをインストールする。パッケージはローカルの/home/ubuntu/.localにインストールされる.

> cd caffe
> sudo apt-get install python-pip
> for req in $(cat python/requirements.txt); do pip install $req; done

5)Makefile.configを、Jetson TX1の環境に合わせて変更する。
Jetson TX1に載っているTegraのアーキ番号を下記のサイトで調べたところ、5.3なのでMakefile.configに、「53」を追加する。
https://developer.nvidia.com/cuda-gpus
また、CUDNNがインストールされているので、「USE_CUDNN」を「1」に設定する。
また、pythonのパッケージが/home/ubuntu/.localにインストールされるので、PYTHON_INCLUDEとPYTHON_LIBにパスを追加する。

> cp Makefile.config.example Makefile.config
> vi Makefile.config
USE_CUDNN := 1
CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
                -gencode arch=compute_35,code=sm_35 \
                -gencode arch=compute_50,code=sm_50 \
                -gencode arch=compute_52,code=sm_52 \
                -gencode arch=compute_53,code=sm_53 \
                -gencode arch=compute_60,code=sm_60 \
                -gencode arch=compute_61,code=sm_61 \
                -gencode arch=compute_61,code=compute_61
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/aarch64-linux-gnu/hdf5/serial

PYTHON_INCLUDE := /usr/include/python2.7 \
                /usr/lib/python2.7/dist-packages/numpy/core/include \
                /home/ubuntu/.local/lib/python2.7/site-packages/numpy/core/include

PYTHON_LIB := /usr/lib /home/ubuntu/.local/lib

6)Makeを実行する。
まず、クロック周波数を上げるために、jetson_clocks.shを実行する。そして、CPUのコア数「4」を指定してmakeを実行する。

> sudo ../jetson_clocks.sh
> make -j4
CXX .build_release/src/caffe/proto/caffe.pb.cc
CXX src/caffe/blob.cpp
CXX src/caffe/util/signal_handler.cpp
...

7)PycaffeをMakeする。

> make py -j4
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp

8)動作確認をする。
「make test」とpythonの「import caffe」を用いて動作確認をする。

> make test
> export PYTHONPATH=/home/ubuntu/caffe/python:$PYTHONPATH
> python
>>> import caffe

9)画像分類の動作確認
以下を参考にしてcaffenetを用いて画像分類の動作確認をする。
hirotaka-hachiya.hatenablog.com

なお、モデルのダウンロードは、以下のようにdownload_model_binary.pyスクリプトを用いると便利。

> scripts/download_model_binary.py models/bvlc_reference_caffenet/