如何用pycococreator将自己的数据集转换为COCO类型

AiTechYun

编辑:chux

在如今深度学习的领域中,如果把数据比作老K,用以确保数据格式正确的就是Q,或者至少也得是J或者10,由此你可以看出它相当重要。在努力收集图像并注释所有的对象之后,你需要决定用什么格式来存储所有的信息。与其他你需要担心的事情相比,做这个决定似乎不算困难,但如果你想看到不同模型在数据上的表现差异多大,这一步是至关重要的。

早在2014年,微软就创建了一个名为COCO的数据集(Common Objects in COntext),用来推进物体识别和场景理解的研究。COCO是最早出现的不只用边界框来注释对象的大型数据集之一,因此它成了用于测试新的检测模型的普遍基准。用于储存注释、格式固定的COCO成为了业界标准,如果你能将数据集转换成COCO类型,那么最先进的模型都可为你所用。

接下来就该pycococreator接手了,它负责处理所有的注释格式化细节,并帮你将数据转换为COCO格式。让我们以用于检测正方形、三角形和圆形的数据集为例,来看看如何使用它。

形状图片和对象掩码示例

这些形状数据集包含500张128×128像素的jpeg图像,其中颜色和大小随机的圆形、正方形和三角形分布在颜色随机的背景上。其二进制掩码注释在每个png格式的形状中进行编码。这种二进制掩码很容易理解并创建。这就是为什么在你使用pycococreator创建COCO类型的版本之前,你需要转换数据集格式。你可能会想,为什么不使用png二进制掩码格式?它不是更好理解吗?请记住,我们制作COCO数据集,并不是因为它是表示注释图像的最佳方式,而是因为所有人都使用它。

下面我们用来创建COCO类型数据集的示例脚本,要求你的图像和注释符合以下结构:

以形状为例,subset代表“shapes_train”,year为“2018”,object_class_name是“square”, “triangle”或“circle”。一般你还需要单独用于验证和测试的数据集。

COCO使用JSON (JavaScript Object Notation)对数据集的信息进行编码。COCO也有多种形式变化,取决于是否被用于对象实例、对象关键点或插图说明。我们要研究的对象实例格式如下:

下面的“info”,“licenses”,“categories”和“images”列表都可以直接创建,不过创建“annotations”有点麻烦。但我们可以用pycococreator来解决这部分问题。让我们首先把简单的问题解决掉,我们使用python列表和字典库来描述我们的数据集,然后将它们导出为json格式。

那么前三种完成后,我们可以继续处理图像和注释。我们要做的就是循环遍历每个jpeg图像及其对应的pngs注释,并让pycococreatorpy生成格式正确的条目。在第90和91行创建了图像条目,而在第112-114行进行了注释处理。

COCO支持的注释有两种类型,它们的格式取决于注释是单个对象还是多个对象。单个对象用沿着轮廓的点的列表进行编码,而多个对象则使用列优先的RLE(Run Length Encoding)进行编码。RLE用重复的数字代替数值的重复,是一种压缩算法。例如0 0 1 1 1 0 1转换成2 3 1 1。列优先意味着我们顺着列自上而下读取二进制掩码数组,而不是按照行从左到右读取。

pycococreatortools.create_annotation_info()函数中的tolerance改变了单个对象轮廓记录的精准度。数字越大,注释的质量越低,但文件相对也变小。通常从2开始比较合适。

在创建了COCO类型的数据集之后,你可以使用COCO API将其可视化来测试它。以pycococreator中的Jupyter Notebook为例,你应该会看到类似的情况:

使用COCO API的输出示例

你可以在github上找到用于转换形状数据集的完整脚本以及pycococreato。如果你想自行尝试形状数据集,可访问下方shape_strain_dataset的链接下载。

https://patrickwasp.com/wp-content/uploads/2018/04/shapes_train_dataset.zip

Github:https://github.com/waspinator/pycococreator/

现在,你可以尝试将自己的数据集转换为COCO格式,并用计算机视觉领域的最新进展进行试验。

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2018-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

深度学习挑战冯·诺依曼结构

【新智元导读】想挑战冯·诺依曼,就必须从三个要素入手:基本操作,例如加减乘除;逻辑流程控制,例如if-else-then,for,while;设存储器,内存和硬...

38711
来自专栏机器之心

从框架优缺点说起,这是一份TensorFlow入门极简教程

2298
来自专栏机器学习算法工程师

深入理解TensorFlow中的tf.metrics算子

本文翻译自Avoiding headaches with tf.metrics,原作者保留版权。

2812
来自专栏Python攻城狮

Python数据科学(六)- 资料清理(Ⅰ)1.Pandas1.资料筛选2.侦测遗失值3.补齐遗失值

成功爬取到我们所需要的数据以后,接下来应该做的是对资料进行清理和转换, 很多人遇到这种情况最自然地反应就是“写个脚本”,当然这也算是一个很好的解决方法,但是,p...

1233
来自专栏人人都是极客

【免费教学】Tensorflow Lite极简入门

边缘计算时代离我们越来越近,当前嵌入式设备的智能框架还是 TensorFlow Lite比较成熟,这里我准备用一系列免费课程和大家一起讨论下 TensorFlo...

2222
来自专栏CreateAMind

神经网络图灵机(Neural Turing Machines, NTM)论文完整翻译

Alex Graves gravesa@google.com Greg Wayne gregwayne@google.com Ivo Danihelka dan...

942
来自专栏算法修养

文本分类学习 (十)构造机器学习Libsvm 的C# wrapper(调用c/c++动态链接库)

前言: 对于SVM的了解,看前辈写的博客加上读论文对于SVM的皮毛知识总算有点了解,比如线性分类器,和求凸二次规划中用到的高等数学知识。然而SVM最核心的地方应...

852
来自专栏数说戏聊

Tableau基础知识1.文件与数据1.1 Tableau文件类型2.制表3.绘图

1152
来自专栏逍遥剑客的游戏开发

Nebula3中的模型

1337
来自专栏人工智能LeadAI

机器学习实战 | 第一章:sklearn常用工具介绍

写在前面: 花了大力气学了很多的理论,也用Python实现了其中大部分的算法.接下来开始就进入实战阶段了. 实战阶段有三个重点: 1.选择合适的机器学习框...

28810

扫码关注云+社区