Labelbox 연동#
Ultralytics Platform은 Labelbox NDJSON 내보내기 파일을 직접 읽습니다. 입력할 키도, 유지해야 할 연결도, 관리할 변환 스크립트도 없습니다. Labelbox에서 내보내고 파일을 업로드하면 레이블이 일반 Platform 데이터셋으로 정상적으로 들어옵니다.
Labelbox에서 가져오기#
- Labelbox에서 내보내기. 가져오려는 라벨링 프로젝트 또는 카탈로그를 열고 Data Rows 탭으로 이동합니다. All을 선택하고 Export data를 클릭한 후 포함할 필드를 선택하고 확인합니다. 프로젝트가 아니라 카탈로그에서 내보내시나요? Export labels from project를 활성화하고 프로젝트를 선택하세요. 그렇지 않으면 주석이 전혀 없는 파일이 생성됩니다.
- 파일 다운로드. Labelbox는 백그라운드 작업으로 내보내기를 실행합니다. 알림(Notifications)에서 완료되기를 기다린 후 완료되면 Download를 클릭하여
.ndjson파일을 저장합니다. - Platform에 업로드. 새 데이터셋을 만들고
.ndjson파일을 업로드하거나 파일에 대한 직접 링크를 붙여넣습니다. Settings > Integrations > Labelbox에서 시작할 수도 있습니다. - 학습. 처리가 완료되면 다른 Platform 데이터셋과 정확히 동일한 방식으로 주석을 편집하고 학습을 진행합니다.

CVAT 및 Label Studio와 달리 선택해야 하는 포맷이 없으며, Labelbox 자체의 내보내기 형식이 지원됩니다.
SDK를 사용하여 내보내기#
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)을 사용하세요.
가져오는 항목#
Platform은 Labelbox 형식을 자체적으로 인식하고 바운딩 박스와 폴리곤을 해당하는 YOLO 작업 유형으로 매핑합니다:
각 객체의 name은(는) 클래스 이름이 됩니다. 따라서 "name": "Dog" 주석은 소문자인 value이 아니라 Dog 클래스로 가져와지며, 픽셀 좌표는 내보내기 파일의 media_attributes 크기를 기준으로 정규화됩니다. 각 이미지는 내보내기에 외부 ID가 없는 경우 서명된 URL의 파일 이름으로 대체되는 data_row.external_id의 이름을 따서 명명됩니다. 주석이 없는 카탈로그 내보내기는 Platform의 주석 편집기에서 레이블을 지정할 준비가 된 레이블이 지정되지 않은 이미지 데이터셋으로 가져와집니다.
단일 데이터 행은 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은 무시됩니다. 임베딩은 내보낼 때 선택 해제하는 것이 좋습니다. 샘플 내보내기의 경우 Platform이 실제로 읽는 필드는 5분의 1에 불과한 반면 임베딩은 파일의 약 5분의 4를 차지했기 때문입니다.
현재는 바운딩 박스와 폴리곤만 객체 어노테이션에서 읽어오며, 이미지 수준의 분류는 내보내기의 다른 위치에 있으므로 건너뜁니다. 분할 마스크(브러시) 도구, 포인트, 폴리라인 또는 분류로만 전체가 레이블링된 프로젝트는 이미지는 가져오지만 어노테이션은 가져오지 않으며 오류도 발생하지 않습니다. 데이터셋 페이지에서 이를 확인할 수 있습니다. 레이블이 유지된 가져온 데이터셋에는 이미지 개수 옆에 레이블 및 어노테이션 개수가 표시되지만, 레이블을 잃은 데이터셋에는 둘 다 표시되지 않습니다.
Labelbox 내보내기는 픽셀을 내장하는 대신 서명된 URL로 각 이미지를 참조하며, 해당 서명은 만료됩니다. Platform은 시작하기 전에 샘플을 프로브하며 해당 URL에서 이미지를 다운로드하므로, 모든 링크가 만료된 내보내기는 즉시 실패하고 그 이유를 알려줍니다. Labelbox에서 다시 내보내고 새 파일을 업로드하세요. 일부만 만료된 내보내기는 여전히 도달할 수 있는 이미지만 가져오고 나머지는 건너뛰므로, 내보낸 직후에 업로드하세요.
바운딩 박스와 폴리곤이 모두 포함된 내보내기는 세그먼트 데이터셋으로 가져와지며, 세그먼트 데이터셋에는 폴리곤 지오메트리만 포함되므로 박스 어노테이션은 훈련에 사용되지 않거나 버전 내보내기에 포함되지 않습니다. 둘 다 필요한 경우 박스와 폴리곤을 별도의 Labelbox 프로젝트로 내보내세요. 또한 폴리곤을 읽으려면 최소 세 개의 점이 필요합니다.