Trong lĩnh vực Object Detection, việc huấn luyện mô hình với tập dữ liệu mới ngày càng trở nên đơn giản và hiệu quả. Bài viết này Cốc Cốc sẽ hướng dẫn bạn các bước huấn luyện YOLOv8 để phát hiện gấu trúc (panda detection) – một ví dụ cụ thể có thể áp dụng cho bất kỳ đối tượng nào khác.
Nội dung chính
YOLOv8 là gì?
YOLO (You Only Look Once) là một trong những kiến trúc nổi bật và phổ biến nhất trong lĩnh vực Object Detection. Sau thành công của YOLOv5, Ultralytics đã giới thiệu YOLOv8 – phiên bản cải tiến với độ chính xác và hiệu suất vượt trội hơn so với các phiên bản trước. Điểm mạnh của YOLOv8 là đi kèm với tài liệu và hướng dẫn chi tiết, giúp người dùng dễ dàng tùy chỉnh và xây dựng mô hình cho nhiều bài toán khác nhau.

Chuẩn bị dữ liệu
Để bắt đầu huấn luyện mô hình, điều quan trọng nhất là chuẩn bị dữ liệu ảnh và nhãn (images & labels). Có thể xem dữ liệu như những viên gạch để xây nhà – nếu thiếu chúng, việc xây dựng mô hình gần như không thể thực hiện.
Tập hợp ảnh
Có nhiều cách để thu thập ảnh phục vụ huấn luyện:
- Sử dụng Open Images Dataset: bộ dữ liệu khổng lồ với hơn 9 triệu ảnh thuộc hơn 6.000 danh mục khác nhau.
- Tìm kiếm trên Internet (Google, Bing, …), nhưng cần chú ý đến bản quyền hình ảnh.
- Trích xuất khung hình từ video để lấy thêm dữ liệu phong phú.
- Tự chụp ảnh phù hợp với đối tượng cần huấn luyện.
Trong ví dụ minh họa của bài viết, mình sẽ sử dụng thư viện FiftyOne để tải ảnh trực tiếp từ Open Images Dataset.

Bộ dữ liệu sau khi tải về sẽ gồm 3 thư mục, trong đó chúng ta chỉ sử dụng thư mục data chứa ảnh để tiến hành bước gán nhãn tiếp theo.

Gán nhãn
Để gán nhãn cho dữ liệu, mình sử dụng công cụ LabelImg. Với khoảng 130 ảnh, quá trình này mất hơn 1 giờ đồng hồ. Thực tế, đây là công đoạn tốn khá nhiều thời gian và có phần nhàm chán, nhưng lại vô cùng quan trọng, giống như muốn xây nhà thì phải có gạch vậy.

Khi xuất file, bạn cần chọn định dạng YOLO để đảm bảo dữ liệu tương thích với mô hình trong bước huấn luyện.

Sau khi gán nhãn, mỗi bức ảnh sẽ đi kèm một file .txt chứa thông tin về các đối tượng trong ảnh. Mỗi dòng trong file thể hiện một đối tượng, bao gồm 5 giá trị:
- Class ID (đối tượng)
- Tọa độ trung tâm X
- Tọa độ trung tâm Y
- Chiều rộng
- Chiều cao
Lưu ý: tất cả các tọa độ và kích thước đều đã được chuẩn hóa về khoảng (0, 1) theo yêu cầu của YOLO.
Ví dụ: một ảnh có chứa gấu trúc sẽ có file nhãn kèm theo với các dòng mô tả đường bao đối tượng bằng các giá trị này.

Sắp xếp thư mục ảnh và nhãn
Sau khi đã chuẩn bị đầy đủ ảnh và nhãn, bước tiếp theo là tổ chức dữ liệu thành cấu trúc thư mục chuẩn để mô hình YOLOv8 có thể đọc và huấn luyện.
Cấu trúc tổng quan:
datasets
├── custom_yolov8.yaml
└── images_and_labels
- File custom_yolov8.yaml: Đây là file cấu hình, chứa đường dẫn tới thư mục ảnh cũng như thông tin về số lớp (classes) và tên đối tượng.

- Thư mục images_and_labels: Chứa toàn bộ ảnh và nhãn được sắp xếp như sau:

Trong đó:
- Thư mục images/ chứa toàn bộ ảnh, được chia thành train, valid, và test.
- Thư mục labels/ chứa các file nhãn .txt tương ứng với ảnh trong tập train và valid.
- Ảnh trong thư mục test dùng để đánh giá chất lượng mô hình sau khi huấn luyện.
Huấn luyện mô hình
Cài đặt thư viện cần thiết
Đầu tiên, bạn cần cài đặt Ultralytics YOLOv8 thông qua pip install – công cụ quản lý thư viện trong Python:
!pip install ultralytics==8.0.20
Sau đó, khởi tạo mô hình YOLO bằng cách import thư viện:
from ultralytics import YOLO
model = YOLO(‘yolov8n.pt’)
Ở đây, yolov8n.pt là mô hình YOLOv8 bản nano, nhẹ và phù hợp để thử nghiệm.
Tiến hành huấn luyện
Khi dữ liệu và cấu hình đã sẵn sàng, việc huấn luyện mô hình trở nên khá đơn giản:

Trong đó:
- data: đường dẫn tới file cấu hình dataset (custom_yolov8.yaml).
- imgsz: kích thước ảnh đầu vào (ví dụ 416×416).
- epochs: số vòng lặp huấn luyện toàn bộ tập train.
- batch: số lượng ảnh xử lý trong một lượt huấn luyện.
- name: tên thư mục chứa kết quả mô hình sau khi train.
Kết quả
Sau khi huấn luyện hoàn tất, các thông số (metrics) của quá trình training sẽ được tự động lưu trong thư mục mô hình (ví dụ: custom_model) dưới dạng biểu đồ results.png.
Bạn có thể hiển thị kết quả trực tiếp bằng đoạn lệnh:



Trong đó:
- best.pt: mô hình có hiệu suất tốt nhất, được chọn dựa trên chỉ số Average Precision của tập validation.
- last.pt: mô hình được lưu ở vòng huấn luyện cuối cùng.
Dự đoán với mô hình được huấn luyện

- imgsz: kích thước ảnh đầu vào (độ phân giải).
- source: đường dẫn đến thư mục chứa ảnh cần dự đoán.
- name: tên thư mục con để lưu lại kết quả.
- save: tùy chọn cho phép lưu ảnh đã được dự đoán.
- conf: ngưỡng độ tin cậy của dự đoán.
Kết quả sau khi chạy sẽ được lưu trong thư mục:
/runs/detect/test_custom_model/
(Nếu chạy nhiều lần, YOLOv8 sẽ tự tạo thêm các thư mục mới như test_custom_model1, test_custom_model2, …).

Qua bài viết, chúng ta đã đi qua toàn bộ quy trình huấn luyện mô hình Object Detection với YOLOv8. Dù công đoạn chuẩn bị dữ liệu chiếm nhiều thời gian nhất, nhưng các bước huấn luyện và dự đoán lại khá đơn giản. Với chỉ hơn 100 ảnh, mô hình đã cho kết quả ổn định. Cóc Cốc hy vọng hướng dẫn này sẽ giúp bạn tự xây dựng được những mô hình thú vị cho riêng mình.