今回は、先日の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/