내보내기 결과 서식
프로젝트에서 라벨들을 내보내면 zip 파일로 다운로드할 수 있습니다. 이 페이지에서는 내보내기 결과물이 어떠한 서식 및 구조로 제공되는지 알 수 있습니다.

Image Project

폴더 디렉토리

1
├── project.json
2
3
├── labels/
4
│ ├── {label-id}.json
5
│ └── ...
6
7
└── meta/
8
├── {dataset-name}/{data-key}.json
9
└── ...
Copied!

프로젝트 세팅

  • project.json
1
// Additional auxiliary key, values could be added for different functionalities.
2
// Informations below will contain sufficient informations for utilizing annotations.
3
{
4
// name and version for Image apps (normally you don't have to care about type or versions)
5
"type": "image-siesta",
6
"version": string, // follows semantic versioning
7
8
// data type is image
9
"data_type": "image",
10
11
// categorization settings
12
"categorization": {
13
"properties": [
14
{
15
"id": string, // most IDs are uuid by default
16
"name": string, // property name
17
"type": "radio" | "checkbox" | "free response", // property type
18
"options": [ // options for property
19
{
20
"id": string,
21
"name": string, // option name
22
"children" (optional): same as options // recursive structure for tree-like categories
23
},
24
...
25
]
26
},
27
...
28
]
29
},
30
"object_detection": {
31
"annotation_types": string[], // list of annotation types in this project
32
"object_classes": [
33
{
34
"id": string,
35
"name": string,
36
"color": string,
37
"annotation_type": string,
38
"properties": [
39
{
40
// same as properties in categorization
41
// Consider this as categorization for each objects
42
},
43
...
44
]
45
},
46
...
47
],
48
"object_groups": [
49
{
50
"id": string,
51
"name": string,
52
"object_class_ids": string[] // ID of classes
53
},
54
...
55
],
56
// Definition for keypoint detections
57
"keypoints": [
58
{
59
"id": string,
60
"name": string,
61
"edges": [
62
{
63
// index of points
64
"u": number,
65
"v": number,
66
"color": string
67
},
68
...
69
],
70
"points": [
71
{
72
"name": string,
73
"color": string, // hex string
74
"default_value": {
75
"x": number, // 0 ~ 1
76
"y": number, // 0 ~ 1
77
"state": {
78
"visible": boolean
79
}
80
},
81
"symmetric_idx" (optional): number // matching index for symmetric swap
82
},
83
...
84
],
85
// Suite has 3 states for keypoints
86
// (valid, visible), (valid, invisible), (invalid, invisible)
87
// value below can prevent invisible but valid (labeled with guess) points
88
"allow_valid_invisibles": boolean
89
}
90
]
91
}
92
}
Copied!

어노테이션

1
{
2
"categories": {
3
"properties": [
4
{
5
"type": string,
6
"property_id": string,
7
"property_name": string,
8
9
// for free response
10
"value": string,
11
12
// for multiple choice
13
"option_id": string,
14
"option_name": string,
15
16
// for multiple selection
17
"option_ids": string,
18
"option_names": string
19
},
20
...
21
]
22
},
23
"objects": [
24
{
25
"id": string,
26
"class_id": string,
27
"class_name": string,
28
"annotation_type": string,
29
"annotation": {
30
// for bounding boxes
31
"coord": {
32
"x": number,
33
"y": number,
34
"width": number,
35
"height": number
36
},
37
38
// for polygons
39
"multiple": true,
40
"""
41
This indicates multi-polygon
42
For multi-polygon coordinate structure
43
Please refer to MultiPolygon section in
44
https://en.wikipedia.org/wiki/GeoJSON#Geometries
45
For more info please check
46
https://github.com/Superb-AI-Suite/spb-example/tree/main/convert-suite-exports
47
"""
48
"coord": {
49
"points": [
50
[
51
[
52
{
53
"x": number,
54
"y": number
55
},
56
...
57
],
58
...
59
],
60
...
61
]
62
},
63
64
// for deprecated single-polygons
65
"coord": {
66
"points": [
67
{
68
"x": number,
69
"y": number
70
},
71
...
72
]
73
},
74
75
// for keypoints
76
"coord": {
77
"points": [
78
{
79
"x": number,
80
"y": number,
81
"state": {
82
"visible": boolean,
83
"valid": boolean
84
}
85
},
86
...
87
]
88
}
89
},
90
"properties": [
91
// same as categories, properties below
92
]
93
},
94
...
95
]
96
}
Copied!

기타 라벨 정보

1
{
2
"data_key": string,
3
"dataset": string,
4
"label_id": string,
5
"label_path": string[],
6
"last_updated_date": datetime,
7
"tags": string[],
8
"work_assignee": string,
9
"status": "WORKING" | "SUBMITTED" | "SKIPPED"
10
}
Copied!

Image (Deprecated) Project

폴더 디렉토리

