Hướng Dẫn Huấn Luyện YOLOv8 Nhận Diện Quân Cờ Vua A-Z - Cole

Hướng Dẫn Huấn Luyện YOLOv8 Nhận Diện Quân Cờ Vua A-Z

20/10/2026 • 19 phút đọc •
Hướng Dẫn Huấn Luyện YOLOv8 Nhận Diện Quân Cờ Vua A-Z

Thị giác máy tính (Computer Vision) đang thay đổi cách con người số hóa và tương tác với thế giới thực. Trong lĩnh vực trò chơi trí tuệ, việc tự động hóa quá trình nhận diện thế trận cờ vua không chỉ hỗ trợ ghi lại biên bản ván đấu theo thời gian thực mà còn là nền tảng cốt lõi để phát triển các bàn cờ tự động thông minh hoặc robot chơi cờ.

Bài viết này hướng dẫn chi tiết quy trình xây dựng hệ thống nhận diện 12 loại quân cờ vua bằng mô hình YOLOv8, từ khâu xử lý dữ liệu trên nền tảng Roboflow, huấn luyện mô hình bằng điện toán đám mây Google Colab, cho đến việc triển khai kiểm thử thời gian thực qua webcam máy tính.

1. Giới thiệu bài toán nhận diện quân cờ vua với YOLOv8

Bài toán nhận diện quân cờ thuộc dạng bài toán phát hiện vật thể (Object Detection). Nhiệm vụ của mô hình là xác định chính xác vị trí khung bao (Bounding Box) và phân loại đúng danh tính của 12 lớp đối tượng trên bàn cờ, bao gồm 6 loại quân cờ là Vua, Hậu, Xe, Tượng, Mã, Tốt thuộc hai phe Trắng và Đen.

Ứng dụng thực tiễn của bài toán

Việc nhận diện chính xác các quân cờ mang lại nhiều giá trị ứng dụng cụ thể:

  • Số hóa ván đấu: Chuyển đổi trực tiếp hình ảnh bàn cờ thực tế thành định dạng ký hiệu chuẩn FEN (Forsyth-Edwards Notation) hoặc PGN (Portable Game Notation).

  • Tích hợp động cơ phân tích: Kết hợp với các công cụ phân tích nước đi như Stockfish để chấm điểm vị trí hoặc phát hiện gian lận.

  • Chế tạo phần cứng: Cung cấp tọa độ vật lý cho cánh tay robot hoặc hệ thống nam châm cơ điện tử di chuyển quân cờ tự động.

Ưu thế của YOLOv8 trong thị giác máy tính

YOLOv8 do Ultralytics phát triển là một trong những kiến trúc phát hiện vật thể tiên tiến nhất hiện nay. Những ưu điểm vượt trội khiến YOLOv8 được lựa chọn cho dự án này bao gồm:

  • Kiến trúc Anchor-free: Loại bỏ sự phụ thuộc vào các kích thước hộp neo định sẵn, giúp mô hình dự đoán vị trí hộp nhanh hơn và linh hoạt hơn với các vật thể có tỷ lệ khung hình thay đổi liên tục.

  • Tốc độ suy luận cao: Phiên bản Nano (YOLOv8n) cho phép đạt tốc độ khung hình từ 30 đến 60 khung hình mỗi giây ngay trên phần cứng thông thường.

  • Cấu trúc thư viện tinh gọn: Cung cấp cả giao diện dòng lệnh (CLI) lẫn thư viện Python, giúp việc thiết lập môi trường và huấn luyện trở nên đơn giản.

Bài toán nhận diện quân cờ vua với YOLOv8
Bài toán nhận diện quân cờ vua với YOLOv8

2. Chuẩn bị và xử lý dữ liệu cờ vua trên Roboflow

Dữ liệu đầu vào chiếm hơn 80 phần trăm sự thành bại của một mô hình học sâu. Trong bài toán nhận diện cờ vua, các quân cờ thường có chiều cao chênh lệch, kích thước nhỏ và dễ che khuất lẫn nhau khi nhìn từ các góc thấp.

2.1. Tìm kiếm và gán nhãn dữ liệu

Để bắt đầu, bạn có thể truy cập kho dữ liệu mở Roboflow Universe để tìm kiếm các tập dữ liệu cờ vua sẵn có, hoặc tự tải lên các hình ảnh chụp thực tế từ điện thoại hoặc webcam.

Quy tắc gán nhãn chuẩn:

  • Vẽ khung bao ôm sát biên dạng thực tế của từng quân cờ, không để dư khoảng trống nền quá nhiều.

  • Đối với các quân cờ bị che khuất một phần (Occlusion), vẫn vẽ khung bao trùm toàn bộ phần nhìn thấy được và phần ước lượng của quân cờ đó.

  • Định nghĩa đầy đủ 12 nhãn đối tượng: white-pawn, white-knight, white-bishop, white-rook, white-queen, white-king, black-pawn, black-knight, black-bishop, black-rook, black-queen, black-king.

