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

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格式,也可直接参考本例程的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php获取h1,jQuery获取h1-h6标题元素值方法实例

本文主要介绍了jQuery实现获取h1-h6标题元素值的方法,涉及$(":header")选择器操作h1-h6元素及事件响应相关技巧,需要的朋友可以参考下,希望能帮助到大家。1、问题背景:查找到h1-h6,并遍历它们,打印出内容2、实现代码&am…

在导入NVIDIA的apex库时报错 ImportError cannot import name ‘UnencryptedCookieSessionFactoryConfig‘ from

在导入NVIDIA的apex库时报错 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ from ‘pyramid.session’ (unknown location) 报错 在使用NVIDIA的apex库时报错 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ fro…

php怎么取request,PHP-如何在Guzzle中获取Request对象?

我需要使用Guzzle检查数据库中的很多项目.例如,项目数量为2000-5000.将其全部加载到单个数组中太多了,因此我想将其分成多个块:SELECT * FROM items LIMIT100.当最后一个项目发送到Guzzle时,则请求下一个100个项目.在“已满”处理程序中,我应该知道哪个项目得到了响…

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析 论文:https://arxiv.org/abs/2104.00323 代码:https://github.com/dvlab-research/JigsawClustering 总结 本文提出了一种单批次&#xff0…

java jps都卡死,java长时间运行后,jps失效

在部署完应用后,原本jps使用的好好的,能正确的查询到自己正在运行的java程序。但,过了一段时间后,再使用jps来查看运行的应用时,自己运行的程序都看不到,但是自己也没有关闭这些程序啊!然而使用…

指针(*)、取地址()、解引用(*)与引用()

指针(*)、取地址(&)、解引用(*)与引用(&) C 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。 指针是一个包含了另一个变量地址的变量,您可以把一个包含了另一个变量地址的变量说成是"指向"另一…

matlab电类,985电气研二,有发过考研经验贴 电气电力类的有

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼clc;clear;p[2.259;2.257;2.256;2.254;2.252;2.248;2.247;2.245;2.244;2.243;2.239;2.238;2.236;2.235;2.234;2.231;2.229;2.228;2.226;2.225;2.221;2.220;2.219;2.217;2.216;2.211;2.209;2.208;2.207;2.206;2.202;2.201;2.199;2.1…

matlab legend 分块,matlab legend 分块!

matlab legend 分块!(2013-03-26 18:07:38)%%%压差clc;clear all;figure(55);set (gcf,Position,[116 123 275 210],color,w);P[25 26 27 28 29 30 31 32 33 34 35];%理论q0.00006*pi*28*P*10^(6)*0.03^3/(12*0.028448*5);q1110.00006*pi*28*P*10^(6)*0.03^3/(12*0.…

利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化)

利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化) 本文主要就少opencv中两个函数polylines和fillPoly分别用于绘制多边形框或区域填充,并会会以常见用途分割任务mask(还是笔者…

matlab与maple互联,Matlab,Maple和Mathematica三款主流科学计算软件的互操作

本文根据网上零散的信息以及这三款软件自带的说明文档整理而成,为备忘而记录。记录了Matlab和Maple之间的相互调用,以及Matlab和Mathematica之间相互调用的安装配置方法。为何需要互操作? 数值计算和图形方面Matlab毫无疑问是最强的&a…

PyTorch中的topk方法以及分类Top-K准确率的实现

PyTorch中的topk方法以及分类Top-K准确率的实现 Top-K 准确率 在分类任务中的类别数很多时(如ImageNet中1000类),通常任务是比较困难的,有时模型虽然不能准确地将ground truth作为最高概率预测出来,但通过学习&#…

java高级语言特性,Java高级语言特性之注解

注解的定义Java 注解(Annotation)又称 Java 标注,是 JDK1.5 引入的一种注释机制。注解是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。注解本身没有任何意义,单独的注解就是一种注释&am…

C/C++中的typedef 和 #define

C/C中的typedef 和 #define typedef C/C中的关键字typedef允许用户为类型名来起一个新名字,通常会是缩写或者能够清晰表明类型含义的新名字。 例: typedef unsigned int UINT; UINT 100;值得注意的是,typedef除了为C/C内置的数据类型取别…

php3.2.3 升级,thinkphp3.2.3 升级到3.2.4时出错问题

有些项目最初用OneThink做的,而OneThink 默认使用的TP 是3.2.0 的,没事的时候就想给升级一下,但是直接复制进去的时候,有错误,导致OneThink 不能运行,排查后,需要修改两个地方1、修改 Applicati…

Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 1

Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来,屠杀了各大CV榜单。对其做各种改进的顶会论文也是层出不穷,本文将聚焦于各种最新的视觉trans…

mysql 分析查询语句,MySQL教程之SQL语句分析查询优化

怎么获取有功能问题的SQL1、经过用户反应获取存在功能问题的SQL2、经过慢查询日志获取功能问题的SQL3、实时获取存在功能问题的SQL运用慢查询日志获取有功能问题的SQL首要介绍下慢查询相关的参数1、slow_query_log 发动定制记载慢查询日志设置的办法,能够经过MySQL指…

关于PyTorch中的register_forward_hook()函数未能执行其中hook函数的问题

关于PyTorch中的register_forward_hook()函数未能执行其中hook函数的问题 Hook 是 PyTorch 中一个十分有用的特性。利用它,我们可以不必改变网络输入输出的结构,方便地获取、改变网络中间层变量的值和梯度。这个功能被广泛用于可视化神经网络中间层的 f…

geoda权重矩阵导入matlab,空间计量经济学-分析解析.ppt

厦门大学 邓明 空间截面回归模型 地理加权回归模型 地理加权回归模型扩展了普通线性回归模型。在GWR模型中,特定区位的回归系数不再是利用全部信息获得的假定常数,而是利用邻近观测值的子样本数据信息进行局域(Local)回归估计而得,并随着空间…

树莓派摄像头基础配置及测试

树莓派摄像头基础配置 step 1 硬件连接 硬件连接,注意不要接反了,排线蓝色一段朝向网口的方向。(笔者的设备是树莓派4B) step 2 安装raspi-config 安装 raspi-config raspi-config在raspbian中是预装的,而在kali、…

matlab sobel锐化,sobel锐化 - yirui wu.ppt

sobel锐化 - yirui wu第六章 图像锐化 图像锐化的概念 图像锐化的目的是加强图像中景物的细节边缘和轮廓。 锐化的作用是使灰度反差增强。 因为边缘和轮廓都位于灰度突变的地方。所以锐化算法的实现是基于微分作用。 图像锐化方法 图像的景物细节特征; 一阶微分锐化…