다운로드한 zip 파일을 압축 해제하면, 다음의 구조와 비슷한 파일 및 디렉토리를 볼 수 있습니다.
1
├── project.json
2
3
├── labels/
4
│ ├── {label-id}.json
5
│ └── ...
6
7
├── meta/
8
│ ├── {dataset-name}/{data-key}.json
9
│ └── ...
10
11
└── masks/ // (optional)
12
├── classId/
13
│ ├── {class-group}
14
│ │ ├── {label-id}.png
15
│ │ └── ...
16
│ │
17
│ └── ...
18
19
└── instanceId/
Copied!

프로젝트 세팅

project.json 파일은 현재 프로젝트 구성(project configuration)에 대한 정보가 포함되어 있습니다. 이것은 프로젝트를 만들 때 입력한 정보를 그대로 담고 있습니다. (관련 매뉴얼 : 새 프로젝트 생성하기)
Project JSON file structure
1
// filename: project.json
2
{
3
"groups": [ // Class Groups
4
{
5
"name": string, // Name of group
6
"info": {
7
"classes": string[] // Name of object classes in this group
8
}
9
}
10
],
11
"objects": [ // Annotation objects
12
{
13
"class_name": string, // Name of object class
14
"class_id": number, // ID of object class
15
"info": {
16
"min": number, // Min/max number of this object class per image
17
"max": number, // (0 means no limit)
18
"shapes": {
19
{shape-type}: { // "box", "polygon", "polyline", "keypoint", etc.
20
"default_value": {
21
"color" : string // Color used to visualize this object class
22
}
23
}
24
},
25
"properties": [
26
{
27
"name": string, // Name of property
28
"type": string, // "objective": Multiple Choice/Selection, "string": Free Response
29
"value": string or string[], // Selected value in Multiple Choice/Selection or text result of Free Response
30
"nullable": boolean, // Whether this property is a required annotation
31
"duplicated": boolean, // False for Multiple Choice type, true for Multiple Selection type
32
"default_value": {
33
"value": string[] // Default response for Multiple Choice/Selection
34
}
35
}
36
]
37
}
38
}
39
],
40
"keypoint_interface": [ // This presents only when keypoint annotation type exists
41
{
42
"id": string, // ID of keypoint
43
"name": string, // Name of keypoint
44
"nodes": [
45
{
46
"v": number, // Visibility value
47
"x": number, // Default relative coordinate x
48
"y": number, // Default relative coordinate y
49
"name": string, // Name of point
50
"color": string, // Color of point
51
"opposite": number // Index of symmetric point
52
}
53
],
54
"edges": [
55
{
56
"to": number, // Index of point
57
"from": number, // Index of other point
58
"color": string // Color of edge
59
}
60
],
61
"point_visibility": [
62
// There are two options to represent keypoint visibility, 2-state and 3-state.
63
// 2-state type
64
{
65
"name": "not labeled",
66
"value": 0 // Visibility value
67
},
68
{
69
"name": "labeled and visible",
70
"value": 1
71
},
72
// or 3-state type
73
{
74
"name": "not labeled",
75
"value": 0
76
},
77
{
78
"name": "labeled but not visible",
79
"value": 1
80
},
81
{
82
"name": "labeled and visible",
83
"value": 2
84
}
85
]
86
}
87
]
88
}
Copied!

어노테이션

/labels 디렉토리에 해당 라벨의 ID 값과 동일한 이름의 JSON 파일이 있습니다. 각 JSON 파일은 각 라벨에 대한 어노테이션 정보를 포함합니다.
Annotation JSON file structure
1
// filename: {label-id}.json
2
{
3
"result": {
4
"objects": [ // Array of annotations
5
{
6
"id": number, // ID of annotation
7
"class": string, // Class name
8
"shape": {
9
// Each object will be in one of the several shape types.
10
// Type 1: bounding box
11
"box": { // x, y, width, height of bounding box
12
"x": number,
13
"y": number,
14
"width": number,
15
"height": number
16
},
17
// Type 2: polygon
18
"polygon": [ // Array of points in polygon
19
{
20
"x": number,
21
"y": number
22
}
23
],
24
// Type 3: polyline
25
"polyline": [ // Array of points in polyline
26
{
27
"x": number,
28
"y": number
29
}
30
],
31
// Type 4: keypoint
32
"keypoint": [ // Array of points in keypoint
33
{
34
"v": number, // Visibility, see project.json for details
35
"x": number,
36
"y": number
37
}
38
]
39
},
40
"properties" : [ // Array of properties
41
{
42
"name" : string, // Property name
43
"value" : string or string[] // Result value of propery
44
}
45
]
46
}
47
]
48
}
49
}
Copied!

기타 라벨 정보

/meta 디렉토리에 라벨의 데이터셋 및 데이터 키(data key)와 동일한 이름의 JSON 파일들이 있습니다.
Meta JSON File Structure
1
// filename: {dataset-name}/{data-key}.json
2
{
3
"label_id": string, // ID of corresponding label
4
"label_path": string, // relative path to label JSON
5
"dataset": string, // Name of dataset
6
"data_key": string, // data key (default to file path when uploaded)
7
"last_updated_date": datetime, // Last update time for label
8
"image_info": {
9
"width": number, // Width of image
10
"height": number // Height of image
11
},
12
"masks": {
13
// (Optional) Only when mask images are generated
14
}
15
}
Copied!