2.2. Kỹ thuật tăng cường dữ liệu nhằm hạn chế Overfitting

Khi tập dữ liệu ban đầu còn khiêm tốn (dưới 500 ảnh), mô hình rất dễ gặp hiện tượng học vẹt (Overfitting). Việc áp dụng tăng cường dữ liệu (Data Augmentation) ngay trên Roboflow giúp mô hình thích nghi tốt hơn với môi trường thực tế:

  • Điều chỉnh độ sáng và độ tương phản: Mô phỏng điều kiện ánh sáng phòng khác nhau, từ phòng quá sáng đến điều kiện thiếu sáng.

  • Chuyển đổi ảnh xám (Grayscale) hoặc biến đổi sắc độ: Giúp mô hình tập trung học cấu trúc hình khối của quân cờ thay vì chỉ dựa vào màu sắc ánh sáng phản chiếu.

  • Cắt xén (Crop) và xoay góc nghiêng: Giúp mô hình nhận diện tốt khi góc đặt camera thay đổi từ góc nhìn từ trên xuống (Top-down view) sang góc nhìn nghiêng 45 độ.

2.3. Xuất tập dữ liệu định dạng YOLOv8

Sau khi hoàn tất bước tăng cường dữ liệu, tạo một phiên bản dữ liệu (Version) mới:

  • Thiết lập tỷ lệ phân chia tập dữ liệu: Khuyến nghị tỷ lệ 70 phần trăm cho tập huấn luyện (Train), 20 phần trăm cho tập kiểm định (Validation), và 10 phần trăm cho tập kiểm thử (Test).

  • Chọn định dạng xuất là YOLOv8.

  • Sao chép đoạn mã API tải dữ liệu (Roboflow Code Snippet) để nạp trực tiếp vào môi trường huấn luyện.

3. Huấn luyện mô hình YOLOv8 trên Google Colab

Google Colab cung cấp môi trường tính toán đám mây với GPU miễn phí, giúp rút ngắn thời gian huấn luyện mô hình từ nhiều giờ xuống còn khoảng 15 đến 20 phút.

3.1. Thiết lập môi trường GPU và cài đặt thư viện

Bước đầu tiên là kích hoạt bộ tăng tốc phần cứng GPU trên Google Colab:

  • Vào menu Chỉnh sửa, chọn Cài đặt sổ tay, tại mục Bộ tăng tốc phần cứng chọn T4 GPU.

  • Kiểm tra phần cứng bằng câu lệnh kiểm tra thông tin card đồ họa:

!nvidia-smi

Cài đặt thư viện Ultralytics bằng lệnh:

!pip install ultralytics

Tải tập dữ liệu từ Roboflow về Colab bằng đoạn mã trích xuất:

from roboflow import Roboflow

rf = Roboflow(api_key=YOUR_API_KEY)
project = rf.workspace(WORKSPACE_NAME).project(PROJECT_NAME)
version = project.version(1)
dataset = version.download(yolov8)

3.2. Cấu hình tham số và tiến hành huấn luyện

Sử dụng phiên bản trọng số nạp sẵn yolov8n.pt để thực hiện kỹ thuật Transfer Learning. Cú pháp thực thi qua dòng lệnh như sau:

!yolo task=detect mode=train model=yolov8n.pt data={dataset.location}/data.yaml epochs=50 imgsz=640 plots=True

Giải thích các siêu tham số cơ bản:

  • task=detect: Khai báo tác vụ phát hiện vật thể.

  • model=yolov8n.pt: Sử dụng mô hình cơ sở Nano với dung lượng nhẹ, tối ưu cho các thiết bị biên hoặc webcam.

  • data: Đường dẫn tới file cấu hình data.yaml chứa thông tin đường dẫn ảnh và tên 12 lớp quân cờ.

  • epochs=50: Số vòng lặp huấn luyện toàn bộ tập dữ liệu. Với bài toán khởi đầu, 50 vòng là mốc thích hợp để quan sát xu hướng hội tụ.

  • imgsz=640: Kích thước ảnh chuẩn hóa khi đưa vào mạng nơ-ron.

3.3. Đọc hiểu biểu đồ Loss và đánh giá hiệu năng

