Những vấn đề xảy ra với mơ hình CNN

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 33)

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

2.3.3 Những vấn đề xảy ra với mơ hình CNN

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 Keras với backend của Tensorflow, ngồi ra cịn có một số thư viện cơ bản cho deep learning như Numpy và Imutils.

Hình 2.18: Cấu trúc thư viện OpenCV

OpenCV là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính, xử lý ảnh và máy học. Nó chứa hàng ngàn thuật tốn tối ưu hố, trong đó cung cấp một bộ cơng cụ phổ biến cho các ứng dụng về thị giác máy tính. OpenCV đang được sử dụng trong rất nhiều ứng dụng, từ khâu hình ảnh xem đường của Google tới việc chạy các chương trình nghệ thuật tương tác, nhận diện khn mặt, hay rô-bốt, xe hơi tự lái.

Trong đề tài này, OpenCV được sử dụng cho các thao tác đọc, xử lý ảnh cơ bản, phần cài đặt thuật tốn có thể sử dụng thư viện Haar-Cascade trong việc phát hiện vị trí khn mặt để cải thiện tốc độ xử lý của bài tốn. Tuy nhiên, với độ chính xác tương đối kém của nó thì Haar-Cascade chỉ được áp dụng ở cơng đoạn địi hỏi tốc độ xử lý cao mà khơng u cầu quá cao về độ chính xác.

 Thư viện Keras

Keras là một thư vin c phỏt trin vo nm 2015 bi Franỗois Chollet, là một kỹ sư nghiên cứu lĩnh vực học sâu tại google. Nó là một thư viện mã nguồn mở hàng đầu cho mạng nơ-ron nhân tạo được viết bởi ngơn ngữ python. Keras là một API bậc cao có thể sử dụng chung với các thư viện học sâu nổi tiếng như tensorflow(được phát triển bởi google), Microsoft Cognitive Toolkit (được phát triển bởi microsoft), theano (người phát triển chính Yoshua Bengio). Keras có một số ưu điểm như :

 Có thể run trên cả cpu và gpu.

 Hỗ trợ xây dựng CNN , RNN và có thể kết hợp cả 2.

Cấu trúc của Keras có thể được chia ra thành 3 phần chính:

 Hàm chức năng để dựng bộ xương cho model.

 Hàm chức năng dùng để tiền dữ liệu.

 Hàm chức năng ở trong bộ xương của model.

 Thư viện Numpy

NumPy là một từ viết tắt của "Numeric Python" hoặc "Numerical Python". Nó là một mô-đun mở rộng mã nguồn mở cho Python, cung cấp các chức năng biên dịch nhanh cho các thao tác toán học và số. Hơn nữa, NumPy làm phong phú ngơn ngữ lập trình Python với các cấu trúc dữ liệu mạnh mẽ để tính tốn hiệu quả các mảng và ma trận đa chiều. Việc thực hiện thậm chí là nhằm vào ma trận và mảng khổng lồ. Bên cạnh đó các mơ-đun cung cấp một thư viện lớn các chức năng toán học cấp cao để hoạt động trên các ma trận và mảng.

NumPy dựa trên hai mô đun Python trước đó về xử lý các mảng. Một trong số đó là Numeric. Numeric cũng giống NumPy như một môđun Python cho hiệu suất cao, tính tốn số học, nhưng nó là lỗi thời ngày nay. Một bản tiền nhiệm khác của NumPy là Numarray, là một bản viết lại hồn chỉnh của Numeric nhưng cũng khơng được ủng hộ. NumPy là sự sáp nhập của cả hai, nghĩa là nó được xây dựng trên mã của Numeric và các tính năng của Numarray.

Ưu điểm của việc sử dụng Numpy với Python:

 Tính tốn theo mảng

 Triển khai hiệu quả các mảng đa chiều

CHƯƠNG 3

THIẾT KẾ HỆ THỐNG NHẬN DẠNG CẢM XÚC THÔNG QUA KHN MẶT DÙNG MẠNG NƠ-RON TÍCH CHẬP TRÊN KIT RASPBERRY PI 4

3.1 YÊU CẦU CỦA HỆ THỐNG

Hệ thống nhận dạng được cảm xúc trên khuôn mặt từ máy ảnh đến mặt người trong cự ly khoảng 1m.

Hệ thống nhận dạng được cảm xúc trong điều kiện môi trường đầy đủ ánh sáng, độ

tương phản thích hợp, khơng chịu ảnh hưởng bởi các yếu tố ngoại quan bên ngồi như:

nguồn sáng có cường độ cao, ánh nắng mặt trời...

Hệ thống nhận dạng được 7 loại cảm xúc cơ bản: “vui vẻ” (happy), “buồn” (sad), “sợ hãi” (scared), “giận dữ” (angry), “ngạc nhiên” (surprised), “khó chịu” (disgust) và “bình thường” (neutral).