마스크 이미지

'Image' 프로젝트에서는 마스크 이미지 Export 결과에 포함되지 않습니다. Suite에서 제공하는 코드를 활용해 마스크 이미지를 생성하세요. Convert exported "polygon segmentation" JSON files to "bitmap mask" images
/masks 디렉토리에는 각 라벨의 비트맵 마스크 이미지가 있습니다. 해당 디렉토리 안에는 2개의 서브디렉토리가 존재합니다.
  1. 1.
    /classId: Object Class 레퍼런스 ID 값에 부합하는 마스크 이미지의 픽셀 값을 보여줌
  2. 2.
    /instanceId: Object Instance 레퍼런스 ID 값에 부합하는 마스크 이미지의 픽셀 값을 보여줌
다음 이미지는 실제 예시입니다.
Visual Annotation이 있는 원본 이미지
Class Id 픽셀 값을 사용한 비트맵 마스크 이미지 (Semantic Segmentation)
Instance Id 픽셀 값을 사용한 비트맵 마스크 이미지 (Instance Segmentation)

Video Project

폴더 디렉토리

1
├── project.json
2
3
├── labels/
4
│ ├── {label-id}.json
5
│ └── ...
6
7
└── meta/
8
├── {dataset-name}/{data-key}.json
9
└── ...
Copied!

프로젝트 세팅

  • project.json
1
// Additional auxiliary key, values could be added for different functionalities.
2
// Informations below will contain sufficient informations for utilizing annotations.
3
{
4
// name and version for Video apps (normally you don't have to care about type or versions)
5
"type": "video-siesta",
6
"version": string, // follows semantic versioning
7
8
// We consider video as image sequence
9
"data_type": "image sequence",
10
11
// categorization settings
12
"categorization": {
13
"properties": [
14
{
15
"id": string, // most IDs are uuid by default
16
"name": string, // property name
17
"type": "radio" | "checkbox" | "free response", // property type
18
"options": [ // options for property
19
{
20
"id": string,
21
"name": string, // option name
22
"children" (optional): same as options // recursive structure for tree-like categories
23
},
24
...
25
],
26
"per_frame": boolean // if true, categorize frame by frame
27
},
28
...
29
]
30
},
31
"object_tracking": {
32
"annotation_types": string[],
33
"object_classes": [
34
{
35
"id": string,
36
"name": string,
37
"color": string,
38
"annotation_type": string,
39
"properties": [
40
{
41
// same as properties in categorization
42
// Consider this as categorization for each objects
43
},
44
...
45
]
46
},
47
...
48
],
49
"object_groups": [
50
{
51
"id": string,
52
"name": string,
53
"object_class_ids": string[] // ID of classes
54
},
55
...
56
],
57
"keypoints": [
58
// Exactly same as image keypoint settings
59
...
60
],
61
}
62
}
Copied!

어노테이션

1
{
2
"categories": {
3
"properties": [
4
{
5
"type": string,
6
"property_id": string,
7
"property_name": string,
8
9
// for free response
10
"value": string,
11
12
// for multiple choice
13
"option_id": string,
14
"option_name": string,
15
16
// for multiple selection
17
"option_ids": string,
18
"option_names": string
19
},
20
...
21
],
22
"frames": [
23
{
24
"num": number, // zero-based frame index
25
"properties": [
26
// same as properties above
27
]
28
},
29
...
30
]
31
},
32
"objects": [
33
{
34
"id": string,
35
"tracking_id": number, // unique per each objects through the video
36
"class_id": string,
37
"class_name": string,
38
"annotation_type": string,
39
"properties": [
40
// same as categories, properties below
41
// properties with "per_frame": false comes here
42
],
43
"frames": [
44
{
45
"num": number, // zero-based frame index
46
"annotation": {
47
// for bounding boxes
48
"coord": {
49
"x": number,
50
"y": number,
51
"width": number,
52
"height": number
53
},
54
55
// for polygons
56
"coord": {
57
"points": [
58
{
59
"x": number,
60
"y": number
61
},
62
...
63
]
64
},
65
66
// for keypoints
67
"coord": {
68
"points": [
69
{
70
"x": number,
71
"y": number,
72
"state": {
73
"visible": boolean,
74
"valid": boolean
75
}
76
},
77
...
78
]
79
}
80
},
81
"properties": [
82
// same as categories, properties below
83
// properties with "per_frame": true comes here
84
]
85
},
86
...
87
]
88
},
89
...
90
]
91
}
Copied!

기타 라벨 정보

1
{
2
"data_key": string,
3
"dataset": string,
4
"label_id": string,
5
"label_path": string[],
6
"last_updated_date": datetime,
7
"tags": string[],
8
"work_assignee": string,
9
"status": "WORKING" | "SUBMITTED" | "SKIPPED",
10
"frames": string[] // file name for each frames
11
}
Copied!
다른 질문이 있으신가요? [email protected] 으로 문의주세요.