1. Tổng quan về Phát hiện đối tượng
Phát hiện đối tượng hay Object Detection là một tác vụ trong lĩnh vực Thị giác máy tính (Computer vision) nhằm mục đích phát hiện và xác định vị trí của các đối tượng cụ thể trong hình ảnh hoặc video. Tác vụ này bao gồm việc xác định vị trí cũng như ranh giới của các đối tượng trong hình ảnh và phân loại các đối tượng. Nó là một phần quan trọng của nhận dạng thị giác, bên cạnh phân loại và truy xuất hình ảnh.
Các phương pháp hiện đại có thể phân ra thành 2 loại chính: one-stage và two-stage:
- One-stage: ưu tiên tốc độ suy luận (inference speed), ví dụ như YOLO, SSD, RetinaNet
- Two-stage: ưu tiên độ chính xác của việc phát hiện (detection accuracy), ví dụ như Faster R-CNN, Mask R-CNN, Cascade R-CNN.
Các mô hình thường được đánh giá trên tập dữ liệu MSCOCO, dựa trên chỉ số Độ chính xác trung bình (Mean Average Precision – mAP).
2. “You Only Look Once”
You Only Look Once hay YOLO là một thuật toán phát hiện đối tượng thời gian thực tiên tiến, được giới thiệu vào năm 2015 bởi Joseph Redmon, Santosh Divvala, Ross Girshick, và Ali Farhadi trong bài báo nghiên cứu nổi tiếng của họ có tên “You Only Look Once: Unified, Real-Time Object Detection”.
Các tác giả đã định hình bài toán phát hiện đối tượng như một bài toán hồi quy thay vì bài toán phân loại, bằng cách tách không gian các hộp giới hạn (bounding boxes) và gán xác suất cho từng đối tượng được phát hiện bằng cách sử dụng một mạng nơ-ron tích chập (CNN) duy nhất.
Điểm đặc trưng của YOLO là khả năng thực hiện dự đoán toàn bộ hình ảnh trong một lần xử lý, giúp tăng tốc độ đáng kể so với các mô hình truyền thống khác như R-CNN hoặc Faster R-CNN, vốn yêu cầu thực hiện nhiều bước xử lý cho mỗi khung hình.
Kể từ khi phiên bản đầu tiên của YOLO ra mắt vào năm 2015, nó đã phát triển rất nhiều với các phiên bản khác nhau.
3. Tại sao lại là v8?
YOLOv8 phiên bản mới nhất trong YOLO series của Ultralytics, được thiết kế để cải thiện hiệu suất phát hiện đối tượng thời gian thực với các tính năng tiên tiến. Là một mô hình tiên tiến, hiện đại (state-of-the-art – SOTA), YOLOv8 kế thừa thành công từ các phiên bản trước, đồng thời giới thiệu những tính năng và cải tiến mới để nâng cao hiệu suất, tính linh hoạt và hiệu quả.
Khác với các phiên bản trước, YOLOv8 tích hợp cơ chế không dùng điểm neo (anchor-free) với phần đầu Ultralytics được tách riêng, sử dụng các kiến trúc backbone và neck tiên tiến, đồng thời tối ưu hóa sự cân bằng giữa độ chính xác và tốc độ, làm cho nó trở thành lựa chọn lý tưởng cho nhiều ứng dụng khác nhau. Do đó, YOLOv8 có thể hỗ trợ toàn bộ các tác vụ vision AI, bao gồm phát hiện đối tượng, phân đoạn, ước tính tư thế, theo dõi và phân loại. Tính đa dạng này cho phép người dùng tận dụng khả năng của YOLOv8 trong nhiều ứng dụng và lĩnh vực khác nhau.
YOLOv8 kế thừa nhiều ưu điểm từ các phiên bản trước đó, đồng thời mang lại một số cải tiến quan trọng:
- Tốc độ và hiệu suất: YOLOv8 được thiết kế để hoạt động nhanh hơn và hiệu quả hơn, ngay cả trên các thiết bị có tài nguyên hạn chế như điện thoại di động hay các thiết bị nhúng. Nhờ vào kiến trúc nhẹ, nó có thể đạt tốc độ xử lý lên tới hàng trăm khung hình mỗi giây.
- Độ chính xác cao hơn: YOLOv8 cải thiện khả năng phát hiện đối tượng nhỏ và các đối tượng phức tạp hơn, giúp tăng độ chính xác tổng thể.
- Dễ dàng tùy chỉnh: YOLOv8 cung cấp khả năng dễ dàng điều chỉnh mô hình và các siêu tham số (hyperparameters) để phù hợp với các bài toán thực tế khác nhau. Điều này làm cho mô hình trở nên linh hoạt trong các ứng dụng từ phát hiện đối tượng đến phân loại, phân đoạn (segmentation), và tracking đối tượng.
- Tích hợp tốt hơn với các framework mới: YOLOv8 tận dụng tốt các công nghệ và framework mới như PyTorch, đồng thời hỗ trợ việc huấn luyện và triển khai dễ dàng hơn qua các file ONNX, TensorRT.
4. Các phiên bản của mô hình YOLOv8
YOLOv8 cung cấp nhiều phiên bản mô hình khác nhau, phù hợp với từng yêu cầu cụ thể về tốc độ và độ chính xác. Ví dụ:
- YOLOv8n (Nano): Phiên bản nhỏ gọn, nhanh nhất, phù hợp cho các ứng dụng yêu cầu thời gian xử lý nhanh như trên các thiết bị nhúng.
- YOLOv8s (Small), YOLOv8m (Medium): Phiên bản cân bằng giữa tốc độ và độ chính xác, thích hợp cho các bài toán vừa và nhỏ.
- YOLOv8l (Large), YOLOv8x (Extra Large): Phiên bản lớn hơn, phù hợp cho các ứng dụng yêu cầu độ chính xác cao nhưng có thể chấp nhận tốc độ xử lý chậm hơn.
Dưới đây là bảng so sánh Performance của mô hình YOLOv8 Detection được train trên tập COCO, bao gồm 80 pre-trained classes.
5. Hướng dẫn sử dụng
- Các bạn cần cài đặt Python 3.8 x64 hoặc mới hơn.
- CUDA 11.8 và cuDNN 8.6.0
Nên có GPU NVIDIA để tăng tốc xử lý, nếu xử lý bằng CPU tốc độ sẽ chậm
Bạn cần cài đặt Pytorch, phiên bản chúng tôi đang sử dụng là 2.2.2
pip install torch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 --index-url https://download.pytorch.org/whl/cu118
Tiếp theo các bạn cài đặt ultralytics
pip install ultralytics
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from ultralytics import YOLO # Load a COCO-pretrained YOLOv8n model model = YOLO("yolov8n.pt") # Display model information (optional) model.info() # Train the model on the COCO8 example dataset for 100 epochs results = model.train(data="coco8.yaml", epochs=100, imgsz=640) # Run inference with the YOLOv8n model on the 'bus.jpg' image results = model("path/to/bus.jpg") |