数据集解压后,目录结构:
├── ds#
│ ├── ann
│ └── img
└── meta.json
注:"#" 取[1, 13]。
数据集的下载方法,请参考:Supervisely 人像分割数据集
如果只是想知道如何读取数据库,如何得到mask,请参考:Supervisely 人像分割数据集格式转换
文件和目录描述:
- ann: 包含图像标注信息的目录,每张图像对应一个标注文件。
- img: 包含图像的目录。
- meta.json: 项目的有关信息,包含预定义的类和标签。
supervisely 中以 Project 为单位,每个 Project 中有若干 dataset。
supervisely 详细格式信息参考:https://docs.supervise.ly/data-organization/import-export/supervisely-format
项目信息 meta.json
{
"classes": [
{
"title": "person_poly",
"shape": "polygon",
"color": "#18FF00",
"geometry_config": {}
},
{
"title": "person_bmp",
"shape": "bitmap",
"color": "#FF0099",
"geometry_config": {}
},
{
"title": "neutral",
"shape": "polygon",
"color": "#D2210A",
"geometry_config": {}
}
],
"tags": [
{
"name": "not-marked-people",
"value_type": "none",
"color": "#DF1189"
},
{
"name": "multipart-person",
"value_type": "none",
"color": "#131EEC"
}
]
}
字段描述:
- tags: 字符串列表,可以分配给图像或物体的所有可能的标签
- classes: 对象列表,所有可能的对象类。每个对象有以下字段:
- title: 字符串,类的唯一标识符
- shape: 字符串, ["bitmap", "polygon", "rectangle", "line", "point"] 中的一个
- color: 字符串,hex颜色值
shape 标注示例:
标注信息
对于每个图像,都有一个带有注释的json文件。
{
"description": "boy",
"name": "brothers-family-siblings-boys-50692",
"tags": [],
"size": {
"height": 800,
"width": 1200
},
"objects": […]
}
字段描述:
- description: 可选,用于存储想要分配给图像的文本。例如,如果要构建一个图像字幕系统,它就非常有用。
- name: 可选,图像的basename(没有后缀名的文件名)。
- size: 图像尺寸。大多数情况下,它是用来获得图像尺寸而不实际读取图像,以加快一些数据处理。
- tags: 字符串列表,图像标签。
- objects: 对象列表,其格式将在下面描述。
对象列表的元素
对象列表的元素用于描述一个对象,对象的几何形状类型有:
- bitmap: 位图
- polygon: 多边形
- rectangle: 矩形
- line: 线段
- point: 点
- cuboids: 立方体
Bitmap
{
"description": "",
"geometryType": "bitmap",
"labelerLogin": "supervisely",
"tags": [],
"classTitle": "person_bmp",
"bitmap": {
"data": "…",
"origin": [
93,
309
]
}
}
字段描述:
- description: 字符串,对象的描述
- geometryType: 可选,几何形状,在 classTitle字段中有描述
- labelerLogin: 可选,标注人
- tags: 字符串列表,对象标签
- classTitle: 字符串,类的名称,它用于标识来自 meta.json 文件的类形状
- bitmap: 包含两个字段:
- origin: 位图左上角坐标(x, y),即位图在图像中的位置
- data: 字符串,字符串编码表示的位图
你可以使用下面的方法将 bitmap data 数据转换成 numpy
def base64_2_mask(s):
z = zlib.decompress(base64.b64decode(s))
n = np.fromstring(z, np.uint8)
mask = cv2.imdecode(n, cv2.IMREAD_UNCHANGED)[:, :, 3].astype(bool)
return mask
Polygon
{
"description": "",
"geometryType": "polygon",
"labelerLogin": "supervisely",
"tags": [],
"classTitle": "person_poly",
"points": {
"exterior": [
[
1293,
1026
],
[
1294,
1029
],
…,
[
1293,
1026
]
],
"interior": []
}
}
字段描述:
- description: 字符串,对象的描述
- geometryType: 可选,几何形状,在 classTitle字段中有描述
- labelerLogin: 可选,标注人
- tags: 字符串列表,对象标签
- classTitle: 字符串,类的名称,它用于标识来自 meta.json 文件的类形状
- points: 有两个字段:
- exterior: 点(x和y坐标)列表,例如:[[x1, y1], [x2, y2], [x3, y3], [x4, y4], ...]。物体的轮廓有这些点定义。
- inter: 与 exterior 字段相同结构的元素列表。这是定义对象孔的多边形列表。如:铜钱中心的孔洞。