cocoapi的 rle 解码使用

cocoapi 是目前mask数据记录的一个比较好的解决方案, 网上有很多相关的使用资料.如COCO数据集介绍, 这里感谢大家的贡献.

cocoapi 数据本身是一组json描述结构, cocoapi 项目是解析和生成json数据结构, json有个不能嵌套的弊端, 所以一个json文件往往比较大.

cocoapi核心部分是rle数据的压缩, 我本地尝试了一张图片, 如果保存png格式, 数据大小在1.4M左右, 如果使用rle格式保存存储数据只有82.7K, 相对压缩了17倍, 对于传输和存储非常友好, 很多项目直接使用的 rle 数据结构, 而不是 cocoapi 的完整协议.

比如我这里参考的 SA-1B(segment-anything) 数据结构.SA-1B(segment-anything)/An_...Y0/sa_10001.json

{
    "image": {
        "image_id": 10001,
        "width": 2250,
        "height": 1500,
        "file_name": "sa_10001.jpg"
    },
    "annotations": [
        {
            "bbox": [
                957.0,
                514.0,
                75.0,
                91.0
            ],
            "area": 5437,
            "segmentation": {
                "size": [
                    1500,
                    2250
                ],
                "counts": "]]j[1<\\^17J5K5L3K6J6@?F:K5L3O2N1O2M2O1O100O00100O100O10O10O1000O10O1000O100000000O1000001O0O101O000O2O001O1N101O1O0O2O1O1O1O1N2O1O1O2M2O2N1O2N2N2M4M2N3L5K6I8D^Ufg1"
            },
            "predicted_iou": 0.9770874977111816,
            "point_coords": [
                [
                    1018.0625,
                    559.0625
                ]
            ],
            "crop_box": [
                499.0,
                311.0,
                755.0,
                567.0
            ],
            "id": 857953971,
            "stability_score": 0.985213577747345
        },
        {
            "bbox": [
                1373.0,
                575.0,
                83.0,
                75.0
            ],
            "area": 3007,
            "segmentation": {
                "size": [
                    1500,
                    2250
                ],
                "counts": "_ikn1=]^14N2M2O2N1N3N1O1O1O101N1O101N1O2O0O100O2O001O00001O001O1O001O001O10O0100O100O01N101N001O000000000O10001O00000000001O0O2O1O1O1O1O001O001O001O001O2N3M2M2O2N1O1O2N2M3N4IooXT1"
            },
            "predicted_iou": 0.9649069309234619,
            "point_coords": [
                [
                    1422.6875,
                    629.9375
                ]
            ],
            "crop_box": [
                998.0,
                311.0,
                755.0,
                567.0
            ],
            "id": 857953972,
            "stability_score": 0.9847984313964844
        },
...

其中 segmentation 数据结构就是 rle结构的.

from pycocotools import mask as maskUtils
import matplotlib.pyplot as plt
import json

# 下载和读取上面的 json数据文件到 mask_info 中, 下面代码进行rle数据解码
mask_a = maskUtils.decode(mask_info['annotations']['segmentation'])

# 展示
plt.figure('image')
plt.imshow(mask_a)
plt.show()

主要是一个处理记录, 希望对大家有帮助, 欢迎评论区讨论.

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值