Chuyển đến nội dung

Tổng quan về bộ dữ liệu phân đoạn thể hiện

Phân vùng thể hiện là một tác vụ thị giác máy tính liên quan đến việc xác định và phân định các đối tượng riêng lẻ trong một hình ảnh. Hướng dẫn này cung cấp tổng quan về các định dạng bộ dữ liệu được Ultralytics YOLO hỗ trợ cho các tác vụ phân vùng thể hiện, cùng với hướng dẫn về cách chuẩn bị, chuyển đổi và sử dụng các bộ dữ liệu này để huấn luyện mô hình của bạn.

Các Định Dạng Tập Dữ Liệu Được Hỗ Trợ

Định dạng Ultralytics YOLO

Định dạng nhãn bộ dữ liệu được sử dụng để huấn luyện các mô hình phân đoạn YOLO như sau:

  1. Một tệp văn bản cho mỗi hình ảnh: Mỗi hình ảnh trong bộ dữ liệu có một tệp văn bản tương ứng có cùng tên với tệp hình ảnh và phần mở rộng ".txt".
  2. Một hàng cho mỗi đối tượng: Mỗi hàng trong tệp văn bản tương ứng với một thể hiện đối tượng trong hình ảnh.
  3. Thông tin đối tượng trên mỗi hàng: Mỗi hàng chứa thông tin sau về thể hiện đối tượng:
    • Chỉ mục lớp đối tượng: Một số nguyên đại diện cho lớp của đối tượng (ví dụ: 0 cho người, 1 cho xe hơi, v.v.).
    • Tọa độ hộp giới hạn đối tượng: Tọa độ hộp giới hạn xung quanh vùng mặt nạ, được chuẩn hóa giữa 0 và 1.

Định dạng cho một hàng duy nhất trong tệp bộ dữ liệu phân đoạn như sau:

<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>

Trong định dạng này, <class-index> là chỉ số của lớp cho đối tượng và <x1> <y1> <x2> <y2> ... <xn> <yn> là tọa độ bao của mặt nạ phân đoạn của đối tượng. Các tọa độ được phân tách bằng dấu cách.

Đây là một ví dụ về định dạng bộ dữ liệu YOLO cho một hình ảnh duy nhất với hai đối tượng được tạo thành từ một đoạn 3 điểm và một đoạn 5 điểm.

0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104

Mẹo

  • Độ dài của mỗi hàng không nhất thiết phải bằng nhau.
  • Mỗi nhãn phân đoạn phải có một tối thiểu 3 điểm xy: <class-index> <x1> <y1> <x2> <y2> <x3> <y3>

Định dạng YAML bộ dữ liệu

Framework Ultralytics sử dụng định dạng tệp YAML để xác định cấu hình bộ dữ liệu và mô hình để huấn luyện Mô hình Phân đoạn. Dưới đây là một ví dụ về định dạng YAML được sử dụng để xác định bộ dữ liệu phân đoạn:

