chương I, luận văn đã trình bày tổng quan về bài toán phân loại độ tuổi qua ảnh mặt người, những ứng dụng của bài toán trong thực tế và hướng tiếp cận giải quyết bài toán dựa trên phương pháp học sâu sử dụng mạng nơ ron tích chập CNN. 10 CHƯƠNG 2: PHÂN LOẠI ĐỘ TUỔI CỦA NGƯỜI BẰNG HÌNH ẢNH SỬ DỤNG MẠNG NƠ RON TÍCH CHẬP 2. Giới thiệu về mạng nơ ron tích chập CNN là một trong những mô hình DL tiên tiến giúp cho chúng ta xây dựng được những hệ thống thông minh với độ chính xác cao như hiện nay. CNN được lấy cảm hứng từ vỏ não thị giác của con người, mỗi khi chúng ta nhìn thấy một vật nào đó, một loại các lớp tế bào thần kinh được kích hoạt, và mỗi lớp sẽ phát hiện ra một đặc trưng của đồ vật đó (hình dạng, kích thước, màu sắc,…).
Lớp thần kinh mà nhận dạng được càng nhiều đặc điểm của đồ vật thì việc nhận dạng hoặc phân loại đồ vật đó đối với con người sẽ trở nên dễ dàng hơn [10]. Ý tưởng đằng sau của mạng nơ ron tích chập là nó thực hiện quá trình trích lọc hình ảnh trước khi đưa vào quá trình huấn luyện, sau quá trình trích lọc thì chúng ta sẽ nhận được các đặc trưng trong hình ảnh đó, và từ các đặc trưng đó chúng ta có thể phát hiện ra những gì mình muốn trong hình ảnh đó. So với các thuật toán phân loại hình ảnh khác, mạng nơ ron tích chập sử dụng quá trình tiền xử lý tối thiểu, nghĩa là mạng học các bộ lọc thường được thiết kế bằng tay trong các hệ thống khác. Bởi vì CNN hoạt động với sự độc lập như vậy khỏi nỗ lực của con người, chúng mang lại nhiều lợi thế hơn các thuật toán khác.
Mục đích của CNN là giảm hình ảnh thành một hình thức dễ xử lý hơn và không mất đi các chi tiết hoặc tính năng quan trọng để hỗ trợ trong việc đưa ra các dự đoán. Điều này rất quan trọng khi chúng ta thiết kế mô hình không chỉ giỏi về các tính năng học tập mà còn xử lý được bộ dữ liệu lớn. Trước khi tìm hiểu về kiến trúc, mô hình của mạng nơ ron tích chập CNN em sẽ trình bày những khái niệm thường được sử dụng khi làm việc với mạng nơ ron CNN. Nhờ vào nguyên lý biến đổi thông tin, các nhà khoa học đã áp dụng kĩ thuật này vào xử lý ảnh và video số.
Để dễ hình dung, ta có thể xem tích chập nhƣ một cửa sổ trượt (sliding window) áp đặt lên một ma trận. Bạn có thể theo dõi cơ chế của tích chập qua hình minh họa bên dưới.1 Minh học phép toán tích chập [10] Ma trận bên trái là một bức ảnh đen trắng. Mỗi giá trị của ma trận tương đương với một điểm ảnh (pixel), 0 là màu đen, 1 là màu trắng (nếu là ảnh grayscale thì giá trị biến thiên từ 0 đến 255). Sliding window còn có tên gọi là kernel, filter hay feature detector.
Ở đây, ta dùng một ma trận filter 3×3 nhân từng thành phần tương ứng (element-wise) với ma trận ảnh bên trái. Gía trị đầu ra do tích của các thành phần này cộng lại. Kết quả của tích chập là một ma trận (convoled feature) sinh ra từ việc trượt ma trận filter và thực hiện tích chập cùng lúc lên toàn bộ ma trận ảnh bên trái. Dưới đây là một vài ví dụ của phép toán tích chập.
Ta có thể làm mờ bức ảnh ban đầu bằng cách lấy giá trị trung bình của các điểm ảnh xung quanh cho vị trí điểm ảnh trung tâm.2 Minh họa phép tích chập với bộ lọc [14] Ngoài ra, ta có thể phát hiện biên cạnh bằng cách tính vi phân (độ dị biệt) giữa các điểm ảnh lân cận.3 Minh họa phép tích chập với bộ lọc cạnh [14] b. Lớp tích chập (Convolutional Layers) Lớp tích chập được dung để phát hiện và trích xuất đặc trưng – chi tiết của ảnh. Giống như các lớp ẩn khác, lớp tích chập lấy dữ liệu đầu vào, thực hiện các phép chuyển đổi để tạo ra dữ liệu đầu vào cho lớp kế tiếp (đầu ra của lớp này là đầu vào của lớp sau). Phép biến đổi được sử dụng là phép tính tích chập.
Mỗi lớp tích 13 chập chứa một hoặc nhiều bộ lọc - bộ phát hiện đặc trưng (filter - feature detector) cho phép phát hiện và trích xuất những đặc trưng khác nhau của ảnh. Đặc trưng ảnh là những chi tiết xuất hiện trong ảnh, từ đơn giản như cạnh, hình khối, hình tam giác, chữ viết tới phức tạp như mắt, mặt, chó, mèo, bàn, ghế, xe, đèn giao thông. Bộ lọc phát hiện đặc trưng của ảnh là bộ lọc giúp phát hiện và trích xuất các đặc trưng của ảnh, có thể là bộ lọc góc, cạnh, đường chéo, hình tròn, hình vuông, v. Bộ lọc (Kernel/Filter) Độ phức tạp của đặc trưng được phát hiện bởi bộ lọc tỉ lệ thuận với độ sâu của lớp tích chập mà nó thuộc về.
Nghĩa là bộ lọc ở lớp tích chập càng sâu thì phát hiện các đặc trưng càng phức tạp. Trong mạng CNN, những lớp tích chập đầu tiên sử dụng bộ lọc hình học (geometric filters) để phát hiện những đặc trưng đơn giản như cạnh ngang, dọc, chéo của bức ảnh. Những lớp tích chập sau đó được dùng để phát hiện đối tượng nhỏ, bán hoàn chỉnh như mắt, mũi, tóc, v. Những lớp tích chập sâu nhất dùng để phát hiện đối tượng hoàn hỉnh như: chó, mèo, chim, ô tô, đèn giao thông, v.
Mục đích của việc tích chập (Convolutional) là để lấy ra được các hình dạng (pattern) trong hình ảnh bằng cách sử dụng các bộ lọc (Filter/Kernel) [2]. Kernel có thể được coi là tham số của mô hình CNN và được sử dụng để tính toán tích chập (convolve) trên ảnh. Chúng ta có thể thấy thao tác tích chập được mô tả trong hình dưới (Hình 2.4 Bộ lọc W (kernel) [10] Ta định nghĩa kernel là một ma trận vuông kích thước k*k trong đó k là số lẻ. k có thể bằng 1, 3, 5, 7, 9,… Ví dụ kernel kích thước 3*3 Kí hiệu phép tính tích chập (⊗), kí hiệu Y = X ⊗ W, Y = X ⊗ W.
Với mỗi phần tử x{ij}xij trong ma trận X lấy ra một ma trận có kích thước bằng kích thước của bộ lọc W có phần tử x{ij} xij làm trung tâm (đây là vì sao kích thước của kernel thường lẻ) gọi là ma trận A. Sau đó tính tổng các phần tử của phép tính element- wise của ma trận A và ma trận W, rồi viết vào ma trận kết quả Y. Tức mỗi phần của image sẽ được nhân tích chập với kernel để tạo thành một ma trận mới - làm đầu vào cho lớp tiếp theo. Một kernel có hai tham số cần quan tâm đến đó là stride và size.
Size là kích thước của một kernel (có thể là kích thước của một hình chữ nhật bất kì) và stride là số bước nhảy của kernel. Nếu stride bằng 1 thì gần như toàn bộ pixel trên ảnh sẽ được trượt qua và tính tích chập. Nếu stride bằng 2 chúng ta cứ cách 2 pixel lại tính tích chập một lần và như vậy số lượng pixel của ảnh đầu ra bị giảm đi một nửa so với stride = 1. Để hiểu cách thức hoạt động của lớp tích chập cũng như phép tính tích chập, hãy cùng xem ví dụ về bộ lọc phát hiện cạnh (edge filters/ detectors) dưới đây.
15 Ví dụ về bộ lọc cạnh Trong ví dụ này, CNN được sử dụng để phân loại tập các ảnh viết tay của các số từ 00 tới 99. Đầu vào là những bức ảnh trắng đen (Gray Scale) và được biểu diễn bởi một ma trận các điểm ảnh với kích thước cố định h × wh × w. Lớp tích chập đầu tiên của CNN sử dụng 44 bộ lọc kích thước 3×33×3: F1F1, F2F2, F3F3, F4F4 với giá trị tương ứng như trong hình 1. Các giá trị tại mỗi ô của các bộ lọc có thể được biểu diễn bởi màu sắc tương ứng với Đen (−1−1), Xám (00), Trắng (11) như trong hình dưới đây.5 Các Bộ lọc cạnh với kích thước 3 x 3 [10] Để minh hoạ cho phép nhân chập, chúng ta sử dụng đầu vào là một bức ảnh viết tay của số 77, biểu diễn dưới dạng ma trận 30×2230×22 và áp dụng riêng biệt từng bộ lọc ở trên.
Phép nhân tích chập được thực hiện bằng cách trượt ma trận lọc 3×33×3 trên ma trận ảnh đầu vào 32×2232×22 (bộ lọc dịch sang phải/ xuống dưới 11 cột/ hàng mỗi một lần trượt) cho đến khi nó đi qua hết tất cả các vùng kích thước 3×33×3. Việc trượt ma trận lọc trên ma trận đầu vào được gọi là “chập” (convoling). Như minh hoạ trong hình 2, ma trận F1F1 được chập với từng vùng (block - region) điểm ảnh kích thước 3×33×3 của ảnh đầu vào. Tại mỗi vị trí di chuyển của ma trận F1F1, giá trị đầu ra được tính bằng tích chập (dot-product) của ma trận F1F1 với vùng bao phủ tương ứng.
Minh họa phép nhân chập với bộ lọc cạnh Ô đầu tiên (0, 0) (0, 0) của ma trận đầu ra (giá trị 0.01) ra là kết quả của phép nhân chập giữa ma trận F1F1 với góc trái trên cùng của ma trận đầu vào và được tính như sau: 17 Hình 2. Kết quả của phép tích chập với bộ lọc cạnh [10] Từ các ma trận đầu ra kích thước 28×2028×20, chúng ta thấy được cả bốn bộ lọc F1F1, F2F2, F3F3 và F4F4 dều được sử dụng để phát hiện cạnh trong bức ảnh (thể hiện bởi những điểm ảnh sáng hơn) (Hình 2.8): F1: Phát hiện cạnh đứng phải. F2: Phát hiện cạnh đứng trái. F3: Phát hiện cạnh ngang dưới.
F4: Phát hiện cạnh ngang trên. Ví dụ về bộ lọc cạnh Trong bước thực hiện tích chập của màng còn có thêm hai thuộc tính đấy là stride và padding. Stride là khoảng cách giữa 2 kernel khi thực hiện quét. Với stride = 1, kernel sẽ quét 2 ô ngay cạnh nhau, nhưng với stride = 2, kernel sẽ quét ô số 1 và ô số 3.
Bỏ qua ô ở giữa. Điều này nhằm tránh việc lặp lại giá trị ở các ô đã quét. Chúng ta chọn thông số của stride và của kernel càng lớn thì size của feature map càng nhỏ, một phần lý do đó là bởi kernel phải nằm hoàn toàn trong input. Có một cách để giữ nguyên kích cỡ của feature map so với ban đầu.
Đấy là Padding. Khi ta điều chỉnh padding = 1, là thêm 1 vùng điểm ảnh xung quanh viền của hình ảnh đầu vào (Hình 2.9), muốn phần viền xung quanh càng dày thì ta cần phải tăng giá trị padding lên.9 Phép tích chập với giá trị padding bằng 1 [11] d.