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

标签 python json bitmask faster-rcnn coco

我有一个 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, 297, 310, 301, 309]], 'area': 829.5, 'bbox': [295, 202, 56, 108], 'iscrowd': 0}
{'id': 21, 'image_id': 87, 'category_id': 2, 'segmentation': [[292, 300, 288, 278, 287, 270, 283, 260, 280, 249, 276, 240, 273, 234, 270, 233, 268, 233, 266, 236, 268, 240, 272, 244, 274, 253, 276, 259, 277, 265, 280, 272, 281, 284, 285, 299, 288, 306, 291, 306, 292, 304]], 'area': 517.0, 'bbox': [266, 233, 26, 73], 'iscrowd': 0}
{'id': 22, 'image_id': 87, 'category_id': 2, 'segmentation': [[300, 279, 305, 249, 311, 233, 313, 224, 314, 211, 319, 185, 322, 172, 323, 162, 321, 155, 318, 158, 314, 168, 311, 189, 306, 217, 299, 228, 296, 237, 296, 245, 296, 254, 295, 260, 291, 279, 290, 289, 293, 295, 295, 293, 299, 287]], 'area': 1177.0, 'bbox': [290, 155, 33, 140], 'iscrowd': 0}
{'id': 23, 'image_id': 87, 'category_id': 2, 'segmentation': [[311, 308, 311, 299, 314, 292, 315, 286, 315, 282, 311, 282, 307, 284, 303, 294, 301, 303, 302, 308, 306, 307]], 'area': 235.5, 'bbox': [301, 282, 14, 26], 'iscrowd': 0}

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

#Normal values again
{'id': 26, 'image_id': 61, 'category_id': 1, 'segmentation': [[285, 274, 285, 269, 281, 262, 276, 259, 271, 256, 266, 255, 257, 261, 251, 267, 251, 271, 250, 280, 251, 286, 254, 292, 258, 296, 261, 296, 265, 294, 272, 291, 277, 287, 280, 283, 283, 278]], 'area': 1024.0, 'bbox': [250, 255, 35, 41], 'iscrowd': 0}
{'id': 27, 'image_id': 61, 'category_id': 2, 'segmentation': [[167, 231, 175, 227, 180, 226, 188, 226, 198, 228, 215, 235, 228, 239, 235, 243, 259, 259, 255, 261, 252, 264, 226, 249, 216, 244, 203, 238, 194, 235, 184, 234, 171, 235, 167, 233]], 'area': 782.5, 'bbox': [167, 226, 92, 38], 'iscrowd': 0}
{'id': 28, 'image_id': 61, 'category_id': 2, 'segmentation': [[279, 186, 281, 188, 281, 192, 280, 195, 278, 200, 274, 210, 271, 218, 267, 228, 266, 233, 266, 236, 265, 239, 264, 256, 261, 257, 257, 259, 255, 244, 256, 240, 256, 238, 257, 234, 259, 227, 264, 216, 267, 205, 271, 195, 274, 190]], 'area': 593.0, 'bbox': [255, 186, 26, 73], 'iscrowd': 0}
{'id': 29, 'image_id': 61, 'category_id': 2, 'segmentation': [[264, 245, 267, 239, 269, 236, 276, 232, 280, 230, 285, 227, 287, 227, 288, 229, 287, 232, 284, 234, 282, 237, 280, 239, 276, 241, 274, 246, 271, 254, 269, 254, 266, 254, 264, 254]], 'area': 264.0, 'bbox': [264, 227, 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,x,y 等),
  2. 二进制掩码(图像 png)
  3. RLE 编码格式。

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

关于python - COCO .json 文件的注释中包含奇怪的分段值,如何转换这些值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66802216/

相关文章:

javascript - 如何从 JSON 数据获取要填充的表行?

javascript - 位掩码和 javascript 的问题

java - java中的BitMask操作

python - 这些使用 Python C API 的 C/C++ 行有什么作用?

mysql - Highcharts Mysql Json 数组 PHP

C# 按类型解析 JSON 组

sql - 从位掩码确定一周中的几天

python - 在导入 Django 之前将值更改为小写

python - 使用观察值和期望值运行卡方检验并获得置信区间

python - 在 ubuntu 16.04 中安装 pyodbc 和 pymssql 时遇到障碍