您的位置:首页 > Web前端

Ubuntu16.04+cuda8.0+cudnnV5.1 caffe SSD配置、训练及测试过程

2017-08-04 17:31 537 查看
Python版本可以按以下步骤DIY训练SSD

1.在/home/bay(您的服务器名字)/下新建ssd文件夹,在/home/bay/ssd/目录下clone作者github下的caffe文件包,执行以下命令: 

$ git clone https://github.com/weiliu89/caffe.git $ cd caffe
$ git checkout ssd
(出现“分支”则说明copy-check成功...作者caffe目录下有三个分支fcn/master/ssd,利用git checkout来切换分支,否则只有master目录下的文件)


2.配置caffe所需文件并进行编译

1)因为make指令只能make Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子,因此,首先执行以下命令将Makefile.config.example的内容复制到Makefile.config
$ cp Makefile.config.example Makefile.config
2)打开并修改配置文件
$ sudo gedit Makefile.config#打开Makefile.config文件
根据个人情况修改文件:
a.若使用cudnn,则
将#USE_CUDNN := 1修改成: USE_CUDNN := 1
b.若使用的opencv版本是2的,则
将#OPENCV_VERSION := 3 修改为: OPENCV_VERSION := 2
若使用的opencv版本是3的,则
将#OPENCV_VERSION := 3 修改为: OPENCV_VERSION := 3
c.若要使用Python来编写layer,则
将#WITH_PYTHON_LAYER := 1 修改为 WITH_PYTHON_LAYER := 1
d. 重要的一项 :
将# Whatever else you find you need goes here.下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf
这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径.
3)修改makefile文件
打开makefile文件,做如下修改:
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
4)编译源代码
$ make -j 8 all
$ make -j 8 runtest
$ make -j 8 pycaffe  #model是通过python编写的文件进行训练的
tips1:make: *** [.build_release/lib/libcaffe.so.1.0.0-rc3] Error 11./usr/bin/ld: 找不到 -lopenblas,编译过程找不到对应库文件。其中,-lxxx表示链接库文件 libxxx.so,通过执行命令 apt-get install libxxx-dev安装。




执行以下命令安装。

$ sudo apt-get install libopenblas-dev

tips2:如果在make all的时候出现/src/caffe/util/xxx.cpp报错,如io.cpp,bbox_util.cpp等报错问题,根据查到的一些资料显示可能是作者在生成ssd的时候用的是opencv2.0,而此处我用的是opencv3.2,这两个版本的opencv有很多不同的地方导致了这个错误,[Opencv 3.0环境下编译SSD的问题以及解决方法]。所以我按照下面的这种方法[Ubuntu 16.04 + Opencv3.0 + gtx1080 + caffe(SSD) + ROS(Kinetic)]

(http://blog.csdn.net/hh5945/article/details/53515564)可以配置成功:

$ cd ~/caffe
$ make clean
$ mkdir build
$ cd build
$ cmake ..
$ make all -j16
$ make install
$ make runtest
$ make pycaffe


3.下载预训练模型

链接:http://pan.baidu.com/s/1miDE9h2
密码:0hf2
在/home/bay/ssd/caffe/models/下新建VGGNet文件夹,将它放入/home/bay/ssd/caffe/models/VGGNet/目录下


4.下载VOC2007和VOC2012数据集

1)在/home/bay/下新建data文件夹,放到/home/bay/data下
$ cd ..
$ mkdir data
$ cd data/
2)下载数据集
$ 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 3)解压这三个文件,终端输入:
$ cd /home/bay/data
$ tar -xvf VOCtrainval_11-May-2012.tar
$ tar -xvf VOCtrainval_06-Nov-2007.tar
$ tar -xvf VOCtest_06-Nov-2007.tar(请严格按照这个顺序解压)
4)生成LMDB文件
终端输入:
$ cd /home/bay/ssd/caffe
$ ./data/VOC0712/create_list.sh
$ ./data/VOC0712/create_data.sh
在运行第三步时如果出现no module named caffe或者是no module named caffe-proto
这是由于caffe的Python环境变量未配置好,可按照下面方法解决,在终端输入:




$ echo "export PYTHONPATH=/home/bay/ssd/caffe/python" >> ~/.profile
$ source ~/.profile
$ echo $PYTHONPATH #检查环境变量的值
然后再次执行生成LMDB文件命令,在data/VOC0712/中生成trainval.txt,test.txt, and test_
9ae1
name_size.txt。
可以通过修改create_list.sh和create_data.sh来针对自己的数据集产生LMDB文件。
产生的trainval和test数据位于/home/bay/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb和/home/bay/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb。
1)训练
打开caffe/examples/ssd/ssd_pascal.py这个文件,找到gpus=’0,1,2,3’这一行,如果您的服务器有一块显卡,则将123删去,如果有两个显卡,则删去23,以此类推。如果您服务器没有gpu支持,则注销以下几行,程序会以cpu形式训练。(这个是解决问题cudasuccess(10vs0)的方法)
#Ifnum_gpus >0:
# batch_size_per_device =int(math.ceil(float(batch_size) / num_gpus))
#iter_size =int(math.ceil(float(accum_batch_size) / (batch_size_per_device * num_gpus)))
# solver_mode =P.Solver.GPU
# device_id =int(gpulist[0])
保存后终端运行:
$ cd  /home/bay/ssd/caffe
$ python examples/ssd/ssd_pascal.py
如果出现问题cudasuccess(2vs0)则说明您的显卡计算量有限,再次打开caffe/examples/ssd/ssd_pascal.py这个文件,找到batch_size =32这一行,修改数字32,可以修改为16,或者8,甚至为4,保存后再次终端运行
$ python examples/ssd/ssd_pascal.py
2)测试
终端输入:
$ python examples/ssd/score_ssd_pascal.py(演示detection的训练结果,数值在0.718左右)
3)演示
演示网络摄像头识别效果,终端输入:
$ python examples/ssd/ssd_pascal_webcam.py
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: