Vài điều cần chuẩn bị trước khi huấn luyện

Một phần của tài liệu Bắt cử động khuôn mặt qua video và áp lên mô hình 3D (Trang 40)

a. Chuẩn bị dữ liệu khuôn mặt:

Dữ liệu khuôn mặt phục vụ cho phương pháp bao gồm 2 phần: dữ liệu hình ảnh và dữ liệu tọa độ các điểm landmark của khuôn mặt. Có thể sử dụng các database được làm sẵn hoặc tự tạo cho mình một database riêng. Với database được làm sẵn, có 3 database phổ biến sau:

- AR face database [19][27]:

Là bộ dữ liệu hình ảnh về khuôn mặt người do Fgnet (một nhóm làm việc ở Châu Âu) phát triển. Bộ dữ liệu gồm 4000 ảnh màu, độ phân giải 768x576. Ảnh chụp là ảnh chính diện khuôn mặt của 126 người dưới nhiều sắc thái biêu cảm khác nhau, độ sáng thay đổi với phông nền cố định. Dữ liệu tọa độ là 22 điểm landmark được đánh bằng tay trên tất cả các ảnh và ghi ra file riêng.

40

Bộ dữ liệu này là miễn phí. Tuy nhiên, cần có sự đồng ý của tác giả để sử dụng được bộ huấn luyện này.

Hình 3.9 AR landmark [19]

- XM2VTS database [19][27]:

Là bộ dữ liệu khá lớn phục vụ cho nhiều mục đích khác nhau. Ngoài bộ dữ liệu hình ảnh phục vụ cho các bài toán nhận dạng, bộ dữ liệu này còn cung cấp các bộ dữ liệu âm thanh phục vụ cho các bài toán xử lí âm thanh. XM2VTS do đại học Surrey phát triển.

Bộ dữ liệu được chia làm nhiều set, ta chọn set chứa dữ liệu khuôn mặt phục vụ cho bài là frontal set I và II. Hai set dữ liệu gồm 2360 ảnh màu, độ phân giải 720x576. Ảnh chụp là ảnh khuôn mặt chính diện của 295 người trong môi trường ánh sáng đồng nhất với nền cố định. Dữ liệu tọa độ là 68 điểm landmark được đánh dấu bằng tay trên tất cả các ảnh và ghi ra file riêng.

Đây là bộ dữ liệu khá mạnh dành cho việc huấn luyện phục vụ nhu cầu của bài toán. Tuy nhiên, đây không phải là bộ dữ liệu miễn phí. Để có được nó, ta phải đặt mua trên trang chủ của đại học Surrey.

41

Hình 3.10 XM2VTS landmark [19]

- BioID face database [19][27]:

Là bộ dữ liệu khuôn mặt người do FGnet phát triển. Bộ dữ liệu gồm 1521 ảnh trắng đen, độ phân giải 384x286. Ảnh chụp khuôn mặt chính diện của 23 người trong môi trường ánh sáng thay đổi với phông nền không cố định. Dữ liệu tọa độ là 20 điểm landmark được đánh dấu bằng tay và ghi ra file riêng.

Bộ dữ liệu này là bộ dữ liệu miễn phí và có thể download dễ dàng tại trang chủ.

42

Như đã trình bày ở trên, bộ dữ liệu XM2VTS là bộ dữ liệu thích hợp cho việc huấn luyện vì số lượng ảnh và số lượng điểm landmark mà nó cung cấp. Tuy nhiên, khó khăn trong việc mua bộ dữ liệu cũng như xin phép sử dụng nên đề xuất việc dùng bộ dữ liệu BioID.

Sau khi download bộ dữ liệu BioID, ta giải nén và được các thư mục:

. BioID_pts: chứa dữ liệu tọa độ của các điểm landmark ghi dưới định dạng .pts. . BioID-FaceDatabase-V1.2: 1521 hình ảnh khuôn mặt người dưới dạng file .pgm

và dữ liệu tọa độ của mắt.

. BioID-FD-Eyepos-V1.2: Dữ liệu tọa độ của mắt. Dữ liệu này giống với dữ liệu trong thư mục BioID-FaceDatabase-V1.2.

Dữ liệu tọa độ của BioID được bố trí theo cấu trúc sau: version: 1 //số hiệu phiên bản

n_points: 20 //số lượng điểm landmark {

159.128 108.541 //tọa độ của các điểm landmark dưới dạng số thập phân 230.854 109.176 //cột bên trái là giá trị của X, cột bên phải là giá trị Y 164.841 179.633 223.237 178.998 132.469 93.9421 183.883 94.5768 211.177 95.2116 254.974 91.4031 129.295 109.176 144.529 109.811 176.901 107.272 216.89 107.272 246.088 110.445 261.957 109.811 196.578 139.009 184.518 147.261 207.369 145.991 195.943 175.189 193.404 193.597 192.769 229.143 }

Ta chia bộ dữ liêu làm 2 phần. Vì bộ dữ liệu khá ít, nên ta lấy 100 ảnh đầu dùng để test chương trình, phần còn lại dùng cho việc huấn luyện. Bố trí 2 phần dữ liệu

trong 2 thư mục training và testing. Trong mỗi thư mục, nên để phần dữ liệu hình ảnh và dữ liệu tạo độ ra riêng. Trong thư mục training, nên có thêm thư mục chứa

các file mô tả bộ dữ liệu và thư mục chứa các kết quả huấn luyện.

Trước khi bắt đầu các thao tác với bộ dữ liệu, ta cần tạo các file mô tả bộ dữ liệu. File mô tả là một file text có cấu trúc sau:

<số lượng file trong thư mục> <tên file 1>

<tên file 2> …

43

Để tạo ra file mô tả với cấu trúc trên, ta sử dụng câu lệnh UNIX trong cửa sổ cmd:

ls -> file.txt.

Hình 3.12 Tạo file mô tả

Kết thúc câu lệnh, ta tạo được file mô tả như sau:

Hình 3.13 File mô tả

Việc tạo file mô tả sẽ có lợi khi duyệt các file bằng C và C++ do 2 ngôn ngữ này hỗ trợ khá kém cho việc duyệt các tệp trong thư mục.

Lưu ý, mặc định trong window không hỗ trợ các câu lệnh UNIX. Vì vậy, để có thể sử dụng chúng trên nền window, có thể tải các công cụ hỗ trợ như cygwin, GNU, GnuWin,…

b. Một số vấn đề về whisker:

44

Như đã nói ở phần trước, whisker là một vector đi qua điểm landmark và vuông góc với cạnh của khuôn mặt. Vì vậy, hai đại lượng cần phải chỉ rõ khi tạo thành một whisker là phương và độ dài của nó. Với độ dài whisker, ta có thể dễ dàng xác định bằng cách chỉ rõ số pixel cần lấy trong quá trình vẽ whisker. Tuy nhiên, khái niệm về phương của whisker theo như định nghĩa sẽ rất khó thể hiện một cách chính xác khi triển khai thuật toán. Vì vậy, phần này sẽ trình bày một số thủ thuật liên quan đến việc lấy phương của whisker.

Theo khái niệm đã trình bày, whisker sẽ là một đường thẳng vuông góc với cạnh khuôn mặt. Tuy nhiên, cạnh của khuôn mặt không phải là một đường thẳng. Vì vậy, rất khó có thể thể hiện một cách chính xác whisker theo khái niệm đã trình bày.

Hình 3.14 Cạnh khuôn mặt được thể hiện dưới đường thẳng màu đen.Whisker là đường thẳng màu vàng.Các điểm landmark là các điểm màu đỏ

Theo như vấn đề đã đặt ra, ta có thể hiểu, khái niệm vuông góc ở đây chỉ mang tính tương đối. Do đó, “vuông góc” trong khái niệm nhằm nhấn mạnh rằng, whisker cần phải đi qua được vùng rộng nhất của phần phía trong và phía ngoài của cạnh khuôn mặt. Whisker càng “vuông góc” với cạnh khuôn mặt, vùng ảnh đặc trưng của điểm landmark càng được ấy chính xác.

Hình 3.15 Bên trái: cách vẽ whisker đúng Bên phải: cách vẽ whisker sai

45

Hình 3.16 H1. Vẽ đoạn thẳng vuông góc với cạnh kề nó H2. Vẽ đoạn thằng đi qua landmark và trọng tâm của shape H3. Vẽ đoạn thẳng đi qua landmark và trung điểm của 2 landmark kề 2 bên.

Ta chọn cách thứ 3. Vì với cách vẽ đi qua trọng tâm, sẽ phát sinh ra nhiều whisker “vuông góc” không được như ý tập trung ở phần miệng. Cách vẽ vuông góc đã được sử dụng trong ASM cổ điển. Tuy nhiên, cách này cũng sẽ làm xuất hiện một số whisker “vuông góc” không mong muốn. Với cách thứ 3, việc tính toán trung điểm cũng như vẽ đường thẳng giữa 2 điểm là đơn giản và quan trọng là nó đảm bảo cho whisker đi qua được tổng quát nhất 2 phần giữa 2 cạnh của khuôn mặt. Để thực hiện phương pháp này, ta cần chuẩn bị một file mô tả phương của whisker với cấu trúc sau:

<số lượng landmark>

<điểm landmark 1> <điểm landmark phía bên trái> <điểm landmark phía bên phải> <điểm landmark 2> <điểm landmark phía bên trái> <điểm landmark phía bên phải> <điểm landmark 3> <điểm landmark phía bên trái> <điểm landmark phía bên phải> …

Với bộ dữ liệu BioID, ta có được file mô tả như sau: 20 0 9 10 1 11 12 2 17 18 3 17 18 4 9 9 5 10 10 6 1 1 7 1 1 8 9 9 9 0 0 10 0 0 11 1 1 12 1 1 13 12 12 14 15 16 15 14 16 16 14 15 17 2 3 18 2 3 19 8 13

Các điểm landmark được thể hiện dưới dạng chỉ số của chúng. Nên đánh số bắt đầu từ 0 để thuận lợi cho việc duyệt mảng.

46

Vd: 0 9 10 nghĩa là, điểm landmark thứ 0 sẽ đi qua trung điểm của đoạn thằng nối giữa điểm landmark 9 và 10.

 Vẽ whisker:

Như ta đã biết, phương trình tổng quát để vẽ đường thẳng có dạng:

ax + by + c = 0

Tuy nhiên, không nên dùng phương trình này để vẽ whisker vì không thể vẽ một đường thẳng tuyệt đối trên màn hình.

Hình 3.17 Đường thẳng vẽ bằng phương trình tổng quát trên màn hình

Để vẽ đường thẳng trên màn hình, cần dùng các thuật toán vẽ đường thẳng trong đồ họa như DDA hoặc Bresenham.

Hình 3.18 Đường thẳng vẽ bằng thuật toán trong đồ họa

3.2.2 Huấn luyện:

a. Các tham số hằng sử dụng với profile model:

Trước khi làm việc với tập huấn luyện, ta nên tạo một file .h chứa các thư viện cơ bản và các hằng sẽ sử dụng sau này. Phần này sẽ giới thiệu một số hằng được sử dụng khi thao tác với profile model trong chương trình [19].

47

- nVer: Số lượng đỉnh của các shape trong tập huấn luyện. Hay có thể gọi là số lượng các điểm landmark được đánh đấu trong mỗi ảnh huấn luyện.

- nShape: Số lượng shape trong tập huấn luyện.

