SSD+caffe︱Single Shot MultiBox Detector 目标检测+fine-tuning(二)

承接上一篇SSD介绍:SSD+caffe︱Single Shot MultiBox Detector 目标检测(一)
如果自己要训练SSD模型呢,关键的就是LMDB格式生成,从官方教程weiliu89/caffe来看,寥寥几行code,但是前面的数据整理真实要了老命。
教程其实就是一种fine-tuning,在VGG基础上进行训练SSD框架。


一般SSD的数据来源,看到好多人都在用这款框架进行数据标注:BBox-Label-Tool 也有人在这基础上进行简单修改,详见博客:SSD框架训练自己的数据集 ,或者用OpenCV重写:深度学习ssd配置并在VGG模型上训练自己的数据
还有一些自己开发的小工具:图像标注VS2013项目

.


0 官方教程训练过程:

(1)下载VGGNet.caffemodel, fully convolutional reduced (atrous) VGGNet
(2)下载VOC2007 and VOC2012两个数据集,放在/caffe/data目录下
(3)创建LMDB文件:

./data/VOC0712/create_list.sh
./data/VOC0712/create_data.sh
  
  
  • 1
  • 2
  • 1
  • 2

(4)训练

python examples/ssd/ssd_pascal.py
  
  
  • 1
  • 1

以上是官方教程常规训练步骤,并不难。但是自己训练时候的数据处理,比较麻烦。

.


1 数据集准备与形成

1.1 所需准备文件介绍

其中训练所需的文件夹包括三大类:
这里写图片描述
dataset (数据集目录)

  • Annotations

    *.xml (标注的物体信息文件)

  • Images

    *.jpg (图片集)

  • ImageSets
    保存格式为文件名,不带扩展名
    训练集: train.txt
    训练验证集: trainval.txt
    测试集: test.txt
    验证集: val.txt

1.2 训练文件介绍

(1) create_list.sh:用于生成三类文件列表
- test_name_size:测试集图像大小
- test:测试集图像-标签一一对应
- trainval:训练集图像-标签一一对应

这是将数据集做成方便之后生成lmdb的路径信息文件,注意将其中的root_dir和第二个for循环中的变量改为自己的路径就好。
图像-标签一一对应:

Images/000112.png Labels/000112.xml
Images/001365.png Labels/001365.xml
  
  
  • 1
  • 2
  • 1
  • 2

同时注意名称的一致。

000800 1241 376
006206 1242 375
  
  
  • 1
  • 2
  • 1
  • 2

test_name_size里面,000800就是图片名称,1241*376就是图片尺寸,高 长

(2)create_data.sh:
生成LMDB文件,以上的create_list准备好之后即可

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


2 数据集生成方案

训练的数据集三种方案:

  • 第一:保持原来的文件目录结构及文件名不变, 只替换里面的数据,通用。
  • 第二:重新新建一个与之前类似的目录结构,改成自己命名的文件夹,第二种方法,有一定的风险性,需要修改程序里涉及数据路径的代码。
  • 第三:txt格式数据变成LMDB,参考github:https://github.com/jinfagang/kitti-ssd
  • 第三种是直接用txt格式保存,就可以生成LMDB的办法,我觉得这个比较好,但是笔者最终没有实验成功…譬如:
class_index xmin ymin xmax ymax
  
  
  • 1
  • 1

第一种方案里面的一些小技巧:
(1)还有将txt变成xml格式的小工具:见博客将数据集做成VOC2007格式用于Faster-RCNN训练
(2)将BBox-Label-Tool下的txt格式保存的bounding box信息转换成VOC数据格式下以xml方式表示:,见博客:SSD框架训练自己的数据集
(3)将csv变成xml文件类型
luuuyi/umdfaces2VOC2007

2.1 训练流程

本节参考:SSD框架训练自己的数据集
- 第一步:create_list.sh:生成test_name_size.txt、test.txt、trainval.txt
- 第二步:修改labelmap_voc.prototxt,标签文件,同时需要注意标签文件必须多一个background的标签,作为编号0
- 第三步:create_data.sh:生成LMDB
- 第四步:修改ssd_pascal.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
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 第五步训练:
    python examples/ssd/ssd_pascal.py

2.2 训练脚本内容存储

会在相应的路径下生成jobs文件夹,其中包含了这一次训练的脚本文件,并且会记录caffe执行只一次训练的日志信息。
参考:Ubuntu上用caffe的SSD方法训练Pascal VOC数据集

jobs文件夹下有:
.log文件:运行记录,时间,迭代次数等信息;
.caffemodel文件,权重文件
deploy.prototxt、train_val.prototxt等
.


参考:
深度学习ssd配置并在VGG模型上训练自己的数据
SSD 安装、训练
Ubuntu上用caffe的SSD方法训练umdfaces数据集
重点参考:
使用faster rcnn训练umdfaces数据集
将数据集做成VOC2007格式用于Faster-RCNN训练
Caffe-SSD 训练自己的数据集教程

SSD框架训练自己的数据集

.


报错一:

cudasucess(10vs0)
  
  
  • 1
  • 1

解决:修改pythonssd_pascal.py文件gpus=’0,1,2,3’,如果有一块GPU,则删除123,有两块则删除23

.

延伸一:大致的运算效率

K80-单GPU-一天可以迭代1w+次
6天将近7w次
每1w次迭代之后会计算一个mAP
(数据来源:Ubuntu上用caffe的SSD方法训练umdfaces数据集

TX.P,笔者自己训练,大概的运算效率是5千/小时(运行官方教程时)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值