微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

COCO .json 文件在注释中包含奇怪的分段值,如何转换这些值?

如何解决COCO .json 文件在注释中包含奇怪的分段值,如何转换这些值?

我有一个 COCO 格式的 .json 文件,其中在注释部分包含奇怪的值。这里的大多数分段都很好,但有些包含非人类可读格式的大小和计数。

在训练我的模型时,由于奇怪的分段值,我遇到了错误。我在某处读过这些是 RLE 格式的,但我不确定。我应该能够使用位掩码而不是多边形来训练我的模型,但我更喜欢处理根本原因并将这些分段更改为正常格式。它们的类型是什么,它们是否可以转换为正常的分段格式,如果可以,我该怎么做?

{'id': 20,'image_id': 87,'category_id': 2,'segmentation': [[301,303,305,288,321,261,335,236,346,214,350,209,351,205,349,202,344,203,334,221,322,244,307,272,297,290,295,302,310,301,309]],'area': 829.5,'bBox': [295,56,108],'iscrowd': 0}
{'id': 21,'segmentation': [[292,300,278,287,270,283,260,280,249,276,240,273,234,233,268,266,274,253,259,277,265,281,284,285,299,306,291,292,304]],'area': 517.0,'bBox': [266,26,73],'iscrowd': 0}
{'id': 22,'segmentation': [[300,279,311,313,224,314,211,319,185,172,323,162,155,318,158,168,189,217,228,296,237,245,254,289,293,287]],'area': 1177.0,'bBox': [290,33,140],'iscrowd': 0}
{'id': 23,'segmentation': [[311,308,315,286,282,294,307]],'area': 235.5,'bBox': [301,14,26],'iscrowd': 0}

#Weird values
{'id': 24,'image_id': 27,'segmentation': {'size': [618,561],'counts': 'of[56Tc00O2O000001O00000OXjP5'},'area': 71,'bBox': [284,326,10,8],'iscrowd': 0}
{'id': 25,'category_id': 1,'counts': 'fga54Pc0<H4L4M2O2M3M2N2N3N1N2N101N101O00000O10000O1000000000000000000000O100O100O2N1O1O2N2N3L4M3MdRU4'},'area': 1809,'bBox': [294,46,47],'iscrowd': 0}

#normal values again
{'id': 26,'image_id': 61,'segmentation': [[285,269,262,271,256,255,257,251,267,250,258,278]],'area': 1024.0,'bBox': [250,35,41],'iscrowd': 0}
{'id': 27,'segmentation': [[167,231,175,227,180,226,188,198,215,235,239,243,252,264,216,238,194,184,171,167,233]],'area': 782.5,'bBox': [167,92,38],'iscrowd': 0}
{'id': 28,'segmentation': [[279,186,192,195,200,210,218,190]],'area': 593.0,'bBox': [255,'iscrowd': 0}
{'id': 29,'segmentation': [[264,232,230,229,241,246,254]],'area': 264.0,'bBox': [264,24,27],'iscrowd': 0}

解决方法

在这里找到您需要的一切: Interface for manipulating masks stored in RLE format

"RLE 是一种用于存储二进制掩码的简单而有效的格式。RLE 首先将一个向量(或矢量化图像)划分为一系列分段 恒定区域,然后为每个片段简单地存储该片段的长度。例如,给定 M=[0 0 1 1 1 0 1],RLE 计数将是 [2 3 1 1],或者对于 M=[1 1 1 1 1 1 0],计数将是 [0 6 1] (请注意,奇数始终是零的数量)。 不是直接存储计数,而是使用基于称为 LEB128 的常见方案的可变比特率表示来实现额外压缩。"


所以,基本上你可以将掩码注释为:

  1. 多边形标准 coco-json 格式(x,y,x,y 等),
  2. 二进制掩码(图像 png)
  3. 一种 RLE 编码格式。

这三个都是一样的,但有时您需要将它们转换为所需的格式(以防您的 DL 库不支持所有这些格式,或者为您转换它们)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?