COCO 数据集格式及mmdetection中的转换方法

COCO格式

CV中的目标检测任务不同于分类,其标签的形式稍为复杂,有几种常用检测数据集格式,本文将简要介绍最为常见的COCO数据集的格式。

完整的官方样例可自行查阅,以下是几项关键的字段:

{"images": [image],"annotations": [annotation],"categories": [category]
}image = {"id": int,"width": int,"height": int,"file_name": str,
}annotation = {"id": int,"image_id": int,"category_id": int,"segmentation": RLE or [polygon],"area": float,"bbox": [x,y,width,height],"iscrowd": 0 or 1,
}categories = [{"id": int,"name": str,"supercategory": str,
}]

以下是一组实例:

dict{'images': list[dict{'id': 0,'file_name': 34020010494_e5cb88e1c4_k.jpg,'height': 1536,'width': 2048}, ...'annotations': list[dict{'image_id': 0,'id': 1,'category_id': 0,'bbox': [135, 115, 676, 850],'area': 574600,'segmentation': [[586.5, ...], []],'is_crowd': 0}, ...'catgories': list[dict{'id': 0,'name': 'balloon'},...]]]
}
首先最外层(json文件读进来)是一个字典,该字典有三个键:'images', 'annotations', 'categories';​       其中'images'是一个列表,长度就是数据集图像数;​                列表中每个元素又是一个字典,有四个键:'id', 'file_name', 'height', 'width',和他们的值​     其中'annotations'也是一个列表,长度就是数据集所有标注(instances)数;​               列表中每个元素又是一个字典,有七个键:'image_id', 'id', 'category_id', 'bbox', 'area', 'segmentation', 'is_crowd'​     其中'categories'是一个列表,长度为数据集所含有的类别数;​             列表中每个元素又是一个字典,有两个键:'id', 'name'

mmdetection中的转换方法

官方例程

mmdetection中提供了几种训练自己的数据集的方法,其中之一就是将自己的数据集转换为COCO格式,进行训练。

官方给出了balloon数据集的转换样例,初次尝试可以按照此例程学习,这里同时提供balloon数据集下载链接。

其他例程

除此之外,笔者想在这里介绍一下另一个非官方的数据集,转换为COCO格式的例程,供读者参考。

首先介绍一下这个pig数据集。

与balloon数据集类似,pig数据集只有pig一个类,共700个样本,原始给出的数据集格式如下:

  1. 文件路径

    imagesxxx.jpg...
    labelsxxx.json...
    

    本数据集有两个文件夹,分别存放images和labels,对应文件名相同,扩展名分别为jpg和json。

  2. 标注格式

    json文件中给出的标注格式如下:

    dict{'shape': list[dict{'label': 'pig','boxes': [x1, x2, y1, y2],'points': [[x1, y1], [x2, y2], ..., [xn, yn]]}'imagePath': 'xxx.jpg']
    }
    
    json文件最外层是一个字典,该字典有两个键:'shape','imagePath';​  其中'shape'内是一个列表,列表的长度是该张图片内pig的个数;​     列表内每个元素又是一个字典,有三个键:'label','boxes','points';​  其中'imagePath'内则是本标注文件所对应的图片名。
    

    原本数据集内700个样本有500个box标注,其他200个是mask标注,经过我的初步处理,已经将没有box标注的样本根据mask标注生成了box标注。其中box标注是给出了左上右下两个对角坐标,而mask标注,也是给出了全部点的坐标。注意此处与COCO数据集给出标注的格式不同,需要做一定的转换。

转换为COCO数据集格式的函数如下:

import os
import os.path as osp
import mmcvdef convert_pig_to_coco(img_dir, label_dir, out_file):samples_list = [sample.split('.')[0] for sample in os.listdir(label_dir)]obj_count = 0images = []annotations = []for image_id, sample in enumerate(mmcv.track_iter_progress(samples_list)):prev_dict = mmcv.load(osp.join(label_dir, sample+'.json'))height, width = mmcv.imread(osp.join(img_dir, sample+'.jpg')).shape[: 2]images.append(dict(id = image_id,file_name = sample+'.jpg',height = height,width = width))for pig in prev_dict['shape']:# print(pig['boxes'])x_min, y_min, x_max, y_max = pig['boxes']mask = pig['points']if mask != None:px = [item[0] for item in mask]py = [item[1] for item in mask]poly = [(x + 0.5, y + 0.5) for x, y in zip(px, py)]poly = [p for x in poly for p in x]else:poly = Nonedata_anno = dict(image_id=image_id,id=obj_count,category_id=0,bbox=[x_min, y_min, x_max - x_min, y_max - y_min],area=(x_max - x_min) * (y_max - y_min),segmentation=[poly],iscrowd=0)annotations.append(data_anno)obj_count += 1coco_format_json = dict(images=images,annotations=annotations,categories=[{'id':0, 'name': 'pig'}])mmcv.dump(coco_format_json, out_file)

