2. YOLO part 2: Yolov2

 Mở đầu

Tiếp theo bài giới thiệu về YOLO series và Yolov1 (https://hoanglong187.blogspot.com/2022/08/1-yolo-part-1-yolov1.html)

Ta thấy rằng Yolov1 còn nhiều nhược điểm cần khắc phục như:

    - Độ chính xác còn kém so với các Region-based detector

    - Chỉ có thể dự đoán tối đa 1 object mỗi grid cell

    - Các giá trị (x, y, w, h) được dự đoán tự do chưa liên hệ với nhau

Yolov2 sẽ cải thiện những vấn đề này

Anchor Box

Ý tưởng đến từ FastRCNN

Người ta thấy rằng trong hầu hết các bộ dataset, các Bounding Box (BBox) thường có hinh dạng tuân theo các tỉ lệ, kích cỡ và quy tắc nhất định


Bằng việc dùng Kmean để phân cụm, ta tính được các B anchor box (các trọng tâm)  đại diện các kích thước phổ biến nên thay vì predict trực tiếp (x, y, w, h) ta predict bộ offset ( độ lệch giữa groundtruth_bbox và các anchor box)

Ý tưởng

So với Yolov1, Yolov2 có các thay đổi:

- Input image có kích thước lớn hơn

- Có thêm ý tưởng Anchor box từ FasterRCNN

- Có thêm BatchNorm layer

- Bỏ đi các Fully-connected layer ở cuối để tăng tốc độ tính toán, giải tỏa điều kiện về kích thước ảnh input

- Mỗi bounding box đều có class_distribution riêng. Có thể multi-object in a cell

Từ đó khiến Yolov2 hiệu quả hơn hẳn, trở thành nền tảng cho v3, v4, v5 ... sau này


Output
Output của Yolov2 là matrix A có kích thước:
Shape(A)=SSB(4+1+C)
Trong đó S là size ảnh, B là số bouding box (bbox). 
Trong khi của Yolov1 là Shape(A') = S * S * (5 * B + C)
Với mỗi bbox ta predict tx, ty, tw, ty, Pobject và các class conference (p1, p2, …, pc). Trong đó, khác Yolov1, tx, ty, twth không phải giá trị thật của bbox mà là offset cảu bbox so với anchor box trước . Anchor box này có kích thước (pw, ph) được định nghĩa sẵn nên cần biến đổi về giá trị tọa độ thật theo công thức

Với σ là hàm sigmoid.

Vì vậy, cách thức tính Loss vẫn giữ nguyên so với Yolov1 là chia thành 3 loại Object/Noobject Loss + Conference Loss + Coordination Loss

Tóm tắt cấu trúc

Vậy tóm lại có thể hình dung Yolov2 sử dụng backbone là darknet19 và thêm 11 lớp chập để nhận dạng



Implement

Thử làm lại bài toán face detect với bộ dữ liệu WIDER trên Kaggle theo hướng dẫn tại:
https://viblo.asia/p/yolo-series-p2-build-yolo-from-scratch-924lJGoz5PM
Thay vì dùng Tensorflow, hãy thử dùng Pytorch để xem thử sự khác biệt
File notebook tại:

Nhận xét