1.1. Giới thiệu tổng quan
Có nhiều phương pháp khác nhau để xử lý hình ảnh trong lĩnh vực thị giác máy tính. Trong việc phân loại ảnh, chúng ta có thể sử dụng nhiều mô hình khác nhau như CNN (Inception Net, Mobile Net, Resnet, Dense Net, Alexnet, Unet, …) và khi phát hiện đối tượng, ta dùng các mô hình như YOLO, SSD, Faster RCNN, Fast RCNN, Mask RCNN.
- Cross Border là gì và cấu trúc cụm từ Cross Border trong câu Tiếng Anh
- Nhân một số thập phân với một số thập phân – Lí thuyết & Lời giải Toán 5
- Phong lữ (Geranium) – Loài hoa mang biểu tượng ưu ái
- "Đơn Đặt Hàng" trong Tiếng Anh là gì: Định Nghĩa, Ví Dụ Anh Việt
- Commercial Manager Là Gì? Nhiệm Vụ Và Lương Commercial Manager
Các thuật toán được nêu trên đều là các thuật toán deep learning. Trước khi deep learning trở nên phổ biến, thuật toán nào được sử dụng thường xuyên trong xử lý ảnh? Hôm nay, chúng ta sẽ tìm hiểu về thuật toán cổ điển nhưng vẫn hiệu quả trong xử lý ảnh, đó chính là HOG (histogram of oriented gradient).
Thuật toán này tạo ra các bộ mô tả đặc trưng để phát hiện đối tượng. Từ một ảnh, ta lấy ra 2 ma trận quan trọng để lưu trữ thông tin: độ lớn gradient (gradient magnitude) và phương của gradient (gradient orientation). Hai thông tin này được kết hợp vào biểu đồ histogram, trong đó, độ lớn gradient được đếm theo các nhóm bins có phương gradient. Kết quả cuối cùng là một véc tơ đặc trưng HOG đại diện cho histogram. Cụ thể, trong thực tế, thuật toán còn phức tạp hơn khi véc tơ HOG được tính trên từng vùng cục bộ giống như mạng CNN và sau đó chuẩn hóa các vùng cục bộ để đồng nhất độ đo. Cuối cùng, véc tơ HOG tổng hợp từ các véc tơ trên các vùng cục bộ.
Trên đây là lý giải ngắn gọn về nguyên tắc hoạt động của HOG. Ban đầu có thể hơi khó hiểu nhưng đừng lo lắng. Chúng ta sẽ hiểu rõ hơn sau khi đọc chương 2, lý giải chi tiết về thuật toán HOG.
1.2. Ứng dụng của HOG
HOG được sử dụng trong các tác vụ cụ thể như thế nào? Dưới đây là một số tác vụ đã áp dụng HOG thành công và đạt được độ nhận diện cao:
-
Nhận diện người: Lần đầu tiên ứng dụng này được giới thiệu trong bài báo “Histograms of Oriented Gradients for Human Detection” của Dalal và Trigg. HOG có khả năng phát hiện một hoặc nhiều người đi bộ trên cùng một hình ảnh. Trong phần thực hành, chúng ta sẽ tập trung vào việc xây dựng mô hình để nhận diện người dựa trên HOG.
-
Nhận diện khuôn mặt: Trước đây, thuật toán Haar Cascade Classifier là phương pháp phổ biến để nhận diện khuôn mặt. Tuy nhiên, HOG cũng là một phương pháp rất hiệu quả trong việc nhận diện khuôn mặt. Bởi vì nó có thể biểu diễn các đường nét quan trọng của khuôn mặt dựa trên phương và độ lớn gradient thông qua các véc tơ trên mỗi ô cục bộ.
-
Nhận diện các đối tượng khác: Ngoài ra, HOG còn được sử dụng để nhận diện nhiều đối tượng trên ảnh tĩnh như phương tiện giao thông, biển giao thông, động vật và thậm chí ảnh động từ video.
-
Tạo đặc trưng cho các bài toán phân loại ảnh: Trong nhiều bài toán phân loại ảnh, sử dụng mạng học sâu với dữ liệu kích thước nhỏ không phải lúc nào cũng hiệu quả và thậm chí có thể dẫn đến overfitting. Với dữ liệu nhỏ, thường không đủ để máy tính có hiểu được các đặc trưng của đối tượng. Trong trường hợp này, sử dụng HOG để tạo ra các đặc trưng sẽ mang lại kết quả tốt hơn. Trong phần thực hành cuối bài, chúng ta sẽ thực hiện một ví dụ phân loại ảnh sử dụng HOG.
1.3. Thuật ngữ
Trước khi tìm hiểu thuật toán HOG, chúng ta cần hiểu các thuật ngữ sau:
-
Mô tả đặc trưng: Là một phép biến đổi dữ liệu thành các đặc trưng hữu ích cho việc phân loại hoặc nhận diện đối tượng. Các phương pháp thông dụng bao gồm HOG, SUFT, SHIFT.
-
Biểu đồ histogram: Là biểu đồ biểu diễn phân phối của cường độ màu sắc dựa trên khoảng giá trị. Nếu bạn chưa biết biểu đồ histogram là gì, có thể xem lại bài 11 – visualization của Python.
-
Xem thêm : ĐẠI TỪ QUAN HỆ (RELATIVE PRONOUNS): CÁCH DÙNG VÀ BÀI TẬP CÓ ĐÁP ÁN
Độ lớn gradient: Là độ dài của véc tơ gradient theo cả hai chiều $x$ và $y$. Nó giúp phát hiện hướng di chuyển của đối tượng trong hình ảnh.
-
Ô cục bộ: Là một ô trên lưới ô vuông trong thuật toán HOG. Mỗi ô cục bộ có kích thước 8×8 pixels.
-
Vùng cục bộ: Là một vùng hình chuẩn bị được trích xuất từ mỗi ô vuông trên hình ảnh. Trong phần trình bày, vùng cục bộ còn được gọi là block.
-
Chuẩn hóa cục bộ: Là phép chuẩn hóa được thực hiện trên mỗi vùng cục bộ. Thông thường được thực hiện bằng norm chuẩn bậc 2 hoặc norm chuẩn bậc 1. Mục đích của việc chuẩn hóa là làm cho các giá trị cường độ màu sắc trở nên đồng nhất trong một phân phối chung. Chúng ta sẽ hiểu rõ hơn trong phần trình bày thuật toán.
-
Phương gradient: Là hướng di chuyển của véc tơ gradient $x$ và $y$, giúp xác định sự thay đổi cường độ màu sắc hoặc đổ bóng của hình ảnh. Giả sử $G_x, G_y$ lần lượt là giá trị gradient theo trục $x$ và trục $y$ của hình ảnh. Khi đó, phương gradient được tính bằng công thức:
[theta = text{acrtan}(frac{G_y}{G_x})]
- Độ lớn gradient: Là chiều dài của véc tơ gradient theo trục $x$ và trục $y$. Độ lớn gradient được tính bằng công thức:
[|G| = sqrt{G_x^{2}+G_{y}^2}]
Điểm quan trọng trong nguyên lý hoạt động của HOG là hình dạng của một vùng cục bộ có thể được mô tả bằng hai ma trận độ lớn gradient (gradient magnitude) và phương gradient (gradient direction). Vậy hai ma trận gradient này được tạo ra như thế nào? Trước hết, hình ảnh được chia thành một lưới ô vuông và chúng ta xác định nhiều vùng cục bộ liền kề hoặc lấn lướt nhau. Các vùng này tương tự như việc tính toán tích chập trong mạng CNN. Mỗi vùng cục bộ bao gồm nhiều ô cục bộ (trong thuật toán HOG là 4) với kích thước 8×8 pixels. Sau đó, chúng ta tính toán biểu đồ histogram cho độ lớn gradient trên mỗi ô và tìm hiểu cách tính được giá trị này ở mục 2.1 sau. Bộ mô tả HOG được tạo ra bằng cách nối các véc tơ histogram ứng với mỗi ô. Để cải thiện độ chính xác, mỗi giá trị của véc tơ histogram trên vùng cục bộ sẽ được chuẩn hóa bằng norm chuẩn bậc 2 hoặc norm chuẩn bậc 1. Việc chuẩn hóa này giúp tạo ra sự bất biến với sự thay đổi ánh sáng và đổ bóng.
Bộ mô tả HOG có một vài lợi thế so với các bộ mô tả đặc trưng khác. Vì nó hoạt động trên các ô cục bộ, nên nó không bị ảnh hưởng bởi các biến đổi hình học hoặc thay đổi ánh sáng. Thêm vào đó, như Dalal và Triggs đã phát hiện, khi sử dụng phép chuẩn hóa trên vùng cục bộ, chuyển động của cơ thể của người đi bộ có thể bị loại bỏ miễn là giữ vững tư thế thẳng đứng. Do đó, bộ mô tả HOG rất phù hợp trong việc phát hiện con người trong hình ảnh.
2.1. Thuật toán HOG
2.1.1. Tính toán gradient
Trong hầu hết các thuật toán xử lý ảnh, bước đầu tiên là tiền xử lý dữ liệu ảnh. Chúng ta cần chuẩn hóa màu sắc và giá trị gamma. Tuy nhiên, trong tính toán bộ mô tả HOG, bước này có thể được bỏ qua vì việc chuẩn hóa bộ mô tả sẽ đạt được kết quả tương tự. Thay vào đó, ta tính toán các giá trị gradient tại bước đầu của quá trình tính toán bộ mô tả HOG. Cách thức tính toán này sử dụng các mặt nạ đạo hàm rời rạc theo chiều ngang và chiều dọc. Thường sử dụng các bộ lọc như Sobel mask hoặc Scharr mask để thực hiện các tích chập.
Chúng ta sẽ tính gradient bằng cách áp dụng bộ lọc Sobel, kí hiệu $mathbf{{I}}$ là ma trận ảnh gốc và $G_x, G_y$ là hai ma trận ảnh có giá trị gradient theo chiều $x$ và $y$. Kích thước kernel (khối lõm cái) là $3×3$ và ta sẽ tính toán như sau:
- Theo chiều ngang:
[G_x = begin{bmatrix} -1 & 0 & 1 -2 & 0 & 2 -1 & 0 & 1 end{bmatrix} * mathbf{{I}}]
- Theo chiều dọc:
[G_y = begin{bmatrix} -1 & -2 & -1 0 & 0 & 0 1 & 2 & 1 end{bmatrix} * mathbf{{I}}]
Kí hiệu $ast$ tượng trưng cho phép tích chập giữa bộ lọc Sobel và ảnh gốc. Cuối cùng, ta sẽ có hai ma trận gradient là $G_x$ và $G_y$, được tính từ hai đạo hàm theo chiều ngang và chiều dọc của ảnh.
Chúng ta có thể tính toán giá trị độ lớn gradient (gradient magnitude) và phương gradient (gradient direction) từ hai ma trận $G_x$ và $G_y$ bằng công thức sau:
- Độ lớn gradient:
[G = sqrt{G_x^2 + G_y^2}]
- Phương gradient:
[theta = text{acrtan}(frac{G_y}{G_x})]
Hiện nay, việc tính toán gradient rất dễ dàng với các thư viện như sklearn hoặc OpenCV:
2.1.2. Các bước tính toán HOG
Nguyên tắc tính toán HOG gồm các bước sau:
Bước 1: Tạo bộ mô tả đặc trưng dựa trên thuật toán HOG:
Chúng ta chia ảnh thành một lưới ô vuông với mỗi ô có kích thước 8×8 pixel. Như vậy, chúng ta có tổng cộng 64 ô vuông tương ứng với 64 ô cục bộ. Trên mỗi ô cục bộ, chúng ta tính toán hai thông số: độ lớn gradient (gradient magnitute) và phương gradient (gradient orientation). Thông tin này được kết hợp để tạo ra biểu đồ histogram, nơi độ lớn gradient được đếm theo các nhóm bins của phương gradient. Cuối cùng, ta thu được một véc tơ đặc trưng HOG đại diện cho histogram. Trên thực tế, thuật toán còn phức tạp hơn khi tính toán véc tơ HOG trên từng vùng cục bộ tương tự như mạng CNN. Cuối cùng, véc tơ HOG tổng hợp từ các véc tơ trên vùng cục bộ.
Bước 2: Chuẩn hóa véc tơ histogram theo block 16×16:
Chúng ta chuẩn hóa véc tơ histogram bằng cách chia cho norm chuẩn bậc 2 hoặc norm chuẩn bậc 1. Việc chuẩn hóa này giúp đồng nhất các giá trị cường độ màu sắc vào cùng một phân phối. Chuẩn hóa được thực hiện trên block kích thước 16×16 pixel. Từ các véc tơ histogram tổng hợp trên các vùng cục bộ, chúng ta thu được véc tơ HOG tổng hợp.
Bước 3: Tính toán véc tơ đặc trưng HOG:
Từ véc tơ HOG tổng hợp, chúng ta thu được véc tơ đặc trưng HOG tổng hợp đại diện cho toàn bộ bức ảnh. Ví dụ, nếu chúng ta chia bức ảnh thành lưới ô vuông kích thước 16×8, ta sẽ có các block kích thước 2×2. Bước giữa các block sẽ di chuyển 8 pixels. Trên mỗi block, chúng ta có 4 véc tơ histogram, tổng cộng sẽ có 105×36 chiều cho toàn bộ bức ảnh. Đây là một véc tơ kích thước tương đối lớn để mô phỏng đặc trưng của bức ảnh.
Chúng ta cũng có thể biểu diễn phân phối HOG trên ảnh. Theo mỗi ô vuông trong
Nguồn: https://duongtrang.com
Danh mục: Hỏi Đáp