SSD框架训练自己的数据集

本文详细介绍如何使用SSD框架对自定义数据集进行物体检测的训练和验证过程,包括数据集的标注、转换及如何进行训练和测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.cnblogs.com/objectDetect/p/5780006.html

SSD demo中详细介绍了如何在VOC数据集上使用SSD进行物体检测的训练和验证。
本文介绍如何使用
SSD实现对自己数据集的训练和验证过程,内容包括:
1 数据集的标注
2 数据集的转换
3 使用SSD如何训练
4 使用SSD如何测试

1 数据集的标注 

  数据的标注使用
BBox-Label-Tool工具,该工具使用python实现,使用简单方便。修改后的工具支持多label的标签标注。
该工具生成的标签格式是
:

object_number
className x1min y1min x1max y1max
classname x2min y2min x2max y2max
...
1.1 labelTool工具的使用说明
  BBox-Label-Tool工具实现较简单,原始的git版本使用起来有一些小问题,进行了简单的修改,修改后的版本
  main.py
 

  使用方法:   

     (1) 在BBox-Label-Tool/Images目录下创建保存图片的目录, 目录以数字命名(BBox-Label-Tool/Images/1), 然后将待标注的图片copy到1这个目录下;

     (2) 在BBox-Label-Tool目录下执行命令   python main.py

     (3) 在工具界面上, Image Dir 框中输入需要标记的目录名(比如 1), 然后点击load按钮, 工具自动将Images/1目录下的图片加载进来;

      需要说明一下, 如果目录中的图片已经标注过,点击load时不会被重新加载进来.

     (4) 该工具支持多类别标注, 画bounding boxs框标定之前,需要先选定类别,然后再画框.

     (5) 一张图片标注完后, 点击Next>>按钮, 标注下一张图片,  图片label成功后,会在BBox-Label-Tool/Labels对应的目录下生成与图片文件名对应的label文件.

数据集的转换

  caffe训练使用LMDB格式的数据,ssd框架中提供了voc数据格式转换成LMDB格式的脚本。
所以实践中先将
BBox-Label-Tool标注的数据转换成voc数据格式,然后再转换成LMDB
格式。

2.1 voc数据格式



(1)Annotations中保存的是xml格式的label信息
  VOC XML内容信息
 







(2)ImageSet目录下的Main目录里存放的是用于表示训练的图片集和测试的图片集




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







(4)label目录下保存的是BBox-Label-Tool工具标注好的bounding box坐标文件,
该目录下的文件就是待转换的
label标签文件。





2.2 Label转换成VOC数据格式
BBox-Label-Tool工具标注好的bounding box坐标文件转换成VOC数据格式的形式.
具体的转换过程包括了两个步骤:
(1)BBox-Label-Tool下的txt格式保存的bounding box信息转换成VOC数据格式下以xml方式表示
(2)生成用于训练的数据集和用于测试的数据集。
用python实现了上述两个步骤的换转。
createXml.py 完成txt到xml的转换; 执行脚本./createXml.py

  createXml.py

 

  createTest.py 生成训练集和测试集标识文件; 执行脚本

  ./createTest.py %startID% %endID% %testNumber%

 
  createTest.py
 

说明: 由于BBox-Label-Tool实现相对简单,该工具每次只能对一个类别进行打标签,所以转换脚本

每一次也是对一个类别进行数据的转换,这个问题后续需要优化改进。

优化后的BBox-Label-Tool工具,支持多类别标定,生成的label文件中增加了类别名称信息。

使用时修改classLabels,改写成自己的类别, 修改后的工具代码参见1.1中的main.py 

 

2.3  VOC数据转换成LMDB数据

  SSD提供了VOC数据到LMDB数据的转换脚本 data/VOC0712/create_list.sh 和 ./data/VOC0712/create_data.sh,这两个脚本是完全针对VOC0712目录下的数据进行的转换。
  实现中为了不破坏VOC0712目录下的数据内容,针对我们自己的数据集,修改了上面这两个脚本,
将脚本中涉及到VOC0712的信息替换成我们自己的目录信息。
在处理我们的数据集时,将VOC0712替换成indoor。
具体的步骤如下:
  (1) 在 $HOME/data/VOCdevkit目录下创建indoor目录,该目录中存放自己转换完成的VOC数据集;
  (2) $CAFFE_ROOT/examples目录下创建indoor目录;
(3) $CAFFE_ROOT/data目录下创建indoor目录,同时将data/VOC0712下的create_list.sh,create_data.sh,labelmap_voc.prototxt
这三个文件copy到indoor目录下,分别重命名为
create_list_indoor.sh,create_data_indoor.sh, labelmap_indoor.prototxt
  (4)对上面新生成的两个create文件进行修改,主要修改是将VOC0712相关的信息替换成indoor
  修改后的这两个文件分别为:  
  create_list_indoor.sh
 
  create_data_indoor.sh
        (5)修改labelmap_indoor.prototxt,将该文件中的类别修改成和自己的数据集相匹配,注意需要保留一个label 0 , background类别
  labelmap_indoor.prototxt
 

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

  ./data/indoor/create_list_indoor.sh

  ./data/indoor/create_data_indoor.sh

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

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

训练时使用ssd demo中提供的预训练好的VGGnet model : VGG_ILSVRC_16_layers_fc_reduced.caffemodel
将该模型保存到$CAFFE_ROOT/models/VGGNet下。
将ssd_pascal.py copy一份 ssd_pascal_indoor.py文件, 根据自己的数据集修改ssd_pascal_indoor.py
主要修改点:
(1)train_data和test_data修改成指向自己的数据集LMDB
   train_data = "examples/indoor/indoor_trainval_lmdb"
test_data = "examples/indoor/indoor_test_lmdb"
(2) num_test_image该变量修改成自己数据集中测试数据的数量
(3)num_classes 该变量修改成自己数据集中 标签类别数量数 + 1

针对我的数据集,ssd_pascal_indoor.py的内容为:
  ssd_pascal_indoor.py
训练命令:
python examples/ssd/ssd_pascal_indoor.py

4 测试

SSD框架中提供了测试代码,有C++版本和python版本

 4.1 c++版本

编译完SSD后,C++版本的的可执行文件存放目录: .build_release/examples/ssd/ssd_detect.bin

测试命令  ./
.build_release/examples/ssd/ssd_detect.bin models/VGGNet/indoor/deploy.prototxt   models/VGGNet/indoor/VGG_VOC0712_SSD_300x300_iter_60000.caffemodel pictures.txt

其中
pictures.txt中保存的是待测试图片的list

 4.2 python版本

    python 版本的测试过程参见examples/detection.ipynb

 
参考:
 1
将数据集做成VOC2007格式用于Faster-RCNN训练
2
SSD的配置安装与测试

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值