Link to this sectionLabelbox 연동#
Ultralytics Platform은 Labelbox NDJSON 내보내기 파일을 직접 읽습니다. 입력해야 할 키나 유지해야 할 연결, 유지보수해야 할 변환 스크립트가 없습니다. Labelbox에서 내보내고, 파일을 업로드하면 레이블이 일반 Platform 데이터셋으로 바로 등록됩니다.
Link to this sectionLabelbox에서 가져오기#
- Labelbox에서 내보내기합니다. 가져올 레이블링 프로젝트 또는 카탈로그를 연 후 Data Rows 탭으로 이동합니다. All을 선택하고, Export data를 클릭한 다음, 포함할 필드를 선택하고 확인합니다. 프로젝트가 아니라 카탈로그에서 내보내시나요? Export labels from project를 활성화하고 프로젝트를 선택하세요. 그렇지 않으면 어노테이션이 전혀 없는 파일이 생성됩니다.
- 파일을 다운로드합니다. Labelbox는 백그라운드 작업으로 내보내기를 실행합니다. 알림(Notifications)에서 완료 여부를 확인하고, 작업이 끝나면 Download를 클릭하여
.ndjson파일을 저장합니다. - Platform에 업로드합니다. 새 데이터셋을 생성하고
.ndjson파일을 업로드하거나 파일에 대한 직접 링크를 붙여넣습니다. Settings > Integrations > Labelbox에서 시작할 수도 있습니다. - 훈련합니다. 처리가 완료되면 다른 Platform 데이터셋과 정확히 동일한 방식으로 어노테이션을 편집하고 훈련합니다.
CVAT 및 Label Studio와 달리 선택해야 할 형식이 없습니다. Labelbox 자체의 내보내기 형식이 그대로 지원됩니다.
Link to this sectionSDK를 사용하여 내보내기#
Labelbox는 반복 가능한 파이프라인을 구축하는 데 더 쉬운 방법인 Python SDK 내보내기 작업도 제공합니다. 작업을 스트리밍하고 줄당 하나의 JSON 객체를 작성합니다:
import json
import labelbox
client = labelbox.Client(api_key="YOUR_LABELBOX_API_KEY")
export_task = labelbox.ExportTask.get_task(client, "YOUR_EXPORT_TASK_ID")
export_task.wait_till_done() # streaming a task that isn't COMPLETE raises
with open("dataset.ndjson", "w") as f:
f.writelines(json.dumps(data_row.json) + "\n" for data_row in export_task.get_buffered_stream())NDJSON은 줄당 하나의 JSON 객체입니다. json.dump(list_of_rows, f)는 대신 단일 배열을 작성하며, Platform은 JSON 객체가 아닌 모든 라인을 건너뛰므로 가져오기 시 데이터 행을 전혀 찾지 못합니다. 위의 루프를 사용하거나 "\n".join(json.dumps(r) for r in rows)를 사용하세요.
Link to this section가져오는 항목#
Platform은 Labelbox 형식을 자체적으로 인식하고 바운딩 박스와 폴리곤을 일치하는 YOLO 태스크 유형에 매핑합니다:
Each object's name becomes the class name — so a "name": "Dog" annotation imports as the class Dog, not its lowercase value — and pixel coordinates are normalized against the media_attributes dimensions in the export. A catalog export with no annotations imports as an unlabeled image dataset, ready to label in Platform's annotation editor.
단일 데이터 행은 Platform이 읽는 필드만 남기고 정리했을 때 다음과 같습니다:
{
"data_row": {
"external_id": "000000000307.jpg",
"row_data": "https://storage.labelbox.com/...?Expires=...&Signature=..."
},
"media_attributes": { "height": 480, "width": 640, "mime_type": "image/jpeg" },
"projects": {
"<project-id>": {
"labels": [
{
"annotations": {
"objects": [
{
"name": "Dog",
"annotation_kind": "ImageBoundingBox",
"bounding_box": { "top": 200.0, "left": 407.0, "height": 172.0, "width": 176.0 }
}
]
}
}
]
}
}
}내보내기의 나머지 항목인 embeddings, metadata_fields, attachments, project_details는 무시됩니다. 내보내기 시 임베딩(embeddings)은 선택 해제하는 것이 좋습니다. 샘플 내보내기의 경우 Platform이 실제로 읽는 필드는 전체의 5분의 1에 불과한 반면, 임베딩은 파일의 약 5분의 4를 차지했습니다.
현재는 바운딩 박스와 폴리곤만 객체 어노테이션에서 읽어오며, 이미지 수준의 분류는 내보내기의 다른 위치에 있으므로 건너뜁니다. 분할 마스크(브러시) 도구, 포인트, 폴리라인 또는 분류로만 전체가 레이블링된 프로젝트는 이미지는 가져오지만 어노테이션은 가져오지 않으며 오류도 발생하지 않습니다. 데이터셋 페이지에서 이를 확인할 수 있습니다. 레이블이 유지된 가져온 데이터셋에는 이미지 개수 옆에 레이블 및 어노테이션 개수가 표시되지만, 레이블을 잃은 데이터셋에는 둘 다 표시되지 않습니다.
Labelbox 내보내기는 픽셀을 내장하는 대신 서명된 URL로 각 이미지를 참조하며, 해당 서명은 만료됩니다. Platform은 시작하기 전에 샘플을 프로브하며 해당 URL에서 이미지를 다운로드하므로, 모든 링크가 만료된 내보내기는 즉시 실패하고 그 이유를 알려줍니다. Labelbox에서 다시 내보내고 새 파일을 업로드하세요. 일부만 만료된 내보내기는 여전히 도달할 수 있는 이미지만 가져오고 나머지는 건너뛰므로, 내보낸 직후에 업로드하세요.
바운딩 박스와 폴리곤이 모두 포함된 내보내기는 세그먼트 데이터셋으로 가져와지며, 세그먼트 데이터셋에는 폴리곤 지오메트리만 포함되므로 박스 어노테이션은 훈련에 사용되지 않거나 버전 내보내기에 포함되지 않습니다. 둘 다 필요한 경우 박스와 폴리곤을 별도의 Labelbox 프로젝트로 내보내세요. 또한 폴리곤을 읽으려면 최소 세 개의 점이 필요합니다.