Mạng nơ-ron tích chập

Một phần của tài liệu Nhận dạng cảm xúc thông qua khuôn mặt dùng mạng nơ ron tích chập CNN (Trang 28)

2.3 MẠNG NƠ-RON TÍCH CHẬP

2.3.2 Mạng nơ-ron tích chập

2.3.2.1 Mơ hình tổng quan

Hình 2.8: Sự khác nhau giữa cấu trúc ANN và CNN.

Mơ hình ANN ra đời đã được áp dụng nhiều trong các bài toán nhận dạng. Tuy nhiên, ANN vẫn chưa thể hiện tốt đối với các dữ liệu có kích thước lớn như hình ảnh. Dữ liệu hình ảnh có kích thước khá lớn khi số hố có dạng width x height x depth (trong đó: width là số

lượng điểm ảnh trên chiều rộng, height là số lượng điểm ảnh trên chiều cao, depth là số

lượng kênh, chẳng hạn như RGB có 3 kênh đại diện cho mức độ của 3 màu Đỏ, Lục, Lam) nên đầu vào của mạng CNN là 1 tensor 3 chiều. Cụ thể, một tấm ảnh xám có kích thước 48x48 (pixels) sẽ cho ra vector đặc trưng có 2304 chiều, cịn đối với ảnh màu cùng kích thước sẽ là 2304x3=6912 chiều. Điều này cũng có nghĩa là cần tới 6912 trọng số Wk nối giữa lớp vào và một nút ở lớp ẩn kế tiếp. Số lượng trọng số sẽ càng nhân rộng hơn nữa nếu số lượng nút trong lớp ẩn tăng lên. Như vậy chỉ với một bức ảnh nhỏ (48x48) thì cũng cần đến một mơ hình khá đồ sộ. Điều này khiến cho việc thao tác với các ảnh có kích thước lớn hơn trở nên khó khăn. Một điều nữa là việc liên kết một cách đầy đủ các điểm ảnh vào một nút trong mạng dường như là dư thừa vì sự phụ thuộc lẫn nhau giữa các điểm ảnh xa nhau là không nhiều mà chủ yếu là sự phụ thuộc giữa các điểm lân cận với nó. Dựa trên vấn đề này mạng nơ-ron tích chập CNN ra đời với một kiến trúc khác hơn so mới mạng truyền thẳng. Thay vì tồn bộ ảnh nối với một nút thì chỉ có một phần cục bộ trong ảnh nối đến một nút trong lớp tiếp theo. Dữ liệu hình ảnh thơng qua các lớp của mơ hình này sẽ được “học” ra các đặc trưng để tiến hành phân lớp một cách hiệu quả. Về cơ bản mơ hình mạng nơ- ron tích chập bao gồm các lớp sau: lớp chập (Convolutional), lớp RELU, lớp gộp

(Pooling), lớp kết nối đầy đủ (Fully connected). Sự sắp xếp về số lượng và thứ tự giữa các lớp này sẽ tạo ra những mơ hình khác nhau phù hợp cho các bài tốn khác nhau.

Hình 2.9: Quá trình thực hiện của mạng CNN

2.3.2.2 Các lớp trong mơ hình

Đặc trưng (feature): CNN so sánh hình ảnh theo từng mảnh. Các mảnh mà nó tìm được gọi là các đặc điểm. Bằng cách tìm ở mức thơ các đặc điểm khớp nhau ở cùng vị trí trong hai hình ảnh, CNN nhìn ra sự tương đồng tốt hơn nhiều so với việc khớp tồn bộ bức ảnh.

Hình 2.10: CNN tìm những điểm tương đồng trên bức ảnh

Mỗi đặc điểm giống như một hình ảnh mini - một mảng hai chiều nhỏ. Các đặc điểm khớp với các khía cạnh chung của các bức ảnh. Trong trường hợp hình ảnh X, các đặc điểm bao gồm các đường chéo và hình chữ thập, CNN sẽ nắm bắt tất cả những đặc điểm quan

 Lớp chập (Convolutional)

