Ultralytics YOLO27: Tham gia danh sách chờ.
Get Started
Nền tảng Thị giác máy tính·Chọn tác vụ·Bài học 2/10
Bài họcngười mới bắt đầu

Bảy tác vụ thị giác

Ánh xạ dòng đầu ra vào phân loại, phát hiện, phân đoạn đối tượng, phân đoạn ngữ nghĩa, ước tính độ sâu, pose hoặc OBB, rồi chọn weights YOLO26 để bắt đầu.

Chọn tác vụ là quyết định tốn kém nhất trước khi huấn luyện. Chọn phân đoạn khi bounding box là đủ sẽ làm chi phí gán nhãn tăng vọt; chọn bounding box thẳng đứng cho tàu nhìn từ drone thì phần lớn mỗi box sẽ là mặt nước. Ultralytics YOLO hỗ trợ bảy tác vụ thông qua một API, nên lựa chọn phụ thuộc vào đầu ra bạn cần — không phải công cụ.

Kết quả

Nêu tên tác vụ duy nhất và file weights YOLO26 phù hợp với dòng đầu ra của bạn, đồng thời giải thích trong một dòng vì sao không cần tác vụ kế tiếp có chi phí cao hơn.

Lộ trình cấp tốc
Nếu bạn đã nắm rõ cách thực hiện, đây là phiên bản tóm tắt.
  1. Một nhãn cho toàn bộ ảnh: phân loại.

  2. Vật gì và ở đâu, chỉ cần hình chữ nhật: phát hiện.

  3. Đường viền chính xác cho từng đối tượng: phân đoạn đối tượng. Lớp cho từng pixel: phân đoạn ngữ nghĩa.

  4. Khoảng cách cho từng pixel: ước tính độ sâu.

  5. Khớp xương hoặc landmark: pose. Đối tượng nhìn từ trên cao ở các góc khác nhau: OBB.

  6. Cùng một API YOLO() cho cả bảy tác vụ; chỉ file weights thay đổi.

Thực hành

Tổng quan nhanh về bảy tác vụ#

Đầu ra của bảy tác vụ Ultralytics YOLO: chiếc lá được phân loại, ô tô và người đi bộ được phát hiện, ô tô được phân đoạn, bản đồ đường phố theo ngữ nghĩa, bộ xương tư thế của người chạy, bounding box xoay quanh tàu và bản đồ độ sâu

Đọc bảng theo cột đầu ra — đó là nội dung mà dòng đầu ra trong đặc tả của bạn phải khớp.

Tác vụĐầu raTrả lời câu hỏiWeights YOLO26
Phân loạiMột nhãn cho mỗi ảnh, kèm xác suất“Đây là ảnh gì?”yolo26n-cls.pt
Phát hiệnLớp, bounding box và confidence cho mỗi đối tượng“Vật gì ở đâu?”yolo26n.pt
Phân đoạn đối tượngLớp và mask pixel cho từng đối tượng"Hình dạng chính xác của từng đối tượng là gì?"yolo26n-seg.pt
Phân đoạn ngữ nghĩaMột lớp cho mọi pixel"Mỗi pixel thuộc loại vùng nào?"yolo26n-sem.pt
Ước tính độ sâuKhoảng cách tính bằng mét cho từng pixel"Mỗi pixel cách bao xa?"yolo26n-depth.pt
Ước tính tư thếBox và keypoint cho mỗi người hoặc đối tượng"Cơ thể đang ở tư thế nào?"yolo26n-pose.pt
Box giới hạn có hướngBox xoay cho từng đối tượng"Vật gì ở đâu, với góc nào?"yolo26n-obb.pt

Có hai cặp khái niệm dễ gây nhầm lẫn. Phân đoạn đối tượng vs phân đoạn ngữ nghĩa: phân đoạn đối tượng tách riêng từng đối tượng (ba chiếc xe, ba mask); phân đoạn ngữ nghĩa chỉ gán nhãn pixel theo lớp (một vùng "xe", không đếm số lượng). Phát hiện vs OBB: cả hai đều trả về một box cho mỗi đối tượng, nhưng OBB xoay theo đối tượng; điều này quan trọng khi đối tượng nằm nghiêng trong ảnh chụp từ trên xuống.

