linux下配置运行SSD并训练自己的数据集(目标检测)

cuda8.0  cudnn6.0(大家还是用cudnn6.0吧,虽然我用cudnn5.1.10成功配置了一次,但是第二次就没成功,换了cudnn6.0就成功了。emmm。。。。)python2

一、下载SSD并编译

1、

git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd

git checkout ssd后,ssd放到caffe/example文件夹下。

2、

# 在caffe目录下
cp Makefile.config.example Makefile.config

打开Makefile.config文件,修改以下内容:

    注意:修改后是没有井号的

//若使用cudnn,则将# USE_CUDNN := 1 修改成: USE_CUDNN := 1
    //若使用的opencv版本是3的,则将# OPENCV_VERSION := 3 修改为: OPENCV_VERSION := 3
    //若要使用python来编写layer,则需要将# WITH_PYTHON_LAYER := 1 修改为 WITH_PYTHON_LAYER := 1
    //重要的一项 将# 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/hdf5/serial //这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径

打开Makefile文件:

将
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

编辑/usr/local/cuda/include/host_config.h,将其中的第115行注释掉:

#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
注释掉后如下
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

3、

make -j8

我在编译的时候出现了以下错误:

错误一:

原因:由于我的ubuntu中存在两个版本的gcc:gcc-4.9和gcc-5,出现了冲突

解决方法:建立一个软链接指向gcc-5(或者gcc-4.9).

sudo ln -s /usr/bin/gcc-5* /usr/bin/gcc -f
sudo ln -s /usr/bin/g++-5* /usr/bin/g++ -f

错误二:

解决办法:

遇到类似于/usr/bin/ld: 找不到 -lxxx这种问题时,在命令行中直接输入:apt-get install libxxx-dev

问题解决后,重新编译:重新编译前要先make clean一下,然后再make -j8。

4、

gedit ~/.bashrc
# 在bashrc中添加export PYTHONPATH=/home/xxxx/ssd/caffe/python:$PYTHONPATH
# 其中,xxx需要根据自己的路径进行设置
# 添加后,保存关闭
source ~/.bashrc
make py

make py时可能会遇到以下错误:

python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: 没有那个文件或目录

解决办法:make

在Makefile.config找到PYTHON_INCLUDE,:

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

加一个local,变成:

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

5、

make test -j8
make runtest -j8

make runtest时可能会出现以下错误:

 Check failed: status == CUDNN_STATUS_SUCCESS (3 vs. 0)  CUDNN_STATUS_BAD_PARAM

是cudnn的问题,但是之前在另一台电脑上用cudnn5.1.10版本就可以顺利make runtest,不知道怎么回事,在服务器上就不可以。很气!于是我换成了cudnn6.0(还是用的cuda8.0),结果,,,,就可以了。

在这个过程中,我还尝试把Makefile.config文件中的USE_CUDNN:1注释掉,不用cudnn。虽然可以make runtest了,但是在后面的测试执行python examples/ssd/score_ssd_pascal.py时又出现了问题:

Check failed: error == cudaSuccess (11 vs. 0)  invalid argument

这个应该是爆显存了,但是我把batch_size都调成1了,还是不行。不过在用了cudnn6.0后,make runtest和测试都成功了。

二、准备数据

1、下载数据集

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

2、将以上数据集解压,解压后,将2007test和2007trainval合并成VOC2007。

在caffe/data文件夹中新建一个文件夹,命名为VOCdevkit,将VOC2007和VOC2012放进去。

3、修改caffe/data/VOC0712/create_list.sh文件

将上图中的root_dir修改成VOCdevkit路径

4、运行caffe/data/VOC0712/create_list.sh

终端cd到caffe/data/VOC0712文件夹,输入./create_list.sh,回车。

运行结束后,会在caffe/data/VOC0712文件夹中生成test.txt、test_name_size.txt、trainval.txt三个文件。

5、修改caffe/data/VOC0712/create_data.sh文件

将上图中的data_root_dir修改成VOCdevkit路径

6、运行caffe/data/VOC0712/create_data.sh

终端cd到caffe/data/VOC0712文件夹,输入./create_data.sh,回车。

运行结束后,会在caffe/data/VOCdevkit文件夹中生成一个VOC0712文件夹,其下有一个lmdb文件夹,lmdb文件夹下有VOC0712_test_lmdb和VOC0712_trainval_lmdb两个文件夹。这两个文件夹下是:

***注***:/data/VOC0712/labelmap_voc.prototxt里面存放了与类别有关的信息。

三、测试

1、下载训练好的模型。

下载下来是一个名字为models_VGGNet_VOC0712_SSD_300x300.tar.gz的压缩包。解压后是一个models文件夹,将里面的文件复制到caffe/models中。

2、cd到caffe目录下。执行:

python examples/ssd/score_ssd_pascal.py

四、训练(PASCAL VOC数据集)

1、下载预训练模型

下载后是一个VGGNet-master.zip压缩包。解压后,文件中有一个VGGNet文件夹,文件夹下有VGG_ILSVRC_16_layers_fc_reduced.caffemodel和VGG_ILSVRC_16_layers_fc_reduced_deploy.prototxt。将VGGNet文件夹拷贝到caffe/models中。

2、cd到caffe目录下,开始训练

(开始训练之前,可以修改gpu个数以及选择你要使用的gpu)

 python examples/ssd/ssd_pascal.py

如果训练过程中只出现loss为nan,不出现任何loss数值,那就需要将base_lr调低一点。

最简便的方法是将ssd_pascal.py中solver_param中的base_lr改成你想要设置的值,如图:

可能会出现如下错误:

ImportError: dynamic module does not define module export function (PyInit__caffe)

解决办法:

①首先要保证caffe/python的环境变量设置好了。同时,如果有多个caffe/python,需要将以前的环境变量注释掉。

②caffe支持python2.7,在使用 python examples/ssd/ssd_pascal.py命令时,要保证python版本为2.7。或者,如果你的电脑上有python2.7版本,那么可以使用 python2.7 examples/ssd/ssd_pascal.py命令。

3、训练结束后,在ssd_pascal.py文件中的job_dir路径(jobs/VGGNet/VOC0712/{})下生成日志文件,snapshot_dir路径(models/VGGNet/VOC0712/{})下存有断点模型,训练中断后会从最大迭代次数继续训练。模型会保存在save_dir(models/VGGNet/VOC0712/{})中。

五、训练后测试

1、修改example/ssd/score_ssd_pascal.py文件

(开始测试之前,可以修改gpu个数以及选择你要使用的gpu)

2、cd到caffe目录下

python example/ssd/score_ssd_pascal.py

 

***********************************后期有任何问题随时补充更新********************************************

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值