提供这个额外的例程是为了说明不必拘泥于官方给出的转换例程框架,要抓住数据集的本质,按照合理的方式将原格式内的数据读取出来并以COCO数据集的格式存放到一整个json文件中即可。只要完成这项任务,就是成功完成了自己的数据集到COCO格式的数据集的转换。
另外,如果有与本数据集原格式高度相似的检测数据集要转换为COCO格式,也可直接参考本例程的内容。

COCO 数据集格式及mmdetection中的转换方法相关推荐

  1. coco数据集格式示例_OpenAI的光辉可以从一些示例中生成训练数据集

    coco数据集格式示例 I recently started a new newsletter focus on AI education. TheSequence is a no-BS( meani ...

  2. OpenMMLab-AI实战营第二期——相关1. COCO数据集格式和pycocotools使用(目标检测方向)

    文章目录 1. COCO数据集 1.1 COCO数据集介绍 1.2 COCO数据集格式 1.2.1 常见目标检测数据格式 1.2.2 COCO数据集文件结构及标注文件说明 1.2.3 RLE格式 1. ...

  3. COCO数据集格式解析

    COCO数据集是我们经常使用的一个数据集,并且 COCO数据集格式也很受大家欢迎,但不同于 VOC数据格式,COCO是将所有的标注数据存放在一个json文件中,使得查看的时候云里雾里,最近也在用COC ...

  4. voc数据集格式转换为coco数据集格式+修改xml格式文件

    voc数据集格式转换为coco格式+修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 下面这份代码只需修改文件所在 ...

  5. VOC/YOLO/COCO数据集格式转换及LabelImg/Labelme/精灵标注助手Colabeler标注工具介绍

    数据集格式:VOC(xml).YOLO(txt).COCO(json) 本文主要对Label格式,以及LabelImg.Labelme.精灵标注助手Colabeler这常用的三种数据标注软件进行介绍. ...

  6. VOC数据集格式转化成COCO数据集格式

    VOC数据集格式转化成COCO数据集格式 一.唠叨      之前写过一篇关于coco数据集转化成VOC格式的博客COCO2VOC,最近读到CenterNet的官方代码,实现上则是将voc转化成coc ...

  7. voc数据集格式转coco数据集格式

    小白AI:VOC数据集史上最实用的介绍和使用(1) 刚入门目标检测时,用的都是VOC格式的数据集,简单且评价标准单一.目前cv领域用的都是COCO格式的评价标准,前期使用Labelimg自制的数据集格 ...

  8. 建立自己的voc数据集_将自己数据集转化成voc数据集格式并用mmdetection训练

    一.准备自己的数据 拿nwpu数据集来举例,nwpu数据集文件夹中的内容是: images文件夹:存放数据图片 labelTxt文件夹:存放标注信息,images文件夹中每张图片都对应一个txt文件存 ...

  9. voc定位数据xml转coco数据集格式json

    代码里面集合了python处理xml的精髓 import xml.etree.ElementTree as ET import os import jsoncoco = dict() coco['im ...

最新文章

  1. J-Flash的使用
  2. laravel 导出导入excel和csv文件的 使用
  3. The Suspects//并查集
  4. 实验一 线性表的顺序存储与实现_【自考】数据结构中的线性表,期末不挂科指南,第2篇
  5. 基于GaussDB(DWS)的全文检索特性,了解一下?
  6. DataNode逻辑结构
  7. Shell每行前面加上行号
  8. PHP linux spl_autoload_register区分大小写
  9. 曼昆:宏观经济学简史(转)
  10. 北理乐学C语言寻找特殊偶数,北理乐学C语言答案-最新教程.doc
  11. LINUX udhcpc命令
  12. 申请免费的域名并且通过FTP上传及通过自己的域名访问自己的网站
  13. stm32定时器配置与时间计算公式
  14. 亲自动手写爬虫系列一、实现一个最简单爬虫
  15. 面向削峰填谷的电动汽车多目标优化调度策略——附代码
  16. 技术水平真的很重要!技术详细介绍
  17. RediSearch一个媲美es的全文搜索引擎
  18. CMMI 3.0究竟有哪些变化?
  19. 我和Ruby之父松本行弘的握手
  20. 10 项目沟通和干系人管理

热门文章

  1. SpringMVC项目 使用IDEA快速构建
  2. 企业实战_10_Mycat集成ZK实现配置同步
  3. MyBatis-Plus_Condition作用
  4. 将活动工作表生成 PDF,并通过电子邮件发送
  5. 【算法】Hash实现环形链表【LeetCode】
  6. Android代码混淆方法,Android 代码混淆零基础入门
  7. 几何级数 函数 matlab,matlab 实验05数据的统计分析
  8. BugkuCTF-WEB题好像需要密码
  9. java中挂起和恢复,应用程序“未能及时恢复”并挂起
  10. xrdpdf卡片在哪可下载_暑假学习英语字母,就是这样简单(附可打印字母卡下载)...