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 3/10
Bài họcngười mới bắt đầu

Tìm hiểu về phát hiện đối tượng

Đọc đầu ra của detector — lớp, box, độ tin cậy — và đặt ngưỡng độ tin cậy cùng IoU dựa trên chi phí của từng loại sai sót.

Hầu hết hệ thống thị giác máy tính trong môi trường production đều là hệ thống phát hiện có thêm logic: bộ đếm, bộ tracking, cảnh báo vùng và làm mờ để bảo vệ quyền riêng tư. Khi một hệ thống như vậy hoạt động sai, nguyên nhân thường không phải do model mà là ngưỡng chưa từng được chủ động lựa chọn. Hãy nắm rõ chính xác detector trả về gì và hai tham số nào định hình danh sách đó; như vậy, bạn có thể gỡ lỗi gần như mọi thứ được xây dựng dựa trên detector.

Kết quả

Đọc kết quả phát hiện YOLO26 trong code và chọn conf cùng iou dựa trên chi phí của một lần bỏ sót so với một cảnh báo sai.

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ỗi kết quả phát hiện gồm một lớp, một box và một điểm độ tin cậy.

  2. conf loại bỏ các box có độ tin cậy thấp (mặc định 0.25); iou quyết định khi nào NMS xem hai box là bản sao (mặc định 0.7).

  3. Bỏ sót gây tốn kém? Hạ conf. Cảnh báo sai dễ nhận thấy? Tăng giá trị này.

  4. Các đối tượng lân cận biến mất? Tăng iou.

  5. Độ tin cậy dùng để xếp hạng các box; đây không phải xác suất đã hiệu chuẩn.

Thực hành

Detector trả về gì#

Kết quả phát hiện của Ultralytics YOLO trên lối đi dạo ven sông: người, hai người đi xe đạp, một con chó và hai ô tô; mỗi box được gắn nhãn lớp và độ tin cậy

Mỗi nhãn trong ảnh đó tương ứng với một hàng đầu ra: tên lớp, độ tin cậy và box bao quanh đối tượng. Model phát hiện trả về chính xác danh sách đó:

  • Lớp — một chỉ số nguyên được ánh xạ sang tên thông qua result.names (0 là person, 5 là bus).
  • Box — bốn số xác định vị trí đối tượng; xyxy cung cấp tọa độ góc trên bên trái và góc dưới bên phải theo pixel.
  • Độ tin cậy — điểm số từ 0 đến 1 dùng để xếp hạng và lọc kết quả phát hiện.

Đếm, cảnh báo, tracking và làm mờ là những phần code bạn viết dựa trên các hàng này.

from ultralytics import YOLO

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

for box in result.boxes:
    name = result.names[int(box.cls)]
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    print(f"{name:8} conf={float(box.conf):.2f} box=({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")
bus      conf=0.88 box=(0, 230, 803, 751)
person   conf=0.87 box=(49, 398, 240, 902)
person   conf=0.86 box=(223, 405, 345, 861)
person   conf=0.85 box=(670, 395, 810, 880)
person   conf=0.65 box=(0, 553, 60, 871)

Diễn giải từng dòng: box xe buýt bắt đầu tại x=0 vì xe buýt khuất khỏi mép trái; ba người có điểm số 0.85–0.87; người thứ tư, bị cắt ở viền trái, chỉ đạt 0.65 — model chỉ nhìn thấy nửa thân người. Độ tin cậy thấp ở các đối tượng bị cắt là bình thường, và đây là trường hợp đầu tiên mà ngưỡng phát huy tác dụng.

Mỗi box có bốn định dạng; hãy dùng định dạng mà code phía sau yêu cầu:

Thuộc tínhĐịnh dạngỨng dụng thường gặp
boxes.xyxyTọa độ góc theo pixel (x1, y1, x2, y2)Cắt ảnh, vẽ, quy tắc chồng lấn
boxes.xywhTâm theo pixel cùng chiều rộng và chiều caoLọc theo kích thước, chuyển động
boxes.xyxynTọa độ góc chuẩn hóa về 0–1Các quy tắc vẫn hoạt động khi độ phân giải thay đổi
boxes.xywhnTâm và kích thước chuẩn hóa về 0–1File nhãn YOLO

Từ các ứng viên đến danh sách cuối cùng#

Bên trong, model chấm điểm nhiều box ứng viên cho mỗi đối tượng. Hai bộ lọc chuyển chúng thành danh sách bạn nhìn thấy:

Bộ lọc độ tin cậy. conf loại bỏ các box thấp hơn ngưỡng; mặc định của dự đoán là 0.25. Trên ảnh xe buýt, số lượng thay đổi nhanh chóng:

confCác box trên bus.jpg
0.107
0.255
0.505
0.754

Bộ lọc trùng lặp. Loại bỏ cực đại không cần thiết (NMS) giữ lại box có độ tin cậy cao nhất và loại bỏ các box khác cùng lớp có mức chồng lấn với box đó vượt quá iou (mặc định 0.7). Mức chồng lấn được đo bằng giao trên hợp: diện tích giao nhau chia cho diện tích hợp.

Giao trên hợp trên ảnh chim: các box dự đoán và ground truth chồng lấn, cùng các mask tương ứng; IoU bằng diện tích giao nhau chia cho diện tích hợp

iouCác box trên bus.jpgTác động
0.35Nghiêm ngặt: các hộp chồng lấn được gộp lại
0.75Mặc định
0.958Linh hoạt: các kết quả gần trùng lặp vẫn được giữ lại

Chọn ngưỡng dựa trên chi phí của các lỗi#

