文章目录

  • PASCAL VOC数据集格式
    • 组织结构
      • Annotation
      • ImageSets
      • JPEGImages
  • COCO数据集格式
    • 组织结构
      • annotations(注释)
      • json格式
      • instances
  • 自定义数据集(coco类型)
    • 修改config文件
      • dataset模块
      • model模块
    • 检查注释文件

mmdetection主要支持COCO,次要支持PASCAL VOC(提供了转化为COCO的脚本),因此我们首先介绍COCO和VOC数据集。

PASCAL VOC数据集格式

PASCAL VOC2007和2012总共分为了四个大类,大类又细分为了20个小类,具体如图所示:

组织结构

解压VOC2007后,文件组织形式如下:

├── Annotations 进行 detection 任务时的标签文件,xml 形式,文件名与图片名一一对应
├── ImageSets 包含三个子文件夹 Layout、Main、Segmentation,文件夹中包含了对应任务的数据集划分
├── JPEGImages 存放 .jpg 格式的图片文件
├── SegmentationClass 存放按照 class 分割的图片
└── SegmentationObject 存放按照 object 分割的图片

Annotation

以第一张图片的信息为例:

<annotation>第一部分:声明图像的数据来源、大小等元信息<folder>VOC2007</folder><filename>000001.jpg</filename><source><database>The VOC2007 Database</database><annotation>PASCAL VOC2007</annotation><image>flickr</image><flickrid>341012865</flickrid></source><owner><flickrid>Fried Camels</flickrid><name>Jinky the Fruit Bat</name></owner><size><width>353</width><height>500</height><depth>3</depth></size><segmented>0</segmented>上述信息包含的内容有:1. 图像路径为VOC2007/JPEGImages/000001.jpg;2. 来自flickr网站上(source&owner);3. 图像大小为353x500x3;4. 没有分割标注(1表示有);第二部分:对象信息<object><name>dog</name><pose>Left</pose><truncated>1</truncated><difficult>0</difficult><bndbox><xmin>48</xmin><ymin>240</ymin><xmax>195</xmax><ymax>371</ymax></bndbox></object>上述信息包含的内容有:1. 种类为dog;2. 视角为left;3. 是否被标记为截断:是(1);4. 是否被标记为很难识别:不是(0);5. 框的位置:左上角:(48,240),右下角:(195,371);<object><name>person</name><pose>Left</pose><truncated>1</truncated><difficult>0</difficult><bndbox><xmin>8</xmin><ymin>12</ymin><xmax>352</xmax><ymax>498</ymax></bndbox></object>
</annotation>

ImageSets

Main:服务于分类和检测任务;
Layout:服务于人体动作行为分析,检测人及其身体的各个组成部分;
Segmentation:服务于图像分割任务;

在Layout和Segmentation中的文件为:


内部都是样本的编号。

Main中的文件则有点特殊,组织形式是以类别为单位的:

在样本编号之后也多了一个数字:

0表示图像中包含aeroplane,但是难以识别;
1表示图像中包含aeroplane;
-1表示图像中不包含aeroplane。

JPEGImages

原始图像文件,格式为JPG。

如果自制VOC数据集的话,在采样时务必用JPG格式保存。

COCO数据集格式

coco2017数据集包含了12个大类,80个小类。

组织结构


test、train、val三个文件夹中包含了原始图片,格式为jpg。

annotations(注释)


解压的文件为annotations_trainval2017.zip,不同的压缩文件对应了不同的标注内容,也意味着不同的研究目标。

上述包含了三种标注类型:

  1. object instances(目标实例);
  2. object keypoints(目标上的关键点);
  3. image captions(看图说话)。

json格式

json是一种与语言无关的数据交换的格式。

json有两种格式:

  1. 对象格式:{“key1”:obj1,“key2”:obj2,“key3”:obj3…}
  2. 数组/集合格式:[obj1,obj2,obj3…]

其中,需要注意的是,属性名称和字符串值是需要用双引号扩起来的。

instances

文件包含的主要字段有:

{"info":基本信息,如:description、url、version、year、contributor;不重要;"licenses":不重要;"images":存储图片信息;重要;"annotations":存储图片注释信息;重要;"catagories":存储对象类别信息;重要;
}annotation{"segmentation": RLE or [polygon], # 物体分割信息"area": float, # segmentation的面积"iscrowd": 0 or 1, # 是否有重叠"image_id": int, # 图像编号"bbox": [x,y,width,height], # 物体的框"category_id": int, # 类别编号"id": int, # 每个框的身份编号
}

自定义数据集(coco类型)

coco格式的模版如下:

