YOLOv10: Phát hiện đối tượng end-to-end theo thời gian thực#
YOLOv10, được phát hành vào tháng 5 năm 2024 và xây dựng trên Ultralytics Python package bởi các nhà nghiên cứu tại Tsinghua University, giới thiệu phương pháp mới cho phát hiện đối tượng thời gian thực, khắc phục những hạn chế trong hậu xử lý và kiến trúc model ở các phiên bản YOLO trước. Bằng cách loại bỏ suppression phi cực đại (NMS) và tối ưu hóa nhiều thành phần của model, YOLOv10 đạt hiệu năng vượt trội với chi phí tính toán giảm đáng kể tại thời điểm ra mắt. Thiết kế end-to-end không cần NMS tiên phong cho một phương pháp tiếp tục được phát triển trong YOLO26.

Xem: Cách huấn luyện YOLOv10 trên dataset SKU-110k bằng Ultralytics | Dataset bán lẻ
Tổng quan#
Phát hiện đối tượng thời gian thực hướng đến việc dự đoán chính xác các lớp đối tượng và vị trí của chúng trong ảnh với độ trễ thấp. Dòng YOLO luôn dẫn đầu trong lĩnh vực nghiên cứu này nhờ sự cân bằng giữa hiệu năng và hiệu quả. Tuy nhiên, việc phụ thuộc vào NMS và những điểm kém hiệu quả trong kiến trúc đã cản trở hiệu năng tối ưu. YOLOv10 giải quyết các vấn đề này bằng cách đưa vào cơ chế gán cặp nhất quán để huấn luyện không cần NMS và chiến lược thiết kế model toàn diện, định hướng theo hiệu quả và độ chính xác.
Kiến trúc#
Kiến trúc YOLOv10 kế thừa thế mạnh của các model YOLO trước đó, đồng thời giới thiệu một số cải tiến then chốt. Kiến trúc model bao gồm các thành phần sau:
- Backbone: Đảm nhiệm trích xuất đặc trưng, backbone trong YOLOv10 sử dụng phiên bản cải tiến của CSPNet (Mạng phân đoạn một phần qua các giai đoạn) để cải thiện luồng gradient và giảm dư thừa tính toán.
- Neck: Neck được thiết kế để tổng hợp đặc trưng từ nhiều tỷ lệ khác nhau rồi truyền chúng đến head. Thành phần này bao gồm các lớp PAN (Mạng tổng hợp đường dẫn) để hợp nhất đặc trưng đa tỷ lệ hiệu quả.
- Head một-nhiều: Tạo nhiều dự đoán cho mỗi đối tượng trong quá trình huấn luyện nhằm cung cấp tín hiệu giám sát phong phú và cải thiện độ chính xác học tập.
- Đầu ra One-to-One: Tạo một dự đoán tốt nhất duy nhất cho mỗi đối tượng trong quá trình suy luận, loại bỏ nhu cầu sử dụng NMS, nhờ đó giảm độ trễ và cải thiện hiệu quả.
Tính năng chính#
- Huấn luyện không cần NMS: Sử dụng các phép gán kép nhất quán để loại bỏ nhu cầu sử dụng NMS, giảm độ trễ suy luận.
- Thiết kế model toàn diện: Tối ưu hóa toàn diện nhiều thành phần xét trên cả khía cạnh hiệu quả và độ chính xác, bao gồm các đầu phân loại nhẹ, giảm kích thước tách biệt không gian-kênh và thiết kế khối được định hướng bằng thứ hạng.
- Năng lực của model được nâng cao: Tích hợp các phép tích chập với kernel lớn và các module self-attention một phần để cải thiện hiệu năng mà không làm phát sinh chi phí tính toán đáng kể.
Các biến thể model#
YOLOv10 có nhiều kích cỡ model để đáp ứng các nhu cầu ứng dụng khác nhau:
- YOLOv10n: Phiên bản Nano dành cho môi trường có tài nguyên cực kỳ hạn chế.
- YOLOv10s: Phiên bản Small cân bằng giữa tốc độ và độ chính xác.
- YOLOv10m: Phiên bản Medium dành cho mục đích sử dụng tổng quát.
- YOLOv10b: Phiên bản cân bằng, có chiều rộng tăng lên để đạt độ chính xác cao hơn.
- YOLOv10l: Phiên bản Large cho độ chính xác cao hơn, đổi lại cần nhiều tài nguyên tính toán hơn.
- YOLOv10x: Phiên bản Extra-large cho độ chính xác và hiệu năng tối đa.
Hiệu năng#
YOLOv10 vượt trội hơn các phiên bản YOLO trước đây và các model tiên tiến nhất khác về độ chính xác và hiệu quả. Ví dụ, YOLOv10s nhanh hơn RT-DETR-R18 1.8 lần với AP tương đương trên tập dữ liệu COCO, còn YOLOv10b có độ trễ thấp hơn 46% và ít tham số hơn 25% so với YOLOv9-C trong khi đạt hiệu năng tương đương.
Độ trễ được đo bằng TensorRT FP16 trên GPU T4.
| Model | Kích thước đầu vào | APval | FLOPs (G) | Độ trễ (ms) |
|---|---|---|---|---|
| [YOLOv10n][1] | 640 | 38.5 | 6.7 | 1.84 |
| [YOLOv10s][2] | 640 | 46.3 | 21.6 | 2.49 |
| [YOLOv10m][3] | 640 | 51.1 | 59.1 | 4.74 |
| [YOLOv10b][4] | 640 | 52.5 | 92.0 | 5.74 |
| [YOLOv10l][5] | 640 | 53.2 | 120.3 | 7.28 |
| [YOLOv10x][6] | 640 | 54.4 | 160.4 | 10.70 |
Phương pháp#
Gán kép nhất quán để huấn luyện không cần NMS#
YOLOv10 sử dụng phương pháp gán nhãn kép, kết hợp chiến lược one-to-many và one-to-one trong quá trình huấn luyện để đảm bảo giám sát phong phú và triển khai end-to-end hiệu quả. Theo mặc định, Ultralytics prediction và validation sử dụng đầu one-to-many cùng NMS; đặt nms=False để chọn đầu không cần NMS. Metric ghép cặp nhất quán giúp đồng bộ hóa việc giám sát giữa hai chiến lược, nâng cao chất lượng dự đoán trong quá trình suy luận.
Thiết kế model toàn diện dựa trên Hiệu quả-Độ chính xác#
Cải thiện hiệu quả#
- Đầu phân loại nhẹ: Giảm chi phí tính toán của đầu phân loại bằng cách sử dụng các phép tích chập phân tách theo chiều sâu.
- Giảm kích thước tách biệt không gian-kênh: Tách biệt việc giảm kích thước không gian và điều biến kênh để giảm thiểu mất mát thông tin và chi phí tính toán.
- Thiết kế khối được định hướng bằng thứ hạng: Điều chỉnh thiết kế khối dựa trên mức độ dư thừa nội tại của từng stage, đảm bảo sử dụng tham số tối ưu.
Cải thiện độ chính xác#
- Tích chập kernel lớn: Mở rộng trường tiếp nhận để tăng cường khả năng trích xuất đặc trưng.
- Self-Attention một phần (PSA): Tích hợp các module self-attention để cải thiện khả năng học biểu diễn toàn cục với chi phí tối thiểu.
Thử nghiệm và kết quả#
YOLOv10 đã được kiểm thử rộng rãi trên các benchmark tiêu chuẩn như COCO, cho thấy hiệu năng và hiệu quả vượt trội. Model đạt kết quả tiên tiến nhất trên nhiều biến thể khác nhau, thể hiện những cải thiện đáng kể về độ trễ và độ chính xác so với các phiên bản trước cũng như các bộ phát hiện hiện đại khác.
So sánh#