Một API, bảy đầu ra#

Chuyển đổi tác vụ không có nghĩa là phải đổi công cụ. File weights quyết định kết quả trả về, còn đối tượng Results điền vào thuộc tính tương ứng:

from ultralytics import YOLO

image = "https://ultralytics.com/images/bus.jpg"
outputs = ["probs", "boxes", "masks", "semantic_mask", "depth", "keypoints", "obb"]

for suffix in ["-cls", "", "-seg", "-sem", "-depth", "-pose", "-obb"]:
    weights = f"yolo26n{suffix}.pt"
    model = YOLO(weights)
    result = model(image, verbose=False)[0]
    filled = [name for name in outputs if getattr(result, name) is not None]
    print(f"{weights:18} task={model.task:9} -> {', '.join(filled)}")
yolo26n-cls.pt     task=classify  -> probs
yolo26n.pt         task=detect    -> boxes
yolo26n-seg.pt     task=segment   -> boxes, masks
yolo26n-sem.pt     task=semantic  -> semantic_mask
yolo26n-depth.pt   task=depth     -> depth
yolo26n-pose.pt    task=pose      -> boxes, keypoints
yolo26n-obb.pt     task=obb       -> obb

Đọc cột bên phải: phân đoạn và ước tính tư thế cũng trả về box, vì chúng là phát hiện cộng thêm một thành phần. Phân đoạn ngữ nghĩa và ước tính độ sâu hoàn toàn không trả về đầu ra theo từng đối tượng — thay vào đó, chúng mô tả mọi pixel. Code phía sau của bạn chỉ đọc đúng một trong các thuộc tính này, vì vậy dòng đầu ra trong spec cần nêu rõ thuộc tính đó.

Lựa chọn trong thực tế#

Bắt đầu từ những gì một dự đoán cần mô tả, sau đó chọn tác vụ ít tốn kém nhất có thể đáp ứng yêu cầu ra quyết định:

  1. Một nhãn cho toàn bộ ảnh → phân loại.
  2. Một lớp cho mọi pixel, không cần tách riêng các đối tượng → phân đoạn ngữ nghĩa.
  3. Một khoảng cách cho mọi pixel → ước tính độ sâu.
  4. Thông tin về từng đối tượng:
    • vị trí của đối tượng, để đếm, xác định vị trí hoặc lọc → phát hiện (thêm tracking để duy trì danh tính qua các frame);
    • hình dạng, đường biên hoặc diện tích chính xác của đối tượng → phân đoạn đối tượng;
    • tư thế của đối tượng → ước tính tư thế;
    • góc xoay của đối tượng trong ảnh chụp từ trên xuống → OBB.

Khi cả hai tác vụ đều phù hợp, hãy chọn tác vụ ít tốn công gán nhãn và chạy hơn. Phát hiện là lựa chọn mặc định cho hầu hết sản phẩm: box dễ vẽ và rà soát, và khi kết hợp với tracking, chúng đã có thể hỗ trợ đếm, cảnh báo vùng và phân tích giao thông như khung cảnh đường cao tốc này:

Giao thông trên đường cao tốc được Ultralytics YOLO tracking, với ID ổn định và vệt chuyển động trên mỗi ô tô, xe buýt và xe tải

Độ sâu: tác vụ trả lời câu hỏi "cách bao xa"#

Ước tính độ sâu trả về một bản đồ có kích thước bằng ảnh, với một khoảng cách tính bằng mét cho mỗi pixel — không có lớp hay box. Hãy dùng tác vụ này khi khoảng cách ảnh hưởng đến quyết định: robot tránh chướng ngại vật, xe giảm tốc khi có vật ở gần hoặc ước tính sơ bộ thể tích của một đống vật liệu.

from ultralytics import YOLO

model = YOLO("yolo26n-depth.pt")
result = model("https://ultralytics.com/images/bus.jpg", verbose=False)[0]

depth = result.depth.data  # meters, one value per pixel
print(f"depth map {tuple(depth.shape)}, nearest {float(depth.min()):.1f} m, farthest {float(depth.max()):.1f} m")
depth map (1080, 810), nearest 2.0 m, farthest 14.9 m

