原始代码来源:https://github.com/amdegroot/ssd.pytorch

我修改后的代码:https://github.com/Andy-zhujunwen/ssd-use-your-own-dataset-

实验气球数据集:https://pan.baidu.com/s/13DxzPZD1MhL_1KrKq55rfw&shfl=sharepset

提取码:cas8

一,代码结构了解

我们要改代码首先要了解代码的结构:

要训练自己的数据集,我们先了解一下代码中一些代码文件/目录的作用:

1. data目录

(以跑VOC数据集为例)data目录顾名思义就是掌控代码的数据集的地方,下图中我们看到有VOCdevkit文件目录,这就是voc数据集的数据图片和label 存放的目录。其次还一些文件例如有coco.py,voc0712.py ,这些都是数据集的读取脚本代码,例如voc0712.py就是读取数据集目录VOCdevkit中的图片和label的脚本代码。因此,我们若要训练自己的代码的话:

1.要把自己数据集放到data目录中

2.要写一个读取你自己数据集图片和label的脚本文件

2. data/voc0712.py

因为我们讲解是以跑VOC数据集为例讲解的,所以这里举例就举 voc0712.py。若你跑的是coco数据集,则这里就应该是coco.py。

3. data/config.py

在目录 data下有个config.py文件(/data/config.py),里面记录着这份代码可以跑的数据集,及一些参数:

可以看到有VOC和COCO的字典,这份代码默认是可以跑VOC和COCO数据集的,若是我们需要跑自己的数据集,则需要在这里加上自己数据集的字典:(关于怎么改,后面会说)

# config.py
import os.path# gets home dir cross platform
HOME = os.path.expanduser("/home/home_data/zjw/ssd.pytorch/")# for making bounding boxes pretty
COLORS = ((255, 0, 0, 128), (0, 255, 0, 128), (0, 0, 255, 128),(0, 255, 255, 128), (255, 0, 255, 128), (255, 255, 0, 128))MEANS = (104, 117, 123)# SSD300 CONFIGS
voc = {'num_classes': 21,'lr_steps': (80000, 100000, 120000),'max_iter': 120000,'feature_maps': [38, 19, 10, 5, 3, 1],'min_dim': 300,'steps': [8, 16, 32, 64, 100, 300],  # 特征图相对于原图边长缩小的多少倍'min_sizes': [30, 60, 111, 162, 213, 264],'max_sizes': [60, 111, 162, 213, 264, 315],  # 这个可能是500作为输入的'aspect_ratios': [[2], [2, 3], [2, 3], [2, 3], [2], [2]],'variance': [0.1, 0.2],'clip': True,'name': 'VOC',
}coco = {'num_classes': 201,'lr_steps': (280000, 360000, 400000),'max_iter': 400000,'feature_maps': [38, 19, 10, 5, 3, 1],'min_dim': 300,'steps': [8, 16, 32, 64, 100, 300],'min_sizes': [21, 45, 99, 153, 207, 261],'max_sizes': [45, 99, 153, 207, 261, 315],'aspect_ratios': [[2], [2, 3], [2, 3], [2, 3], [2], [2]],'variance': [0.1, 0.2],'clip': True,'name': 'COCO',
}

二,实验数据集---气球数据集

实验气球数据集:https://pan.baidu.com/s/13DxzPZD1MhL_1KrKq55rfw&shfl=sharepset

提取码:cas8

这个数据集里面有几十张气球的图片:

我们为了最简单地达到我们训练自己数据集的目的,决定仿照coco.py或者voc0712.py来写我们的气球读取脚本balloon.py。我们以VOC为例,那既然要以voc0712.py的格式写balloon.py,那么我们的数据集结构也要按照VOC数据集的结构存放。

1.voc数据集

在voc数据集的目标检测数据中,一般以下图的形式存放数据:

Annotations:是存放图片的标注的,以xml文件的格式记录。

ImageSets:是以txt文件的形式记录训练集图片的名字和测试集图片的名字的。借此把数据分成训练集和数据集

ImageSets目录下我们只需要仿照Main目录就行了,因为其余与目标检测无关:

而Main目录记录的是数据集不同类别的图片的名字,且把他们分成训练集,测试集等:

JPEGImages:就是存放图片的目录

2.我们的气球数据集

我们把气球的图片用打标签软件(如labelimg)打好标签后,就要按照VOC的数据集的目录格式存放:

三,自己的数据集读取脚本文件balloon.py

之前已经说过,例如要读取VOC数据集,就要有VOC数据集的数据读取脚本文件(voc0712.py)。我们为了节省工作量,我们的气球数据集balloon的数据读取文件balloon.py也按照着voc0712.py的格式改就好了。其实大多数地方都不用改的。我们来看看voc0712.py:(一部分一部分看)

上图第一个红框表示的是数据集的类别数,例如voc就有20类,那我们气球数据集因为只有一个类别,所以就改成balloon就好了。而第二个红框则是表示数据集的存放路径。那么仿照voc0712.py的格式,balloon.py就是如下:

注意:当类别只有一个时,要加一个中括号。

接着就到VOCAnnotationTransform类,这个作用只是是读入Annotations里的标注并做一些处理。所以这个基本上不用改,就改个名字就行了,如果嫌麻烦的话,甚至都不用改。

接着到VOCDetection类,这个类的作用是读取图片和图片的信息

红色框的地方都要改的,改的目的是为了读取balloon数据集的图片和图片信息。

改完之后:

到这里就得到一个与coco.py,voc0712.py平起平坐的balloon数据读取脚本balloon.py啦。把balloon.py放在 data目录下就完成这部分工作,还有不要忘记也把balloon数据集放到data目录下噢:

