-
数据集由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