实验目的

继caffe和ssd搭建完成,demo也演示完毕,了解一些基本知识后,现在开始训练自己的数据集,在给自己的训练集处理之前,先跟着官方的示例将Pascal VOC数据集训练走一遍,把可能会踩坑的地方先踩过去,积累点经验。

实验环境

训练平台:NVIDIA K80

预测平台:NVIDIA TX1

语言        :C++,Python

框架        :caffe

方法        :SSD

实验准备

首先是数据集,上一篇博客上有数据集在百度云上的的下载路径:

链接:http://pan.baidu.com/s/1c1AwrRy 密码:ly70

将路径放在自己的硬盘里面,建议不要放在Linux的系统盘内,可以放在自己的机械硬盘或者移动硬盘中,挂载到Linux系统路径下就好;

实验步骤

从几个重要的文件开始说起。在caffe的目录下,有一个data,在里面找到VOC0712文件夹,重点注意其中几个文件:

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

1.create_list.sh

这是将数据集做成方便之后生成lmdb的路径信息文件,注意将其中的root_dir和第二个for循环中的变量改为自己的路径就好,如下图红框所示:

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

执行完脚本之后生成三个txt文件,如下:

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

1)test_name_size.txt每一行分为两个部分,第一部分是test图片的名字,第二部分是图像的size方便之后caffe训练的时候用作test;

2)test.txt每一行分为两个部分,第一部分是用作test的图片的路径信息和文件名,第二部分是用作test的图片的label信息文件(xml);

3)trainval.txt每一行分为两个部分,第一部分是用作trainval的图片的路径信息和文件名,第二部分是用作trainval的图片的label信息文件(xml);

2.create_data.sh

该文件负责读取上一个脚本生成的几个文件,然后根据路径和label信息分别生成trainval和test的lmdb文件,主要注意下面红框部分换成自己的路径即可:

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

3.labelmap_voc.prototxt

该文件主要记录需要训练识别的n种对象的信息,第一类是background,是不变的,对于Pascal VOC数据集来说,需要识别20种对象,所以后面还有20个label。与传统的机器学习不太一样的是,以前需要输入正负样本,在caffe种,不管是faster rcnn还是ssd,都是只用对训练图像将识别对象的坐标信息标注即可,除了标注信息以外的部分都会当做background去处理。

以上三个文件完成之后,只算作是给训练提供了正确可读的数据集,即lmdb文件。切换到caffe路径下的examples/ssd/中,注意一个文件即可。

4.ssd_pascal.py

这个文件是用来训练数据集的,值得注意的是,该文件是一个一次性的脚本,执行完之后会在规定路径下生成一个jobs文件夹,里面有用作训练,测试,部署的prototxt文件,还有最终执行训练的脚本。

需要修改几个地方:

①84,86行改为自己的lmdb文件的路径:

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

②242行到265行将生成的prototxt文件和jobs文件夹的路径改为自己规定的路径,并在正确的地方读取前几个脚本生成的文件:

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

③268行改变训练对象的数量,为对象数+1(background),334行选择使用哪一款GPU,361行改变为用作test的图像总数,560行建议把caffe的bin文件改成绝对路径:

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

完了之后执行脚本即可,之后会在相应的路径下生成jobs文件夹,其中包含了这一次训练的脚本文件,并且会记录caffe执行只一次训练的日志信息,如下所示:

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

VGG_VOC0712_SSD_300x300.sh文件即为调用build中的caffe程序,读取相应的文件进行训练:

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

执行完Python脚本之后,在caffe路径下的models路径中会有本次训练用到的prototxt文件,同时生成的caffemodel文件也将存储在这个路径下面:

Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

写这一篇博客的时候数据集还在训练中,caffemodel的快照及最终的文件还未存储下来。

实验总结

了解了Pascal VOC数据集的训练步骤之后,就可以开始去动手制作我们自己的数据集了,下一步我将会把使用ssd对umdfaces数据集的训练步骤和问题给记录下来,关于umdfaces数据集的信息和将其制作为Pascal VOC格式,可以参考我的另一篇博文:

使用faster rcnn训练umdfaces数据集 

关于文中用到的VGGNet的预训练模型文件,云盘地址如下:

链接:http://pan.baidu.com/s/1c1JQaCK 密码:4crz