Đây là 2 thông tin cơ bản của tập huấn luyện. Mặc dù thông tin này đã được ghi trong các file mô tả nhưng việc tạo các hằng thế này sẽ giúp ta dễ kiểm soát chương trình hơn cũng như việc hạn chế tạo các biến chứa số lượng đỉnh và shape khi viết chương trình. Khi thay đổi tập huấn luyện, ta chỉ cần thay đổi 2 tham số tương ứng với tập huấn luyện mới.

- nProfWidth: Độ dài của profile. Hay nói cách khác đó là số lượng pixel ảnh sẽ lấy mẫu tại các điểm landmark. Lấy ví dụ, nProfWidth = 11, nghĩa là ta sẽ lấy mẫu ảnh tính từ điểm landmark là +5 pixel và -5 pixel. Ta lấy nProfWidth=17 theo như kết quả thí nghiệm của [19]. Hằng số này cũng là độ dài của whisker.

b. Quá trình huấn luyện:

Sau khi hoàn thành quá trình huấn luyện ta sẽ được các dữ liệu sau: Profile trung bình, khuôn mặt trung bình (shape trung bình), profile của mỗi ảnh trong tập huấn luyện, ma trận hiệp phương sai của các profile đó.

Với khuôn mặt trung bình, ta cần phải align các shape trong tập huấn luyện trước. Sau đó, áp dụng công thức để suy ra khuôn mặt trung bình. Lưu ý, nên lưu các shape đã align ra một thư mục riêng.

Với profile trung bình, ta cần tạo các profile cho mỗi điểm landmark của toàn bộ

ảnh huấn luyện. Tức là, nếu ta có n ảnh, mỗi ảnh có nVer landmark thì ta sẽ có n ×

nVer profile. Ta nên ghi các profile của mỗi shape ra một file riêng và đặt tên file trùng tên với file ảnh tương ứng.

Với ma trận hiệp phương sai các profile huấn luyện, việc tạo thành có hơi phức tạp hơn một chút. Ta lần lượt duyệt qua từng điểm landrmark và áp dụng công thức tính ma trận hiệp phương sai cho tất cả các điểm tương ứng của tất cả các ảnh profile huấn luyện. Vd, để tính ma trận hiệp phương sai cho điểm landmark 1, ta áp dụng công thức cho tất cả các điểm landmark 1 của mọi ảnh huấn luyện và làm tương tự với các điểm còn lại.

Chi tiết về công thức tính ma trận hiệp phương sai. Giả sử, ta huấn luyện n ảnh và

các shape với nVer đỉnh. Sau khi tạo thành các profile cho mỗi ảnh, ta có được các profile với kích thước (nProfWidth × 1). Thế vào công thức (2.7), ta có:

= 1

− 1 − −

= ( × )

Như vậy, sau khi áp dụng công thức tính hiệp phương sai cho một điểm, ta sẽ được

một ma trận có kích thước ( × ). Làm tương tự cho các

điểm còn lại, ta được nVer ma trận hiệp phương sai tương ứng. Lưu tất cả các ma trận vào một file. Các ma trận được sắp xếp theo thứ tự các điểm landmark.

48

Lưu ma trận thành file dưới format sau: <số lượng điểm landmark> <kích cỡ ma trận> <ma trận hiệp phương sai của điểm landmark 1> <ma trận hiệp phương sai của điểm landmark 2> <ma trận hiệp phương sai của điểm landmark 3> …

Hình 3.19 Ma trận hiệp phương sai của tất cả các điểm landmark

3.2.3 Tìm điểm đặc trưng của khuôn mặt trên ảnh:

a. Shape khởi tạo:

Như những phần trước đã trình bày, ta tìm kiếm các điểm đặc trưng của khuôn mặt dựa trên shape khởi tạo. Vì vậy, việc tạo shape khởi tạo là hết sức quan trọng. Shape khởi tạo càng chính xác bao nhiêu, thì việc tìm kiếm các điểm đặc trưng càng chính xác bấy nhiêu. Việc phát sinh shape khởi tạo quá lỗi có thể dẫn đến các điểm đặc trưng bị lỗi [19].

