Phân đoạn ngữ nghĩa
Phân đoạn ngữ nghĩa gán một nhãn lớp cho mọi pixel trong ảnh, tạo ra một bản đồ lớp dày đặc bao phủ toàn bộ cảnh. Không giống như phân đoạn đối tượng, vốn tách biệt các đối tượng riêng lẻ, phân đoạn ngữ nghĩa nhóm tất cả các pixel cùng lớp lại với nhau bất kể có bao nhiêu đối tượng riêng biệt hiện diện.
Đầu ra của một model phân đoạn ngữ nghĩa là một bản đồ lớp đơn chiều height-by-width, trong đó mỗi giá trị pixel tương ứng với một ID lớp được dự đoán. Điều này làm cho phân đoạn ngữ nghĩa trở nên lý tưởng cho các tác vụ phân tích cảnh (scene parsing) như lái xe tự động, chẩn đoán hình ảnh y tế và lập bản đồ lớp phủ đất.
Sử dụng task=semantic hoặc tác vụ CLI yolo semantic để thực hiện phân đoạn ngữ nghĩa. Các tệp model phân đoạn ngữ nghĩa YOLO26 sử dụng hậu tố -sem, ví dụ như yolo26n-sem.pt.
Models
Các model phân đoạn ngữ nghĩa YOLO26 được huấn luyện trước trên tập dữ liệu Cityscapes được hiển thị bên dưới.
Models sẽ tự động tải xuống từ bản phát hành mới nhất của Ultralytics trong lần sử dụng đầu tiên.
| Model | kích thước (pixel) | mIoUval | Tốc độ RTX3090 PyTorch (ms) | tham số (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 22.7 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 88.8 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 304.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.9 | 384.7 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.2 | 861.7 |
- Các giá trị mIoUval dành cho model đơn với quy mô đơn trên tập xác thực Cityscapes.
Tái lập vớiyolo semantic val data=cityscapes.yaml device=0 imgsz=2048 - Các số liệu Speed được tính trung bình trên các hình ảnh xác thực Cityscapes sử dụng một instance Amazon EC2 P4d.
Tái lập vớiyolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 - Các giá trị Params và FLOPs dành cho model đã hợp nhất sau
model.fuse(), giúp gộp các lớp Conv và BatchNorm. Các checkpoint đã huấn luyện trước vẫn giữ nguyên kiến trúc huấn luyện đầy đủ và có thể hiển thị số lượng cao hơn.
Huấn luyện (Train)
Huấn luyện YOLO26n-sem trên tập dữ liệu Cityscapes8 trong 100 epochs tại kích thước ảnh 1024. Để xem danh sách đầy đủ các tham số khả dụng, hãy xem trang Cấu hình.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.yaml") # build a new model from YAML
model = YOLO("yolo26n-sem.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)Xem chi tiết đầy đủ về chế độ train tại trang Huấn luyện.
Định dạng tập dữ liệu
Các tập dữ liệu phân đoạn ngữ nghĩa sử dụng ảnh mask đơn kênh, thường là PNG, trong đó mỗi giá trị pixel đại diện cho một ID lớp. Các pixel có giá trị 255 được coi là "ignore" (bỏ qua) và bị loại khỏi quá trình tính toán hàm mất mát. YAML của tập dữ liệu cần chỉ định đường dẫn đến hình ảnh và thư mục mask tương ứng. Xem Hướng dẫn về tập dữ liệu phân đoạn ngữ nghĩa để biết chi tiết định dạng. Các tập dữ liệu được hỗ trợ bao gồm Cityscapes và ADE20K.
Val
Xác thực độ chính xác của model YOLO26n-sem đã huấn luyện trên một tập dữ liệu phân đoạn ngữ nghĩa. Hãy truyền tham số data một cách rõ ràng để quá trình xác thực sử dụng đúng YAML tập dữ liệu dự định.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val(data="cityscapes.yaml")
metrics.miou # mean Intersection over Union
metrics.pixel_accuracy # overall pixel accuracyDự đoán
Sử dụng model YOLO26n-sem đã huấn luyện để chạy dự đoán trên hình ảnh.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
# Access the results
for result in results:
semantic_mask = result.semantic_mask.data # height x width class map (torch.Tensor)Xem chi tiết đầy đủ về chế độ predict tại trang Dự đoán.
Export
Xuất model YOLO26n-sem sang định dạng khác như ONNX, CoreML, v.v.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Export the model
model.export(format="onnx")Các định dạng xuất phân đoạn ngữ nghĩa YOLO26 khả dụng được liệt kê trong bảng dưới đây. Bạn có thể xuất sang bất kỳ định dạng nào bằng cách sử dụng tham số format, ví dụ: format='onnx' hoặc format='engine'. Bạn có thể dự đoán hoặc xác thực trực tiếp trên các model đã xuất, ví dụ: yolo predict model=yolo26n-sem.onnx. Các ví dụ sử dụng được hiển thị cho model của bạn sau khi quá trình xuất hoàn tất.
| Định dạng | Đối số format | Model | Siêu dữ liệu | Đối số |
|---|---|---|---|---|
| PyTorch | - | yolo26n-sem.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-sem.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n-sem.onnx | ✅ | imgsz, half, dynamic, simplify, opset, nms, batch, device |
| OpenVINO | openvino | yolo26n-sem_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-sem.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-sem.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-sem_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-sem.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n-sem.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n-sem_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n-sem_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-sem_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-sem.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n-sem_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n-sem_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n-sem_rknn_model/ | ✅ | imgsz, batch, name, device |
| ExecuTorch | executorch | yolo26n-sem_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-sem_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DeepX | deepx | yolo26n-sem_deepx_model/ | ✅ | imgsz, int8, data, optimize, device |
Xem chi tiết đầy đủ về export tại trang Xuất.
Câu hỏi thường gặp
Làm thế nào để huấn luyện model phân đoạn ngữ nghĩa YOLO26 trên tập dữ liệu tùy chỉnh?
Để huấn luyện model phân đoạn ngữ nghĩa YOLO26 trên tập dữ liệu tùy chỉnh, bạn cần chuẩn bị các ảnh mask PNG trong đó mỗi giá trị pixel đại diện cho một ID lớp (0, 1, 2, ...) và các pixel có giá trị 255 sẽ bị bỏ qua trong quá trình huấn luyện. Tạo một tệp YAML tập dữ liệu trỏ đến thư mục hình ảnh và mask của bạn, sau đó huấn luyện model:
from ultralytics import YOLO
# Load a pretrained YOLO26 semantic segmentation model
model = YOLO("yolo26n-sem.pt")
# Train the model
results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=512)Kiểm tra trang Cấu hình để biết thêm các tham số khả dụng.
Sự khác biệt giữa phân đoạn đối tượng (instance segmentation) và phân đoạn ngữ nghĩa (semantic segmentation) là gì?
Phân đoạn đối tượng và phân đoạn ngữ nghĩa đều là các tác vụ ở cấp độ pixel nhưng khác nhau ở một điểm chính:
- Phân đoạn ngữ nghĩa gán nhãn lớp cho mỗi pixel nhưng không phân biệt giữa các đối tượng riêng lẻ cùng lớp. Ví dụ, tất cả các ô tô trong một cảnh đều có chung một nhãn lớp.
- Phân đoạn đối tượng xác định từng đối tượng riêng lẻ một cách tách biệt, tạo ra các mask riêng biệt cho từng đối tượng ngay cả khi chúng thuộc cùng một lớp.
Phân đoạn ngữ nghĩa phù hợp nhất cho các tác vụ hiểu cảnh như lái xe tự động và lập bản đồ lớp phủ đất, trong khi phân đoạn đối tượng được ưu tiên khi việc đếm hoặc theo dõi các đối tượng riêng lẻ là quan trọng.
Tôi có thể sử dụng dữ liệu phân đoạn đối tượng để huấn luyện phân đoạn ngữ nghĩa không?
Có. Nếu tập dữ liệu của bạn sử dụng nhãn đa giác Ultralytics YOLO (một tệp .txt mỗi ảnh), hãy bỏ qua masks_dir trong YAML tập dữ liệu và trình tải sẽ tự động chuyển đổi đa giác thành mask ngữ nghĩa cho mỗi ảnh ngay khi chạy. Đối với các tập dữ liệu đa lớp (N > 1), một lớp background bổ sung được tự động thêm vào names. Đối với tập dữ liệu đơn lớp (N == 1), việc huấn luyện vẫn giữ ở 1 lớp — lớp bạn khai báo trở thành 1 trong mask và các pixel không được bao phủ trở thành 0. Xem Hướng dẫn về tập dữ liệu phân đoạn ngữ nghĩa để biết chi tiết.
Những tập dữ liệu nào được hỗ trợ cho phân đoạn ngữ nghĩa?
Ultralytics YOLO26 cung cấp cấu hình tích hợp sẵn cho một số tập dữ liệu phân đoạn ngữ nghĩa:
- Cityscapes: Các cảnh đường phố đô thị với 19 lớp, được sử dụng rộng rãi cho nghiên cứu lái xe tự động.
- ADE20K: Một tập dữ liệu phân tích cảnh quy mô lớn với 150 lớp.
Bạn cũng có thể sử dụng bất kỳ tập dữ liệu tùy chỉnh nào cung cấp chú thích mask PNG trong đó giá trị pixel tương ứng với ID lớp.
Làm thế nào để xác thực một model phân đoạn ngữ nghĩa YOLO26 đã huấn luyện trước?
Xác thực một model phân đoạn ngữ nghĩa YOLO26 đã huấn luyện trước với YAML tập dữ liệu được sử dụng để đánh giá:
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n-sem.pt")
# Validate the model
metrics = model.val(data="cityscapes.yaml")
print("Mean IoU:", metrics.miou)
print("Pixel Accuracy:", metrics.pixel_accuracy)Các bước này sẽ cung cấp cho bạn các số liệu xác thực như mean Intersection over Union (mIoU) và độ chính xác pixel, vốn là các thước đo tiêu chuẩn để đánh giá hiệu suất phân đoạn ngữ nghĩa.
Làm thế nào tôi có thể xuất model phân đoạn ngữ nghĩa YOLO26 sang định dạng ONNX?
Xuất model phân đoạn ngữ nghĩa YOLO26 sang định dạng ONNX bằng Python hoặc các lệnh CLI:
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n-sem.pt")
# Export the model to ONNX format
model.export(format="onnx")Để biết thêm chi tiết về việc xuất sang các định dạng khác nhau, hãy tham khảo trang Xuất.