Refs

  1. From Lilian Weng’s blog (có codes)
  2. Phạm Đình Khánh | Bài 17 - Thuật toán HOG (Histrogram of oriented gradient) ← có codes
  3. C34 | HOG Feature Vector Calculation | Computer Vision | Object Detection | EvODN - YouTube

Infos

How HOG works?

  1. Từ cái hình thiệt bự → lấy 1 khung hình chỉ bao quanh người

    Ví dụ, ref.

    Ví dụ, ref.

  2. Mỗi hình chia thành lưới blocks, mỗi block gồm 8x8 pixels. Sau đó mỗi pixel (của 64 cái), tính gradient magnitude (GM) & gradient direction (GD) → cần tính tổng cộng (8x8)x2

    Untitled

    Ví dụ cách tính GM và GD ở mỗi pixel (ref)

    Untitled

  3. Chia GD theo 9 bins (do GD trong hình trên $\in [0,180]$ → mỗi bin là 20) ← Có nghĩa là thay vì các gradient direction đi mọi hướng từ 0→180 độ thì ta chỉ xét 9 hướng “feature” tương ứng với 9 bins mà thôi!

    Untitled

  4. Sau đó GD và GM sẽ được ghép cặp với nhau theo từng pixel → nếu cái nào “nằm giữa” (ko rơi ngay vào các đầu mút như 0, 20, 40,…) thì sẽ chia theo phần nó chiếm trong GD (hình dưới 10 nằm ngay giữa nên chia 4 thành 2,2).

    Untitled

    Nó không hẳn là 1 cái bin kiểu [a,b]. Chỉ là mình chọn ra 9 “độ” đại diện (feature) thì sẽ có lần lượt 0, 20, 40,…., 160. Suy ra:

    Còn ở hình này: 165 gần 160 khoảng cách 5 trong khi gần 0 khoảng cách 180-165= 15 (gấp 3) → chia cho bin 160 3 lần chia cho bin 0 → 85/4*3 = 63.75 cho bin 60.

    Còn ở hình này: 165 gần 160 khoảng cách 5 trong khi gần 0 khoảng cách 180-165= 15 (gấp 3) → chia cho bin 160 3 lần chia cho bin 0 → 85/4*3 = 63.75 cho bin 60.

  5. Tính tổng tất cả GM thuộc cùng 1 bin

    Untitled

    Mỗi vector đại diện cho 1 bin, độ dài của vector chính là độ cao của mỗi bin.

    Mỗi vector đại diện cho 1 bin, độ dài của vector chính là độ cao của mỗi bin.

  6. Then we slide a 2x2 cells (thus 16x16 pixels) block across the image.

    Then chuẩn hoá $\text{normalize}(\mathbf{h}) = \frac{\mathbf{h}}{||\mathbf{h}||_{2}}$ (eg. 2 bức ảnh cùng nội dung nhưng 1 cái tối hơn thì vector histogram cũng sẽ gấp đôi ← cần chuẩn hoá để 2 bức này có cùng 1 vector biểu diễn)

  7. Tính toán HOG feature ← Sau khi chuẩn hóa các véc tơ histogram, chúng ta sẽ concatenate các véc tơ 1x36 này thành một véc tơ lớn (36 = 9 vector đặc trưng x 4 blocks đã chọn trước khi slice). Đây chính là véc tơ HOG đại diện cho toàn bộ hình ảnh.

  8. Biểu diễn phân phối HOG trên ảnh

    Đối với mỗi một ô trên lưới ô vuông, chúng ta biểu diễn phân phối HOG bao gồm nhóm 9 véc tơ chung gốc chiều dài bằng độ lớn gradient và góc bằng phương gradient. Khi đó chiều của nhóm các véc tơ sẽ tương đối giống với dáng của vận động viên trong ảnh, đặc biệt là tại các vị trí chân và tay.

    Đối với mỗi một ô trên lưới ô vuông, chúng ta biểu diễn phân phối HOG bao gồm nhóm 9 véc tơ chung gốc chiều dài bằng độ lớn gradient và góc bằng phương gradient. Khi đó chiều của nhóm các véc tơ sẽ tương đối giống với dáng của vận động viên trong ảnh, đặc biệt là tại các vị trí chân và tay.

    Một ví dụ khác. Ref.

    Một ví dụ khác. Ref.