COCO数据集制作

C O C O 数 据 集 制 作 COCO数据集制作 COCO

【实战】Windows10+YOLOv3实现检测自己的数据集(1)——制作自己的数据集

首先确定输入模型的coco检测和分割的数据形式

labelme制作数据集转COCO数据格式

labelimg制作数据集转COCO数据格式

coco数据集可以用于做 目标检测语义分割

coco数据集的标签信息是以.json的格式存储的

一 介绍

MS COCO的全称是Microsoft Common Objects in Context,源于微软于2014年出资标注的Microsoft COCO数据集,其地位与ImageNet等同,是衡量通用模型性能的最佳数据集之一。

COCO数据集是一个大型的、丰富的物体检测,分割和字幕数据集。

以scene understanding为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的segmentation进行位置的标定。

图像包括91类目标,328,000影像和2,500,000个label。

目前为止有语义分割的最大数据集,提供的类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个

下载

1、2014年数据集的下载
http://msvocds.blob.core.windows.net/coco2014/train2014.zip

2、2017的数据集的下载
http://images.cocodataset.org/zips/train2017.zip
http://images.cocodataset.org/annotations/annotations_trainval2017.zip

http://images.cocodataset.org/zips/val2017.zip
http://images.cocodataset.org/annotations/stuff_annotations_trainval2017.zip

http://images.cocodataset.org/zips/test2017.zip
http://images.cocodataset.org/annotations/image_info_test2017.zip

实现案例

import json
import os
import cv2
import shutil
import xml.etree.ElementTree as ET
dataset = {
    
    }
def readxml(dataset,xml,count):
	tree = ET.parse(xml)
	root = tree.getroot()
	for child in root:
		if child.tag == "size":
			for s_ch in child:
				if s_ch.tag == "width":
					w = s_ch.text
				else :
					h = s_ch.text
		elif child.tag == "object":
			for s_ch in child:
				if s_ch.tag == "bndbox":
					for ss_ch in s_ch:
						if ss_ch.tag == "xmin":
							xmin = ss_ch.text
						elif ss_ch.tag == "ymin":
							ymin = ss_ch.text
						elif ss_ch.tag == "xmax":
							xmax = ss_ch.text
						elif ss_ch.tag == "ymax":
							ymax = ss_ch.text
				else: 
				    ca_name = s_ch.text

	dataset.setdefault("images",[]).append({
    
    
		'file_name': str(count) +'.jpg',
		'id': int(count),
		'width': int(w),
		'height': int(h) 
		})
	dataset.setdefault("annotations",[]).append({
    
    
		'image_id': int(count),
		'bbox': [int(xmin), int(ymin), int(xmax)-int(xmin), int(ymax)-int(ymin)],
		'category_id': 6,
                'area':int(w) * int(h),
                'iscrowd':0,
                'id':int(count),
                'segmentation':[]
		})
        

im_path="/home/qusongyun/images/"
trainimg = "/home/qusongyun/simpledet/data/coco/images/val2014/"

cmax = 0
dirpath = os.listdir(im_path)
for imgdir in dirpath:

	f1 = os.listdir(trainimg)
	for file in f1:
		cmax = max(cmax,int(file.split(".")[0]))
	count = 1

	for file in os.listdir(im_path + imgdir):

		if file.split(".")[1] == "jpg":
			oldname = os.path.join(im_path + imgdir, file)
			jpgname = os.path.join(trainimg, str(count+cmax) + ".jpg")
			shutil.copyfile(oldname, jpgname)
			readxml(dataset,os.path.join(im_path + imgdir , file.split(".")[0] + ".xml"),count+cmax)
			count += 1
			
for i in range(1,81):
	dataset.setdefault("categories",[]).append({
    
    
		'id': i, 
		'name':1,
		'supercategory': 'No'
		})

folder = os.path.join('/home/qusongyun/simpledet/data/coco/annotations/')
if not os.path.exists(folder):
	os.makedirs(folder)
json_name = os.path.join(folder+'instances_minival2014.json')
with open(json_name, 'w') as f:
	json.dump(dataset, f)

参考文献

https://patrickwasp.com/create-your-own-coco-style-dataset/

制作自己的COCO数据集,训练mask R-CNN

https://cocodataset.org

猜你喜欢

转载自blog.csdn.net/qq_41375318/article/details/112861278