Ubuntu14.04+caffe+SSD的配置

此步驟很簡單,在liuwei的GitHub上都有,地址是 https://github.com/weiliu89/caffe/tree/ssd

記錄下了所有遇到的問題,經過反覆多人在不同PC上配置驗證可行。如有新的error或warning,請評論,幫助改進,謝謝!


新建根目錄,以下所有$CAFFE_ROOT均表示根目錄,根據實際情況替換(我的是$Home/ssd/caffe)。

1.        獲取含有ssd的caffe

$git clone https://github.com/weiliu89/caffe.git

$cd caffe

$git checkout ssd

 

 

2.        根據需求更改caffe配置

$cp Makefile.config.example Makefile.config     

再根據CPU和GPU修改Makefile.config

GPU:

去掉以下注釋

USE_CUDNN := 1 

WITH_PYTHON_LAYER := 1

      

 

3.        編譯運行

$make -j8

$make py

$make test -j8

$make runtest -j8

 

Ø 出現問題:

/usr/bin/ld:cannot find -lopenblas

collect2: error:ld returned 1 exit status

Ø 分析原因:

是該庫的沒有裝好或者沒有鏈接好。

Ø 解決方案:

首先看是否找得到

$locate libopenblas

如果找不到

$sudo apt-get install libopenblas-dev

 

Ø 出現warning:

nvcc warning :The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may beremoved in a future release (Use -Wno-deprecated-gpu-targets to suppresswarning).

Ø 分析原因:

Makefile中採用了CUDA的compute capability2.0和2.1。但是從CUDA 8.0開始compute capability 2.0和2.1被棄用了。

Ø 解決方案:

刪除Makefile裏的

-gencodearch=compute_20,code=sm_20

-gencodearch=compute_20,code=sm_21

 

Ø 出現問題:

./include/caffe/util/cudnn.hpp:8:34:致命錯誤:caffe/proto/caffe.pb.h:沒有那個文件或目錄

Ø 分析原因:

應該是版本比較低。

Ø 解決方案:

先安裝pip

$wget https://bootstrap.pypa.io/get-pip.py  --no-check-certificate

$sudo python get-pip.py

再更新

$pip install protobuf –upgrade -i http://pypi.douban.com/simple

$pip install pillow –upgrade -i http://pypi.douban.com/simple

 

Ø 出現問題:

/usr/include/boost/property_tree/detail/json_parser_read.hpp:257:264:error: ‘type name’ declared as function returning an array

Ø 分析原因:

應該是gcc版本比較低,重新更新一下。

Ø 解決方案:

添加源

$sudo add-apt-repository ppa:ubuntu-toolchain-r/test

$sudo apt-get update

安裝依賴的包(出現錯誤才需要這個)

$sudo apt-get install software-properties-common

升級更新      

$sudo apt-get install gcc-5 g++-5

更新鏈接

$sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc -f

$sudo ln -s /usr/bin/g++-5 /usr/bin/g++ -f

 

Ø 出現問題:

python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: Nosuch file or directory

Ø 解決方案:

sudo vim Makefile.config

#找到這條語句,然後要加一個local:

PYTHON_INCLUDE:= /usr/include/python2.7 \

/usr/local/lib/python2.7/dist-packages/numpy/core/include

 

Ø 出現問題:

python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: Nosuch file or directory

Ø 解決方案:

sudo pip install numpy

看numpy目錄在哪裏,pip安裝的目錄在/usr/local/lib/下面

PYTHON_INCLUDE:=/usr/include/python2.7\

/usr/local/lib/python2.7/dist-packages/numpy/core/include

 

 

4.        下載fully convolutional reduced (atrous) VGGNet

放入$CAFFE_ROOT/models/VGGNet/下,CAFFE_ROOT表示根目錄,根據實際情況替代。

 

 

5.        下載VOC2007 and VOC2012 dataset至$HOME/data/(請注意目錄改變,及時更換目錄,免得後面改腳本)

# Download thedata.

cd $HOME/data

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar

# Extract thedata.

tar -xvf VOCtrainval_11-May-2012.tar

tar -xvf VOCtrainval_06-Nov-2007.tar

tar -xvf VOCtest_06-Nov-2007.tar

 

 

6.        製作LMDB文件

根據實際的 VOCdevkit的目錄修改create_list.sh 文件中的root_dir,修改create_data.sh 文件中的data_root_dir。

create_list.sh和create_data.sh兩個文件目錄是$CAFFE_ROOT./data/VOC0712/。

我的設置是,root_dir=/data/lxy/experiment/ssd/data/VOCdevkit

注意如果是在computer(計算機)目錄下,/data前面不要加$HOME。只有在主文件夾目錄下才需要加。

 

cd $CAFFE_ROOT                    

# Create thetrainval.txt, test.txt, and test_name_size.txt in data/VOC0712/

./data/VOC0712/create_list.sh

# You can modifythe parameters in create_data.sh if needed.

# It will createlmdb files for trainval and test with encoded original image:

#   -$HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb

#   -$HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb

# and make softlinks at examples/VOC0712/

./data/VOC0712/create_data.sh

 

Ø 出現問題:

Traceback (mostrecent call last):

  File"/data/lxy/experiment/ssd/caffe/data/VOC0712/../../scripts/create_annoset.py",line 103, in <module>

    label_map = caffe_pb2.LabelMap()

AttributeError:'module' object has no attribute 'LabelMap'

Traceback (mostrecent call last):

  File"/data/lxy/experiment/ssd/caffe/data/VOC0712/../../scripts/create_annoset.py",line 103, in <module>

    label_map = caffe_pb2.LabelMap()

AttributeError:'module' object has no attribute 'LabelMap'

Ø 分析原因:

是caffe與Python的接口沒有配置好

Ø 解決方案:

$gedit ~/.bashrc

在彈出的文檔最後一行加入

export PYTHONPATH=$CAFFE_ROOT/python:$PYTHONPATH

保存退出

$source~/.bashrc

完美解決,有時需要註銷或者重啓一下。

 

Ø 出現問題:

Traceback (mostrecent call last):

  File"/Home/ssd/caffe/data/VOC0712/../../scripts/create_annoset.py", line7, in <module>

    from caffe.proto import caffe_pb2

ImportError: Nomodule named caffe.proto

Traceback (mostrecent call last):

  File"/Home/ssd/caffe/data/VOC0712/../../scripts/create_annoset.py", line7, in <module>

    from caffe.proto import caffe_pb2

ImportError: Nomodule named caffe.proto

Ø 分析原因:

是caffe與Python的接口沒有配置好

Ø 解決方案:(修改後所有用戶均修改,如果只改當前用戶,用gedit ~/.profile)

$gedit ~/.bashrc

在彈出的文檔最後一行加入

exportPYTHONPATH=$CAFFE_ROOT/python:$PYTHONPATH

保存退出

$source~/.bashrc

完美解決。有時需要註銷或重啓一下。

 

Ø 出現問題:

ImportError: Nomodule named skimage.io

Ø 分析原因:

Skimage庫沒有裝好

Ø 解決方案:

pip install scikit-image

 

Ø 出現問題:

module compiledagainst API version 0xa but this version of numpy is 0x9

Ø 分析原因:

Numpy庫沒有配置好

Ø 解決方案:

先進入python,輸入

import numpy

printnumpy.__path__

找到numpy位置,再刪去numpy,重新安裝

sudoeasy_install -U numpy

 

Ø 出現問題:

ImportError: Nomodule named google.protobuf.internal

Ø 分析原因:

Protobuf沒有配置好

Ø 解決方案:

sudo pip install  easydict

sudo pip install protobuf

 

 

7.        訓練自己的model

訓練model:迭代120000次

#It will create model definition files and save snapshot models in:

#   -$CAFFE_ROOT/models/VGGNet/VOC0712/SSD_300x300/

#and job file, log file, and the python script in:

#   -$CAFFE_ROOT/jobs/VGGNet/VOC0712/SSD_300x300/

#and save temporary evaluation results in:

#   -$HOME/data/VOCdevkit/results/VOC2007/SSD_300x300/

#It should reach 77.* mAP at 120k iterations.

python examples/ssd/ssd_pascal.py

 

 

8.        不想自己訓練,可以用訓練好的model

GitHub上有作者訓練好的model,但是鏈接需要翻牆,因爲都是Google網盤。

1)       PASCAL VOC models:

07+12: SSD300*SSD512*

07++12: SSD300*SSD512*

COCO[1]SSD300*SSD512*

07+12+COCO: SSD300*SSD512*

07++12+COCO: SSD300*SSD512*

2)       COCO models:

trainval35k: SSD300*SSD512*

3)       ILSVRC models:

trainval1: SSD300*SSD500

 

測試:

上述的model解壓後將VGGNet放入$CAFFE_ROOT/models裏,注意修改文件夾名

VGGNet裏的文件夾修改爲VOC0712

VOC0712裏的文件夾修改爲SSD_300×300

SSD_300×300裏的.caffemodel修改爲

VGG_VOC0712_SSD_300x300_iter_160000.caffemodel

ps:300×300和160000不用修改,不同model不一樣,此處只是一個例子。

      

python examples/ssd/score_ssd_pascal.py

 

Ø 出現問題:

Check failed:error == cudaSuccess (30 vs. 0) unknown error

Ø 分析原因:

是cuda沒有配置好

Ø 解決方案:

sudo apt-get install nvidia-modprobe

 

Ø  出現問題:

F113009:28:46.200057 10076 io.cpp:45] Check failed: fd != -1 (-1 vs. -1) File notfound: data/VOC0712/labelmap_voc.prototxt

Ø  分析原因:

labelmap_voc.prototxt路徑不對。

Ø  解決方法:

/caffe-ssd/models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt文檔的最後的

output_format: "VOC"  

label_map_file: "data/VOC0712/labelmap_voc.prototxt"  

把label_map_file改成絕對地址就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章