Tích hợp Labelbox#
Ultralytics Platform đọc trực tiếp các bản xuất NDJSON của Labelbox. Bạn không cần dán key, duy trì kết nối hay bảo trì script chuyển đổi — chỉ cần xuất từ Labelbox, tải file lên và nhãn sẽ được nhập thành dataset Platform thông thường.
Nhập từ Labelbox#
- Xuất từ Labelbox. Với project gán nhãn, mở tab Data Rows, chọn All, nhấp Export data, chọn các trường cần đưa vào rồi xác nhận. Trong Catalog, chọn các hàng dữ liệu rồi chọn Manage selection > Export data, sau đó bật Export labels from project và chọn project; nếu không, file sẽ không có annotation nào.
- Tải file xuống. Labelbox chạy thao tác xuất dưới dạng job nền. Theo dõi job trong Notifications và nhấp Download khi hoàn tất để lưu file
.ndjson. - Tải lên Platform. Tạo dataset mới rồi tải file
.ndjsonlên hoặc dán liên kết trực tiếp đến file. Bạn cũng có thể bắt đầu từ Settings > Integrations > Labelbox. - Huấn luyện. Sau khi xử lý hoàn tất, hãy chỉnh sửa annotation và huấn luyện như với mọi dataset Platform khác.

Khác với CVAT và Label Studio, bạn không cần chọn định dạng — định dạng xuất riêng của Labelbox được hỗ trợ.
Xuất bằng SDK#
Labelbox cũng cung cấp tác vụ xuất trong Python SDK, đây là cách thuận tiện hơn để xây dựng pipeline có thể chạy lặp lại. Stream tác vụ và ghi mỗi dòng một đối tượng 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 một tác vụ chưa ở trạng thái COMPLETE sẽ gây lỗi
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 gồm một đối tượng JSON trên mỗi dòng. json.dump(list_of_rows, f) thay vào đó ghi một mảng duy nhất, còn Platform bỏ qua mọi dòng không phải là đối tượng JSON — thao tác nhập sẽ không tìm thấy hàng dữ liệu nào. Hãy dùng vòng lặp ở trên hoặc "\n".join(json.dumps(r) for r in rows).
Nội dung được nhập#
Platform tự nhận diện định dạng Labelbox và ánh xạ bounding box cùng polygon sang loại task YOLO tương ứng:
| Annotation Labelbox | Đã nhập |
|---|---|
| Bounding box | Phát hiện |
| Polygon | Phân đoạn |
| Mask phân đoạn, điểm, đường nhiều đoạn, quan hệ, phân loại | Chưa hỗ trợ |
name của mỗi đối tượng sẽ trở thành tên class — vì vậy annotation "name": "Dog" được nhập với class Dog, chứ không phải value viết thường — và tọa độ pixel được chuẩn hóa theo kích thước media_attributes trong bản xuất, vì vậy hãy giữ các thuộc tính media trong bản xuất: các hàng không có chiều rộng và chiều cao sẽ nhập ảnh mà không có annotation. Chỉ các đối tượng Platform có thể nhập mới đăng ký class, nên các công cụ mask, điểm và đường nhiều đoạn không thêm class rỗng vào dataset. Mỗi ảnh được đặt tên theo data_row.external_id, sau đó là global_key; nếu bản xuất không có cả hai, tên file trong signed URL sẽ được dùng. Các hàng dữ liệu ảnh được nhập; hàng dữ liệu video, văn bản và các loại không phải ảnh khác sẽ bị bỏ qua. Bản xuất Catalog không có annotation sẽ được nhập thành dataset ảnh chưa gán nhãn, sẵn sàng để gán nhãn trong trình biên tập annotation của Platform.
Một hàng dữ liệu đơn lẻ có dạng như sau, đã lược bớt chỉ còn các trường Platform đọc:
{
"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 }
}
]
}
}
]
}
}
}Mọi nội dung khác trong bản xuất — embeddings, metadata_fields, attachments, project_details — đều bị bỏ qua. Bạn nên bỏ chọn embeddings khi xuất: trong một bản xuất mẫu, embeddings chiếm khoảng bốn phần năm dung lượng file, trong khi các trường Platform thực sự đọc chỉ chiếm một phần năm.
Hiện tại, chỉ bounding box và polygon được đọc, và chỉ khi nằm trong annotation đối tượng — phân loại cấp ảnh được lưu ở nơi khác trong bản xuất nên bị bỏ qua. Project chỉ được gán nhãn hoàn toàn bằng công cụ mask phân đoạn (cọ), điểm, đường nhiều đoạn hoặc phân loại sẽ nhập ảnh nhưng không có annotation, và không phát sinh lỗi. Bạn có thể kiểm tra trên trang dataset: dataset đã nhập và giữ được nhãn sẽ hiển thị số lượng nhãn và annotation bên cạnh số lượng ảnh; dataset bị mất nhãn sẽ không hiển thị cả hai.
Bản xuất Labelbox tham chiếu từng ảnh bằng signed URL thay vì nhúng dữ liệu pixel, và chữ ký của các URL này sẽ hết hạn. Platform tải ảnh từ các URL đó và kiểm tra mẫu trước khi bắt đầu, vì vậy bản xuất có toàn bộ liên kết hết hạn sẽ thất bại ngay lập tức và cho biết nguyên nhân — hãy xuất lại từ Labelbox rồi tải file mới lên. Bản xuất chỉ hết hạn một phần sẽ nhập những ảnh vẫn có thể truy cập và bỏ qua các ảnh còn lại, vì vậy hãy tải lên ngay sau khi xuất.
Bản xuất chứa cả bounding box và polygon được nhập thành dataset segment, nhưng dataset segment chỉ giữ hình học polygon — các annotation box không được dùng để huấn luyện hoặc đưa vào bản xuất phiên bản. Nếu cần cả hai, hãy xuất box và polygon thành các project Labelbox riêng biệt. Polygon cũng cần ít nhất ba điểm mới được đọc.
Câu hỏi thường gặp#
Platform đọc NDJSON, tức một đối tượng JSON trên mỗi dòng. Bản xuất được lưu thành một mảng JSON duy nhất sẽ bị bỏ qua hoàn toàn. Hãy dùng vòng lặp SDK ở trên hoặc tải xuống bằng Export data của Labelbox, định dạng này đã là NDJSON.
Bản xuất Labelbox tham chiếu ảnh bằng signed URL và chữ ký của các URL này sẽ hết hạn. Hãy xuất lại từ Labelbox và tải file mới lên ngay sau khi hoàn tất.
Không. Bản xuất hỗn hợp được nhập thành dataset segment và chỉ polygon được sử dụng. Nếu cần cả hai, hãy xuất box và polygon thành các project Labelbox riêng biệt.