3.2 MƠ HÌNH HỆ THỐNG 3.2.1 Sơ đồ khối của hệ thống

Hình 3.1: Sơ đồ khối của hệ thống.

Hình ảnh ngõ vào lấy từ video được quay bởi webcam máy tính. Qua q trình tiền xử lý, video được cắt ra thành những khung ảnh tĩnh. Các ảnh này tiếp tục được xử lý đưa về ảnh xám, nhận dạng và tách khuôn mặt khỏi ảnh bằng phương pháp Haar-like của OpenCV [13]. Qua giai đoạn xử lý, hình ảnh khn mặt trả về ma trận có tọa độ gồm chiều dài, chiều rộng và chiều cao, sau đó giảm độ phân giải của ảnh xuống phù hợp với mơ hình của mạng CNN và chuyển đổi ảnh xám sang ảnh nhị phân. Từ ảnh nhị phân, hệ thống sẽ lấy ra các đặc trưng riêng của từng cảm xúc. Tiếp theo, các đặc trưng đó sẽ được đưa vào mạng CNN

3.2.2 Mơ hình CNN sử dụng trong hệ thống

Hình 3.2: Kiến trúc mạng CNN được dùng trong hệ thống

Ảnh đầu vào là ảnh xám nhị phân chứa khn mặt người có kích thước 48x48. Ảnh qua xử lý trở thành ma trận 2 chiều được đưa vào mơ hình CNN. Quá trình huấn luyện trong CNN là sự kết hợp của các lớp như lớp chập, lớp ReLU, lớp MaxPooling, lớp chuẩn hóa (Batch normalization) và lớp chập tách biệt (Separable Conv2D). Lớp kết nối đầy đủ trong mơ hình CNN truyền thống được xóa bỏ trong mơ hình này. Với việc bỏ đi lớp kết nối đầy đủ giúp cắt giảm số lượng tham số ở cuối trong mô hình CNN truyền thống nhằm

tăng tốc thời gian chạy thuật tốn và khái qt hóa tốt hơn (q cao số lượng tham số so với kích thước tập huấn luyện có thể gây ra quá khớp)

Đầu tiên, ảnh đầu vào được chập với 8 bộ lọc kích thước 3x3. Bộ lọc sẽ lần lượt được dịch chuyển với một bước trượt chạy dọc theo ảnh và quét toàn bộ ảnh. Tiếp theo, toàn bộ ảnh được thêm vào lớp chuẩn hóa giúp bình thường hóa đầu ra, các hệ số trở nên cân bằng hơn (không quá nhỏ hoặc quá lớn) vì thế sẽ giúp mơ hình dễ hội tụ hơn. Sau đó kích hoạt lớp ReLU được đính kèm để phi tuyến, sau q trình này thu được 8 ma trận phi tuyến có kích thước 24x24. Lớp chập và lớp chuẩn hóa thứ hai thực hiện tương tự, đầu ra sau xử lý vẫn là 8 ma trận có kích thước 24x24. Kết quả ở ngõ ra sau lớp chập thứ hai sẽ được xử lý độc lập ở khối A gồm: lớp chập tách biệt tích chập theo chiều sâu với 16 bộ lọc 3x3, sau đó được chuẩn hóa bởi lớp chuẩn hóa, kích hoạt lớp ReLU, thực hiện thêm một lần chập tách biệt với 16 bộ lọc 3x3 và lớp chuẩn hóa trước khi đưa vào lớp MaxPooling là một ma trận có kích thước 3x3 với bước trượt bằng 2, sau q trình này thu được 16 ma trận có kích thước 12x12; ở nhánh cịn lại thêm một lượng tích chập với 16 bộ lọc 1x1, ở quá trình của nhánh này cũng thu được 16 ma trận có kích thước 12x12 với mục đích điều chỉnh trọng số của đặc trưng khi tính gộp kết quả với q trình tính chập tách biệt. Sau q trình ở khối A thu được 16 ma trận có kích thước 12x12. Thực hiện tương tự và lặp lại ở khối A lần lượt với số lượng các bộ lọc 3x3 là 32, 64 và 128, kết quả sau khi qua các lần lặp lại ở khối A là 32 ma trận có kích thước 6x6, 64 ma trận có kích thước 3x3 và 128 ma trận có kích thước 2x2. Đem kết quả cuối cùng đem chập với 7 bộ lọc (tương ứng 7 loại cảm xúc). Kết quả tính tốn của CNN được chuyển vào khối giá trị trung bình tồn cục (chuyển kết quả 2D thành vector), kết quả này được xử lý qua một lớp softmax để trả về xác suất của từng loại

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 33)

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

(82 trang)