So với các bộ phát hiện tiên tiến nhất khác:
- YOLOv10s / x nhanh hơn RT-DETR-R18 / R101 lần lượt 1.8× / 1.3× với độ chính xác tương đương
- YOLOv10b có ít hơn 25% tham số và độ trễ thấp hơn 46% so với YOLOv9-C ở cùng độ chính xác
- YOLOv10l / x vượt trội hơn YOLOv8l / x lần lượt 0.3 AP / 0.5 AP, đồng thời có ít hơn 1.8× / 2.3× tham số
Các số liệu dưới đây được báo cáo trong bài báo YOLOv10, đo theo giao thức riêng của bài báo, do đó không thể so sánh trực tiếp với các giá trị trên trang model Ultralytics:
| Model | Params (M) | FLOPs (G) | mAPval 50-95 | Độ trễ (ms) | Độ trễ-forward (ms) |
|---|---|---|---|---|---|
| YOLOv6-3.0-N | 4.7 | 11.4 | 37.0 | 2.69 | 1.76 |
| Gold-YOLO-N | 5.6 | 12.1 | 39.6 | 2.92 | 1.82 |
| YOLOv8n | 3.2 | 8.7 | 37.3 | 6.16 | 1.77 |
| YOLOv10n | 2.3 | 6.7 | 38.5 | 1.84 | 1.79 |
| YOLOv6-3.0-S | 18.5 | 45.3 | 44.3 | 3.42 | 2.35 |
| Gold-YOLO-S | 21.5 | 46.0 | 45.4 | 3.82 | 2.73 |
| YOLOv8s | 11.2 | 28.6 | 44.9 | 7.07 | 2.33 |
| YOLOv10s | 7.2 | 21.6 | 46.3 | 2.49 | 2.39 |
| RT-DETR-R18 | 20.0 | 60.0 | 46.5 | 4.58 | 4.49 |
| YOLOv6-3.0-M | 34.9 | 85.8 | 49.1 | 5.63 | 4.56 |
| Gold-YOLO-M | 41.3 | 87.5 | 49.8 | 6.38 | 5.45 |
| YOLOv8m | 25.9 | 78.9 | 50.6 | 9.50 | 5.09 |
| YOLOv10m | 15.4 | 59.1 | 51.1 | 4.74 | 4.63 |
| YOLOv6-3.0-L | 59.6 | 150.7 | 51.8 | 9.02 | 7.90 |
| Gold-YOLO-L | 75.1 | 151.7 | 51.8 | 10.65 | 9.78 |
| YOLOv8l | 43.7 | 165.2 | 52.9 | 12.39 | 8.06 |
| RT-DETR-R50 | 42.0 | 136.0 | 53.1 | 9.20 | 9.07 |
| YOLOv10l | 24.4 | 120.3 | 53.2 | 7.28 | 7.21 |
| YOLOv8x | 68.2 | 257.8 | 53.9 | 16.86 | 12.83 |
| RT-DETR-R101 | 76.0 | 259.0 | 54.3 | 13.71 | 13.58 |
| YOLOv10x | 29.5 | 160.4 | 54.4 | 10.70 | 10.60 |
Các giá trị Params và FLOPs áp dụng cho model đã hợp nhất sau model.fuse(), thao tác này gộp các lớp Conv và BatchNorm, đồng thời loại bỏ đầu phát hiện one-to-many phụ trợ. 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.
Ví dụ sử dụng#
Model cũng có thể được huấn luyện trên GPU đám mây thông qua Ultralytics Platform. Để dự đoán trên hình ảnh mới bằng YOLOv10:
from ultralytics import YOLO
# Tải model YOLOv10n pretrained
model = YOLO("yolov10n.pt")
# Thực hiện phát hiện đối tượng trên hình ảnh
results = model("image.jpg")
# Hiển thị kết quả
results[0].show()Để huấn luyện YOLOv10 trên tập dữ liệu tùy chỉnh:
from ultralytics import YOLO
# Tải model YOLOv10n từ đầu
model = YOLO("yolov10n.yaml")
# Huấn luyện model
model.train(data="coco8.yaml", epochs=100, imgsz=640)Các tác vụ và chế độ được hỗ trợ#
Dòng model YOLOv10 cung cấp nhiều model khác nhau, mỗi model được tối ưu hóa để đạt hiệu năng cao trong Phát hiện đối tượng. Các model này đáp ứng nhu cầu tính toán và yêu cầu độ chính xác đa dạng, phù hợp với nhiều ứng dụng.
| Model | Tên tệp | Tác vụ | Huấn luyện | Validation | Suy luận | Export |
|---|---|---|---|---|---|---|
| YOLOv10 | yolov10n.pt yolov10s.pt yolov10m.pt yolov10b.pt yolov10l.pt yolov10x.pt | Phát hiện đối tượng | ✅ | ✅ | ✅ | ✅ |
Xuất YOLOv10#
Do các toán tử mới được giới thiệu trong YOLOv10, hiện chưa hỗ trợ tất cả các định dạng xuất do Ultralytics cung cấp. Bảng sau liệt kê những định dạng đã được chuyển đổi thành công bằng Ultralytics cho YOLOv10. Bạn có thể tạo pull request nếu có thể đóng góp thay đổi để bổ sung hỗ trợ xuất YOLOv10 sang các định dạng khác.
| Định dạng xuất | Hỗ trợ xuất | Suy luận với model đã xuất | Ghi chú |
|---|---|---|---|
| TorchScript | ✅ | ✅ | Định dạng model PyTorch tiêu chuẩn. |
| ONNX | ✅ | ✅ | Được hỗ trợ rộng rãi để triển khai. |
| OpenVINO | ✅ | ✅ | Được tối ưu hóa cho phần cứng Intel. |
| TensorRT | ✅ | ✅ | Được tối ưu hóa cho GPU NVIDIA. |
| CoreML | ✅ | ✅ | Chỉ dành cho thiết bị Apple. |
| TF SavedModel | ✅ | ✅ | Định dạng model tiêu chuẩn của TensorFlow. |
| TF GraphDef | ✅ | ✅ | Định dạng TensorFlow cũ. |
| TF Edge TPU | ✅ | ✅ | Dành riêng cho các thiết bị Edge TPU của Google. |
| LiteRT | ✅ | ✅ | Được tối ưu hóa cho thiết bị di động, hệ thống nhúng và trình duyệt (LiteRT.js). |
| PaddlePaddle | ❌ | ❌ | Phổ biến tại Trung Quốc; mức độ hỗ trợ toàn cầu thấp hơn. |
| NCNN | ✅ | ❌ | Toán tử torch.topk không được runtime NCNN hỗ trợ. |
Kết luận#
Khi ra mắt, YOLOv10 thiết lập một tiêu chuẩn mới cho phát hiện đối tượng thời gian thực bằng cách khắc phục những hạn chế của các phiên bản YOLO trước và tích hợp các chiến lược thiết kế đổi mới. Phương pháp không cần NMS của model tiên phong cho phát hiện đối tượng end-to-end trong dòng YOLO. Để xem model Ultralytics mới nhất với hiệu năng được cải thiện và suy luận không cần NMS, hãy xem YOLO26.
Trích dẫn và lời cảm ơn#
Chúng tôi xin ghi nhận các tác giả YOLOv10 tại Đại học Thanh Hoa vì những nghiên cứu chuyên sâu và đóng góp đáng kể cho framework Ultralytics:
@inproceedings{wang2024yolov10,
title={YOLOv10: Real-Time End-to-End Object Detection},
author={Wang, Ao and Chen, Hui and Liu, Lihao and Chen, Kai and Lin, Zijia and Han, Jungong and Ding, Guiguang},
booktitle={Advances in Neural Information Processing Systems},
doi = {10.52202/079017-3429},
url = {https://proceedings.neurips.cc/paper_files/paper/2024/file/c34ddd05eb089991f06f3c5dc36836e0-Paper-Conference.pdf},
volume={37},
pages={107984--108011},
year={2024}
}Để biết chi tiết về triển khai, các đổi mới trong kiến trúc và kết quả thực nghiệm, vui lòng tham khảo bài báo nghiên cứu YOLOv10 và kho GitHub của nhóm Đại học Thanh Hoa.
Câu hỏi thường gặp#
YOLOv10 do các nhà nghiên cứu tại Đại học Thanh Hoa phát triển, giới thiệu một số đổi mới quan trọng cho tác vụ phát hiện đối tượng thời gian thực. Model loại bỏ nhu cầu sử dụng triệt tiêu phi cực đại (NMS) bằng cách áp dụng phương pháp gán kép nhất quán trong quá trình huấn luyện và tối ưu hóa các thành phần của model để đạt hiệu năng vượt trội với chi phí tính toán thấp hơn. Để biết thêm chi tiết về kiến trúc và các tính năng chính, hãy xem mục Tổng quan về YOLOv10.
Để suy luận dễ dàng, bạn có thể sử dụng thư viện Python Ultralytics YOLO hoặc giao diện dòng lệnh (CLI). Dưới đây là các ví dụ dự đoán ảnh mới bằng YOLOv10:
Ví dụfrom ultralytics import YOLO # Tải model YOLOv10n đã được huấn luyện trước model = YOLO("yolov10n.pt") results = model("image.jpg") results[0].show()Để xem thêm ví dụ sử dụng, hãy truy cập mục Ví dụ sử dụng của chúng tôi.
YOLOv10 cung cấp một số biến thể model để đáp ứng các trường hợp sử dụng khác nhau:
- YOLOv10n: Phù hợp với môi trường có tài nguyên cực kỳ hạn chế
- YOLOv10s: Cân bằng giữa tốc độ và độ chính xác
- YOLOv10m: Dành cho mục đích sử dụng chung
- YOLOv10b: Độ chính xác cao hơn nhờ tăng chiều rộng
- YOLOv10l: Độ chính xác cao, đổi lại cần nhiều tài nguyên tính toán hơn
- YOLOv10x: Độ chính xác và hiệu năng tối đa
Mỗi biến thể được thiết kế cho các nhu cầu tính toán và yêu cầu độ chính xác khác nhau, nhờ đó phù hợp với nhiều ứng dụng. Xem mục Các biến thể model để biết thêm thông tin.
YOLOv10 được huấn luyện bằng phương pháp gán kép nhất quán để head một-một tạo ra một dự đoán tốt nhất duy nhất cho mỗi đối tượng, nhờ đó loại bỏ nhu cầu thực hiện loại bỏ cực đại không cục bộ (NMS) trong quá trình suy luận. Theo mặc định, Ultralytics dùng head một-nhiều với NMS cho dự đoán và xác thực; đặt
nms=Falseđể chọn head không dùng NMS và bỏ qua lượt xử lý NMS. Để xem giải thích chi tiết, hãy tham khảo mục Gán kép nhất quán cho quá trình huấn luyện không dùng NMS.YOLOv10 hỗ trợ một số định dạng xuất, bao gồm TorchScript, ONNX, OpenVINO và TensorRT. Tuy nhiên, hiện tại YOLOv10 chưa hỗ trợ tất cả định dạng xuất do Ultralytics cung cấp vì các phép toán mới của model. Để biết chi tiết về những định dạng được hỗ trợ và hướng dẫn xuất model, hãy truy cập mục Xuất YOLOv10.
YOLOv10 vượt trội hơn các phiên bản YOLO trước và những model tiên tiến khác cả về độ chính xác lẫn hiệu quả. Ví dụ, YOLOv10s nhanh hơn RT-DETR-R18 1.8 lần với AP tương đương trên bộ dữ liệu COCO. YOLOv10b có độ trễ thấp hơn 46% và ít hơn 25% tham số so với YOLOv9-C, trong khi đạt hiệu năng tương đương. Có thể xem benchmark chi tiết trong mục So sánh.