coco 2017数据集提取和转换
本次分割的动物数据集 4G
https://download.youkuaiyun.com/download/qq_26696715/87621195
一. coco2017数据集结构
总的结构如下:
├─cocotoyolo.py
├─getanimal.py
├─annotations
├─train2017
└─val2017
其中,images存放的是训练集、验证集的图片原图;annotations中存放的是标注文件:
2017/09/01 19:04 91,865,115 captions_train2017.json
2017/09/01 19:04 3,872,473 captions_val2017.json
2017/09/01 19:02 469,785,474 instances_train2017.json
2017/09/01 19:02 19,987,840 instances_val2017.json
2017/09/01 19:04 238,884,731 person_keypoints_train2017.json
2017/09/01 19:04 10,020,657 person_keypoints_val2017.json
标注文件解析
instances_xx2017.json 是一个COCO数据集的标注文件,包含了所有训练集图片的标注信息,字段含义如下:
- info:数据集的相关信息,如数据集名称、版本、年份等;
- licenses:数据集的许可证信息;
- images:训练集中所有图片的信息,包括图片ID、文件名、高度、宽度等;
- annotations:训练集中所有标注信息,包括标注ID、图片ID、类别ID、边界框坐标等;
- categories:所有类别的信息,包括类别ID、类别名称、超类别名称等。
具体解释如下:
info:数据集的相关信息,包括数据集名称、版本、作者、年份等。例如,info 字段中可能包含以下信息:
“info”: {
“description”: “COCO 2017 Dataset”,
“url”: “http://cocodataset.org”,
“version”: “1.0”,
“year”: 2017,
“contributor”: “COCO Consortium”,
“date_created”: “2017/09/01” }licenses:数据集的许可证信息,包括许可证ID、许可证名称等。例如,licenses 字段中可能包含以下信息:
“licenses”: [
{
“id”: 1,
“name”: “Attribution-NonCommercial-ShareAlike License”,
“url”: “http://creativecommons.org/licenses/by-nc-sa/2.0/”
} ]images:训练集中所有图片的信息,包括图片ID、文件名、高度、宽度等。例如,images 字段中可能包含以下信息:
“images”: [
{
“id”: 1,
“file_name”: “000000000009.jpg”,
“height”: 480,
“width”: 640,
“date_captured”: “2013-11-14 17:02:52”,
“license”: 1
} ]annotations:训练集中所有标注信息,包括标注ID、图片ID、类别ID、边界框坐标等。例如,annotations 字段中可能包含以下信息:
“annotations”: [
{
“id”: 1,
“image_id”: 1,
“category_id”: 1,
“bbox”: [96.0, 120.0, 112.0, 80.0],
“area”: 8960.0,
“iscrowd”: 0
} ]categories:所有类别的信息,包括类别ID、类别名称、超类别名称等。例如,categories 字段中可能包含以下信息:
“categories”: [
{
“id”: 1,
“name”: “person”,
“supercategory”: “person”
} ]
二. 提取需要的类别重新封装成coco数据集(这里以动物类别为例)
提取完成后的新文件夹为
├─animal_detection
│ ├─annotations
│ └─images
│ ├─train2017
│ └─val2017
提取代码 getanimal.py
import os
import json
import shutil
# 定义要提取的类别
categories = ['bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe']
# 定义数据集路径
data_dir = './'
# 定义输出路径
output_dir = './animal_detection'
# 创建输出目录
os.makedirs(os.path.join(output_dir, 'annotations'),exist_ok=True)
os.makedirs(os.path.join(output_dir, 'images', 'train2017'),exist_ok=True)
os.makedirs(os.path.join(output_dir, 'images', 'val2017'),exist_ok=True)
'''
训练集
'''
# 加载原始instances文件
with open(os.path.join(data_dir, 'annotations', 'instances_train2017.json'), 'r') as f:
train_instances = json.load(f)
# 筛选动物类别的id
# 筛选动物类别的id
animal_ids = []
new_categories <