Một camera đơn ước tính độ sâu dựa trên các dấu hiệu đã học như phối cảnh và kích thước đối tượng, vì vậy hãy đo sai số trên chính khung cảnh của bạn trước khi dùng kết quả cho khoảng cách ảnh hưởng đến an toàn. Có thể kết hợp độ sâu với phát hiện: phát hiện đối tượng, sau đó đọc bản đồ độ sâu bên trong box của đối tượng.

Các lỗi thường gặp#

Nhầm lẫn thường gặpTriệu chứngLựa chọn phù hợp hơn
Dùng phân đoạn trong khi box đã đủCode phía sau không bao giờ đọc maskPhát hiện
Box thẳng đứng trên ảnh chụp từ trên xuốngCác box chủ yếu chứa nền, còn các đối tượng lân cận loại trừ lẫn nhauOBB
Dùng phân loại cho cảnh có nhiều đối tượngNhãn phụ thuộc vào một đối tượng nhỏPhát hiện cộng với một quy tắc
Dùng phân đoạn ngữ nghĩa khi cần đếmCác đối tượng chạm nhau nhập thành một vùngPhân đoạn đối tượng
Dùng kích thước box làm đại diện cho khoảng cáchQuy tắc không còn đúng khi kích thước đối tượng thay đổiƯớc tính độ sâu hoặc kết hợp phát hiện với độ sâu
Dùng ước tính tư thế để kiểm tra sự hiện diệnBạn không bao giờ đọc keypointPhát hiện
Đừng trả tiền cho đầu ra mà bạn sẽ không sử dụng

Đầu ra càng phong phú thì chi phí ở mọi giai đoạn càng cao: mask và keypoint mất nhiều thời gian hơn để vẽ, mất nhiều thời gian hơn để kiểm tra và cần quy tắc gán nhãn nghiêm ngặt hơn. Hãy bắt đầu với tác vụ ít tốn kém nhất có thể trả lời dòng quyết định, và chỉ nâng cấp khi có người dùng thực sự cần thêm chi tiết.

Dùng thử

Lấy dòng đầu ra trong spec ở bài học 1 rồi đi theo các bước trên. Ghi lại tác vụ, file weights YOLO26 bạn sẽ bắt đầu với, thuộc tính Results mà code sẽ đọc và một dòng giải thích vì sao không cần tác vụ tiếp theo tốn kém hơn. Chưa có dự án? Hãy dùng spec xe nâng.

Điều kiện hoàn thành
Bạn đã hoàn thành bài học khi tất cả các điều kiện sau đều đúng.
  • Bạn đã nêu tên một tác vụ, file weights YOLO26 và thuộc tính Results mà code sẽ đọc.

  • Bạn đã viết một dòng giải thích vì sao không cần tác vụ tiếp theo tốn kém hơn.

  • Bạn có thể giải thích dự án của mình cần phân đoạn đối tượng, phân đoạn ngữ nghĩa, ước tính độ sâu hay không cần tác vụ nào trong số đó — và lý do.

Hiển thị lời giải

Với spec xe nâng, câu trả lời là phát hiện, dùng yolo26n.pt và đọc từ result.boxes.

Dòng quyết định cần biết vị trí của xe nâng và người để code có thể kiểm tra khoảng cách giữa họ. Box đáp ứng yêu cầu đó. Phân đoạn đối tượng sẽ làm tăng chi phí gán nhãn mà không thay đổi cảnh báo, vì cạnh dưới của box đã cho biết vị trí tiếp xúc với mặt đất. Không cần ước tính tư thế vì tư thế không liên quan đến quyết định. Độ sâu có thể giúp chuyển vị trí trong ảnh thành mét, nhưng camera cố định đã hiệu chuẩn có thể ánh xạ mặt phẳng sàn mà không cần độ sâu. Chỉ nên thử OBB nếu camera hướng thẳng xuống và xe nâng xuất hiện ở các góc chéo lớn.

Tiếp theo là gì

Tiếp theo, hãy tìm hiểu kỹ hơn về phát hiện — tác vụ chủ lực và là điểm bắt đầu của hầu hết sản phẩm.

Đăng nhập để lưu tiến độ