SSD区域检测网络配置+训练自己的数据
2017-11-01 09:48
726 查看
之前用了faster-rcnn训练数据后,查资料的时候发现了ssd这种end-to-end的检测网络,所以决定跑一跑之前制作好的数据集试试。网上教程不是很多,而且感觉步骤简略,自己琢磨了一晚上走了很多弯路才勉强把网络跑起来,所以决定写一个踩坑跳坑小教程。
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd(出现“分支”则说明copy-check成功)
cp Makefile.config.example Makefile.config
之前我在其他地方编译过caffe,这里再编译一次,我就把已经写好的Makefile.config文件复制了一份,大概改的地方有这几个,改的时候把前面的’#’去掉就行,首先是有GPU的,用cudnn加速,第5行、28行、36行、50行:
Python我用的是anaconda库的python2.7,所以要把默认的去掉,
还有
下面一步比较重要,要加上hdf的路径,不然会报错找不到
修改完毕Makefile.config之后,进行编译,注意是在caffe的目录底下进行,而且要用root模型,要不然会报错:
对‘TIFFIsTiled@LIBTIFF_4.0’未定义的引用
sudo su
make all -j16
make test -j16
编译caffe完成后是编译pycaffe,需要退出之前的root模式,不然会报错
‘找不到’Python.h’
make pycaffe -j16
cd /data
mkdir mydataset
mkdir VOCdevkit
cd VOCdevkit
mkdir mydataset
2、在建立好的caffe/data/VOCdevkit/mydataset文件夹中拷贝Annotations,ImageSets,JPEGImages。没有下图的lmdb文件夹,这是后来生成lmdb数据生成的。
其中Annotations放标注好的XML文件,ImageSets放训练和测试数据,JPEGImages是源图片文件
3、回到data文件夹下,再把/data/VOC0712目录下的create_list.sh 、create_data.sh、labelmap_voc.prototxt 这三个文件拷贝到/mydataset下:
cp VOC0712/create* ./mydataset
cp VOC0712/label* ./mydataset
4、修改create_list.sh :
如果自己数据集的图片不是jpg格式是png格式的话还需要修改:
5、修改create_data.sh:
png图片的话还需要修改:
6、修改labelmap_voc.prototxt, 此文件定义label
有些教程上没有说修改这个文件,导致我创建lmdb文件的时候出现错误:
这里需要把这个文件中的标签改成你自己设置的标签,第0个标签background不需要修改。
7、运行生成lmdb文件
先在example文件夹中创建mydataset文件夹存放lmdb文件:
cd example
mkdir mydataset
回到caffe根目录然后运行
./data/mydataset/create_list.sh
./data/mydataset/create_data.sh
运行的时候如果出现:
需要添加环境变量
sudo gedit ~/.bashrc
在最后一行添加:
source ~/.bashrc
成功的话会输出
8、 下载预训练模型VGG_ILSVRC_16_layers_fc_reduced.caffemodel
链接:http://pan.baidu.com/s/1miDE9h2 密码:0hf2,下载完成后保存在:
caffe/models/VGGNet/
链接是从别人教程中搬运过来的,原文:http://lib.csdn.net/article/deeplearning/53859
9、数据集准备完毕后就是修改/examples/ssd/ssd_pascal.py
cd /examples/ssd
vim sd_pascal.py, 修改如下:
57行: train_data路径;
59行:test_data路径;
197-203行:save_dir、snapshot_dir、job_dir、output_result_dir路径;
216-220行: name_size_file、label_map_file路径;
223行:num_classes 修改为1 + 类别数
315行:num_test_image:测试集图片数目
另外, 如果你只有一个GPU, 需要修改285行:,否则,训练的时候会出错。
gpus=”0,1,2,3” ===> 改为”0”
如果出现:
Check failed: error == cudaSuccess (2 vs. 0) out of memory
说明GPU内存不足,需要改小batch_size:
如果还出现:
Train net output #0: mbox_loss = nan (* 1 = nan loss)
损失值溢出,需要修改base_lr,乘以0.1,改为0.0001,在ssd_pascal.py文件中修改
把base_lr*0.1变成0.0001,ctrl+c中断程序后,再重新执行,需要删除/home/idc/deep/gjj/caffe/models/VGGNet/VOC0712/SSD_300x300路径下的临时文件,不然会从中断点继续执行。
10、愉快地开始训练
完成以上步骤后就可以看见GPU开始愉快地训练地输出了,训练很慢。。。
SSD的安装
安装还是比较简单的,直接从github上下载然后创建分支:git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd(出现“分支”则说明copy-check成功)
编译ssd caffe
cd /home/usrname/caffecp Makefile.config.example Makefile.config
之前我在其他地方编译过caffe,这里再编译一次,我就把已经写好的Makefile.config文件复制了一份,大概改的地方有这几个,改的时候把前面的’#’去掉就行,首先是有GPU的,用cudnn加速,第5行、28行、36行、50行:
5 USE_CUDNN := 1 28 CUDA_DIR := /usr/local/cuda 36 CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \ 50 BLAS := atlas
Python我用的是anaconda库的python2.7,所以要把默认的去掉,
68 #PYTHON_INCLUDE := /usr/include/python2.7 \ 69 # /usr/lib/python2.7/dist-packages/numpy/core/include 70 # Anaconda Python distribution is quite popular. Include path: 71 # Verify anaconda location, sometimes it's in root. 72 ANACONDA_HOME := $(HOME)/anaconda2 73 PYTHON_INCLUDE := $(ANACONDA_HOME)/include \ 74 $(ANACONDA_HOME)/include/python2.7 \ 75 $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
还有
83 #PYTHON_LIB := /usr/lib 84 PYTHON_LIB := $(ANACONDA_HOME)/lib
下面一步比较重要,要加上hdf的路径,不然会报错找不到
93 # Whatever else you find you need goes here. 94 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/ 95 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
修改完毕Makefile.config之后,进行编译,注意是在caffe的目录底下进行,而且要用root模型,要不然会报错:
对‘TIFFIsTiled@LIBTIFF_4.0’未定义的引用
sudo su
make all -j16
make test -j16
编译caffe完成后是编译pycaffe,需要退出之前的root模式,不然会报错
‘找不到’Python.h’
make pycaffe -j16
制作自己数据
1、这里我就不跑VOC2007和VOC2012了,直接上自己的数据集。制作自己数据的方法和faster-rcnn很相似,这方面的教程也很多,我主要用到的标签标注软件是labelImg,可以搜索下该软件怎么下载使用。使用自己数据集的方法:cd /data
mkdir mydataset
mkdir VOCdevkit
cd VOCdevkit
mkdir mydataset
2、在建立好的caffe/data/VOCdevkit/mydataset文件夹中拷贝Annotations,ImageSets,JPEGImages。没有下图的lmdb文件夹,这是后来生成lmdb数据生成的。
其中Annotations放标注好的XML文件,ImageSets放训练和测试数据,JPEGImages是源图片文件
3、回到data文件夹下,再把/data/VOC0712目录下的create_list.sh 、create_data.sh、labelmap_voc.prototxt 这三个文件拷贝到/mydataset下:
cp VOC0712/create* ./mydataset
cp VOC0712/label* ./mydataset
4、修改create_list.sh :
12 root_dir=$HOME/你的caffe路径/data/VOCdevkit 13 for name in mydataset
如果自己数据集的图片不是jpg格式是png格式的话还需要修改:
25 sed -i "s/$/.png/g" $img_file
5、修改create_data.sh:
7 data_root_dir="$HOME/你的caffe路径/data/VOCdevkit" 8 dataset_name="mydataset"
png图片的话还需要修改:
17 extra_cmd="--encode-type=png --encoded"
6、修改labelmap_voc.prototxt, 此文件定义label
有些教程上没有说修改这个文件,导致我创建lmdb文件的时候出现错误:
F1031 21:35:56.938661 4014 io.cpp:292] Unknown name: glasses *** Check failure stack trace: *** @ 0x7fc3963d05cd google::LogMessage::Fail() @ 0x7fc3963d2433 google::LogMessage::SendToLog() @ 0x7fc3963d015b google::LogMessage::Flush() @ 0x7fc3963d2e1e google::LogMessageFatal::~LogMessageFatal() @ 0x7fc3969e2151 caffe::ReadXMLToAnnotatedDatum() @ 0x7fc3969e3a38 caffe::ReadRichImageToAnnotatedDatum() @ 0x4052b3 main @ 0x7fc395312830 __libc_start_main @ 0x406149 _start @ (nil) (unknown)
这里需要把这个文件中的标签改成你自己设置的标签,第0个标签background不需要修改。
7、运行生成lmdb文件
先在example文件夹中创建mydataset文件夹存放lmdb文件:
cd example
mkdir mydataset
回到caffe根目录然后运行
./data/mydataset/create_list.sh
./data/mydataset/create_data.sh
运行的时候如果出现:
Traceback (most recent call last): label_map = caffe_pb2.LabelMap() AttributeError: 'module' object has no attribute 'LabelMap'
需要添加环境变量
sudo gedit ~/.bashrc
在最后一行添加:
export PYTHONPATH=$你的caffe路径/python:$PYTHONPATH
source ~/.bashrc
成功的话会输出
8、 下载预训练模型VGG_ILSVRC_16_layers_fc_reduced.caffemodel
链接:http://pan.baidu.com/s/1miDE9h2 密码:0hf2,下载完成后保存在:
caffe/models/VGGNet/
链接是从别人教程中搬运过来的,原文:http://lib.csdn.net/article/deeplearning/53859
9、数据集准备完毕后就是修改/examples/ssd/ssd_pascal.py
cd /examples/ssd
vim sd_pascal.py, 修改如下:
57行: train_data路径;
59行:test_data路径;
197-203行:save_dir、snapshot_dir、job_dir、output_result_dir路径;
216-220行: name_size_file、label_map_file路径;
223行:num_classes 修改为1 + 类别数
315行:num_test_image:测试集图片数目
另外, 如果你只有一个GPU, 需要修改285行:,否则,训练的时候会出错。
gpus=”0,1,2,3” ===> 改为”0”
如果出现:
Check failed: error == cudaSuccess (2 vs. 0) out of memory
说明GPU内存不足,需要改小batch_size:
336 # Divide the mini-batch to different GPUs. 337 batch_size = 4 338 accum_batch_size = 4
如果还出现:
Train net output #0: mbox_loss = nan (* 1 = nan loss)
损失值溢出,需要修改base_lr,乘以0.1,改为0.0001,在ssd_pascal.py文件中修改
365 solver_param = { 366 # Train parameters 367 'base_lr': base_lr*0.1,
把base_lr*0.1变成0.0001,ctrl+c中断程序后,再重新执行,需要删除/home/idc/deep/gjj/caffe/models/VGGNet/VOC0712/SSD_300x300路径下的临时文件,不然会从中断点继续执行。
10、愉快地开始训练
完成以上步骤后就可以看见GPU开始愉快地训练地输出了,训练很慢。。。
相关文章推荐
- 目标检测算法SSD在window环境下GPU配置训练自己的数据集
- 使用SSD检测训练自己的数据
- ssd训练自己的数据(物体检测),并测试模型
- [2] SSD配置+训练VOC0712+训练自己的数据集
- 目标检测算法SSD之训练自己的数据集
- SSD配置、训练、测试以及应用到自己的数据集
- 深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-3结合caffe中的CIFAR10修改相关配置文件并训练
- windows下SSD训练自己的数据
- 利用tensorflow训练自己的图片数据(3)——建立网络模型
- 利用SSD和自己训练好的模型进行目标检测
- [深度学习] RCNNs系列(1) Ubuntu下Faster RCNN配置及训练和测试自己的数据方法
- Caffe深度学习入门—— caffenet 微调网络 训练自己的数据并测试训练的模型
- Caffe学习——使用自己的数据(非图像)训练网络
- Ubuntu16.04+cuda8.0+cudnn5.1配置faster-rcnn的方法以及训练自己的数据出现的问题
- SSD安装及训练自己的数据集
- 目标检测网络总结+自己训练过程……
- DL开源框架Caffe | 目标检测Faster-rcnn训练自己数据问题整理
- Matconvnet学习——利用mnist网络训练自己的数据分辨左右手
- Caffe windows下入门级别的从编译到训练然后到分类(用python接口)制作自己的数据和训练网络(三)
- windows下SSD训练自己的数据