Trong quá trình huấn luyện, thư viện sẽ tự động lưu lại các biểu đồ đánh giá trong thư mục kết quả:

  • Hàm mất mát vị trí (box_loss): Đo lường độ sai lệch giữa khung bao dự đoán và khung bao thực tế. Giá trị này cần giảm dần và tiệm cận mức thấp ổn định.

  • Hàm mất mát phân loại (cls_loss): Đo lường độ chính xác khi phân loại nhãn đối tượng. Nếu cls_loss giảm đều qua từng epoch, mô hình đang học tốt đặc trưng của từng quân cờ.

  • Hàm mất mát tiêu cự phân phối (dfl_loss): Tối ưu hóa việc dự đoán ranh giới vật thể khi biên đối tượng không rõ ràng.

  • Chỉ số mAP50 và mAP50-95: Đây là tiêu chuẩn vàng để đánh giá mô hình phát hiện vật thể. Một mô hình nhận diện tốt quân cờ thường cần đạt mAP50 từ 0.8 trở lên trên tập kiểm định.

Biểu đồ đánh giá kết quả huấn luyện mô hình YOLOv8 nhận diện quân cờ vua qua 50 epoch
Biểu đồ đánh giá kết quả huấn luyện mô hình YOLOv8 nhận diện quân cờ vua qua 50 epoch

4. Triển khai nhận diện thời gian thực qua Webcam với Python

Sau khi quá trình huấn luyện hoàn tất, bước tiếp theo là đưa mô hình về máy tính cá nhân để chạy trực tiếp trên hình ảnh thu từ webcam.

4.1. Tải file trọng số tối ưu

Trong cây thư mục của Google Colab, tìm đường dẫn runs/detect/train/weights và tải file best.pt về máy tính. Đây là tệp lưu giữ bộ trọng số đạt hiệu năng cao nhất trên tập kiểm định trong suốt 50 epoch vừa qua.

4.2. Viết mã kiểm thử với OpenCV và YOLOv8

Trên môi trường lập trình cục bộ (sử dụng PyCharm hoặc Visual Studio Code), cài đặt hai thư viện cần thiết:

pip install ultralytics opencv-python

Tạo một file mã nguồn Python (ví dụ: main.py) với nội dung xử lý luồng video như sau:

import cv2
from ultralytics import YOLO

# Nạp mô hình trọng số đã huấn luyện
model = YOLO(best.pt)

# Mở luồng ghi hình từ webcam mặc định
cap = cv2.VideoCapture(0)

# Cấu hình độ phân giải cho camera
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

while cap.isOpened():
    success, frame = cap.read()
    if not success:
        break

    # Thực hiện dự đoán với ngưỡng tin cậy 0.6
    results = model.predict(source=frame, conf=0.6, stream=True)

    # Hiển thị các hộp nhận diện lên khung hình
    for r in results:
        annotated_frame = r.plot()

    cv2.imshow(Nhan dien Quan co YOLOv8, annotated_frame)

    # Nhấn phím q để thoát chương trình
    if cv2.waitKey(1) & 0xFF == ord(q):
        break

cap.release()
cv2.destroyAllWindows()

4.3. Kiểm thử thực tế trên bàn cờ vật lý

Khi chương trình khởi chạy:

  • Đặt bàn cờ trong vùng quan sát của camera.

  • Quan sát độ trễ khung hình (FPS) và độ chính xác của các nhãn dán trên từng quân cờ.

  • Di chuyển một số quân cờ để kiểm tra khả năng bắt bắt chuyển động và sự ổn định của khung bao.

Biểu đồ dưới đây mô tả việc áp dụng Yolo-SPP (bỏ qua phần DC Block)
Biểu đồ dưới đây mô tả việc áp dụng Yolo-SPP (bỏ qua phần DC Block)

5. Xử lý các lỗi thường gặp khi triển khai YOLO thực tế

Trong môi trường thực tế, người học thường gặp phải những vấn đề kỹ thuật khiến kết quả nhận diện không đạt như kỳ vọng trong môi trường lý thuyết. Dưới đây là ba vấn đề phổ biến nhất và cách khắc phục:

5.1. Khắc phục lỗi Bounding Box bị rung giật liên tục

Hiện tượng: Khung nhận diện nhấp nháy, xuất hiện rồi biến mất liên tục giữa các khung hình kề nhau dù quân cờ đứng yên.

Nguyên nhân: Ngưỡng tin cậy (Confidence Threshold) đang đặt ở mức quá nhạy (ví dụ 0.25 hoặc 0.3), khiến các quân cờ ở rìa ngưỡng xác suất bị dao động liên tục giữa trạng thái phát hiện và không phát hiện.

Giải pháp:

  • Nâng ngưỡng tin cậy dự đoán lên mức 0.6 hoặc 0.7 trong hàm model.predict.

  • Áp dụng bộ lọc làm mịn tọa độ theo thời gian (Moving Average Filter) hoặc thuật toán theo dõi vật thể (Object Tracking như ByteTRACK) để duy trì sự nhất quán của vị trí khung qua các khung hình liên tiếp.

5.2. Giải quyết hiện tượng lệch miền dữ liệu (Domain Shift)

Hiện tượng: Mô hình đạt chỉ số mAP rất cao trên tập kiểm định của Colab (trên 90 phần trăm), nhưng khi soi webcam thực tế thì nhận diện rất kém hoặc nhận diện nhầm quân Hậu thành quân Vua.

