【数据集】——Supervisely 人像分割数据集格式转换

在这里插入图片描述

  • 数据集由5711张图片组成,有6884个高质量的标注的人体实例。

  • 下面的所有步骤在Supervisely内部完成的,没有任何编码。

  • 更重要的是,这些步骤是被我内部的注释器执行的,没有任何机器学习专业知识。数据科学家仅仅只是控制和管理这过程。

  • 注释组由两名成员组成并且这整个过程只花了4天。

这是一个高质量的人体分割数据集

1. 下载

下载地址:https://cloud.enterprise.deepsystems.io/s/NxqWAtEyCkCaCMY
百度网盘下载(需要的留下邮箱我转发)

2. 人体分割格式转换

前面有介绍过语义分割的数据标注格式。
【语义分割】——ade20k数据集简介、实践
【语义分割】——标注工具测试/对比

Supervisely 人像分割数据集是用json文件保存的每个标注信息。这里需要将其转换成uint8的灰度图片。参考的https://blog.csdn.net/SimleCat/article/details/107022348

2.1 安装supervisely_lib

  • supervisely_lib 项目地址:https://github.com/supervisely/supervisely
  • 安装
git clone https://github.com/supervisely/supervisely.git && \
pip install -e ./supervisely

2.2 转换成uint8灰度图

  • 这里做分割只有2个类别,0:背景,1:person
  • ann_render容器也是单通道的numpy矩阵
import os
import numpy as np
import cv2
import tqdm
import supervisely_lib as sly
from matplotlib import pyplot as plt
 
 
def genMask(dataset_root_dir="./Supervisely Person Dataset/imgs",
            output_dir="./Supervisely Person Dataset/labels",
            label_color=[1]):
    ''' 生成Mask
        dataset_root_dir: 数据集根目录
        output_dir: 生成mask的保存目录
        label_color: mask 标注的颜色[R, G, B]
    '''
    project = sly.Project(dataset_root_dir, sly.OpenMode.READ)
 
    # 打印数据集信息
    print(f"Project name     : {project.name}")
    print(f"Project directory: {project.directory}")
    print(f"Total images     : {project.total_items}")
    print(f"Dataset names    : {project.datasets.keys()}")
    print()
    print(project.meta)
 
    pbar = tqdm.tqdm(total=project.total_items)
    for dataset in project:
        for item_name in dataset:
            # 更新进度条
            pbar.update(1)
            # 获取原始图像和标注文件路径
            item_paths = dataset.get_item_paths(item_name)
            # 加载注释文件
            ann = sly.Annotation.load_json_file(item_paths.ann_path, project.meta)
            # 创建一个用于渲染标注的3通道黑色画布,
            # ann_render = np.zeros(ann.img_size + (3,), dtype=np.uint8)
            ann_render = np.zeros(ann.img_size, dtype=np.uint8)
            # 渲染所有的标注(该数据集只有人)
            ann.draw(ann_render, color=label_color)
            # ann_render shape: (h, w, c), pixel: (R, G, B)
            # RGB -> BGR,用于Opencv
            # ann_render = ann_render[..., ::-1]
            # mask 保存目录不存在,则创建
            save_dir = os.path.join(output_dir, dataset.name)
            if not os.path.exists(save_dir):
                os.makedirs(save_dir)
            # 保存mask
            mask_path = os.path.join(save_dir, item_name)
            cv2.imwrite(mask_path, ann_render)
    pbar.close()
 
 
if __name__ == '__main__':
    import fire
    fire.Fire(genMask, name='gen_mask')
    '''
    Usage:
    # 1. 使用默认配置
    python code/gen_mask.py
    # 2. 指定数据库目录和mask输出目录
    python gen_mask.py --dataset_root_dir ../person --output_dir ../person_mask
    '''

问题:

  • 转换完成之后的label图片,png后缀的没有问题,但是jpeg图片中有值为2的点,可以将其赋为0进行简单处理 img[img>1] = 0
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 87
    评论
评论 87
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值