ultralytics/cfg/datasets/coco8-seg.yaml

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg/
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco8-seg ← downloads here (1 MB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  4: airplane
  5: bus
  6: train
  7: truck
  8: boat
  9: traffic light
  10: fire hydrant
  11: stop sign
  12: parking meter
  13: bench
  14: bird
  15: cat
  16: dog
  17: horse
  18: sheep
  19: cow
  20: elephant
  21: bear
  22: zebra
  23: giraffe
  24: backpack
  25: umbrella
  26: handbag
  27: tie
  28: suitcase
  29: frisbee
  30: skis
  31: snowboard
  32: sports ball
  33: kite
  34: baseball bat
  35: baseball glove
  36: skateboard
  37: surfboard
  38: tennis racket
  39: bottle
  40: wine glass
  41: cup
  42: fork
  43: knife
  44: spoon
  45: bowl
  46: banana
  47: apple
  48: sandwich
  49: orange
  50: broccoli
  51: carrot
  52: hot dog
  53: pizza
  54: donut
  55: cake
  56: chair
  57: couch
  58: potted plant
  59: bed
  60: dining table
  61: toilet
  62: tv
  63: laptop
  64: mouse
  65: remote
  66: keyboard
  67: cell phone
  68: microwave
  69: oven
  70: toaster
  71: sink
  72: refrigerator
  73: book
  74: clock
  75: vase
  76: scissors
  77: teddy bear
  78: hair drier
  79: toothbrush

# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip

Hàm trainval các trường chỉ định đường dẫn đến các thư mục chứa hình ảnh huấn luyện và xác thực, tương ứng.

names là một từ điển chứa tên các lớp. Thứ tự của các tên phải khớp với thứ tự của các chỉ mục lớp đối tượng trong các tệp bộ dữ liệu YOLO.

Cách sử dụng

Ví dụ

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt epochs=100 imgsz=640

Các bộ dữ liệu được hỗ trợ

Ultralytics YOLO hỗ trợ nhiều bộ dữ liệu khác nhau cho các tác vụ phân đoạn thể hiện. Dưới đây là danh sách các bộ dữ liệu được sử dụng phổ biến nhất:

  • COCO: Một bộ dữ liệu toàn diện cho phát hiện đối tượng, phân đoạn và tạo chú thích, nổi bật với hơn 200 nghìn hình ảnh được gắn nhãn trên nhiều danh mục.
  • COCO8-seg: Một tập hợp con nhỏ gọn gồm 8 ảnh của COCO, được thiết kế để kiểm tra nhanh quá trình huấn luyện mô hình phân đoạn, lý tưởng cho các kiểm tra CI và xác thực quy trình làm việc trong ultralytics kho lưu trữ.
  • COCO128-seg: Một bộ dữ liệu nhỏ hơn cho các tác vụ phân đoạn thể hiện (instance segmentation), chứa một tập hợp con gồm 128 hình ảnh COCO với các chú thích phân đoạn.
  • Carparts-seg: Một bộ dữ liệu chuyên biệt tập trung vào phân đoạn các bộ phận xe hơi, lý tưởng cho các ứng dụng ô tô. Nó bao gồm nhiều loại xe với chú thích chi tiết về các thành phần xe riêng lẻ.
  • Crack-seg: Một bộ dữ liệu được thiết kế riêng cho việc phân đoạn các vết nứt trên các bề mặt khác nhau. Cần thiết cho việc bảo trì cơ sở hạ tầng và kiểm soát chất lượng, nó cung cấp hình ảnh chi tiết để huấn luyện các mô hình xác định các điểm yếu cấu trúc.
  • Package-seg: Một tập dữ liệu dành riêng cho việc phân đoạn các loại vật liệu và hình dạng đóng gói khác nhau. Nó đặc biệt hữu ích cho tự động hóa kho bãi và hậu cần, hỗ trợ phát triển các hệ thống để xử lý và phân loại gói hàng.

Thêm tập dữ liệu của riêng bạn

Nếu bạn có bộ dữ liệu của riêng mình và muốn sử dụng nó để huấn luyện các mô hình phân đoạn với định dạng Ultralytics YOLO, hãy đảm bảo rằng nó tuân theo định dạng được chỉ định ở trên trong phần "Định dạng Ultralytics YOLO". Chuyển đổi các chú thích của bạn sang định dạng bắt buộc và chỉ định các đường dẫn, số lượng lớp và tên lớp trong tệp cấu hình YAML.

Chuyển Đổi hoặc Điều Chỉnh Định Dạng Nhãn

Định Dạng Tập Dữ Liệu COCO sang Định Dạng YOLO

Bạn có thể dễ dàng chuyển đổi nhãn từ định dạng bộ dữ liệu COCO phổ biến sang định dạng YOLO bằng đoạn mã sau:

Ví dụ

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

Công cụ chuyển đổi này có thể được sử dụng để chuyển đổi bộ dữ liệu COCO hoặc bất kỳ bộ dữ liệu nào ở định dạng COCO sang định dạng Ultralytics YOLO.

Hãy nhớ kiểm tra kỹ xem bộ dữ liệu bạn muốn sử dụng có tương thích với mô hình của bạn hay không và tuân theo các quy ước định dạng cần thiết. Các bộ dữ liệu được định dạng đúng cách là rất quan trọng để huấn luyện các mô hình phát hiện đối tượng thành công.

Tự động Chú thích

Tự động chú thích là một tính năng thiết yếu cho phép bạn tạo bộ dữ liệu phân đoạn bằng mô hình phát hiện được huấn luyện trước. Nó cho phép bạn nhanh chóng và chính xác chú thích một số lượng lớn hình ảnh mà không cần gán nhãn thủ công, giúp tiết kiệm thời gian và công sức.

Tạo Bộ dữ liệu Phân đoạn bằng Mô hình Phát hiện

Để tự động chú thích bộ dữ liệu của bạn bằng khung Ultralytics, bạn có thể sử dụng auto_annotate hàm như được hiển thị bên dưới:

Ví dụ

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Đối số Loại Mặc định Mô tả
data str bắt buộc Đường dẫn đến thư mục chứa hình ảnh mục tiêu để chú thích hoặc phân đoạn.
det_model str 'yolo11x.pt' Đường dẫn mô hình phát hiện YOLO để phát hiện đối tượng ban đầu.
sam_model str 'sam_b.pt' Đường dẫn mô hình SAM để phân đoạn (hỗ trợ các biến thể SAM, SAM2 và mô hình mobile_sam).
device str '' Thiết bị tính toán (ví dụ: 'cuda:0', 'cpu' hoặc '' để tự động phát hiện thiết bị).
conf float 0.25 Ngưỡng độ tin cậy phát hiện YOLO để lọc các phát hiện yếu.
iou float 0.45 Ngưỡng IoU cho Non-Maximum Suppression để lọc các hộp chồng chéo.
imgsz int 640 Kích thước đầu vào để thay đổi kích thước hình ảnh (phải là bội số của 32).
max_det int 300 Số lượng phát hiện tối đa trên mỗi ảnh để tiết kiệm bộ nhớ.
classes list[int] None Danh sách các chỉ số lớp để phát hiện (ví dụ: [0, 1] cho người và xe đạp).
output_dir str None Thư mục lưu trữ cho các chú thích (mặc định là '.\/labels' tương ứng với đường dẫn dữ liệu).

Hàm auto_annotate function nhận đường dẫn đến hình ảnh của bạn, cùng với các đối số tùy chọn để chỉ định các mô hình phát hiện được huấn luyện trước, ví dụ: YOLO11, YOLOv8 hoặc khác mô hình và các mô hình phân đoạn, ví dụ: SAM, SAM2 hoặc MobileSAM, thiết bị để chạy các mô hình và thư mục đầu ra để lưu các kết quả đã được chú thích.

Bằng cách tận dụng sức mạnh của các mô hình đã được huấn luyện trước, tính năng tự động gán nhãn có thể giảm đáng kể thời gian và công sức cần thiết để tạo ra các bộ dữ liệu phân đoạn chất lượng cao. Tính năng này đặc biệt hữu ích cho các nhà nghiên cứu và nhà phát triển làm việc với bộ sưu tập hình ảnh lớn, vì nó cho phép họ tập trung vào việc phát triển và đánh giá mô hình thay vì gán nhãn thủ công.

Trực quan hóa chú thích bộ dữ liệu

Trước khi huấn luyện mô hình của bạn, việc trực quan hóa các chú thích của bộ dữ liệu thường hữu ích để đảm bảo chúng chính xác. Ultralytics cung cấp một hàm tiện ích cho mục đích này:

from ultralytics.data.utils import visualize_image_annotations

label_map = {  # Define the label map with all annotated class labels.
    0: "person",
    1: "car",
}

# Visualize
visualize_image_annotations(
    "path/to/image.jpg",  # Input image path.
    "path/to/annotations.txt",  # Annotation file path for the image.
    label_map,
)

Hàm này vẽ các hộp giới hạn, gắn nhãn các đối tượng bằng tên lớp và điều chỉnh màu văn bản để dễ đọc hơn, giúp bạn xác định và sửa bất kỳ lỗi chú thích nào trước khi huấn luyện.

Chuyển đổi mặt nạ phân vùng sang định dạng YOLO

Nếu bạn có mặt nạ phân đoạn ở định dạng nhị phân, bạn có thể chuyển đổi chúng sang định dạng phân đoạn YOLO bằng cách sử dụng:

from ultralytics.data.converter import convert_segment_masks_to_yolo_seg

# For datasets like COCO with 80 classes
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)

