Phân đoạn ngữ nghĩa với Ultralytics YOLO#
Phân đoạn ngữ nghĩa gán nhãn lớp cho từng pixel trong ảnh, tạo ra bản đồ lớp dày đặc bao phủ toàn bộ khung cảnh. Khác với phân đoạn từng đối tượng, vốn tách riêng từng đối tượng, phân đoạn ngữ nghĩa gom tất 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.
Xem: Phân đoạn ngữ nghĩa với Ultralytics YOLO26 | Hướng dẫn bắt đầu nhanh
Đầu ra của model phân đoạn ngữ nghĩa là một bản đồ lớp có chiều cao và chiều rộng, trong đó giá trị mỗi pixel tương ứng với ID lớp được dự đoán. Điều này khiến 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 như lái xe tự hành, chẩn đoán hình ảnh y tế và lập bản đồ lớp phủ mặt đất.
Dùng task=semantic hoặc tác vụ CLI yolo semantic cho phân đoạn ngữ nghĩa. Các file model phân đoạn ngữ nghĩa YOLO26 sử dụng hậu tố -sem, chẳng hạn như yolo26n-sem.pt.
Model#
Các model YOLO26 Semantic pretrained trên bộ dữ liệu Cityscapes được trình bày bên dưới.
Model sẽ tự động tải xuống từ bản phát hành Ultralytics mới nhất trong lần sử dụng đầu tiên.
| Model | kích thước (pixel) | mIoUval | Tốc độ RTX3090 PyTorch (ms) | params (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 23.8 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 91.0 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 305.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.8 | 388.2 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.1 | 866.9 |
- Giá trị mIoUval được tính trên tập validation Cityscapes với một model, một scale.
Tái tạo bằngyolo semantic val data=cityscapes.yaml device=0 imgsz=2048 - Các metric Speed được tính trung bình trên ảnh validation Cityscapes bằng một instance RTX3090.
Tái tạo bằngyolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 - Giá trị Params và FLOPs áp dụng cho model đã hợp nhất sau
model.fuse(), thao tác gộp các lớp Conv và BatchNorm. Các checkpoint pretrained giữ nguyên kiến trúc huấn luyện đầy đủ và có thể hiển thị số liệu cao hơn.
Các model YOLO26 Semantic pretrained trên bộ dữ liệu ADE20K được trình bày bên dưới.
| Model | kích thước (pixel) | mIoUval | Tốc độ RTX3090 PyTorch (ms) | params (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem-ade20k | 640 | 38.8 | 3.9 ± 0.2 | 1.6 | 4.5 |
| YOLO26s-sem-ade20k | 640 | 45.6 | 4.2 ± 0.3 | 6.5 | 17.5 |
| YOLO26m-sem-ade20k | 640 | 47.4 | 4.7 ± 0.3 | 14.4 | 59.6 |
| YOLO26l-sem-ade20k | 640 | 49.7 | 8.3 ± 0.2 | 17.9 | 75.2 |
| YOLO26x-sem-ade20k | 640 | 51.5 | 9.9 ± 0.3 | 40.2 | 168.4 |
- Giá trị mIoUval được tính trên tập validation ADE20K với một model, một scale.
Tái tạo bằngyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640, thayyolo26n-sem-ade20k.ptbằng checkpointyolo26*-sem-ade20k.ptmong muốn. - Các metric Speed được tính trung bình trên ảnh validation ADE20K bằng một instance RTX3090.
Tái tạo bằngyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640, thayyolo26n-sem-ade20k.ptbằng checkpointyolo26*-sem-ade20k.ptmong muốn. - Giá trị Params và FLOPs áp dụng cho model đã hợp nhất sau
model.fuse(), thao tác gộp các lớp Conv và BatchNorm. Các checkpoint pretrained giữ nguyên kiến trúc huấn luyện đầy đủ và có thể hiển thị số liệu cao hơn.
Xem bản xem trước YOLO27 chưa phát hành để biết các kết quả mIoU sơ bộ trên Cityscapes.
Huấn luyện#
Huấn luyện YOLO26n-sem trên bộ dữ liệu Cityscapes8 trong 100 epoch với kích thước ảnh 1024. Xem trang Cấu hình để biết danh sách đầy đủ các tham số hiện có.
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n-sem.yaml") # tạo model mới từ YAML
model = YOLO("yolo26n-sem.pt") # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt") # tạo từ YAML và chuyển trọng số
# Huấn luyện model
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)Xem chi tiết đầy đủ về chế độ train trên trang Train. Bạn cũng có thể huấn luyện model phân đoạn ngữ nghĩa bằng dịch vụ huấn luyện đám mây Ultralytics Platform.
Định dạng dataset#
Bộ dữ liệu phân đoạn ngữ nghĩa sử dụng ảnh mask một kênh, thường ở định dạng PNG, trong đó giá trị mỗi pixel biểu thị một ID lớp. Các pixel có giá trị 255 được xem là "ignore" và không được tính vào loss. YAML của bộ dữ liệu cần chỉ định đường dẫn đến ảnh và thư mục mask tương ứng. Bộ dữ liệu có nhãn đa giác YOLO được dùng để huấn luyện trực tiếp, các nhãn được chuyển đổi thành mask trong quá trình chạy (xem Tôi có thể dùng dữ liệu phân đoạn từng đối tượng không bên dưới). Xem Hướng dẫn về bộ dữ liệu phân đoạn ngữ nghĩa để biết chi tiết định dạng. Các bộ dữ liệu được hỗ trợ gồm Cityscapes và ADE20K. Bạn có thể quản lý và gán nhãn bộ dữ liệu ngữ nghĩa bằng công cụ gán nhãn Ultralytics Platform.
Đánh giá#
Validation độ chính xác của model YOLO26n-sem đã huấn luyện trên bộ dữ liệu phân đoạn ngữ nghĩa. Truyền tường minh data để validation sử dụng đúng YAML của bộ dữ liệu.
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n-sem.pt") # tải model chính thức
model = YOLO("path/to/best.pt") # tải model tùy chỉnh
# Xác thực model
metrics = model.val(data="cityscapes.yaml")
metrics.miou # IoU trung bình
metrics.pixel_accuracy # độ chính xác pixel tổng thểDự đoán#
Dùng model YOLO26n-sem đã huấn luyện để chạy dự đoán trên ảnh.
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n-sem.pt") # tải model chính thức
model = YOLO("path/to/best.pt") # tải model tùy chỉnh
# Dự đoán bằng model
results = model("https://ultralytics.com/images/bus.jpg") # dự đoán trên một ảnh
# Truy cập kết quả
for result in results:
semantic_mask = result.semantic_mask.data # bản đồ lớp, shape (H,W), kiểu dữ liệu số nguyên được chọn theo số lượng lớpXem chi tiết đầy đủ về chế độ predict trên trang Dự đoán.
Đầu ra kết quả#
Phân đoạn ngữ nghĩa bằng YOLO trả về một đối tượng Results cho mỗi ảnh. Mỗi kết quả lưu một bản đồ lớp dày đặc cho toàn bộ ảnh thay vì danh sách mask đối tượng. Các pixel có cùng lớp được dự đoán sẽ dùng chung ID lớp, ngay cả khi chúng thuộc về các đối tượng riêng biệt.
| Thuộc tính | Kiểu | Hình dạng | Mô tả |
|---|---|---|---|
result.semantic_mask | SemanticMask | (H,W) | Bản đồ lớp dày đặc. |
result.semantic_mask.data | torch.uint8torch.int16torch.int32 | (H,W) | ID lớp; dtype được chọn dựa trên số lớp. |
result.masks | - | - | Không có mask đối tượng. |
result.boxes | - | - | Không có bbox/độ tin cậy của đối tượng. |
Để xem các trường Results dành riêng cho từng tác vụ trên tất cả tác vụ, hãy tham khảo mục Kết quả dự đoán theo tác vụ.
Phân đoạn ngữ nghĩa dự đoán một bản đồ lớp dày đặc, sau đó thay đổi kích thước bản đồ đó về kích thước ảnh để trực quan hóa và sử dụng ở các bước tiếp theo. Vì vậy, các cấu trúc rất mảnh như vạch kẻ làn đường, vạch sân, cột hoặc dây điện có thể trông răng cưa khi suy luận chạy ở imgsz thấp hơn nhiều so với độ phân giải ảnh gốc. Nếu đường biên có vẻ lởm chởm, trước tiên hãy kiểm tra lại model PyTorch gốc .pt với imgsz lớn hơn, chẳng hạn 1024, 1280 hoặc giá trị khả thi gần nhất với kích thước ảnh nguồn. Chỉ sử dụng model đã export sau khi xác nhận đầu ra .pt đạt yêu cầu, vì đầu vào có độ phân giải thấp hơn không thể khôi phục chi tiết nhỏ vốn không có trong bản đồ lớp được dự đoán.
Phân đoạn từng đối tượng và phân đoạn ngữ nghĩa#
| Khía cạnh | Phân đoạn từng đối tượng (task="segment") | Phân đoạn ngữ nghĩa (task="semantic") |
|---|---|---|
| Mục tiêu dự đoán | Phân đoạn riêng từng đối tượng được phát hiện | Gán một ID lớp cho từng pixel |
| Trường đầu ra | result.masks | result.semantic_mask |
| Dữ liệu chính | result.masks.data | result.semantic_mask.data |
| Hình dạng | (N,H,W) | (H,W) |
| Giá trị pixel | Giá trị mask nhị phân: 0 hoặc 1 | ID lớp: 0, 1, 2, ... |
| Kiểu dữ liệu | torch.uint8 | torch.uint8torch.int16torch.int32 |
| Các đối tượng cùng lớp | Được giữ thành các instance riêng biệt | Được gộp vào cùng một vùng lớp |
| Đa giác | Có, thông qua result.masks.xy và result.masks.xyn | Mặc định không có đầu ra đa giác |
| Box và độ tin cậy | Có, thông qua result.boxes | Không có box hoặc điểm tin cậy cho từng instance |
| Trường hợp sử dụng điển hình | Đếm, theo dõi, cắt ảnh, đo lường ở cấp đối tượng | Gán nhãn cảnh dày đặc, vùng có thể lái xe, lớp phủ mặt đất, vùng y tế |
Export#
Export model YOLO26n-sem sang định dạng khác như ONNX, CoreML, v.v.
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n-sem.pt") # tải model chính thức
model = YOLO("path/to/best.pt") # tải model tùy chỉnh
# # Xuất model
model.export(format="onnx")Các định dạng export phân đoạn ngữ nghĩa YOLO26 hiện có được liệt kê trong bảng bên dưới. Bạn có thể export sang bất kỳ định dạng nào bằng tham số format, chẳng hạn format='onnx' hoặc format='engine'. Bạn có thể dự đoán hoặc validation trực tiếp trên model đã export, chẳng hạn yolo predict model=yolo26n-sem.onnx. Sau khi quá trình export hoàn tất, các ví dụ sử dụng sẽ được hiển thị cho model của bạn.
| Định dạng | Đối số format | Model | Metadata | Đối số |
|---|---|---|---|---|
| PyTorch | - | yolo26n-sem.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-sem.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-sem.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-sem_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-sem.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-sem.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| Apple Core AI | coreai | yolo26n-sem.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n-sem_saved_model/ | ✅ | imgsz, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-sem.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-sem_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| LiteRT | litert | yolo26n-sem.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-sem_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-sem.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-sem_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-sem_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-sem_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-sem_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-sem_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-sem_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-sem_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| Hailo | hailo | yolo26n-sem_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n-sem_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n-sem_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None mặc định xuất đầu ra thô cho NMS bên ngoài. Đặt nms=False để chọn một head không dùng NMS hiện có; các định dạng không được hỗ trợ sẽ chuyển về luồng đầu ra gốc. Các mục nms ở trên xác định những định dạng có thể tích hợp NMS với nms=True.
Xem chi tiết đầy đủ về export trên trang Export.
Câu hỏi thường gặp#
Để huấn luyện model phân đoạn ngữ nghĩa YOLO26 trên dataset tùy chỉnh, bạn cần chuẩn bị ảnh mask PNG, trong đó giá trị của mỗi pixel biểu thị 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 file YAML dataset trỏ đến các thư mục chứa ảnh và mask, sau đó huấn luyện model:
Ví dụfrom ultralytics import YOLO # Tải model phân đoạn ngữ nghĩa YOLO26 đã pretrained model = YOLO("yolo26n-sem.pt") # Huấn luyện model results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=1024)Xem trang Cấu hình để biết thêm các tham số hiện có.
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 cốt yếu:
- 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 các đối tượng riêng lẻ thuộc cùng một lớp. Ví dụ: tất cả xe hơi trong một cảnh đều có cùng nhãn lớp.
- Phân đoạn đối tượng xác định riêng từng đối tượng, tạo ra mask riêng cho mỗi đố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 với các tác vụ hiểu cảnh như lái xe tự hành và lập bản đồ lớp phủ đất, trong khi phân đoạn đối tượng được ưu tiên khi cần đếm hoặc theo dõi từng đối tượng riêng lẻ.
Có. Nếu dataset của bạn sử dụng nhãn đa giác Ultralytics YOLO (một
.txtcho mỗi ảnh), hãy bỏ quamasks_dirtrong YAML dataset và đảm bảo không có thư mụcmasks/bên cạnh ảnh trong thư mục gốc của dataset (chỉ riêng sự hiện diện của thư mục này cũng kích hoạt chế độ mask PNG, ngay cả khi chưa đặtmasks_dir). Khi đó, loader sẽ chuyển các đa giác thành mask ngữ nghĩa cho từng ảnh ngay trong quá trình xử lý. Với dataset nhiều lớp (N > 1), một lớpbackgroundbổ sung sẽ tự động được thêm vàonames. Với dataset một lớp (N == 1), quá trình huấn luyện vẫn giữ nguyên 1 lớp — lớp bạn khai báo sẽ trở thành1trong mask và các pixel không được phủ sẽ trở thành0. Xem Hướng dẫn Dataset Phân đoạn Ngữ nghĩa để biết thêm chi tiết.Ultralytics YOLO26 cung cấp sẵn cấu hình cho một số dataset phân đoạn ngữ nghĩa:
- Cityscapes: Các cảnh đường phố đô thị gồm 19 lớp, được sử dụng rộng rãi trong nghiên cứu lái xe tự hành.
- ADE20K: Dataset phân tích cảnh quy mô lớn gồm 150 lớp.
Bạn cũng có thể sử dụng bất kỳ dataset tùy chỉnh nào có chú thích mask PNG, trong đó giá trị pixel tương ứng với ID lớp.
Đánh giá model phân đoạn ngữ nghĩa YOLO26 đã pretrained bằng YAML dataset được dùng cho quá trình đánh giá:
Ví dụfrom ultralytics import YOLO # Tải model pretrained model = YOLO("yolo26n-sem.pt") # Xác thực 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 những metric đánh giá như giao điểm trên hợp trung bình (mIoU) và độ chính xác pixel, là các thước đo tiêu chuẩn để đánh giá hiệu năng phân đoạn ngữ nghĩa.
Export model phân đoạn ngữ nghĩa YOLO26 sang định dạng ONNX bằng Python hoặc các lệnh CLI:
Ví dụfrom ultralytics import YOLO # Tải model pretrained model = YOLO("yolo26n-sem.pt") # # Xuất model sang định dạng ONNX model.export(format="onnx")Để biết thêm chi tiết về cách export sang nhiều định dạng, hãy tham khảo trang Export.