用SSD训练自己的数据集(VOC2007格式)
ubunt16.04下caffe环境安装
github链接
或者执行 git clone https://github.com/weiliu89/caffe.git
编译过程中可能会出现缺失一些python模块,按提示安装
参考ubunt16.04下caffe环境安装
中修改Makefile.config
make -j8 多核编译,时间较长
make pycaffe
下载链接原始链接可能需要,可自行找其他链接下载,文件名为models_VGGNet_VOC0712_SSD_300x300.tar.gz,解压至CAFFE_ROOT/目录下
cd $CAFFE_ROOT/data
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
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
在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_ROOT
python examples/ssd/score_ssd_pascal.py
应该会得到0.77*左右的MAP score,说明模型可以正常运行
下载链接
制作自己的图片数据集(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/Main
bash_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
for dataset in trainval test
do
dst_file=$bash_dir/$dataset.txt
if [ -f $dst_file ]
then
rm -f $dst_file
fi
for 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: 1
display_name: "Cat" # 检测时显示的类别名
(3)修改训练文件$CAFFE_ROOT/data/example/ssd/ssd_pascal.py
(4)$CAFFE_ROOT/example/ssd/ssd_pascal.py参数设置
cd $CAFFE_ROOT
python 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_ROOT
python example/ssd/score_ssd_pascal.py
(1) 原文件中num_classes和num_test_image经常变动的话容易忘记修改而报错,可通过读取labelmap和testfile自动得到相应数值
(2) 修改test_batch_size似乎不影响测试速度