faster rcnn训练自己的数据集demo和训练过程error总结

电脑环境:ubuntu16.04+cuda7.5+960(2G)和ubuntu 16.04+cuda8.0+titan x(12G)


demo过程

1. 拉取源码

git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

2安装依赖项

sudo apt-get install python-opencv
sudo pip install cython easydict

3.复制作者的Mkefile.config.example文件,并重命名为Makefile.config.

cp Makefile.config.example Makefile.config

    分别取消USE_CUDNN=1,      WITH_PYTHON_LAYER = 1,   USE_PKG_CONFIG = 1  的注释;

    修改 include_dirs  和 libarry_dirs 的那两行 为

  INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/include/hdf5/serial \
            /usr/local/include
  LIBRARY_DIRS := $(PYTHON_LIB) /usr/lib/x86_64-linux-gnu/hdf5/serial \
            /usr/local/lib /usr/lib


4.编译cython模块

cd ~/py-faster-rcnn/lib/
make   


5.编译pycaffe

首先需要按照如下进行修改

①将/home/xxx/py-faster-rcnn/caffe-fast-rcnn/include/caffe/util/cudnn.hpp 换成

/home 的caffe里的相应目录下的cudnn.hpp;

②将/home/xxx/py-faster-rcnn/caffe-fast-rcnn/include/caffe/layers/下所有cudnn开头的文件

都替换为/home 的caffe里相应目录下的同名文件;

③将/home/xxx/py-faster-rcnn/caffe-fast-rcnn/src/caffe/layer下所有cudnn开头的文件

都替换为/home 的caffe里相应目录下的同名文件;

如果如图报错 



打开makefile 文件

gedit Makefile

修改这一行

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

6.下载模型

cd ~/py-faster-rcnn/
./data/scripts/fetch_faster_rcnn_models.sh

7.模型demo

./tools/demo.py --net zf
如果这条脚本语句报错,bash:没有足够的权限,那就需要修改py-faster-rcnn文件夹的权限.

chmod -R 777 py-faster-rcnn

以上过程主要参照博客进行的.


数据集制作过程


用自己的数据训练faster rcnn.首先要做数据集,看这篇博客

博客最后一部分imagesets中main的几个txt我不是很清楚,

我翻了一下VOC2007中main文件夹下的txt发现每个类别都有相应的4个txt,而且后面有1,和-1。

我当时做的是车辆检测,每张图片都有车,

我直接复制了生成的txt,重命名了一下,用sed命令给每一行末尾加上了1。

在此介绍一下sed,tr相关命令。非常实用。

sed用法见这篇博客。在制作数据集画完框后批量修改生成的txt文件内容,可以参考这篇博客

合并txt命令:

cat a.txt b.txt > c.txt

8 制作好数据集后,开始训练faster rcnn.修改文件参数见这篇博客.说的很详细,对着做就可以了。


遇到的error


1. ATTributeError:'module'object has no attribute 'text format'

解决方法:在lib/fast_rcnn/train.py中添加:

Import google protobuf.text_format

2.  assert (box[:,2]>=box[:,0].all() assertionerror

使用这篇博客前两种方法结合,我不报错了,少了一个都报错。

3.运行完了rpn第一阶段,显示错误

  check failed: error == cudasuccess(2 vs.0) out of memory

原因显存不够。方法:调小batch_size.

文件位置:py/lib/fast-rcnn/config.py.我当时直接调到2,显存(2G)还是不够。同文件 config.py修改train.size=600这句。size我设为450,下面一行设为700.ok 可以跑了。这个地方是在改动图片的尺寸。


心得体会


1.首先设置 max iters的时候把第一阶段迭代次数设为200,看第二阶段能不能跑,会不会爆显存,爆了在修改,等的时间也不长,不要一来就弄几万次迭代,如果你笔记本显存大就无所谓了,我后来用的titan x显存12G,灰常爽啊。

2.如果为了方便的话,小显存就训练zf,大显存就直接上vgg16.中间的网络训练出来,demo自己的图片demo.py需要修改的更多。

3.demo的图片结果标签可以不按照自己的数据集命名,例如我做的车辆检测,制作数据集是写的是 vehicle类和background类,在demo.py文件中修改class 可以不用vehicle,用V也可以显示出来,当时我demo的一张图片车辆太多,vehicle太长,经常重叠,很难看。

4.一张图片含有多类检测物体希望在demo的时候所有结果显示在一张图片上,看这篇文章

暂时就想到这么多了,以后想起来了在写出来  2017.4.20


2017.9.28补充:

VOC数据集的xml文件格式如下:




自己制作数据集时,用LabelImg工具可以直接得到xml文件,格式如下:


此时filename名称是不正确的,需要加后缀,linux下可以使用如下bash语句加上后缀:

find -name '*.xml' |xargs perl -pi -e 's|</filename>|.jpg</filename>|g' 

此时便可以直接使用xml文件。



2017.11.04

自己电脑上的caffe出问题了,然后重装了一下,安装ssd的时候,对照师兄的这篇博客,但是在make -j8的时候报错,/usr/bin/ld :cannot find -lopenbals.此时需要安装openblas,对照这篇博客 .编译成功。

在make runtest 的时候报错build_release/tools/caffe: error while loading shared libraries: libopenblas.so.0: cannot open shared object file: No such file or directory。

解决办法是在/usr/lib/下建立一个 软链接将 libopenblas.so.0指向/openbls安装目录/lib/ libopenblas.so.0

ln -s  /home/cyh/lib/libopenblas.so.0  /usr/lib/libopenblas.so.0 
即可。

猜你喜欢

转载自blog.csdn.net/dlyldxwl/article/details/70255436