Nếu…Thì…
Bỏ sót gây tốn kém (cảnh báo an toàn, lỗi sản phẩm)Giảm conf và chấp nhận một số cảnh báo giả
Người dùng nhìn thấy cảnh báo giả (tìm kiếm, gắn thẻ)Tăng conf
Bạn báo cáo số lượngThử các giá trị conf trên ảnh validation và chọn giá trị có sai số đếm nhỏ nhất
Các vật thể gần nhau thực sự biến mất trong đám đôngTăng iou, ví dụ 0.7 → 0.8
Cùng một vật thể nhận hai hộpGiảm iou
Độ khó khác nhau giữa các lớpDự đoán với conf thấp nhất mà bạn cần, rồi lọc theo từng lớp trong code

Giám sát an toàn kho hàng là trường hợp điển hình cần ngưỡng thấp; Chế độ Predict liệt kê mọi tham số inference.

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

Hiểu confidence là xác suất

Triệu chứng: "model chắc chắn 88% đây là xe buýt", cùng các ngưỡng được chọn theo trực giác. Cách khắc phục: xem confidence là điểm xếp hạng. Trong YOLO26, một điểm số bao quát cả "có đối tượng" và "đối tượng thuộc lớp này", nhưng điểm số đó chưa được hiệu chuẩn — hãy chọn ngưỡng từ dữ liệu validation, không dựa vào ý nghĩa của con số.

Thiếu một trong hai đối tượng đứng cạnh nhau? Kiểm tra NMS

Khi hai người đứng sát vai nhau, các hộp của họ chồng lấn nhiều và NMS có thể xóa nhầm một người thật vì cho là "bản sao". Tăng iou thì hộp thứ hai sẽ xuất hiện trở lại. YOLO26 cũng có head end-to-end không cần NMS; truyền nms=False để sử dụng head này.

Tinh chỉnh trên một ảnh

Triệu chứng: một ngưỡng có vẻ hoàn hảo trên ảnh demo nhưng lại thất bại với camera thực tế. Cách khắc phục: quét các ngưỡng trên tập validation lấy từ camera triển khai; chỉ một ảnh chỉ cho bạn thấy các nút điều chỉnh hoạt động ra sao.

Bốn kiểu dự đoán sai#

LỗiVấn đề nằm ở đâuCách khắc phục thường dùng
Đúng lớp, hộp lỏngĐịnh vịQuy tắc hộp chặt hơn và nhất quán hơn; tăng imgsz đối với vật thể nhỏ
Hộp đúng, sai lớpPhân loạiBổ sung ví dụ cho cặp lớp dễ nhầm lẫn hoặc gộp các lớp
Hoàn toàn không có hộpRecallBổ sung ví dụ về điều kiện đó: ánh sáng, kích thước, che khuất
Hộp nằm trên nềnPrecisionẢnh hard negative về bất kỳ thứ gì đã đánh lừa model

Hai danh sách giúp chẩn đoán nhanh: true positive có confidence thấp (model không chắc chắn về vật thể có thật) và false positive có confidence cao (model chắc chắn về thứ bị nhận diện sai). Mỗi danh sách gợi ý cách khắc phục khác nhau.

Dùng thử

Chạy solution với conf=0.05 rồi mở ảnh đã lưu. Đánh dấu mỗi hộp dưới 0.5 là true positive hoặc false positive và ghi lại lý do xảy ra từng false positive. Sau đó ghi giá trị conf bạn sẽ dùng cho bộ đếm người đi bộ trên camera này, kèm một câu giải thích.

Đ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 có danh sách mọi hộp dưới 0.5 trong bus.jpg, mỗi hộp được đánh dấu là true positive hoặc false positive kèm lý do.

  • Bạn đã ghi lại giá trị conf cho bộ đếm người đi bộ và lỗi mà giá trị đó giúp tránh.

  • Bạn có thể giải thích bằng bảng iou vì sao tăng iou khiến một vật thể ở gần bị loại trước đó xuất hiện trở lại.

Hiển thị lời giải
from ultralytics import YOLO

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

for box in sorted(result.boxes, key=lambda b: -float(b.conf)):
    name, conf = result.names[int(box.cls)], float(box.conf)
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    print(f"{conf:.2f} {name:10} ({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")
0.88 bus        (0, 230, 803, 751)
0.87 person     (49, 398, 240, 902)
0.86 person     (223, 405, 345, 861)
0.85 person     (670, 395, 810, 880)
0.65 person     (0, 553, 60, 871)
0.18 person     (0, 600, 40, 871)
0.12 stop sign  (0, 252, 35, 326)
0.08 handbag    (43, 732, 78, 812)
0.07 skateboard (669, 822, 808, 881)
0.06 handbag    (225, 634, 291, 705)

Mọi hộp dưới 0.5 đều là false positive. person ở mức 0.18 tạo hộp trùng với người có confidence 0.65 bị cắt ở mép trái. stop sign ở mức 0.12 là một biển báo giao thông thật nhưng bị gán sai lớp. Túi xách và ván trượt nằm trên bàn tay và giày. Mọi vật thể có thật đều đạt confidence trên 0.6, vì vậy conf=0.5 giữ lại cả bốn người và loại bỏ mọi nhiễu cho bộ đếm người đi bộ — giá trị này giúp tránh đếm trùng. Trước khi triển khai, hãy xác nhận trên tập validation từ camera thực tế: người bị cắt ở mức 0.65 cho thấy vật thể thật có thể nằm gần ngưỡng đến mức nào.

Tiếp theo là gì

Tiếp theo: khi hình chữ nhật không đủ và bạn cần hình dạng chính xác của vật thể.

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