Labelbox 통합#
Ultralytics Platform은 Labelbox NDJSON 내보내기를 직접 읽습니다. 붙여 넣을 키도, 유지해야 하는 연결도, 관리해야 하는 변환 스크립트도 없습니다. Labelbox에서 내보내고 파일을 업로드하면 레이블이 일반 Platform 데이터셋으로 가져와집니다.
Labelbox에서 가져오기#
- Labelbox에서 내보냅니다. 레이블링 프로젝트의 Data Rows 탭을 열고 All을 선택한 다음 Export data를 클릭합니다. 포함할 필드를 선택하고 확인합니다. Catalog에서 데이터 행을 선택하고 Manage selection > 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() # COMPLETE 상태가 아닌 작업을 스트리밍하면 예외가 발생합니다
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 크기를 기준으로 정규화되므로 내보내기에 미디어 속성을 포함해야 합니다. 너비와 높이가 없는 행은 이미지가 주석 없이 가져와집니다. Platform에서 가져올 수 있는 객체만 클래스로 등록되므로 마스크, 점, 폴리라인 도구는 데이터셋에 빈 클래스를 추가하지 않습니다. 각 이미지의 이름은 data_row.external_id를 사용하고, 해당 값이 없으면 global_key을 사용합니다. 내보내기에 둘 다 없으면 서명된 URL의 파일 이름을 사용합니다. 이미지 데이터 행은 가져오지만 동영상, 텍스트 및 기타 비이미지 데이터 행은 건너뜁니다. 주석이 없는 카탈로그 내보내기는 레이블이 없는 이미지 데이터셋으로 가져오며, Platform의 주석 편집기에서 레이블을 지정할 수 있습니다.
데이터 행 하나는 Platform에서 읽는 필드만 남기면 다음과 같습니다:
{
"data_row": {
"external_id": "000000000307.jpg",
"global_key": "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은 무시됩니다. 내보낼 때 임베딩을 선택 해제하는 것이 좋습니다. 샘플 내보내기에서는 임베딩이 파일의 약 5분의 4를 차지했고, Platform에서 실제로 읽는 필드는 5분의 1에 불과했습니다.
현재는 객체 주석의 바운딩 박스와 폴리곤만 읽으며, 내보내기 내 다른 위치에 저장된 이미지 수준 분류는 건너뜁니다. 분할 마스크(브러시) 도구, 점, 폴리라인 또는 분류만 사용해 레이블을 지정한 프로젝트는 이미지가 주석 없이 가져오며 오류도 발생하지 않습니다. 데이터셋 페이지에서 확인할 수 있습니다. 레이블이 유지된 가져온 데이터셋에는 이미지 수 옆에 레이블 수와 주석 수가 표시되고, 레이블이 누락된 데이터셋에는 둘 다 표시되지 않습니다.
Labelbox 내보내기는 픽셀을 포함하는 대신 서명된 URL로 각 이미지를 참조하며, 서명은 만료됩니다. Platform은 다운로드를 시작하기 전에 샘플을 확인한 다음 해당 URL에서 이미지를 다운로드합니다. 링크가 모두 만료된 내보내기는 즉시 실패하고 이유를 알려줍니다. Labelbox에서 다시 내보내고 새 파일을 업로드합니다. 일부 링크만 만료된 내보내기는 여전히 접근할 수 있는 이미지를 가져오고 나머지는 건너뛰므로 내보낸 직후 업로드합니다.
바운딩 박스와 폴리곤이 모두 포함된 내보내기는 세그먼트 데이터셋으로 가져오며, 세그먼트 데이터셋에는 폴리곤 지오메트리만 포함됩니다. 바운딩 박스 주석은 학습에 사용되지 않으며 버전 내보내기에도 포함되지 않습니다. 둘 다 필요하다면 바운딩 박스와 폴리곤을 별도의 Labelbox 프로젝트로 내보냅니다. 폴리곤을 읽으려면 점이 세 개 이상 있어야 합니다.
자주 묻는 질문#
Platform은 줄마다 JSON 객체 하나로 구성된 NDJSON을 읽습니다. 단일 JSON 배열로 저장된 내보내기 파일은 전체가 건너뛰어집니다. 위의 SDK 루프나 이미 NDJSON 형식인 Labelbox 자체 Export data 다운로드를 사용합니다.
Labelbox 내보내기는 서명된 URL로 이미지를 참조하며, 서명은 만료됩니다. Labelbox에서 다시 내보내고 작업이 완료된 직후 새 파일을 업로드합니다.
아니요. 혼합 내보내기는 세그먼트 데이터셋으로 가져오며 폴리곤만 사용됩니다. 둘 다 필요하다면 바운딩 박스와 폴리곤을 별도의 Labelbox 프로젝트로 내보냅니다.