Nguyên nhân: Sự khác biệt lớn giữa môi trường chụp ảnh huấn luyện và môi trường thực tế. Tập dữ liệu tải trên mạng thường chụp từ góc vuông từ trên xuống dưới ánh sáng studio, trong khi webcam máy tính lại đặt góc chéo 45 độ, chất lượng cảm biến thấp hơn và có bóng đổ phức tạp.

Giải pháp:

  • Thu thập dữ liệu thực chiến: Dùng chính chiếc webcam sẽ sử dụng để quay lại toàn bộ bàn cờ từ nhiều góc độ khác nhau (quay tròn 180 độ, thay đổi cự ly gần xa).

  • Cắt video thành các khung hình rời rạc, tải lên Roboflow, tiến hành gán nhãn bổ sung và huấn luyện tinh chỉnh (Fine-tuning) lại mô hình với bộ dữ liệu hỗn hợp này.

5.3. Hướng tiếp cận hai giai đoạn cho các quân cờ tương đồng

Hiện tượng: YOLOv8 nhận diện đúng vị trí quân cờ nhưng thường xuyên nhầm lẫn giữa các quân có hình thái tương đối giống nhau như Vua và Hậu, hoặc các quân Tốt đứng chen chúc nhau ở trung cuộc.

Nguyên nhân: YOLO là mô hình một giai đoạn (One-stage Detector), tối ưu hóa đồng thời vị trí và nhãn đối tượng trên toàn bộ bức ảnh, nên đôi khi bỏ sót các đặc trưng hoa văn chi tiết ở phần đỉnh quân cờ.

Giải pháp kiến trúc:

  • Tách bài toán thành hai giai đoạn: Giai đoạn một sử dụng YOLO chỉ để phát hiện một nhãn duy nhất là quân cờ nhằm xác định tọa độ khung bao.

  • Giai đoạn hai cắt phần ảnh chứa quân cờ đó và đưa qua một mạng phân loại chuyên biệt (như ResNet hoặc MobileNet) đã được huấn luyện riêng để phân định chính xác đó là quân cờ nào. Cách tiếp cận này giúp mô hình hoạt động ổn định và chính xác hơn đáng kể trong các ứng dụng thi đấu thực tế.

6. Câu hỏi thường gặp

Mô hình có thể chạy mượt mà trên máy tính không có card đồ họa rời hay không? Có. Bản YOLOv8 Nano được tối ưu hóa rất tốt cho việc suy luận trên CPU. Bạn có thể tận dụng GPU của Google Colab để huấn luyện mô hình, sau đó tải trọng số best.pt về chạy suy luận trên CPU máy tính cá nhân với tốc độ xử lý dao động từ 25 đến 35 khung hình mỗi giây.

Làm thế nào để biết mô hình nên dừng ở bao nhiêu epoch? Thay vì đặt một con số cố định, bạn có thể thiết lập tham số patience trong lệnh huấn luyện của Ultralytics (ví dụ: patience=15). Khi chỉ số mAP trên tập kiểm định không có sự cải thiện sau 15 epoch liên tiếp, tiến trình huấn luyện sẽ tự động kích hoạt tính năng dừng sớm (Early Stopping) để tiết kiệm tài nguyên tính toán và chống quá khớp dữ liệu.

Làm cách nào để chuyển đổi tọa độ Bounding Box thành vị trí ô cờ như E4 hoặc D5? Bạn cần kết hợp thêm thuật toán Biến đổi phối cảnh (Perspective Transform) trong thư viện OpenCV. Bằng cách xác định 4 góc của bàn cờ thực tế, thuật toán sẽ nắn thẳng hình ảnh bàn cờ thành một hình vuông chuẩn 8 nhân 8 ô. Từ đó, chỉ cần lấy tọa độ đáy của khung nhận diện quân cờ để đối chiếu với lưới tọa độ ma trận tương ứng.

7. Tổng kết

Việc xây dựng một hệ thống nhận diện quân cờ vua bằng YOLOv8 là bước đệm lý tưởng cho bất kỳ ai muốn nắm vững quy trình phát triển một ứng dụng thị giác máy tính hoàn chỉnh. Thành công của mô hình không chỉ phụ thuộc vào thuật toán học sâu hiện đại mà phần lớn nằm ở tư duy thu thập dữ liệu đúng miền thực tế và kỹ năng xử lý các bài toán phát sinh khi triển khai.

Hãy bắt đầu từ việc chuẩn bị một tập dữ liệu nhỏ, kiểm thử qua Google Colab, và liên tục tinh chỉnh dựa trên phản hồi của mô hình để từng bước hoàn thiện dự án cờ vua thông minh của riêng bạn.

Chia sẻ bài viết