Object-detection SSD安装和训练

Object-detection —— SSD(single shot multibox detector)

1. SSD的安装
自己的系统: Ubuntu
SSD GitHub: 传送门

首先先把代码拷下来:

cd path/to/your/ssd/living
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd

紧接着我们就要编译caffe:

①caffe目录下,把Makefile.config.example 改名成Makefile.config
②make
③make py

编译这一步会出现一些链接错误或者其他错误:
比如说:找不到hdf5相关的so,找不到cv相关的函数定义,找不到Openblas相关的动态链接库。

解决方法:

hdf5:
在Makefile.config文件里面添加路径:
INCULDE_DIRS := path/to/hdf5/serial
LIBRARY_DIRS := path/to/hdf5/serial
Openblas :
BLAS_INCLUDE := path/to/OpenBLAS/include
BLAS_LIB := path/to/OpenBLAS/lib
如果还有其他错误,需要自己Google了。

到此,如果没有Error出现,那么就已经编译好了caffe。

2.训练

接下来的所有步骤,都在caffe目录下面(./表示caffe目录)

在caffe目录下面,接下来需要关注的文件夹有下面几个:

data(数据集), examples(执行训练的脚本文件)

此时我们需要下载VOC2007 VOC2012 test 数据集,放在./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

上面这一步是为了得到相关的目录结构。

现在开始创建自己的数据集:

cd ./data
mkdir mydataset
cd mydataset
#把./data/VOC0712目录下面的create_list.sh create_data.sh labelmap_voc.prototxt 拷贝到mydataset下面:
cp ./data/VOC0712/create* ./
cp ./data/VOC0712/label* ./

labelmap_voc.prototxt这个文件是你要检测的object

在./data/VOCdevkit目录下面创建mydataset,并且生成自己的目录结构:

cd ./data/VOCdevkit
mkdir mydataset
cd mydataset
mkdir Annotations
mkdir ImageSets
mkdir JPEGImages
cd ImageSets
mkdir Layout
mkdir Main
mkdir Segmentation

上面这些文件夹的作用:

Annotations:存放xml文件,这个文件夹下面不能有子目录,必须全部是.xml文件。(object 的 bnbbox,name等)
ImageSets:下面三个子目录都需要放入train.txt, trainval.txt, test.txt 这三个文件(图片的文件名,不带后缀)。
JPEGImages:放入所有的图片,不能有子目录,必须所有图片塞进这个文件夹里面。

建立好这些文件夹之后,把自己的所有数据放进去包含自己数据的xml文件,图片,图片的文件名。

确保放好数据后再进行下一步

在 ./examples下面新建mydataset目录

    cd ./examples
    mkdir mydataset

这个mydataset目录下面是存放生成的lmdb文件的。

之后需要修改刚才那两个create开头的shell文件:

create_list.sh
把里面的root_dir改成你自己的VOCdevkit的路径
your/path/to/caffe/data/VOCdevkit
修改下面的for循环,把VOC2007 VOC2012 去掉:
for name in mydataset
保存退出

create_data.sh
把里面的data_root_dir 改成VOCdevkit的路径(跟上面一样)
把dataset_name改成mydataset
保存退出

好了,现在就可以执行这两个文件了。
Warning : 注意执行顺序

./data/mydataset/create_list.sh
./data/mydataset/create_data.sh

这一步可能会出现找不到libopenblas.so.0 的错误,解决方法:在/usr/lib下面制作一个软连接,链接到具体的libopenblas.so.0所在的路径

执行完(没有错误)之后,会在./examples/mydataset/文件夹下面会生成两个链接。

接下来修改./examples/ssd/ssd_pascal.py(训练脚本)文件:

1)在文件开头添加路径,开头类似于:
from __future__ import print_function
import sys 
sys.path.insert(0, '/datastore2/lishigang/SSD/caffe/python')

(2)train_data:修改成上面生成的链接(train)
(3) test_data:修改成上面生成的链接(test)
(4)save_dir,snapshot_dir, job_dir,output_result_dir
修改成 自己的文件夹名字(前面路径不动,只修改/{}前面的就好)
(5)name_size_file, label_map_file : ./data/mydataset/test_name_size.txt
./data/mydataset/labelmap_voc.prototxt6) num_classes 需要检测的object数量+17) num_test_image :测试图片数量
(8) gpu的编号:0,12,3 用哪个写哪个。
保存退出

然后退回到caffe目录下面

执行:

python ./examples/ssd/ssd_pascal.py

这样就可以训练了。

上面可能会有一些python库找不到,需要用python install来安装,具体的包和库复制错误Google,StackOverFlow 上面都可以找到答案。

训练完之后,可以修改ssd_detector.py中模型的路径,然后进行识别。

猜你喜欢

转载自blog.csdn.net/nia305/article/details/79725541