Phân đoạn ngữ nghĩa (Semantic Segmentation)#
Semantic segmentation gán 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ộ khung cảnh. Khác với instance segmentation dùng để tách biệt các đối tượng riêng lẻ, semantic segmentation nhóm tất cả các pixel có cùng lớp lại với nhau bất kể có bao nhiêu đối tượng khác nhau hiện diện.
Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial
Đầu ra của một mô hình phân đoạn ngữ nghĩa là một bản đồ lớp đơn lẻ có kích thước chiều cao nhân chiều rộng, 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 như lái xe tự động, hình ảnh y tế và lập bản đồ che phủ đất.
Sử dụng task=semantic hoặc tác vụ CLI yolo semantic cho semantic segmentation. Các tệp model semantic segmentation YOLO26 sử dụng hậu tố -sem, chẳng hạn như yolo26n-sem.pt.
Models#
Các model semantic segmentation 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 được tải xuống tự động từ bản release Ultralytics mới nhất trong lần sử dụng đầu tiên.
| Mô hình | 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 | 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, quy mô đơn trên tập xác thực Cityscapes.
Tái tạo lại bằngyolo semantic val data=cityscapes.yaml device=0 imgsz=2048 - Các chỉ số Speed được tính trung bình trên các ảnh xác thực Cityscapes sử dụng một instance RTX3090.
Tái tạo lại bằngyolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 - Các giá trị Params và FLOPs dành cho model đã được hợp nhất sau
model.fuse(), thao tác hợp nhất các lớp Conv và BatchNorm. Các checkpoint huấn luyện trước giữ nguyên toàn bộ kiến trúc huấn luyện và có thể hiển thị số lượng lớn hơn.
Các model semantic segmentation YOLO26 được huấn luyện trước trên tập dữ liệu ADE20K được hiển thị bên dưới.
Models được tải xuống tự động từ bản release Ultralytics mới nhất trong lần sử dụng đầu tiên.
| Mô hình | 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.4 |
| YOLO26s-sem-ade20k | 640 | 45.6 | 4.2 ± 0.3 | 6.5 | 17.4 |
| YOLO26m-sem-ade20k | 640 | 47.4 | 4.7 ± 0.3 | 14.3 | 59.5 |
| YOLO26l-sem-ade20k | 640 | 49.7 | 8.3 ± 0.2 | 17.9 | 75.0 |
| YOLO26x-sem-ade20k | 640 | 51.5 | 9.9 ± 0.3 | 40.2 | 168.1 |
- Các giá trị mIoUval dành cho model đơn, quy mô đơn trên tập xác thực ADE20K.
Tái tạo lại bằngyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640, thay thếyolo26n-sem-ade20k.ptbằng checkpointyolo26*-sem-ade20k.ptmong muốn. - Các chỉ số Speed được tính trung bình trên các ảnh xác thực ADE20K sử dụng một instance RTX3090.
Tái tạo lại bằngyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640, thay thếyolo26n-sem-ade20k.ptbằng checkpointyolo26*-sem-ade20k.ptmong muốn. - Các giá trị Params và FLOPs dành cho model đã được hợp nhất sau
model.fuse(), thao tác hợp nhất các lớp Conv và BatchNorm. Các checkpoint huấn luyện trước giữ nguyên toàn bộ kiến trúc huấn luyện và có thể hiển thị số lượng lớn hơn.
Huấn luyện (Train)#
Huấn luyện YOLO26n-sem trên tập dữ liệu Cityscapes8 trong 100 epochs với kích thước ảnh 1024. Để có danh sách đầy đủ các tham số khả dụng, hãy xem trang Configuration.
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 chế độ train đầy đủ trong trang Train. Các model semantic segmentation cũng có thể được huấn luyện bằng Ultralytics Platform cloud training.
Định dạng tập dữ liệu#
Các tập dữ liệu semantic segmentation sử dụng hình ảnh mặt nạ (mask) đơn kênh, thường là định dạng 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à "bỏ qua" và bị loại trừ khỏi quá trình tính toán mất mát (loss). Tệp YAML của tập dữ liệu phải chỉ định đường dẫn đến hình ảnh và thư mục mặt nạ tương ứng của chúng. Xem Semantic Segmentation Dataset Guide để biết chi tiết về định dạng. Các tập dữ liệu được hỗ trợ bao gồm Cityscapes và ADE20K. Bạn có thể quản lý và gán nhãn các tập dữ liệu ngữ nghĩa bằng Ultralytics Platform annotation.
Val#
Xác thực accuracy của model YOLO26n-sem đã huấn luyện trên một tập dữ liệu semantic segmentation. Truyền rõ ràng data để quá trình xác thực sử dụng đúng tệp 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 (Predict)#
Sử dụng mô hình YOLO26n-sem đã huấn luyện để thực hiện 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 # class map, shape (H,W), integer dtype selected by class countXem chi tiết đầy đủ về chế độ predict tại trang Predict.
Đầu ra kết quả#
YOLO semantic segmentation trả về một đối tượng Results cho mỗi hình ảnh. Mỗi kết quả lưu trữ một bản đồ lớp dày đặc cho toàn bộ
hình ảnh thay vì danh sách các mặt nạ đối tượng. Các pixel có cùng lớp dự đoán sẽ chia sẻ chung một ID lớp, ngay cả khi chúng
thuộc các đối tượng riêng biệt.
| Thuộc tính | Loại | Kích thước | 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ượng lớp. |
result.masks | - | - | Không có mask thực thể. |
result.boxes | - | - | Không có khung bao/độ tin cậy thực thể. |
result.masks.xy | - | - | Không có đa giác mặc định. |
Đối với các trường Results dành riêng cho từng tác vụ trên mọi tác vụ, hãy xem phần Predict Results by Task.
Semantic segmentation dự đoán một bản đồ lớp dày đặc, sau đó thay đổi kích thước bản đồ đó về lại hình dạng ảnh để trực quan hóa và
sử dụng cho các tác vụ tiếp theo. Do đó, các cấu trúc rất mỏng, chẳng hạn như vạch kẻ đường, đường ranh giới sân, cột hoặc dây cáp, có thể trông
như bậc thang khi quá trình suy luận chạy ở mức imgsz thấp hơn nhiều so với độ phân giải ảnh gốc. Nếu các ranh giới xuất hiện
rang cưa, trước tiên hãy kiểm tra lại model PyTorch .pt nguyên bản với imgsz lớn hơn, chẳng hạn như 1024, 1280 hoặc giá trị thực tế gần nhất
so với kích thước ảnh gốc. Chỉ sử dụng các model đã xuất sau khi xác nhận đầu ra .pt là chấp nhận được,
vì các đầu vào có độ phân giải thấp hơn không thể khôi phục lại các chi tiết tinh tế vốn không có trong bản đồ lớp dự đoán.
Phân đoạn Cá thể so với Phân đoạn Ngữ nghĩa#
| Khía cạnh | Instance Segmentation (task="segment") | Semantic Segmentation (task="semantic") |
|---|---|---|
| Mục tiêu dự đoán | Phân đoạn riêng biệt từng đối tượng được phát hiện | Gán một ID lớp cho mọi pixel |
| Trường đầu ra | result.masks | result.semantic_mask |
| Dữ liệu chính | result.masks.data | result.semantic_mask.data |
| Kích thước | (N,H,W) | (H,W) |
| Giá trị pixel | Giá trị mặt nạ nhị phân: 0 hoặc 1 | ID lớp: 0, 1, 2, ... |
| Dtype | torch.uint8 | torch.uint8torch.int16torch.int32 |
| Các đối tượng cùng lớp | Được giữ nguyên dưới dạng các cá thể riêng biệt | Hợp nhất thành cùng một vùng lớp |
| Đa giác (Polygons) | Có, thông qua result.masks.xy và result.masks.xyn | Không có đầu ra đa giác theo mặc định |
| Hộp bao (Boxes) và độ tin cậy | Có, thông qua result.boxes | Không có hộp bao hoặc điểm tin cậy cho từng cá thể |
| Sử dụng điển hình | Đếm, theo dõi, cắt, đo lường cấp độ đối tượng | Gán nhãn cảnh dày đặc, khu vực có thể lái xe, che phủ đất, vùng y tế |
Xuất (Export)#
Xuất mô hình YOLO26n-sem sang một đị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 semantic segmentation YOLO26 khả dụng được liệt kê trong bảng bên dưới. 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, tức là 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, tức là 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 | Mô hình | Metadata | Tham 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 |
| TF SavedModel | saved_model | yolo26n-sem_saved_model/ | ✅ | imgsz, keras, 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 |
| 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 |
| LiteRT | litert | yolo26n-sem.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-sem_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-sem_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-sem.aimodel | ✅ | imgsz, batch, quantize |
Xem chi tiết đầy đủ về export tại trang Export.
Câu hỏi thường gặp#
Để huấn luyện mô hình 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 mặt nạ 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 các thư mục ảnh và mặt nạ của bạn, sau đó huấn luyện mô hình:
Ví dụ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 Configuration để biết thêm các đối số khả dụng.
Phân đoạn cá thể 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:
- Semantic segmentation 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ó cùng lớp. Ví dụ, tất cả xe hơi trong một khung cảnh đều có chung một nhãn lớp.
- Instance segmentation nhận diện từng đối tượng riêng biệt, tạo ra các mặt nạ riêng biệt 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 cho các tác vụ hiểu cảnh như lái xe tự động và lập bản đồ che phủ đất, trong khi phân đoạn cá thể được ưu tiên khi việc đếm hoặc theo dõi từng đối tượng riêng lẻ là quan trọ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
.txtcho mỗi hình ảnh), hãy bỏ quamasks_dirkhỏi tệp YAML của tập dữ liệu và đảm bảo không có thư mụcmasks/nào tồn tại cạnh các hình ảnh của bạn tại thư mục gốc của tập dữ liệu (sự hiện diện của nó tự động kích hoạt chế độ mặt nạ PNG ngay cả khi không đặtmasks_dir). Bộ nạp sau đó sẽ tự động chuyển đổi các đa giác thành mặt nạ ngữ nghĩa cho từng ảnh ngay khi chạy. Đối với các tập dữ liệu đa lớp (N > 1), một lớpbackgroundbổ sung sẽ được nối tự động vàonames. Đối với các tập dữ liệu đơn lớp (N == 1), quá trình huấn luyện giữ nguyên ở 1 lớp — lớp bạn khai báo trở thành1trong mặt nạ và các pixel chưa được bao phủ sẽ trở thành0. Xem Semantic Segmentation Dataset Guide để biết chi tiết.Ultralytics YOLO26 cung cấp các cấu hình có sẵn cho một số tập dữ liệu phân đoạn ngữ nghĩa:
- Cityscapes: 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ú pháp 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 mặt nạ PNG trong đó các giá trị pixel tương ứng với các ID lớp.
Xác thực một mô hình phân đoạn ngữ nghĩa YOLO26 đã huấn luyện trước với tệp YAML tập dữ liệu được sử dụng để đánh giá:
Ví dụ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 chỉ số xác thực như Intersection over Union trung bình (mIoU) và độ chính xác pixel, đây là các thước đo tiêu chuẩn để đánh giá hiệu suất phân đoạn ngữ nghĩa.
Xuất mô hình phân đoạn ngữ nghĩa YOLO26 sang định dạng ONNX bằng Python hoặc lệnh CLI:
Ví dụ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 Export.