Lớp chập bao gồm “Convolutional 2D” tích chập 2 chiều sẽ cho phép bộ lọc (filters) di chuyển theo 2 chiều (theo cả chiều ngang và chiều dọc) và “Convolutional 3D” tích chập 3 chiều là khi bộ lọc có thể di chuyển thêm cả chiều sâu của ảnh. Khi xem một hình ảnh mới, CNN khơng biết chính xác nơi các đặc điểm này sẽ khớp nên nó sẽ thử chúng khắp mọi nơi, ở mọi vị trí có thể. Khi tính tốn sự ăn khớp của một đặc điểm trên toàn bộ ảnh, lớp này sẽ sử dụng một bộ gồm các bộ lọc có kích thước nhỏ so với ảnh (thường là 3×3 hoặc 5×5) áp vào một vùng trong ảnh và tiến hành tính tích chập giữa bộ lọc và giá trị điểm ảnh trong vùng cục bộ đó. Bộ lọc sẽ lần lượt được dịch chuyển theo một giá trị bước trượt chạy dọc theo ảnh và quét toàn bộ ảnh [8].

Hình 2.11: Chập ma trận ảnh với bộ lọc 3x3

Nguyên tố trọng tâm của nhân chập được đặt chồng lên điểm ảnh cần xét, nó sẽ thay thế điểm ảnh đó với tổng trọng số liên kết của chính nó và các điểm ảnh gần kề. Như vậy nếu một bức ảnh 48x48 và một bộ lọc 3x3, ta sẽ có kết quả là một tấm ảnh mới có kích thước 48x48 là kết quả tích chập của bộ lọc và ảnh. Với bao nhiêu bộ lọc trong lớp này thì ta sẽ có bấy nhiêu ảnh tương ứng mà lớp này trả ra và được truyền vào lớp tiếp theo. Để hồn tất tích chập, chúng ta lặp lại quá trình này, lấy kết quả từ mỗi tích chập và tạo một mảng hai chiều mới. Từ đó, dựa vào vị trí của mỗi mảnh nằm trong hình ảnh. Bản đồ các phần khớp nhau này cũng là một phiên bản đã được lọc từ hình ảnh gốc. Nó là một bản đồ

thể hiện nơi tìm thấy đặc điểm trong hình ảnh. Các giá trị gần 1 cho thấy sự khớp mạnh, các giá trị gần -1 cho thấy sự khớp mạnh với âm bản của đặc điểm và các giá trị gần bằng 0 cho thấy không khớp với bất kỳ loại nào.

 Lớp RELU

Lớp này thường được cài đặt ngay sau lớp chập. Lớp này sử dụng hàm kích hoạt f

(x) = max (0, x) nhằm chuyển toàn bộ giá trị âm trong kết quả lấy từ lớp chập thành giá trị

0. Ý nghĩa của cách cài đặt này chính là tạo nên tính phi tuyến cho mơ hình. Tương tự như trong mạng truyền thẳng, việc xây dựng dựa trên các phép biến đổi tuyến tính sẽ khiến việc xây dựng đa tầng đa lớp trở nên vơ nghĩa. Có rất nhiều cách để khiến mơ hình trở nên phi tuyến như sử dụng các hàm kích hoạt sigmoid, tanh… nhưng f (x) = max (0, x) hàm dễ cài đặt, tính tốn nhanh mà vẫn hiệu quả [7].

Hình 2.12: Ví dụ về lớp RELU

 Lớp gộp (Pooling)

Lớp gộp là cách làm co các hình ảnh lớn lại nhưng vẫn giữ các thơng tin quan trọng nhất trong đó. Lớp này sử dụng một ơ vng cửa sổ nhỏ trượt qt qua tồn bộ ảnh dữ liệu, mỗi lần trượt theo một bước trượt cho trước. Khác với lớp chập, lớp gộp khơng tính tích chập mà tiến hành lấy mẫu. Khi cửa sổ trượt trên ảnh, chỉ có một giá trị được xem là giá trị đại diện cho thơng tin ảnh tại vùng đó (giá trị mẫu) được giữ lại. Các phương thức phổ biến

AveragePooling (lấy giá trị trung bình). Xét một ảnh có kích thước 32×32 và lớp gộp sử dụng bộ lọc có kích thước 2×2 với bước trượt stride = 2, phương pháp sử dụng là MaxPooling. Bộ lọc sẽ lần lượt duyệt qua ảnh, với mỗi lần duyệt chỉ có giá trị lớn nhất trong 4 giá trị nằm trong vùng cửa sổ 2×2 của bộ lọc được giữ lại và đưa ra đầu ra. Như vậy sau khi qua lớp gộp, ảnh sẽ giảm kích thước xuống cịn 16×16 (kích thước mỗi chiều giảm 2 lần [8].

Hình 2.13: Maxpooling với bộ lọc 2x2, bước trượt bằng 2

 Lớp kết nối đầy đủ (Fully-connected)

Lớp này tương tự với lớp trong mạng nơ-ron truyền thẳng, các giá trị ảnh được liên kết đầy đủ vào nút trong lớp tiếp theo. Sau khi ảnh được xử lý và rút trích đặc trưng từ các lớp trước đó, dữ liệu ảnh sẽ khơng cịn q lớn so với mơ hình truyền thẳng nên ta có thể sử dụng mơ hình truyền thẳng để tiến hành nhận dạng. Tóm lại, lớp kết nối đầy đủ đóng vai trị như một mơ hình phân lớp và tiến hành dựa trên dữ liệu đã được xử lý ở các lớp trước đó [8].

Hình 2.14: Phân lớp dữ liệu trong lớp kết nối đầy đủ

2.3.3 Những vấn đề xảy ra với mơ hình CNN 2.3.3.1 Quá khớp (Overfitting) 2.3.3.1 Quá khớp (Overfitting)

Quá khớp là hiện tượng mơ hình tìm được q khớp với dữ liệu huấn luyện. Việc quá khớp này có thể dẫn đến việc dự đốn nhầm và chất lượng mơ hình khơng cịn tốt trên dữ liệu kiểm tra nữa. Trong ứng dụng thực tế, ta thường sử dụng mạng nơ-ron để mô phỏng những hàm số mà cấu trúc của chúng vẫn chưa được xác định. Khi đó, ta chỉ có thể thu nhập được các bộ mẫu dữ liệu ra (vào) được sinh ra từ hàm số, nhưng lại không thể đặc tả q trình sinh ra các bộ mẫu đó. Một ví dụ kinh điển đó là q trình bộ não con người thu nhận thơng tin từ hình ảnh của chữ viết tay, rồi suy luận ra chữ viết. Cơ chế bộ não biểu diễn hình ảnh và suy luận ra thơng tin từ đó là một ẩn số đối với khoa học. Tuy nhiên, ta có thể dùng các bức ảnh cùng với nhãn đúng của chúng để huấn luyện mạng nơ-ron mơ phỏng xấp xỉ được q trình xử lý hình ảnh của bộ não. Cho dù cấu trúc giữa bộ não và mạng nơ- ron có thể khác nhau, với một thuật tốn huấn luyện tốt, chúng sẽ đưa ra kết luận giống nhau với cùng một điểm dữ liệu vào [8].

Hình 2.15: Ví dụ minh họa lỗi q khớp trong CNN

Ví dụ hình 2.12, đa thức có bậc cao hơn (xanh dương) vì q chú trọng vào việc phải đi qua tất cả các điểm trong tập huấn luyện (đen) nên có hình dạng phức tạp, khơng “bình thường”. Đa thức bậc thấp hơn (đỏ) cho giá trị hàm mất mát cao hơn trên tập huấn luyện nhưng lại phù hợp hơn với phân bố dữ liệu trong thực tế. Điều này thể hiện bằng việc đa thức bậc thấp ước lượng một điểm khơng có trong tập huấn luyện (xanh) chính xác hơn đa thức bậc cao. Đối với bài tốn dự đốn, vì mục tiêu cuối cùng của ta là mơ phỏng một hàm số ẩn, ta khơng nên cực tiểu hóa hàm mất mát trên tập huấn luyện. Nếu ta làm như vậy sẽ dẫn đến hiện tượng quá khớp, tức là mạng nơ-ron sẽ học được một hàm phức tạp để mơ phỏng hồn hảo nhất tập huấn luyện. Tuy nhiên, cũng do cấu trúc phức tạp, hàm này khơng có tính tổng qt hóa cao, tức là nó rất dễ sai khi gặp một điểm dữ liệu khơng có trong tập huấn luyện (hình 2.12). Khi ấy, mạng nơ-ron giống như một con người chỉ biết học tủ mà không biết cách vận dụng kiến thức để giải quyết những thứ chưa từng gặp phải. Quá khớp là một vấn đề nghiêm trọng đối với mạng nơ-ron vì khả năng mơ hình hóa của chúng q cao, dễ dàng học được các hàm phức tạp. Ta sẽ tìm hiểu một số phương pháp thơng dụng để chẩn đốn và ngăn ngừa quá khớp cho mạng nơ-ron [8].

2.3.3.2 Drop out

Quá khớp là một vấn đề lớn đối với máy học, đặc biệt là trong mạng nơ-ron. Khi muốn cho mơ hình trở nên phức tạp hơn, ta thường tăng số lượng lớp và số lượng đơn vị của mỗi lớp. Nhưng khi mơ hình phức tạp hơn, q khớp bắt đầu xuất hiện, vì số lượng tham số trong mạng nơ-ron nhiều và có “độ sâu” khác nhau vì vậy khi áp dụng chung λ cho

tất cả các tham số sẽ yêu cầu số lần đào tạo lớn để tìm được λ phù hợp. Có một kĩ thuật dành riêng cho mạng nơ-ron và khá đơn giản, đó là Drop-out.

Drop-out là một kĩ thuật bình thường hóa tham số (Regularization) để chống lại vấn đề “quá khớp”. Cách Drop-out thực hiện là xoá bỏ một số đơn vị trong các bước đào tạo ứng với một giá trị xác suất p cho trước [12].

Hình 2.16: Kỹ thuật Drop-out giải quyết vấn đề overfitting

Drop-out được áp dụng trên một lớp của mạng nơ-ron với một xác suất p cho trước (ta có thể sử dụng nhiều Drop-out khác nhau cho những lớp khác nhau, nhưng trên 1 lớp sẽ chỉ có 1 Drop-out). Tại mỗi bước trong quá trình huấn luyện, khi thực hiện lan truyền thẳng đến lớp sử dụng Drop-out, thay vì tính tốn tất cả đơn vị có trên lớp, tại mỗi đơn vị ta tính

xác suất xem đơn vị đó có được tính hay khơng dựa trên xác suất p . Với những đơn vị được

tính, ta tính tốn bình thường cịn với những đơn vị khơng được tính giá trị tại đơn vị đó bằng 0. Khi thực hiện tính tốn trên mạng nơ-ron trong q trình kiểm tra (sử dụng mạng nơ-ron để dự đốn) thay vì làm như trên, ta thực hiện tính tốn trên tất cả các đơn vị nhưng trọng số trên mỗi kết nối đến các đơn vị của lớp được áp dụng Drop-out được thay thế bằng

2.4 Giới thiệu máy tính nhúng kit Raspberry Pi

Raspberry Pi là từ để chỉ các máy tính chỉ có một bảng mạch hay cịn gọi là máy tính nhúng kích thước chỉ bẳng một thẻ tín dụng, được phát triển tại Anh bởi Raspberry Pi Foundation với mục đích ban đầu là thúc đẩy việc giảng dạy về khoa học máy tính cơ bản trong các trường học và các nước đang phát triển [9].

Hình 2.17: Hình ảnh thực tế kit Raspberry Pi

Kit Raspberry Pi là một máy tính nhỏ gọn, kích thước hai cạnh cỡ bằng một chiếc thẻ ATM. Nó được tích hợp mọi thứ cần thiết để bạn sử dụng như một cái máy vi tính. Trên bảng mạch của Raspberry Pi 4 có các thành phần: CPU, GPU, RAM, khe cắm thẻ microSD, Wifi, Bluetooth và 4 cổng USB.

Chi tiết thông số kĩ thuật:

- Broadcom BCM2837 chipset running at 1.2 GHz 64-bit quad-core ARM Cortex-

A53.

- 802.11 b/g/n mạng không dây LAN.

- Bộ nhớ 1GB LPDDR2.

- Hỗ trợ trên ARM GNU/Linux và cả Windows 10 IoTs.

- Kết nối với nguồn 2.5V.

- Cổng Ethernet 1×10/100.

- Cổng kết nối 1xHDMI.

- Cổng kết nối 1xRCA .

- Cổng USB 4xUSB 2.0.

- 40 chân GPIO.

- Kết nối màn hình hiển thị DSI.

- 1 khe gắn thẻ nhớ.

- Kích thước: 85mm x 56mm x 17 mm.

2.5 Xử lý ảnh với Python

2.5.1 Giới thiệu ngơn ngữ lập trình Python:

Python là một ngơn ngữ lập trình thơng dịch hướng đối tượng và là một ngôn ngữ bậc cao, ngữ nghĩa động. Python hỗ trợ các module và gói, khuyến khích chương trình module hóa và tái sử dụng mã. Trình thơng dịch Python và thư viện chuẩn mở rộng có sẵn dưới dạng mã nguồn hoặc dạng nhị phân miễn phí cho tất cả các nền tảng chính và có thể được phân phối tự do.

Một vài đặc điểm về ngôn ngữ Python:

- Ngữ pháp đơn giản, dễ đọc.

- Vừa hướng thủ tục, vừa hướng đối tượng.

- Hỗ trợ module và hỗ trợ gói.

- Xử lý lỗi bằng ngoại lệ.

- Kiểu dữ liệu động ở mức cao.

- Có các bộ thư viện chuẩn và các module ngoài, đáp ứng tất cả các nhu cầu lập

- Có khả năng tương tác với các module khác viết trên C/C++ hoặc Java cho Jython, hoặc .Net cho IronPython.

- Có thể nhúng vào ứng dụng như một giao tiếp kịch bản.

Một số ưu điểm của ngôn ngữ Python:

- Python dễ dàng kết nối với các thành phần khác: Python có thể kết nối với các

đối tượng COM, .NET (IronPython, Python for .net), và CORBA, Java… Python cũng được hỗ trợ bởi Internet Communications Engine (ICE) và nhiều công nghệ kết nối khác. Có thể viết các thư viện trên C/C++ để nhúng vào Python và ngược lại.

- Python là ngơn ngữ có khả năng chạy trên nhiều nền tảng: Python có cho mọi

hệ điều hành: Windows, Linux/Unix, OS/2, Mac, Amiga, và những hệ điều hành khác. Thậm chí có cả những phiên bản chạy trên .NET, máy ảo Java, và điện thoại di động (Nokia Series 60). Với cùng một mã nguồn sẽ chạy giống nhau trên mọi nền tảng.

- Python rất đơn giản và dễ học: Python có hệ thống thư viện chuẩn và các thư

viện mã nguồn mở được chia sẻ bởi cộng đồng lớn trên mạng.

- Python là ngôn ngữ mã nguồn mở: Cài đặt Python dùng giấy phép nguồn mở

nên được sử dụng và phân tối tự do, ngay cả trong việc thương mại. Giấy phép Python được quản lý bởi Python Software Foundation.

2.5.2 Các thư viện sử dụng trong Python

Trong đề tài sử dụng sử dụng bộ phân lớp Haar-Cascde của thư viện OpenCV, thư viện

Một phần của tài liệu Nhận dạng cảm xúc thông qua khuôn mặt dùng mạng nơ ron tích chập CNN (Trang 28)

Tải bản đầy đủ (PDF)

(82 trang)