Phát hiện và căn chỉnh khuôn mặt sử dụng MTCNN

Một phần của tài liệu Xây dựng ứng dụng hỗ trợ điểm danh sinh viên bằng điện thoại dựa trên nhận dạng khuôn mặt người luận văn thạc sĩ công nghệ thông tin (Trang 51)

4.2.1 Giới thiệu về mạng Nơ-ron tích chập

Để dạy thuật toán nhận diện đối tƣợng trong hình ảnh, ta sử dụng một loại mạng Nơ-ron nhân tạo (Artificial Neural Network – ANN) là mạng Nơron Tích chập (Convolutional Neural Networks – CNNs hay Convnets). Tên của nó đƣợc dựa trên phép tính quan trọng đƣợc sử dụng trong mạng đó là Tích chập. Đây là một trong những mô hình Deep Learning tiên tiến giúp chúng ta xây dựng đƣợc hệ thống thông minh tiên với độ chính xác cao nhƣ ngày nay.

4.2.1.1 Convolution (Tích chập)

Trong toán học và đặc biệt là trong giải tích hàm, tích chập là 1 phép toán thực hiện đối với 2 hàm số f và g, kết quả cho ra 1 hàm số thứ 3. Phép tích chập khác với tƣơng quan chéo ở chỗ nó cần lật kernel theo chiều ngang và dọc trƣớc khi tính tổng của tích. Nó đƣợc ứng dụng trong xác suất, thống kê, thị giác máy tính (computer vision), xử lý ảnh, xử lý tín hiệu, kỹ thuật điện, học máy, và các phƣơng trình vi phân.

Tích chập của hàm số f và g đƣợc viết là f*g, là một biến đổi tích phân đặc biệt: def ( * )( )f g tf( ) ( g t  )d     =  f t( ) ( )g  d    (2-1)

Một cách tổng quát, nếu f và g là hàm số phức trong không gian Rd, thì tích chập của chúng đƣợc định nghĩa nhƣ sau:

( * )( ) ( ) ( ) ( ) ( ) d d f g x   f y g xy dy  f xy g y dy R R (2-2) Hình 4.1:Minh họa tích chập

Trong xử lý tín hiệu số tích chập đƣợc sử dụng nhằm biến đổi thông tin đầu vào thông qua một phép tích chập với bộ lọc trả về đầu ra là một tín hiệu mới. Tín hiệu mới này sẽ làm giảm những đặc trƣng mà bộ lọc không quan tâm và chỉ giữ những đặc trƣng chính.

Tích chập thông dụng nhất là tích chập hai chiều đƣợc áp dụng trên ma trận

đầu vào và ma trận bộ lọc hai chiều. Phép tích chập của một ma trận W1xH1

XR với

một bộ lọc (receptive field) W2xH2

FR sẽ trải qua các bƣớc:

Tích chập tại một điểm: Tại vị trí đầu tiên trên cùng của ma trận đầu vào, ta

sẽ lọc ra một ma trận con

FxF sub

XR có kích thƣớc bằng kích thƣớc của bộ lọc. Giá

trị y11 tƣơng ứng trên Y là tích chập của Xsub với F đƣợc tính nhƣ sau:

11 ij 1 1 F F ij i j y x f    (2-3)

Sau đó, tiến hành trƣợt dọc theo ma trận theo chiều từ trái qua phải, từ trên xuống dƣới theo bƣớc nhảy (stride) S ta sẽ tính đƣợc các giá trị y11tiếp theo. Sau khi quá trình này kết thúc ta thu đƣợc trọn vẹn ma trận Y.

Trong một mạng Nơron tích chập, các lớp liền sau lấy đầu vào từ lớp liền trƣớc nó. Do đó, để hạn chế lỗi trong thiết kế mạng Nơron chúng ta cần xác định kích thƣớc đầu ra ở mỗi lớp. Điều đó có nghía là dựa vào kích thuƣớc ma trận đầu vào (W1, H1), kích thƣớc bộ lọc (F,F) và bƣớc nhảy S để xác định khích thƣớc ma trận đầu ra (W2, H2)[10].

4.2.1.2 Tổng quan kiến trúc mạng

Đối với mạng Nơron thông thƣờng (Regular Neural Nets): đầu vào là một