49

Để phát sinh shape khởi tạo, ý tưởng cơ bản là align shape trung bình với khuôn mặt tổng thể lấy từ phương pháp face detection. Ta làm các bước sau:

- Lấy khuôn mặt tổng thể bằng phương pháp face detection ( đồ án sử dụng Viola- Jones được cài đặt sẵn trong OpenCV). Khuôn mặt tổng thể là tọa độ 4 đỉnh của hình chữ nhật sinh kết quả, sinh ra bằng thuật toán phát hiện khuôn mặt Viola-Jones.

Hình 3.21 Khuôn mặt tổng thể

- Load khuôn mặt trung bình và lấy tọa độ của hình chữ nhật bao quanh khuôn mặt trung bình.

Hình 3.22 Xác định hình chữ nhật bao quanh shape trung bình

- Vì phép align chỉ thực hiện được khi các shape có số đỉnh bằng nhau nên ta tiến hành align hình chữ nhật của khuôn mặt trung bình lên khuôn mặt tổng thể. Sau đó, lấy các tham số của phép biến đổi tương tự áp dụng cho khuôn mặt trung bình.

50

Hình 3.23 Align hình chữ nhật bao quanh shape trung bình lên khuôn mặt tổng thể

- Thực hiện phép align với các tham số đã lấy lên khuôn mặt trung bình.

Hình 3.24 Màu đỏ là khuôn mặt khởi tạo

Màu xanh dương là hình chữ nhật bao quanh khuôn mặt trung bình Màu vàng là khuôn mặt trung bình

- Lưu ý rằng, các tham số thế vào là tham số của phép align giữa 2 shape có 4 đỉnh. Vì vậy, khi áp dụng lên shape nVer đỉnh, khuôn mặt trung bình và khuôn mặt tổng thể sẽ không khớp nhau do trọng tâm giữa khuôn mặt trung bình và hình chữ nhật bị lệch. Ta tiến hành tinh chỉnh lại cho khớp bằng cách thay đổi tham số tịnh tiến cho phù hợp

51

Hình 3.25 Chỉnh lại phép align

- Thu được shape khởi tạo chính là khuôn mặt trung bình sau khi thực hiện phép align.

Lưu ý, vì hình chữ nhật tạo ra bởi thuật toán Viola-Jones có kích thước lớn hơn khuôn mặt thật nên sẽ làm ảnh hưởng đến kết quả của việc kết xuất khuôn mặt khởi tạo. Vì vậy, trước khi tiến hành phép align, ta cần thu nhỏ hình chữ nhật đến một kích thước phù hợp. Trong đồ án, hình chữ nhật được thu nhỏ 20%.

b. Kết xuất shape kiểm thử:

Ở bước này, nhiệm vụ của ta là dựa vào shape khởi tạo có được từ bước trên để kết xuất shape kiểm thử. Trước khi bắt đầu, ta thêm vào một tham số hằng cho chương trình là nPixSearch [19]:

- nPixSearch là tham số thể hiện số pixel sẽ được chọn để lấy mẫu profile dọc theo đỉnh của shape khởi tạo. Hay nói cách khác, đây chính là độ dài whisker của shape khởi tạo. Whisker này không phải là whisker chứa thông tin của profile của đỉnh shape khởi tạo như whisker trong bước huấn luyện, mà là whisker chứa các pixel ảnh sẽ được chọn để làm điểm khởi tạo. Ví dụ, nPixSearch = 5, ta sẽ tiến hành lấy mẫu profile của pixel thứ -2 đến pixel thứ +2 tính từ đỉnh đang xét của shape khởi tạo.

Cách tạo profile cho một điểm, cũng như cách vẽ whisker đã được trình bày ở

Một phần của tài liệu Bắt cử động khuôn mặt qua video và áp lên mô hình 3D (Trang 40)

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

(68 trang)