Tiện ích này chuyển đổi hình ảnh mặt nạ nhị phân thành định dạng phân đoạn YOLO và lưu chúng trong thư mục đầu ra được chỉ định.

Câu hỏi thường gặp

Ultralytics YOLO hỗ trợ những định dạng bộ dữ liệu nào cho phân đoạn thể hiện?

Ultralytics YOLO hỗ trợ một số định dạng bộ dữ liệu để phân đoạn thể hiện, với định dạng chính là định dạng Ultralytics YOLO của riêng nó. Mỗi hình ảnh trong bộ dữ liệu của bạn cần một tệp văn bản tương ứng với thông tin đối tượng được phân đoạn thành nhiều hàng (mỗi hàng một đối tượng), liệt kê chỉ mục lớp và tọa độ bao quanh được chuẩn hóa. Để biết hướng dẫn chi tiết hơn về định dạng bộ dữ liệu YOLO, hãy truy cập Tổng quan về Bộ dữ liệu Phân đoạn Thể hiện.

Làm cách nào để chuyển đổi chú thích của bộ dữ liệu COCO sang định dạng YOLO?

Việc chuyển đổi chú thích định dạng COCO sang định dạng YOLO rất đơn giản bằng các công cụ Ultralytics. Bạn có thể sử dụng convert_coco function từ ultralytics.data.converter module:

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