四,修改 /data下的config.py

在config.py中已经有两个数据集(coco,voc)的配置字典存在,我们只要模仿着写就好了,当然我们还是以仿造VOC数据集为例,首先直接把voc的复制一遍,把num_classes改了就行,注意这里的num_classes是包含背景的,所以是你数据集的类别数加一。而max_iter则是你想训练的迭代次数,修改如下:

五,最后就差稍微改一下train.py训练脚本文件就可以训练啦

第一个地方:train.py就有一大堆参数设置的语句,里面只有voc和coco的,把balloon加上去即可

第二个地方:位于train()方法

把默认的voc改成balloon,VOCDetection改成BALLOONDetection(在balloon.py定义)

最后就可以开始训练了。

六,检测效果:

最后在demo目录下,有个p.py文件,用来检测的,在p.py里面设置好模型路径和需要输入的图片路径即可。

输入:

输出:

ssd(Single Shot MultiBox Detector)代码之(五) 训练自己的数据集相关推荐

  1. SSD: Single Shot MultiBox Detector

    SSD: Single Shot MultiBox Detector 一.SSD主要思想   SSD是Single Shot MultiBox Detector的缩写,Single shot表明了SS ...

  2. SSD(Single shot multibox detector)目标检测模型架构和设计细节分析

    先给出论文链接:SSD: Single Shot MultiBox Detector 本文将对SSD中一些难以理解的细节做仔细分析,包括了default box和ground truth的结合,def ...

  3. 目标检测方法简介:RPN(Region Proposal Network) and SSD(Single Shot MultiBox Detector)

    原文引用:http://lufo.me/2016/10/detection/ 最近几年深度学习在计算机视觉领域取得了巨大的成功,而在目标检测这一计算机视觉的经典问题上直到去年(2015)才有了完全使用 ...

  4. ssd网络结构_封藏的SSD(Single Shot MultiBox Detector)笔记

    关注oldpan博客,侃侃而谈人工智能深度酝酿优质原创文! 阅读本文需要xx分钟 ? 前言 本文用于记录学习SSD目标检测的过程,并且总结一些精华知识点. 为什么要学习SSD,是因为SSD和YOLO一 ...

  5. 深度学习之 SSD(Single Shot MultiBox Detector)

    目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型: (1)two-stage方法,如R-CNN系算法,其主要思路是先通过启发式方法(selective search)或者CNN网络(R ...

  6. SSD( Single Shot MultiBox Detector)关键源码解析

    SSD(SSD: Single Shot MultiBox Detector)是采用单个深度神经网络模型实现目标检测和识别的方法.如图0-1所示,该方法是综合了Faster R-CNN的anchor ...

  7. SSD: Single Shot MultiBox Detector 之再阅读

    SSD: Single Shot MultiBox Detector SSD 一句话就是速度快,效果好! 第一版 8 Dec 2015,第二版是30 Mar 2016 主要改进是内容更加详实,实验更加 ...

  8. 目标检测 SSD: Single Shot MultiBox Detector - SSD在MMDetection中的实现

    目标检测 SSD: Single Shot MultiBox Detector - SSD在MMDetection中的实现 flyfish 目标检测 SSD: Single Shot MultiBox ...

  9. 目标检测 - 基于 SSD: Single Shot MultiBox Detector 的人体上下半身检测

    基于 SSD 的人体上下半身检测 这里主要是通过将训练数据转换成 Pascal VOC 数据集格式来实现 SSD 检测人体上下半身. 由于没有对人体上下半身进行标注的数据集, 这里利用 MPII Hu ...

最新文章

  1. Bzoj2762: [JLOI2011]不等式组
  2. 使用SpringBoot AOP 记录操作日志、异常日志
  3. Lync Server 2010迁移至Lync Server 2013故障排错 Part3 :内外网共享PPT提示证书问
  4. TensorFlow中的Nan值的陷阱
  5. Vue3学习笔记01:使用NPM方法安装Vue3
  6. nginx 静态文件
  7. get与post在技术上的区别
  8. 对外暴露Id异或加密解密
  9. Spring Cloud(Greenwich版)-03-编写高可用Eureka Server(集群)
  10. 给Photoshop cc 2018添加简体中文语言包
  11. 计算机限制无线网络,无线网络连接受限制怎么办 无线网络连接受限解决方法【图文】...
  12. discuz发帖流程_C#代码、流程discuz论坛批量或自动发帖
  13. python中take函数_Python Pandas Series.take()用法及代码示例
  14. 计算机导论真题(一)
  15. 北洋 U80II 打印机驱动
  16. 李航统计学习感知机算法实现
  17. SPM空间金字塔模型
  18. 冥想的重大功能——人类21在21世纪的伟大发现
  19. IS-IS协议所使用的NET地址由哪几部分构成?
  20. wxd719() :大大您的方法有一点小问题:我设成每页35行,在分组区用GROUPNUMBER MOD 1 =0强制分组从新页开始,加上你的recordNumber mod

热门文章

  1. JavaEE|TCP/IP协议栈之TCP协议端格式详解
  2. 太极拳“引进落空”的学理研究
  3. 理解HPV和VPA两个对象
  4. 你可能不知道的 new.target
  5. 如何将本地项目上传到码云和github,超简单
  6. Codeforces1562 C. Rings(构造)
  7. 二叉排序树,平衡二叉树和哈夫曼树
  8. JSON学习笔记-处理空白字符(使用 SSE4.2 优化字符串扫描)
  9. 编制可行性研究报告的依据和要求有哪些?
  10. 华为mate30老是显示无法连接服务器,华为Mate30 Pro手机微信信息老是发不出,提示无法连接到网络...