SSD区域检测网络配置+训练自己的数据
来源:互联网 发布:乐视视频mac 编辑:程序博客网 时间:2024/06/17 12:17
之前用了faster-rcnn训练数据后,查资料的时候发现了ssd这种end-to-end的检测网络,所以决定跑一跑之前制作好的数据集试试。网上教程不是很多,而且感觉步骤简略,自己琢磨了一晚上走了很多弯路才勉强把网络跑起来,所以决定写一个踩坑跳坑小教程。
SSD的安装
安装还是比较简单的,直接从github上下载然后创建分支:
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd(出现“分支”则说明copy-check成功)
编译ssd caffe
cd /home/usrname/caffe
cp Makefile.config.example Makefile.config
之前我在其他地方编译过caffe,这里再编译一次,我就把已经写好的Makefile.config文件复制了一份,大概改的地方有这几个,改的时候把前面的’#’去掉就行,首先是有GPU的,用cudnn加速,第5行、28行、36行、50行:
5 USE_CUDNN := 128 CUDA_DIR := /usr/local/cuda36 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/include70 # Anaconda Python distribution is quite popular. Include path:71 # Verify anaconda location, sometimes it's in root.72 ANACONDA_HOME := $(HOME)/anaconda273 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/lib84 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/VOCdevkit13 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 = 4338 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 parameters367 '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区域检测网络配置+训练自己的数据
- 使用SSD检测训练自己的数据
- 深度学习ssd检测模型训练自己的数据集
- 目标检测SSD:训练自己的数据集
- [2] SSD配置+训练VOC0712+训练自己的数据集
- SSD 训练自己的数据
- SSD人脸检测安装:SSD训练自己的数据集
- 【SSD】用caffe-ssd框架自带VGG网络训练自己的数据集
- 【SSD】用caffe-ssd框架MobileNet网络训练自己的数据集
- SSD框架训练自己的数据集
- SSD训练自己的数据集
- Mxnet(3)-SSD训练自己的数据
- SSD框架训练自己的数据集
- SSD框架训练自己的数据集
- windows下SSD训练自己的数据
- 用SSD训练自己的数据集
- SSD训练自己的数据集
- SSD框架训练自己的数据集
- java.util.ArrayList
- synchronized关键字
- 频率域滤波
- 线程
- leetcode括号匹配问题汇总
- SSD区域检测网络配置+训练自己的数据
- Java 线程 0
- VMware 虚拟机下如何安装VMware tools
- Facebook平台应用散列密钥生成方法
- 『0014』
- linux常用命令(更新中)
- Fisher Vector(FV)原理
- 备忘录模式
- gradle入门