用SSD框架训练自己的数据集

2022-11-19,,,,

本文介绍如何使用SSD训练自己的数据集,内容包括数据集的转化,使用SSD进行训练
1、VOC数据集的介绍

VOC的数据格式:

(1)annotation中保存的是xml格式的label信息
(2)ImageSet目录中Main目录存放的是用于表示训练的图片集合

- train.txt 是用来训练的图片文件的文件名列表 

- val.txt是用来验证的图片文件的文件名列表 

- trianval.txt是用来训练和验证的图片文件的文件名列表 

经过分析发现

trainval大概是整个数据集的50%,

test也大概是整个数据集的50%;

train大概是trainval的50%,

val大概是trainval的50%

(3)JPECImages目录下存放所有的图片集

2、将VOC数据转化为LMDB数据

SSD提供了VOC到lmdb的转化脚本:data/VOC0712/create_list.sh 和 ./data/VOC0712/create_data.sh,这两个脚本是完全针对VOC0712目录下的数据进行的转换。实现中为了不破坏VOC0712目录下的数据内容,针对我们自己的数据集,修改了上面这两个脚本。

具体的步骤如下:

  (1) 在 $HOME/data/VOCdevkit目录下创建mydataset目录,该目录中存放自己转换完成的VOC数据集;
  (2) $CAFFE_ROOT/examples目录下创建mydataset目录; 
(3)$CAFFE_ROOT/data下创建mydataset目录,同时将data/VOC0712下的 create_list.sh,create_data.sh,labelmap_voc.prototxt
这三个文件copy到mydataset目录下,分别重命名为create_list_node.sh,create_data_node.sh, labelmap_node.prototxt

(4)对上面新生成的两个create文件进行修改,主要修改是将VOC0712相关的信息替换成mydataset

(5)修改labelmap_indoor.prototxt,将该文件中的类别修改成和自己的数据集相匹配,注意需要保留一个label 0 , background类别

完成上面步骤的修改后,可以开始LMDB数据数据的制作,在$CAFFE_ROOT目录下分别运行:

  ./data/mydatasetr/create_list_node.sh

  ./data/mydataset/create_data_nodesh

命令执行完毕后,可以在$CAFFE_ROOT/indoor目录下查看转换完成的LMDB数据数据。

3、使用SSD进行自己数据集的训练

修改ssd_pascal_mydataset.py

(1)train_data和test_data修改成指向自己的数据集LMDB

   train_data = "examples/mydataset/mydataset_trainval_lmdb"

test_data = "examples/mydatasetr/mydataset_test_lmdb"

(2)num_test_image该变量修改成自己数据集中测试数据的数量

(3)num_classes 该变量修改成自己数据集中标签类别数量

参考文章https://www.cnblogs.com/objectDetect/p/5780006.html