用SSD训练自己的数据集(VOC2007格式)

来源:互联网 发布:js时间转换成时间戳 编辑:程序博客网 时间:2024/06/06 04:18

用SSD训练自己的数据集(VOC2007格式)

一. 配置caffe环境

ubunt16.04下caffe环境安装

二. 下载,编译及测试ssd源码

(一)下载源码

github链接

或者执行 git clone https://github.com/weiliu89/caffe.git

(二)编译源码

编译过程中可能会出现缺失一些python模块,按提示安装

(1)修改Markfile配置

参考ubunt16.04下caffe环境安装
中修改Makefile.config

(2)编译python接口

make -j8  多核编译,时间较长make pycaffe

(3)下载训练好的模型

下载链接原始链接可能需要翻墙,可自行找其他链接下载,文件名为models_VGGNet_VOC0712_SSD_300x300.tar.gz,解压至CAFFE_ROOT/目录下

(4) 下载VOC2007数据

cd $CAFFE_ROOT/datawget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tartar -xvf VOCtrainval_11-May-2012.tartar -xvf VOCtrainval_06-Nov-2007.tartar -xvf VOCtest_06-Nov-2007.tar

(5) 产生LMDB格式数据集文件

在data/VOC0712/中生成trainval.txt, test.txt, and test_name_size.txt in
可以通过修改create_list.sh和create_data.sh来针对自己的数据集产生LMDB文件

cd $CAFFE_ROOT./data/VOC0712/create_list.sh./data/VOC0712/create_data.sh

产生的trainval和test数据位于CAFFE_ROOT/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb和CAFFE_ROOT/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb

(三)测试源码

score_ssd_pascal.py里面的test_image_num应该是4952的,源程序有报相关错误可以改一下

cd $CAFFE_ROOTpython examples/ssd/score_ssd_pascal.py

应该会得到0.77*左右的MAP score,说明模型可以正常运行

三. 使用SSD训练自己的数据集

(一)下载预训练参数及模型

下载链接

(二)制作数据集

制作自己的图片数据集(VOC2007格式)

将制作好的VOC2007文件夹放置在data/VOCdevkit文件夹下,没有则新建VOCdevkit文件夹

(三)修改配置文件

(1)修改$CAFFE_ROOT/data/$dataset_name/下create_list.sh和create_data.sh两个文件
create_list.sh:

root_dir=$HOME/data/VOCdevkit/sub_dir=ImageSets/Mainbash_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"for dataset in trainval testdodst_file=$bash_dir/$dataset.txtif [ -f $dst_file ]then    rm -f $dst_filefifor name in VOC2007 VOC2012  # 数据集文件夹名称$dataset_name

create_data.sh,其中数据集文件夹名称$dataset_name,这个文件夹是指存放create_list.sh和create_data.sh两个文件及labelmap文件的地方的文件夹名,建议和VCOdevkit下面的数据集名称一致

data_root_dir="$HOME/data/VOCdevkit" # 为了避免错误可以用绝对路径dataset_name="VOC0712"mapfile="$root_dir/data/$dataset_name/labelmap_voc.prototxt"

(2)修改$CAFFE_ROOT/data/$dataset_name/下labelmap_voc.prototxt

name: "cat" # xml文件中的类别名label: 1display_name: "Cat" # 检测时显示的类别名

(3)修改训练文件$CAFFE_ROOT/data/example/ssd/ssd_pascal.py

  1. 改了数据集文件夹名称的话讲程序路径里面的VOC0712都替换为你的数据集名称$dataset_name,否则不需要修改,为了不要覆盖原来的模型建议修改数据集名称
  2. 类别数:num_classes = open(label_map_file).read().count(‘label’)
  3. 测试图片数量:num_test_image = len(open(name_size_file).readlines())

(4)$CAFFE_ROOT/example/ssd/ssd_pascal.py参数设置

  1. solver_param 中’max_iter’: 120000, 表示最大迭代次数
  2. solver_param 中’test_interval’: 10000, 每次评估模型效果的间隔迭代次数,用于观察是否收敛及过拟合
  3. 其他参数可酌情修改

(四)开始训练

cd $CAFFE_ROOTpython example/ssd/ssd_pascal.py

成功训练后在ssd_pascal.py文件中的job_dir路径下生成日志文件,snapshot_dir路径下存有断点模型,训练中断后会从最大迭代次数继续训练,

(五)测试训练结果

(1)修改example/ssd/score_ssd_pascal.py文件
修改方式与ssd_pascal.py相同,其中在det_eval_param添加’show_per_class_result’: True参数可现实每个类别的AP(average precision)

(2)进行测试

cd $CAFFE_ROOTpython example/ssd/score_ssd_pascal.py

四. 曾出现过的bug

(1) 原文件中num_classes和num_test_image经常变动的话容易忘记修改而报错,可通过读取labelmap和testfile自动得到相应数值

(2) 修改test_batch_size似乎不影响测试速度

阅读全文
0 0
原创粉丝点击