Computer Vision

[Object Detection] 7 bước để xây dựng Single Object Detector với HOG và Linear SVM

Xin chào, trong bài viết này chúng ta sẽ tìm hiểu 7 bước để xây dựng cho riêng mình một bộ Single Object Detector đơn giản với HOG descriptor và Linear SVM classifier.

Mặc dù các Deep Learning Object Detection Frameworks như Faster R-CNN, SSD và YOLO đã thể hiện khả năng vượt trội so với các phương pháp cũ, việc tìm hiểu HOG-SVM vẫn rất hữu ích để hiểu rõ hơn về bài toán Object Detection.


BƯỚC 1: CHUẨN BỊ DỮ LIỆU

Tương tự với bài toán phân loại, chúng ta cần Training Set chứa Positive Samples (các bức ảnh chứa đối tượng mà chúng ta quan tâm) và Negative Samples (các bức ảnh hoàn toàn không chứa đối tượng).

Đối với Positive Sample, chúng ta sẽ sử dụng một annotation tool để đánh dấu các bounding boxes trong từng bức ảnh, cá nhân mình sử dụng imglab. Thông tin về các Bounding Boxes sẽ được lưu vào một file có định dạng XML hoặc JSON để chúng ta có thể sử dụng ở các bước tiếp theo.

Hình 1 – Đánh dấu bounding boxes với imglab
Hình 2 – Cấu trúc file xml của imglab

Từ file annotation của imglab, chúng ta sẽ thu thập được bounding boxes của tất cả đối tượng trong Positive Samples, vì vậy có thể tính toán ra kích thước trung bình của chúng. Kích thước này sẽ được dùng để thu thập các vùng hình ảnh trong Negative Samples.

Để đánh giá hiệu năng của bộ Detector, chúng ta cần chuẩn bị Testing Set. Testing Set chứa các bức ảnh Positive (mỗi bức ảnh Positive chỉ chứa 1 đối tượng duy nhất) và được gắn Bounding Boxes tương tự như Positive Samples của Training Set.

BƯỚC 2: TÍNH TOÁN HISTOGRAMS OF ORIENTED GRADIENTS

Để sử dụng HOGs làm feature vectors, chúng ta cần đảm bảo tất cả các bức ảnh trong Training Set phải cùng kích thước bằng cách resize về kích thước trung bình của các Bounding Boxes.

Khi tính toán HOG, chúng ta cần chú ý các tham số sau:

  • pixels per cell: số lượng pixels có trong một cell;
  • cells per block: số lượng cells có trong một block, thường 2×2 hoặc 3×3;
  • orientations: số khoảng giá trị của histogram, thường là 9.

Mình đã có một bài viết về HOG, các bạn có thể đọc thêm tại đây.

Chúng ta sẽ tính toán HOG cho tất cả các bức ảnh (gồm positive và negative) đã chuẩn bị ở bước 1 và sử dụng làm Training Data. Bên cạnh đó, Training Labels sẽ là 1 vector có kích thước bằng tổng số lượng bức ảnh đã chuẩn bị, với giá trị +1 dành cho positive image và -1 dành cho negative image.

BƯỚC 3: SOFT TRAIN

Chúng ta sẽ sử dụng Linear SVM classifier và Training Set (gồm Training Data và Training Labels) để train cho bộ detector.

BƯỚC 4: HARD NEGATIVE-MINING

Để nâng cao hiệu suất của bộ detector (cụ thể hơn là giảm False-Positive), chúng sẽ áp dụng bộ classifier nhận được từ bước 3 lên các bức ảnh trong Negative Samples. Các tham số quan trọng cần chú ý là: kích thước của Sliding Window, khoảng cách di chuyển của Sliding Window và tỉ lệ thu nhỏ bức ảnh input khi thực hiện Multiscale Detect.

Những đối tượng được phát hiện trong Negative Samples (tất nhiên chỉ là False-Positive) sẽ được tính toán HOG và thêm vào Training Set với label là -1.

BƯỚC 5: HARD TRAIN

Đến bước này, chúng ta tiếp tục sử dụng Linear SVM để train bộ detector một lần nữa với toàn bộ Training Set (đã bao gồm Hard Negative Samples).

BƯỚC 6: ÁP DỤNG NON-MAXIMUM SUPPRESSION

Khi áp dụng Object Detector, một vấn đề mà chúng ta chắc chắn sẽ gặp đó là “Overlapping bounding boxes”, tức là một đối tượng được phát hiện nhiều lần bởi bộ detector, gây ra sự trùng lặp, xem hình 3.

Hình 3 – Overlapping bounding boxes

Để giải quyết vấn đề này, chúng ta sử dụng thuật toán Non-max Suppression, kết quả nhận được sẽ như hình 4.

Hình 4 – Sau khi áp dụng Non-max Suppression

Nói một cách đơn giản, Non-max Suppression sẽ chọn ra các Bounding Boxes có xác suất chứa đối tượng cao nhất và không chồng lấn lên nhau (hoặc tỉ lệ chồng lấn nhỏ hơn một giá trị threshold nhất định, ví dụ là 0.5), các Bounding Boxes còn lại sẽ bị loại bỏ.

BƯỚC 7: ĐÁNH GIÁ HIỆU NĂNG

Tương tự với bài toán Classification, để đánh giá hiệu năng của một bộ Object Detector, chúng ta cần tính toán Precision, Recall và F1-score khi áp dụng bộ Detector lên Testing Set. Tuy nhiên, vì output của bộ Detector là vị trí của đối tượng mà nó phát hiện (không phải là những Labels cụ thể tương ứng với các Classes như bài toán Classification), chúng ta cần có một phương pháp để so sánh Bounding Boxes mà bộ Detector tìm được và Bounding Boxes thực sự trong Testing Set.

Để thực hiện điều đó, chúng ta sẽ sử dụng giá trị Intersection over Union (IoU), xem hình 5. Nếu IoU lớn hơn một giá trị threshold (ví dụ là 0.5) thì có thể nói rằng Bounding Box mà bộ Detector tìm được là chính xác; ngược lại thì Bounding Box đó chỉ là False-Positive, nhờ đó chúng ta có thể dễ dàng tính được Precision, Recall và F1-score.

Hình 5 – Intersection over Union (nguồn: pyimagesearch.com)

Qua bài viết này chúng ta đã tìm hiểu về 7 bước để xây dựng một bộ Single Object Detection với HOG và SVM classifier. Cảm ơn các bạn đã theo dõi bài viết.
Thân ái và quyết thắng.


References:
[1] A gentle guide to deep learning object detection.

One thought on “[Object Detection] 7 bước để xây dựng Single Object Detector với HOG và Linear SVM

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s