DL:SSD笔记

SSD安装及训练

SSD安装

下载SSD

gihub下载SSD项目,链接


"da"

编译SSD

1
2
cd caffe-ssd
cp Makefile.config.example Makefile.config

修改Makefile.config:

1
2
3
4
5
6
7
8
# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1
# Uncomment if you're using OpenCV 3
OPENCV_VERSION := 3
# Uncomment to support layers written in Python (will link against Python libs)
WITH_PYTHON_LAYER := 1

由于hdf5库目录更改,所以需要单独添加:

1
2
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/aarch64-linux-gnu/hdf5/serial/

之后编辑即可

1
2
3
4
5
6
make -j8
# Make sure to include $CAFFE_ROOT/python to your PYTHONPATH.
make py
make test -j8
# (Optional)
make runtest -j8

训练VOC数据集

下载预训练的模型

链接,下载完成后保存在:caffe/models/VGGNet/

下载数据集

下载VOC2007和VOC2012数据集,放在home/data目录下

1
2
3
4
5
6
7
8
cd 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

预训练模型和VOC数据也可以从我的网盘中下载,点击这里,密码:we08

创建LMDB格式的数据文件

1
2
3
4
5
6
7
8
9
cd $CAFFE_ROOT
# Create the trainval.txt, test.txt, and test_name_size.txt in data/VOC0712/
./data/VOC0712/create_list.sh
# You can modify the parameters in create_data.sh if needed.
# It will create lmdb files for trainval and test with encoded original image:
# - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb
# - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb
# and make soft links at examples/VOC0712/
./data/VOC0712/create_data.sh

训练和测试

1
python examples/ssd/ssd_pascal.py

训练自己的数据集

首先需要制作数据文件,有两种方案:第一,保持原来的文件目录结构及文件名不变,只替换里面的数据;第二:重新新建一个与之前类似的目录结构,改成自己命名的文件夹,修改程序里涉及数据路径的代码。
现采用第二种方案

在caffe-ssd/data目录下创建一个自己的文件夹,mydataset

1
2
cd $CAFFE_ROOT/data
mkdir mydataset

把caffe-ssd/data/VOC0712目录下的create_list.sh 、create_data.sh、labelmap_voc.prototxt 这三个文件拷贝到/mydataset下

1
2
cp data/create* ./mydataset
cp data/label* ./mydataset

home/yourname/data/VOCdevkit目录下创建mydataset, 并放入自己的数据集
注意:这里默认的数据存放路径是home/yourname/data/VOCdevkit,详见create_list.sh,也可根据需求修改

1
2
3
4
5
6
7
8
9
10
cd data/VOCdevkit
mkdir mydataset
cd mydataset
mkdir Annotations
mkdir ImageSets
mkdir JPEGImages
cd ImageSets
mkdir Layout
mkdir Main
mkdir Segmentation

其中Annotations中存放一些列XML文件,包含object的bbox,name等;
ImageSets中三个子目录下均存放train.txt, val.txt, trainval.txt, test.txt这几个文件,文件内容为图片的文件名(不带后缀);
-train.txt 是用来训练的图片文件的文件名列表
-val.txt是用来验证的图片文件的文件名列表
-trianval.txt是用来训练和验证的图片文件的文件名列表
-test.txt 是用来测试的图片文件的文件名列表
caffe-SSD中默认只用到trainval.txt和test.txt, trainval.txt和test.txt中存放训练集和测试集的文件名(不带后缀)

小Tip:使用find命令、通配符加重定向符能够快速获取标注文件列表

1
2
cd data/VOCdevkit/mydataset/Annotations
find -name "*.xml" > /home/yourname/data/VOCdevkit/ImageSets/Main/trainval.txt

JPEGImages存放所有的图片

在/examples下创建mydataset文件夹,文件夹内存放生成的lmdb文件

1
2
cd $CAFFE_ROOT/examples
mkdir mydataset

开始生成lmdb文件, 在创建之前需要修改相关路径

1
2
./data/mydataset/create_list.sh
./data/mydataset/create_data.sh

此时,在examples/mydataset/文件夹下可以看到两个子文件夹, mydataset_trainval_lmdb, mydataset_test_lmdb;里面均包含data.dmb和lock.dmb

到此为止,我们的数据集就做好了。接下来就开始训练了。训练程序为/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”
否则,训练的时候会出错。
修改完后运行

1
python ./examples/ssd/ssd_pascal.py

测试SSD

编译完SSD后,C++版本的的可执行文件存放目录: .build_release/examples/ssd/ssd_detect.bin
测试命令

1
./object_detect_video.bin --model_file --weights_file --detect_file

参考:
【1】https://github.com/weiliu89/caffe/tree/ssd
【2】 SSD安装及训练自己的数据集