'images': [{'file_name': 'COCO_val2014_000000001268.jpg','height': 427,'width': 640,'id': 1268},...
],'annotations': [{'segmentation': [[192.81,247.09,...219.03,249.06]],  # if you have mask labels'area': 1035.749,'iscrowd': 0,'image_id': 1268,'bbox': [192.81, 224.8, 74.73, 33.43],'category_id': 16,'id': 42986},...
],'categories': [{'id': 0, 'name': 'car'},]

修改config文件

我们需要修改在dataset模块和models模块中对于数据集的描述。

dataset模块


对于任何一个config都离不开对于base文件夹的继承,在base/dataset中又有这些文件,分别对应了不同数据集、不同任务的数据集处理文件。

我们以其中的coco_detection.py文件为例:

# dataset settings
dataset_type = 'CocoDataset' # 数据集种类
data_root = 'data/coco/' # 数据集位置
img_norm_cfg = dict(mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
train_pipeline = [ # 数据增强的参数dict(type='LoadImageFromFile'),dict(type='LoadAnnotations', with_bbox=True),dict(type='Resize', img_scale=(1333, 800), keep_ratio=True),dict(type='RandomFlip', flip_ratio=0.5),dict(type='Normalize', **img_norm_cfg),dict(type='Pad', size_divisor=32),dict(type='DefaultFormatBundle'),dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']),
]
test_pipeline = [ # 数据增强的参数dict(type='LoadImageFromFile'),dict(type='MultiScaleFlipAug',img_scale=(1333, 800),flip=False,transforms=[dict(type='Resize', keep_ratio=True),dict(type='RandomFlip'),dict(type='Normalize', **img_norm_cfg),dict(type='Pad', size_divisor=32),dict(type='ImageToTensor', keys=['img']),dict(type='Collect', keys=['img']),])
]
# train、val、test数据分配
data = dict(samples_per_gpu=2,workers_per_gpu=2,train=dict(type=dataset_type, # 数据集类型ann_file=data_root + 'annotations/instances_train2017.json', # 注释文件位置img_prefix=data_root + 'train2017/', # 源文件位置pipeline=train_pipeline), # 数据增强方式val=dict(type=dataset_type,ann_file=data_root + 'annotations/instances_val2017.json',img_prefix=data_root + 'val2017/',pipeline=test_pipeline),test=dict(type=dataset_type,ann_file=data_root + 'annotations/instances_val2017.json',img_prefix=data_root + 'val2017/',pipeline=test_pipeline))
evaluation = dict(interval=1, metric='bbox') # 评分指标

对于自定义的数据集,我们首先创建一个配置文件:configs/my_config.py。

其中的数据集部分如下进行修改:

dataset_type = 'CocoDataset'
classes = ('a', 'b', 'c', 'd', 'e')
data = dict(samples_per_gpu=2,workers_per_gpu=2,train=dict(type=dataset_type,# explicitly add your class names to the field `classes`classes=classes,ann_file='path/to/your/train/annotation_data',img_prefix='path/to/your/train/image_data'),val=dict(type=dataset_type,# explicitly add your class names to the field `classes`classes=classes,ann_file='path/to/your/val/annotation_data',img_prefix='path/to/your/val/image_data'),test=dict(type=dataset_type,# explicitly add your class names to the field `classes`classes=classes,ann_file='path/to/your/test/annotation_data',img_prefix='path/to/your/test/image_data'))

需要注意的是,我们需要明显地向data.train/val/test字段中加入classes。

model模块

在使用coco数据集时,我们默认了num_classes为80,因此,在自定义的config文件中需要对此做出修改:

model = dict(roi_head=dict(bbox_head=[dict(type='Shared2FCBBoxHead',# explicitly over-write all the `num_classes` field from default 80 to 5.num_classes=5),dict(type='Shared2FCBBoxHead',# explicitly over-write all the `num_classes` field from default 80 to 5.num_classes=5),dict(type='Shared2FCBBoxHead',# explicitly over-write all the `num_classes` field from default 80 to 5.num_classes=5)],# explicitly over-write all the `num_classes` field from default 80 to 5.mask_head=dict(num_classes=5)))

修改完以上两个部分后,我们需要进一步检查自定义数据集的注释文件。

检查注释文件

  1. catagories字段的长度需要与config-dataset部分中的classes的长度一致;
  2. catagories字段中的name的顺序与classes中的顺序一致、元素一致;
  3. annotations中的catagory_id应该能在catagories的id中找到。

mmdetection--自定义数据集相关推荐

  1. MMDetection 快速开始,训练自定义数据集

    本文将快速引导使用 MMDetection ,记录了实践中需注意的一些问题. 环境准备 基础环境 Nvidia 显卡的主机 Ubuntu 18.04 系统安装,可见 制作 USB 启动盘,及系统安装 ...

  2. 基于mmdetection 旋转目标检测(OBB detection)+DOTA数据集自定义数据集+配docker

    这两周得益于组里的任务需求,肝了一个遥感类的飞机旋转框目标检测,在给定的4096*4096的大尺度分辨率图片上去识别检测飞机. 经过模型检测后输出结果图如下图所示: 可以看到最终的结果还是不错的,通过 ...

  3. 基于MMRotate训练自定义数据集 做旋转目标检测 2022-3-30

    本文目录 简述 1.MMrotate下载 2.环境安装 3.自定义数据集制作 3.1 roLabelImg 打标签 3.2 生成DOTA数据集格式的标签 3.3 数据集裁剪(split) 4.修改配置 ...

  4. mmrotate自定义数据集安装部署训练测试

    环境 Ubuntu18.04 cuda10.2 python3.7 2080s 一.安装 conda create -n mmrotate python=3.7 conda activate mmro ...

  5. 三、如何搞自定义数据集?

    文章目录 前言 一.定义的数据集,未做预处理. 二.定义数据集,并做数据预处理. 1.预处理部分 2.定义数据过程 前言 MNIST数据这个最最基础的数据集已经被走在程序猿道路上的同学们玩坏了,所以今 ...

  6. PyTorch版YOLOv4更新了,不仅适用于自定义数据集,还集成了注意力和MobileNet

    机器之心报道 作者:陈萍 距离 YOLO v4 的推出,已经过去 5 个多月.YOLO 框架采用 C 语言作为底层代码,这对于惯用 Python 的研究者来说,实在是有点不友好.因此网上出现了很多基于 ...

  7. Pytorch自定义数据集

    简述 Pytorch自定义数据集方法,应该是用pytorch做算法的最基本的东西. 往往网络上给的demo都是基于torch自带的MNIST的相关类.所以,为了解决使用其他的数据集,在查阅了torch ...

  8. ML之catboost:基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两种方式)

    ML之catboost:基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两种方式) 目录 基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两 ...

  9. ML之FE:基于自定义数据集(银行客户信息贷款和赔偿)对比实现特征衍生(手动设计新特征、利用featuretools工具实现自动特征生成)

    ML之FE:基于自定义数据集(银行客户信息贷款和赔偿)对比实现特征衍生(手动设计新特征.利用featuretools工具实现自动特征生成) 目录 基于自定义数据集(银行客户信息贷款和赔偿)对比实现特征 ...

  10. ML:基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)

    ML:基于自定义数据集利用Logistic.梯度下降算法GD.LoR逻辑回归.Perceptron感知器.支持向量机(SVM_Linear.SVM_Rbf).LDA线性判别分析算法进行二分类预测(决策 ...

最新文章

  1. 如何在 SAP CRM WebClient UI 里在 Context node 上下文里访问其他 Context Node 的数据
  2. “”和“” java
  3. 447. 回旋镖的数量
  4. Android ImageView ScaleType:图解
  5. Atitit 调用百度语音识别 目录 1. 建立一个音频app项目,获得appid kersec 1 2. 直接使用JAR包步骤如下: 1 2.1. public class baiduAudio
  6. 编译原理( 词法分析程序 语法分析程序 语义分析程序 中间代码生成程序 代码优化程序 目标代码生成程序 符号表管理程序)
  7. python 单位根检验代码_Python中ADF单位根检验实现查看结果的方法
  8. ARM嵌入式体系结构与接口技术
  9. 工厂都离不开的“人机料法环”
  10. 干货|如何轻松安装和永久激活photoshop cs6
  11. python web py入门-7-响应处理(下)
  12. 【历史上的今天】11 月 16 日:RISC-V 掌门人出生;微软发布 Windows CE;电子管问世
  13. java:去除数组重复元素的四种方法
  14. 大脑布罗德曼分区系统简介
  15. OpenFOAM中动量方程 UEqn 浅析
  16. 广电网宽带 如果要远程连接阿里RDS数据库,设置了白名单也不行。
  17. 微信公众平台开发之模板消息(Java)
  18. 蓝牙透传实验_蓝牙模块比较常见的通讯方式透传是什么
  19. 你为什么选择考杭电?
  20. 如何在ActiveX控件中使用字体3

热门文章

  1. 英特尔DRM内核驱动程序默认启用PSR2省电功能
  2. amcharts php,AMCHARTS+MYSQL+PHP的使用实例
  3. springboot项目实现站内信功能记实
  4. 2018高中计算机学考,关于2018—2019学年普通高中学业水平考试科目考试时间安排的通知...
  5. Text B:What’s wrong with copying?剽窃何罪
  6. python变成exe需要python环境吗_[Python]py程序发布——Python环境移植和exe程序生成(无环境依赖性),pythonPy,以及,EXE...
  7. 如何看待用户反馈意见
  8. javascript特效3月12日软件速递:Mozilla Firefox发布
  9. Controlling the Amount of Verbatim Copying in Abstractive Summarization
  10. java 随机生成常用汉字_Java代码实现随机生成汉字的方法