Caffe下实现SSD的流程步骤
本篇博客主要讲解ssd目标检测网络在caffe下的安装、编译,VOC数据集下载、VGG预训练模型下载、LMDB数据集制作、ssd_pascal的代码修改、针对VOC0712数据集的网络训练、通过pycaffe进行网络模型测试输出等内容。
数据来源:VOC2007,VOC2012
模型:VGG-16
系统平台:Ubuntu-GPU
caffe-ssd在Ubuntu下的编译
包括caffe-ssd代码下载、安装、编译
caffe-ssd代码下载
我使用的是weiliu89的ssd代码,链接如下:caffe-ssd Github链接
下载下来传到服务器中,或者在ubuntu terminal下直接git:git clone https://github.com/weiliu89/caffe.git
caffe-ssd安装编译
修改根目录下的Makefile.config文件,主要是关于使用GPU还是CPU,Cuda路径、cudnn路径、python路径以及matlab路径的设置。
在这里我不讲解怎么具体去修改该文件,一般来说我默认你在linux系统中已经编译好了原始的caffe,所以直接将caffe-ssd下的Makefile.config文件替换为编译好的caffe下的Makefile.config文件即可。
接着,按照以下步骤即可完成:
make all
make test
make runtest
如果想编译更快一点,还可以在后面加 -j4 或者 -j8:
make all -j8
make test -j8
make runtest -j8
编译成功后的caffe-ssd根目录下应该有一个build软链接。
build下内容如图所示
至此我们已经编译好了caffe-ssd,接下来就是如何跑通该程序了。
数据和模型准备
在跑通程序前,我们先要准备目标检测框架需要的包含类别和位置信息的数据集。
我使用的是VOC数据集
模型使用的是官方使用的VGGNet
VOC数据集下载
VOC2007 VOC2012数据集下载
只需要下载如图所示的三个文件即可。
分别为:
- VOC2012trainval
VOC2007trainval
VOC2007test
或者也可以用wget
直接进行下载,使用tar -xvf
进行解压使用。
#### Download the data.
cd $DATAPATH/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
# Extract the data.
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
数据准备好后,在caffe_ssd/data有一文件夹VOC0712,将解压后的VOC数据集放该文件夹下。
(数据集名字我均进行了修改)
三个文件夹内目录均如下图:
我们主要使用Annotations、JPEGImages和ImageSets/Main三个文件夹的数据。
- Annotations:XML文件
- JPEGImages:JPG文件
- ImageSets/Main:XML和JPG名字(去除后缀)
其中ImageSets/Main里有多个文件,对应为: - VOC2007test —— test.txt
- VOC2007trainval——trainval.txt
- VOC2012trainval——trainval.txt
VGG-16预训练模型下载
VGG-16预训练模型下载
也可以Github上这个链接进行下载:VGG-16预训练模型
下载完成后,在caffe_ssd/models下新建文件夹VGGNet/VOC0712,将预训练模型放到其中。
LMDB数据集制作
制作LMDB数据集需要用到在***VOC数据集下载***中讲到的三个文件夹。
需要的用到的脚本命令是create_list.sh和create_data.sh,放在caffe_ssd/data/VOC0712目录下。
我们主要是为了生成包含VOC2007和VOC2012训练图片的trainval.txt和包含VOC2007测试图片的test.txt
生成trainval.txt和test.txt
create_list.sh,对其进行修改,主要是路径和名字修改。
#!/bin/bash
root_dir=/home1/xxx/caffe_ssd/data/VOC0712/ # VOC数据集所在路径
sub_dir=ImageSets/Main # trainval.txt和test.txt所在路径
bash_dir=/home1/xxx/caffe_ssd/data/VOC0712 && pwd
for dataset in trainval test
do
dst_file=$bash_dir/$dataset.txt
echo "dst_file $dst_file"
if [ -f $dst_file ]
then
rm -f $dst_file
fi
for name in VOC2007 VOC2012 # 修改为VOC2007 和 VOC2012
do