COCO数据集简介

MS COCO的全称是Microsoft Common Objects in Context,起源于微软于2014年出资标注的Microsoft COCO数据集。COCO数据集是一个大型的、丰富的物体检测,分割和字幕数据集。这个数据集以scene understanding为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的segmentation进行位置的标定。图像包括91类目标,328,000影像和2,500,000个label。数据集主要解决3个问题:目标检测,目标之间的上下文关系,目标的2维上的精确定位。

官网地址:

http://cocodataset.org

COCO数据集格式

COCO_2017/
  	    ├── val2017     # 总的验证集
  	    ├── train2017    # 总的训练集
        ├── annotations    # COCO标注
		│   ├── instances_train2017.json     # object instances(目标实例) ---目标实例的训练集标注 
		│   ├── instances_val2017.json        # object instances(目标实例) ---目标实例的验证集标注
		│   ├── person_keypoints_train2017.json     # object keypoints(目标上的关键点) ---关键点检测的训练集标注
		│   ├── person_keypoints_val2017.json       # object keypoints(目标上的关键点) ---关键点检测的验证集标注
		│   ├── captions_train2017.json    # image captions ---训练集标注
		│   ├── captions_val2017.json      # image captions ---验证集标注

COCO数据集制作

COCO一共有5种不同任务分类,分别是目标检测、关键点检测、语义分割、场景分割和图像描述。COCO数据集的标注文件以JSON格式保存,官方的注释文件有仨 captions_type.json instances_type.json person_keypoints_type.json,其中的type是 train/val/test+year。

前期准备

  1. 新建文件夹 COCO
  2. COCO下新建images/annotations/
  3. 使用labelme标注数据集
  4. anaconda中安装labelme 输入命令 pip install labelme
  5. 安装成功后输入labelme,打开labelme
  6. 点击open Dir选择你要标注的文件夹。
  7. 点击Create Polygons开始标注数据集。
  8. 将标注好生成的josn文件保存至指定文件夹。
  9. 改写josn文件。

Pascal VOC 数据集简介

PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛, PASCAL全称:Pattern Analysis, Statical Modeling and Computational Learning,是一个由欧盟资助的网络组织。很多模型都基于此数据集推出.比如目标检测领域的yolo,ssd等等。

VOC数据集格式

├── Annotations
├── ImageSets
│   ├── Action
│   ├── Layout
│   ├── Main
│   │  ├─ train.txt
│   │  ├─ val.txt
│   │  ├─ trainval.txt
│   └── Segmentation
├── JPEGImages
├── SegmentationClass
└── SegmentationObject

VOC数据集制作

  1. 按上图创建文件夹。
  2. 使用pip命令安装labelimg
  3. 如上COCO数据集标注,将标注好的数据放入Annotations文件夹下。
  4. 生成4个txt文件。
import os
import random
def _main():
    trainval_percent = 0.1
    train_percent = 0.9
    xmlfilepath = 'F:/jupyter/process/VOC2007/Annotation/'
    total_xml = os.listdir(xmlfilepath)

    num = len(total_xml)
    list = range(num)
    tv = int(num * trainval_percent)
    tr = int(tv * train_percent)
    trainval = random.sample(list, tv)
    train = random.sample(trainval, tr)

    ftrainval = open('VOC2007/ImageSets/Main/trainval.txt', 'w')
    ftest = open('VOC2007/ImageSets/Main/test.txt', 'w')
    ftrain = open('/VOC2007/ImageSets/Main/train.txt', 'w')
    fval = open('VOC2007/ImageSets/Main/val.txt', 'w')

    for i in list:
        name = total_xml[i][:-4] + '\n'
        if i in trainval:
            ftrainval.write(name)
            if i in train:
                ftest.write(name)
            else:
                fval.write(name)
        else:
            ftrain.write(name)

    ftrainval.close()
    ftrain.close()
    fval.close()
    ftest.close()


if __name__ == '__main__':
    _main()

数据集转换

VOC和COCO数据集转换可以使用paddleX和paddleDection中集成好的工具,当然大佬可以自己写。

VOC和COCO数据集的制作方法很多,本文使用的labelme和labelimg只是众多工具中的两个。