vector duy nhất sau đó biến đổi nó thông qua hàng loạt các lớp ẩn (hidden layer). Mỗi lớp ẩn đƣợc tạo thành từ tập hợp các Nơron, trong đó mỗi nơron đƣợc kết nối đầy đủ với tất cả các nơron ở lớp trƣớc. Trong một lớp, các nơron hoạt động hoàn toàn độc lập và không chia sẻ bất kỳ kết nối nào. Lớp kết nối đầy đủ (fully- connected) cuối cùng đƣợc gọi là lớp đầu ra và đại diện cho điểm số của lớp trong quá trình phân loại. Điểm hạn chế của mạng nơron thông thƣờng là không mở rộng tốt cho hình ảnh đầy đủ. Chẳng hạn, với bộ dữ liệu ảnh CIFAR-10, hình ảnh chỉ có kích thƣớc 32x32x3 (rông 32, cao 32 và sâu 3 đại diện cho 3 kênh màu RGB, mỗi một nơron kết nối đầy đủ trong lớp ẩn đầu tiên của mạng Nơron sẽ có 32*32*3 = 3072 trọng số. Số lƣợng này dƣờng nhƣ vẫn có thể quản lý đƣợc, nhƣng rõ ràng cấu trúc kết nối đầy đủ này không thể mở rộng thành hình ảnh lớn hơn. Ví dụ, một bức ảnh có kích thƣớc lớn hơn nhƣ 200x200x3 thì mỗi nơron sẽ có 200*200*3 = 120000 trọng số. Hơn nữa, chúng ta không chỉ cần một mà còn muốn có có một số nơron nhƣ vậy . Vì thế, số lƣợng các tham số sẽ tăng lên nhanh chóng dẫn đến quá mức.

Để giải quyết vấn đề này, mạng nơron tích chập đƣợc đề xuất. Mạng này kết hợp thực tế là đầu vào gồm các hình ảnh và chúng hạn chế cấu trúc theo một cách hợp lý hơn. Đặc biệt, không giống nhƣ mạng nơron thông thƣờng, các lớp của mạng tích chập đƣợc sắp xếp theo 3 chiều: chiều rộng, chiều cao và chiều sâu (chiều sâu ở đây đề cập đến chiều thứ ba của khối lƣợng kích hoạt không phải độ sâu của mạng nơron đầy đủ). Chẳng hạn, một ảnh trong CIFAR-10 là một khối đầu vào, sau đó mỗi nơron trong lớp chỉ lết nối với một phần nhỏ của lớp trƣớc nó thay vì kết nối đầy đủ với tất cả nơron. Hơn nữa, đầu ra cuối cho CIFAR-10 chỉ có kích thƣớc 1x1x10 vì hình ảnh đầy đủ đã đƣợc giảm thành một vectơ sắp xếp theo chiều sâu.

Hình 4. 2: So sánh mạng Neural thông thường và mạng Neuron tích chập (Bên trái là mạng Neural thông thường; Bên phải là mạng CNN)

4.2.1.3 Các lớp của mạng Neuron tích chập.

Nhƣ phần mô tả ở trên, một mạng Neural tích chập đơn giản là một chuỗi các lớp và mỗi lớp của mạng sẽ biến đổi một khối kích hoạt này sang khối khác thông qua một chức năng đặc biệt. Để xây dựng mạng Neural tích chập, ba loại lớp chính đƣợc sử dụng: Lớp tích chập (Convolutional Layer), Lớp tổng hợp (Pooling Layer) và Lớp kết nối đầy đủ (Fully-Connected layer). Các lớp này sẽ đƣợc xếp chồng tạo thành một kiến trúc mạng Neural tích chập đầy đủ. Mỗi lớp nhận vào một khối 3D đầu vào và biến đổi thanhd một khối 3D đầu ra thông qua một chức năng khác biệt. Mỗi lớp có thể có hoặc không có tham số (ví dụ CONV/FC có, RELU/POOL không) hay có hoặc không có siêu đƣờng kính bổ sung (CONV/FC/POOL có, RELU không). Cụ thể, chúng ta sẽ đi đến mô tả chi tiết của từng lớp và các mối liên kết của chúng:

- Lớp tích chập (Convolutional layer - CONV):

Lớp CONV là khối xây dựng cốt lõi của mạng tích chập, thực hiện hầu hết các công việc quan trọng. Các tham số của lớp bao gồm một tập hợp các bộ lọc (Filter) hoặc Kernel. Đặc điểm các bộ lọc này có trƣờng tiếp nhận nhỏ nhƣng kéo dài toàn bộ chiều sâu của tín hiệu đầu vào. Trong quá trình chuyển tiếp, mỗi bộ lọc đƣợc tích hợp (trƣợt) trên chiều rộng và chiều cao của tín hiệu đầu vào, tính toán các tích vô hƣớng giữa các bộ lọc và đầu vào và tạo ra bản đồ kích hoạt hai chiều của bộ lọc đó. Do đó, mạng tìm hiểu các bộ lọc kích hoạt khi phát hiện một số loại đặc trƣng cụ thể tại một số vị trí trong đầu vào.

Hình 4. 3: Mô tả lớp CONV (Các neuron của một lớp chập (màu xanh) kết nối với trường tiếp nhận của chúng (màu đỏ). (adsbygoogle = window.adsbygoogle || []).push({});

Xếp chồng các bản đồ kích hoạt cho tất cả các bộ lọc dọc theo chiều sâu tạo thành tín hiệu đầu ra đầy đủ của lớp tích chập. Do đó, mỗi điểm trong tín hiệu đầu ra cũng có thể đƣợc hiểu là đầu ra của một nơron khi kết nối với một vùng nhỏ trong đầu vào và chia sẻ các tham số với các nơ ron trong cùng một bản đồ kích hoạt. Việc xây dựng lớp tích chập dựa vào 3 ý tƣởng cơ bản:

- Kết nối cục bộ:

Trong quá trình xử lý dữ liệu đầu vào có chiều rộng, chiều cao nhƣ hình ảnh, việc kết nối các neuron với tất cả các neuron trong lớp trƣớc đó là không thực tế vì kiến trúc mạng không tính đến cấu trúc không gian của dữ liệu. Thay vào đó, chúng ta sẽ thƣc thi một kiểu kết nối cục bộ thƣa thớt giữa các neuron của các lớp liền kề: mỗi neuron chỉ đƣợc kết nối với một vùng nhỏ của tín hiệu đầu vào.

Phạm vi của kết nối này là một siêu tham số đƣợc gọi là trƣờng tiếp nhận của nơron (tƣơng đƣơng đây là kích thƣớc bộ lọc). Các kết nối là cục bộ trong không gian (dọc theo chiều rộng và chiều cao), nhƣng luôn mở rộng kéo dài theo toàn bộ chiều sâu của tín hiệu đầu vào. Một kiến trúc nhƣ vậy đảm bảo rằng các bộ lọc đã học tạo ra phản ứng mạnh nhất đối với mẫu đầu vào cục bộ không gian.

- Sắp xếp không gian:

Nội dung bên trên đã giải thích sự kết nối của từng neuron trong lớp CONV với tín hiệu đầu vào. Phần này sẽ giải thích rõ hơn về số lƣợng neuron tín hiệu đầu ra và cách chúng đƣợc sắp xếp. Ba siêu đƣờng kính (hyperparameters) kiểm soát kích thƣớc tín hiệu đầu ra là: depth (độ sâu), stride (sải) và zero-padding (đệm không)

Đầu tiên, giá trị của depth là độ sâu của tín hiệu đầu ra. Đây là một siêu tham số, nó tƣơng ứng với số lƣợng bộ lọc muốn sử dụng. Depth kiểm soát số lƣợng neuron trong một lớp kết nối với một vùng của tín hiệu đầu vào. Những neuron này học các kích hoạt cho các đặc trƣng khác nhau trong đầu vào. Ví dụ, nếu Lớp tích chập đầu tiên lấy hình ảnh thô, thì các neuron khác nhau dọc theo chiều sâu có thể kích hoạt khi có các cạnh định hƣớng khác nhau hoặc các đốm màu.

Tiếp theo, chúng ta phải xác định stride – tức là bƣớc tiến mà chúng ta trƣợt bộ lọc. Chẳng hạn, với stride = 1: chúng ta di chuyển các bộ lọc một pixel mỗi lần. Điều này dẫn đến các trƣờng tiếp nhận chồng chéo rất nhiều và cho ra đầu ra lớn. Khi stride = 2 thì chúng sẽ nhảy 2 pixel mỗi lần khi chúng ta trƣợt xung quanh. Điều này sẽ tạo ra kích thƣớc đầu ra nhỏ hơn theo không gian. Các trƣờng hợp stride >= 3 rất hiếm xảy ra trong thực tế.

Để kiểm soát đƣợc kích thƣớc không gian của đầu ra, chúng ta sử dụng tính năng Zero-padding: thêm các số 0 vào xung quanh các đƣờng biên. Kích thƣớc của phần zero-padding là một siêu tham số. Thông thƣờng, zero-padding đƣợc sử dụng để bảo toàn chính xác kích thƣớc không gian của tín hiệu đầu vào, tức là làm cho độ rộng, chiều cao đầu vào và đầu ra là nhƣ nhau.

Công thức tính số lƣợng neuron trong một kích thƣớc nhất định có thể tính theo công bằng: W 2 1 K P S    (2-4)

Trong đó: W: kích thƣớc tín hiệu đầu vào, K: kích thƣớc lớp lọc, S: bƣớc tiến stride, P: số lƣợng đệm 0

Lƣợc đồ chia sẻ tham số đƣợc sử dụng để kiểm soát số lƣợng tham số. Nó đƣợc xây dựng dựa vào giả định rằng nếu một đặc trƣng có ích để tính toán tại một số vị trí khác. Khi biểu thị một lát cắt 2 chiều của độ sâu thành một lát cắt sâu (depth slice) buộc các neuron trong cùng một lát cắt sâu phải sử dụng cùng trong số (weights) và độ lệch (bias). Do tất cả các neuron trong một lát cắt có cùng độ sâu có cùng tham số, nên lợi ích của việc chia sẻ tham số là giảm tối đa tham số trong mạng Neuron tích chập mà vẫn đảm bảo kiến trúc CNN.

- Lớp tổng hợp (Pool Layer – POOL):

Pool Layer thực hiện chức năng làm giảm chiều không gian của đầu và giảm độ phức tạp tính toán của model ngoài ra Pool Layer còn giúp kiểm soát hiện tƣợng overffiting. Thông thƣờng, Pool layer có nhiều hình thức khác nhau phù hợp cho nhiều bài toán, tuy nhiên Max Pooling là đƣợc sử dụng nhiều vào phổ biến hơn cả với ý tƣởng cũng rất sát với thực tế con ngƣời đó là: Giữ lại chi tiết quan trọng hay hiểu ở trong bài toán này chính giữ lại pixel có giá trị lớn nhất.

Chẳng hạn, khi ta sử dụng Max pooling với bộ lọc 2x2 và stride = 2. Bộ lọc sẽ chạy dọc ảnh. Với mỗi vùng ảnh đƣợc chọn, ta sẽ chọn ra một giá trị lớn nhất và giữ lại.

Hình 4.5: Mô tả lớp POOL với bộ lọc 2x2 và stride = 2.

Thông thƣờng max pooling có kích thƣớc là 2 và stride=2. Nếu lấy giá trị quá lớn, thay vì giảm tính toán nó lại làm phá vỡ cấu trúc ảnh và mất mát thông tin nghiêm trọng. Vì vậy mà một số chuyên gia không thích sử dụng layer này mà thay vào đó sử dụng thêm các lớp Conv Layer và tăng số stride lên mỗi lần.

- Lớp kết nối đầy đủ (Fully Connected Layer - FC):

Tại lớp mạng này, mỗi một nơ-ron của layer này sẽ liên kết tới mọi nơ-ron của lớp khác. Để đƣa ảnh từ các layer trƣớc vào mạng này, buộc phải dàn phẳng

bức ảnh ra thành 1 vector thay vì là mảng nhiều chiều nhƣ trƣớc. Tại layer cuối cùng sẽ sử dụng 1 hàm kinh điển trong học máy mà bất kì ai cũng từng sử dụng đó là softmax để phân loại đối tƣợng dựa vào vector đặc trƣng đã đƣợc tính toán của các lớp trƣớc đó.

- Một số lƣu ý khi chọn các tham số cho mạng Neuron tích chập:

Số các convolution layer: sử dụng càng nhiều các convolution layer thì hiệu suất càng đƣợc cải thiện. Sau khoảng 3 hoặc 4 layer, các tác động đƣợc giảm một cách đáng kể. Filter size: Thông thƣờng các hệ thống sẽ filter theo size 5x5 hoặc 3x3. Pooling size: thƣờng là 2×2 hoặc 4×4 cho ảnh đầu vào lớn [10].

4.2.2 MTCNN.

MTCNN là viết tắt của Multi-task Cascaded Convolutional Networks. Nó là bao gồm 3 mạng CNN xếp chồng và đồng thời hoạt động khi phát hiện và xác định khuôn mặt. Mỗi mạng có cấu trúc khác nhau và đảm nhiệm vai trò khác nhau trong task. Đầu ra của MTCNN là vị trí khuôn mặt và các điểm trên mặt nhƣ: mắt, mũi, miệng…

Trong giai đoạn đầu tiên, nó tạo ra các khung ứng cử một cách nhanh chóng thông qua một CNN đơn giản. Sau đó, tinh chỉnh các cửa sổ bằng cách từ chối một số lƣợng lớn các cửa sổ không phải khuôn mặt ngƣời thông qua một CNN phức tạp hơn. Cuối cùng, nó sử dụng một CNN mạnh hơn để tinh chỉnh lại kết quả và đƣa ra năm vị trí mốc trên khuôn mặt.

Hình 4.6: Mô tả quá trình xác định khuôn mặt sử dụng MTCNN

4.2.2.1 Cơ chế hoạt động:

Cơ chế hoạt động của hệ thống đã đƣợc khái quát nhƣ trên hình 4.6. Khi chúng ta đƣa vào một ảnh mặt ngƣời, ban đầu chúng ta thay đổi kích thƣớc của nó

thành các tỷ lệ khác nhau để xây dựng một kim tự tháp hình ảnh (bản chất của kim tự tháp hình ảnh là bản sao của các ảnh đầu vào với các kích thƣớc khác nhau). Kim tự tháp hình ảnh này là đầu vào của khung xếp tầng gồm 3 tác vụ chính của MTCNN.

MTCNN hoạt động theo 3 bƣớc, mỗi bƣớc có một mạng neural riêng lần lƣợt là: P-Net, R-Net và O-Net. (adsbygoogle = window.adsbygoogle || []).push({});

Bƣớc 1: Chúng ta khai thác một mạng tích chập đầy đủ đƣợc gọi là Proposal Network(P-Net), để có đƣợc các cửa sổ ứng cử viên và các bounding box regression vectors của chúng. Sau đó, các ứng cử viên đƣợc hiệu chuẩn dựa trên các estimated bounding box regression vectors. Sau đó, chúng ta sử dụng non- maximum suppression (NMS) để hợp nhất các ứng cử viên chồng chéo.

Bƣớc 2: Tất cả các ứng cử viên đƣợc đƣa đến một CNN khác, đƣợc gọi là Refine Network (R-Net), để từ chối thêm một số lƣợng lớn các ứng cử viên sai. Sau đó, hệ thống thực hiện hiệu chuẩn với bounding box regression và tiến hành NMS.

Bƣớc 3: Giai đoạn này tƣơng tự nhƣ giai đoạn thứ hai, nhƣng trong giai đoạn này, chúng ta hƣớng đến việc xác định các khu vực khuôn mặt với sự giám sát nhiều hơn. Đặc biệt, mạng sẽ xuất ra năm vị trí trên khuôn mặt.

Group CNN 300xForward Propagation Vali dation Accuracy Group 1 12-Net 0,038s 94,4% P-Net 0,031s 94,6% Group 2 24-Net 0,738s 95,1% R-Net 0,458s 95,4% Group 3 48-Net 0,577s 93,2% O-Net 1,347s 95,4% Bảng 4.1: So sánh tốc độ và độ chính xác CNNs khác [2]

Hiện nay, có nhiều mạng CNN đã đƣợc thiết kế để nhận dạng khuôn mặt.

Một phần của tài liệu Xây dựng ứng dụng hỗ trợ điểm danh sinh viên bằng điện thoại dựa trên nhận dạng khuôn mặt người luận văn thạc sĩ công nghệ thông tin (Trang 51)