欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Object-detection SSD安装和训练

程序员文章站 2024-03-17 11:29:10
...

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,* 上面都可以找到答案。

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

相关标签: ssd