Script này chuyển đổi các annotation của bộ dữ liệu COCO của bạn sang định dạng YOLO cần thiết, làm cho nó phù hợp để huấn luyện các mô hình YOLO của bạn. Để biết thêm chi tiết, hãy tham khảo Chuyển đổi hoặc Chuyển đổi Định dạng Nhãn.

Làm cách nào để chuẩn bị tệp YAML để huấn luyện các mô hình Ultralytics YOLO?

Để chuẩn bị tệp YAML để huấn luyện các mô hình YOLO với Ultralytics, bạn cần xác định đường dẫn tập dữ liệu và tên lớp. Dưới đây là một ví dụ về cấu hình YAML:

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg/
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco8-seg ← downloads here (1 MB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  4: airplane
  5: bus
  6: train
  7: truck
  8: boat
  9: traffic light
  10: fire hydrant
  11: stop sign
  12: parking meter
  13: bench
  14: bird
  15: cat
  16: dog
  17: horse
  18: sheep
  19: cow
  20: elephant
  21: bear
  22: zebra
  23: giraffe
  24: backpack
  25: umbrella
  26: handbag
  27: tie
  28: suitcase
  29: frisbee
  30: skis
  31: snowboard
  32: sports ball
  33: kite
  34: baseball bat
  35: baseball glove
  36: skateboard
  37: surfboard
  38: tennis racket
  39: bottle
  40: wine glass
  41: cup
  42: fork
  43: knife
  44: spoon
  45: bowl
  46: banana
  47: apple
  48: sandwich
  49: orange
  50: broccoli
  51: carrot
  52: hot dog
  53: pizza
  54: donut
  55: cake
  56: chair
  57: couch
  58: potted plant
  59: bed
  60: dining table
  61: toilet
  62: tv
  63: laptop
  64: mouse
  65: remote
  66: keyboard
  67: cell phone
  68: microwave
  69: oven
  70: toaster
  71: sink
  72: refrigerator
  73: book
  74: clock
  75: vase
  76: scissors
  77: teddy bear
  78: hair drier
  79: toothbrush

# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip

Đảm bảo bạn cập nhật các đường dẫn và tên class (lớp) theo dataset (bộ dữ liệu) của bạn. Để biết thêm thông tin, hãy xem phần Định dạng YAML Dataset.

Tính năng tự động chú thích trong Ultralytics YOLO là gì?

Tự động chú thích trong Ultralytics YOLO cho phép bạn tạo chú thích phân đoạn cho bộ dữ liệu của mình bằng mô hình phát hiện được huấn luyện trước. Điều này làm giảm đáng kể nhu cầu gán nhãn thủ công. Bạn có thể sử dụng auto_annotate function như sau:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")  # or sam_model="mobile_sam.pt"

Chức năng này tự động hóa quy trình chú thích, làm cho nó nhanh hơn và hiệu quả hơn. Để biết thêm chi tiết, hãy khám phá Tham khảo Chú thích tự động.



📅 Đã tạo 1 năm trước ✏️ Đã cập nhật 10 ngày trước

Bình luận