0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Giới Thiệu YOLOv8-Pose: Giải Pháp Phát Hiện Biển Số Xe và Căn Cước Công Dân

Đăng vào 4 tuần trước

• 4 phút đọc

1. Giới Thiệu

Trong lĩnh vực Computer Vision, pose estimation (ước tính tư thế) đã nổi lên như một trong những ứng dụng quan trọng nhất, đặc biệt kể từ khi YOLOv8 ra đời với những cải tiến mạnh mẽ. Bài viết này sẽ phân tích YOLOv8-Pose và hướng dẫn bạn cách huấn luyện mô hình để giải quyết các vấn đề liên quan đến việc nhận diện biển số xe và căn cước công dân.

Khi thực hiện các bài toán phát hiện như biển số xe hay căn cước, thường gặp phải vấn đề là thông tin bị mất do góc chéo của ảnh. Một số phương pháp giải quyết mà mình đã tìm hiểu và áp dụng qua quá trình làm việc bao gồm:

  • Sử dụng WPOD: Phương pháp này giúp chuẩn hóa hình ảnh về hướng chính diện. Tuy nhiên, một nhược điểm lớn là thời gian suy luận (inference time) kéo dài, làm chậm quy trình tổng thể của hệ thống.

  • Label 4 góc: Gán nhãn các góc ảnh theo thứ tự top left, top right, bottom right, bottom left để đưa vào mô hình Object Detection và từ đó cắt ảnh cần xử lý. Tuy nhiên, cũng cần lưu ý rằng phương pháp này có thể mắc phải tình trạng False Positive khi các yếu tố như cạnh bàn hay góc vở xuất hiện.

  • Segmentation: Mặc dù có thể sử dụng segmentation, nhưng điều này sẽ dẫn đến mất mát thông tin nếu biển số hay căn cước bị che khuất, gây khó khăn trong quá trình OCR.

Vì vậy, giải pháp tốt nhất cho những vấn đề này là áp dụng các keypoints được định nghĩa trong YOLOv8-Pose để phát hiện biển số xe và căn cước công dân một cách hiệu quả và chính xác.

2. Cơ Chế Hoạt Động Của YOLOv8-Pose

2.1 Kiến trúc mạng Neural

  • Backbone: Sử dụng CSPDarknet làm cấu trúc chính với các khối Cross Stage Partial (CSP) nhằm trích xuất đặc trưng.
  • Neck: Kết hợp Feature Pyramid Network (FPN) để xử lý các đối tượng ở nhiều tỷ lệ khác nhau.
  • Head: Gồm 4 đầu giải mã (decouple head) ở các tỉ lệ khác nhau để đồng thời dự đoán hộp giới hạn (bounding box) và điểm mốc (keypoint).
    • Nhánh phát hiện đối tượng (bounding box).
    • Nhánh ước tính keypoints.

2.2 Quá Trình Xử Lý

2.2.1 Tiền Xử Lý Ảnh

  • Chuẩn hóa kích thước ảnh.
  • Áp dụng data augmentation.
  • Chuẩn hóa màu sắc và độ sáng.

2.2.2 Phát Hiện Đối Tượng

  • Xác định bounding box cho từng đối tượng trong ảnh.
  • Tính toán độ tin cậy (confidence score) cho mỗi đối tượng được phát hiện.

2.2.3 Ước Tính Keypoints

  • Xác định số lượng keypoints (17 keypoint khi sử dụng bộ dữ liệu COCO cho pose estimation của người, trong trường hợp này là 4 keypoints cho biển số và căn cước).
  • Tính toán độ tin cậy cho từng keypoint.
  • Kết nối các keypoints để tạo thành skeleton (khung xương).

2.3 Hàm Mất Mát

YOLO-Pose sử dụng hai hàm loss chính là CIoU cho hộp giới hạn và OKS loss (Object Keypoint Similarity) cho các keypoint.

  • CIoU loss:
    • Hàm loss được sử dụng cho việc giám sát hộp giới hạn, là một biến thể nâng cấp của hàm loss IOU, giúp tối ưu hóa chỉ số đánh giá (metrics) hiệu quả.
  • OKS loss:
    • Đây là một trong những điểm cải tiến nổi bật của YOLO-Pose so với các phương pháp pose estimation truyền thống. OKS loss ổn định hơn trong quá trình huấn luyện và tối ưu hóa các keypoint chính xác hơn.

Tổng kết lại, OKS loss mang lại nhiều lợi ích:

  • Bất biến với tỉ lệ: Điều chỉnh tự động theo kích thước của đối tượng.
  • Ưu tiên các keypoint quan trọng: Đảm bảo các điểm này được xử lý chính xác ngay cả với sai lệch nhỏ.
  • Ổn định trong quá trình huấn luyện: Cải thiện hiệu suất học tập tổng thể.

3. Huấn Luyện Mô Hình YOLOv8-Pose Cho 4 Keypoints

Để huấn luyện mô hình YOLOv8-Pose cho 4 keypoints, đầu tiên bạn cần chuẩn bị dữ liệu gán nhãn theo kiểu tạo polygon trong Labelme. Trong file config data.yaml, bạn cần sửa đổi một số thông số, lưu ý rằng không nên để flip_idx do tính không đối xứng của dữ liệu, đảm bảo định dạng keypoint-shape chính xác.

Khi huấn luyện, hãy thiết lập tham số flipup và flipur trong file arg.yaml thành 0. Sau khi hoàn tất quá trình huấn luyện, bạn có thể viết thêm một hàm để thực hiện điểm biến đổi hình ảnh (perspective transform) như đã trình bày.

Kết quả của quá trình huấn luyện này sẽ phụ thuộc vào số lượng ảnh bạn sử dụng. Trong ví dụ này, mô hình chỉ được huấn luyện trên 100 ảnh và 50 epoch, do đó kết quả có thể chưa chính xác hoàn toàn. Để có kết quả tốt hơn, bạn nên sử dụng một bộ dữ liệu lớn hơn.

4. Tài Liệu Tham Khảo

  1. https://arxiv.org/pdf/2204.06806
  2. https://www.mdpi.com/2079-9292/13/6/1046
    source: viblo
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào