i
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
-----------------------------------
TRẦN TẤN LỘC
DỰ ĐOÁN TUỔI VÀ GIỚI TÍNH BẰNG PHƯƠNG PHÁP HỌC SÂU
ĐỀ ÁN TỐT NGHIỆP THẠC SĨ KỸ THUẬT
(Theo định hướng ứng dụng)
THÀNH PHỐ HỒ CHÍ MINH – NĂM 2023
ii
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
--------------------------------------
TRẦN TẤN LỘC
DỰ ĐOÁN TUỔI VÀ GIỚI TÍNH BẰNG PHƯƠNG PHÁP HỌC SÂU
Chuyên ngành: Hệ thống thông tin
Mã số: 8.48.01.04
ĐỀ ÁN TỐT NGHIỆP THẠC SỸ KỸ THUẬT
(Theo định hướng ứng dụng)
NGƯỜI HƯỚNG DẪN KHOA HỌC:
PGS.TS. LÊ HOÀNG THÁI
THÀNH PHỐ HỒ CHÍ MINH – NĂM 2023
i
LỜI CAM ĐOAN
Tôi xin cam đoan đề án thạc sĩ công nghệ thông tin “Dự đoán tuổi và giới tính
bằng phương pháp học sâu” là do tôi nghiên cứu, tổng hợp và thực hiện.
Tất cả các nội dung, các số liệu, kết quả nêu trong đề án tốt nghiệp này là trung
thực và chưa từng được ai công bố trong bất kỳ công trình nào khác. Tôi hoàn toàn
chịu trách nhiệm cho mọi hành vi sao chép trái phép hoặc vi phạm quy chế đào tạo.
Tp. Hồ Chí Minh, ngày 16 tháng 08 năm 2023
Học viên thực hiện đề án
Trần Tấn Lộc
ii
LỜI CẢM ƠN
Tôi xin gửi lời cảm ơn chân thành và sâu sắc đến PGS.TS Lê Hoàng Thái,
người thầy đã tận tâm và nhiệt tình trong việc hướng dẫn và động viên tôi suốt quá
trình thực hiện đề án. Nhờ sự hỗ trợ của người thầy, tôi đã được định hướng và hoàn
thành các mục tiêu mà tôi đã đề ra.
Tôi xin gửi lời tri ân chân thành đến các Thầy, Cô đã đồng hành và tận tình
giảng dạy cho tôi suốt thời gian học tập trong chương trình Thạc sĩ Hệ thống thông tin
tại khoa Đào tạo Sau đại học, Học viện Công nghệ Bưu chính Viễn thông cơ sở tại
thành phố Hồ Chí Minh.
Tôi muốn bày tỏ lòng biết ơn đến ban Giám Đốc Trung tâm Công nghệ
Thông tin – Viễn thông Tây Ninh đã tạo điều kiện thuận lợi cho học tập của tôi.
Tôi biết ơn đến tất cả bạn bè đã động viên, hỗ trợ và đóng góp những ý kiến
quý báu cho đề án này. Đóng góp của các bạn đã giúp tôi hoàn thiện nghiên cứu này.
Đề án đã hoàn thành và đạt được một số kết quả nhất định, tuy vậy tôi thừa
nhận rằng còn tồn tại những hạn chế và thiếu sót. Vì vậy, tôi chân thành mong nhận
được sự thông cảm và sự đóng góp quý báu từ quý thầy cô và các bạn để tôi có thể cải
thiện và nâng cao chất lượng của nghiên cứu này.
Một lần nữa tôi xin chân thành cảm ơn!
Tp. Hồ Chí Minh, ngày 16 tháng 08 năm 2023
Học viên thực hiện đề án
Trần Tấn Lộc
iii
MỤC LỤC
LỜI CAM ĐOAN ........................................................................................................... i
LỜI CẢM ƠN ................................................................................................................ ii
MỤC LỤC ..................................................................................................................... iii
DANH MỤC CÁC THUẬT NGỮ, CHỮ VIẾT TẮT ............................................... vi
DANH SÁCH BẢNG .................................................................................................. vii
DANH SÁCH HÌNH VẼ ............................................................................................ viii
MỞ ĐẦU ........................................................................................................................ 1
CHƯƠNG 1 - TỔNG QUAN ..................................................................................... 3
1.1 Lý do chọn đề án ................................................................................................. 3
1.2 Tổng quan vấn đề nghiên cứu ............................................................................ 4
1.3 Mục tiêu nghiên cứu ............................................................................................ 6
1.4 Đối tượng và phạm vi nghiên cứu ...................................................................... 7
1.5 Phương pháp nghiên cứu .................................................................................... 9
1.6 Ý nghĩa khoa học và thực tiễn của đề án ........................................................ 10
CHƯƠNG 2 - CƠ SỞ LÝ THUYẾT ....................................................................... 11
2.1. Giới thiệu về học sâu và thị giác máy tính ..................................................... 11
2.1.1. Học sâu ......................................................................................................... 11
2.1.1.1. Các thành phần của mô hình học sâu .................................................... 12
2.1.1.2. So với máy học, mô hình học sâu mang lại những lợi ích sau ............. 13
2.1.2. Thị giác máy tính .......................................................................................... 15
iv
2.2. Kiến trúc mạng nơ ron tích chập .................................................................... 15
2.2.1. Tổng quan về kiến trúc mạng tích chập ....................................................... 15
2.2.2. Các đặc trưng chung của mạng CNN .......................................................... 17
2.2.3. Các mạng CNN tiêu biểu ............................................................................. 19
CHƯƠNG 3 - PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG ................................... 27
3.1. Hướng tiếp cận ................................................................................................. 27
3.2. Dữ liệu huấn luyện ........................................................................................... 27
3.2.1. Giới thiệu về tập dữ liệu ............................................................................... 27
3.2.2. Các bước xây dựng từ tập dữ liệu Adience Dataset .................................... 29
3.3. Tiền xử lý dữ liệu .............................................................................................. 31
3.3.1. Loại bỏ đặc trưng không cần thiết ............................................................... 31
3.3.2. Chỉnh kích thước ảnh sang kích thước phù hợp .......................................... 32
3.4. Mô hình được sử dụng ..................................................................................... 32
3.4.1. Tổng quan mô hình....................................................................................... 32
3.4.2. Định nghĩa .................................................................................................... 35
3.4.3.Chuẩn bị dữ liệu tập huấn ............................................................................. 38
3.4.4. Kiến trúc ....................................................................................................... 40
3.4.5. Huấn luyện mô hình ..................................................................................... 43
3.4.5.1 Khởi tạo mô hình.................................................................................... 43
3.4.5.2 Các phương thức tiền xử lý ảnh ............................................................. 45
3.4.5.3 Các bước tiến hành huấn luyện mô hình ................................................ 48
v
CHƯƠNG 4 - CÀI ĐẶT THỬ NGHIỆM VÀ ĐÁNH GIÁ ................................... 52
4.1. Cài đặt môi trường ........................................................................................... 52
4.2. Phương pháp đánh giá ..................................................................................... 52
4.3. Phân tích đánh giá hệ thống đề xuất .............................................................. 53
4.3.1. Xây dựng mô đun đánh giá .......................................................................... 53
4.3.2. Kiểm tra đánh giá hệ thống trên bộ dữ liệu công khai ................................ 57
4.3.2.1. Bộ dữ liệu công khai Adience ............................................................... 57
4.3.2.2. Kết quả đánh giá trên bộ dữ liệu công khai Adience ............................ 57
4.3.3. Kiểm tra đánh giá hệ thống trên bộ dữ liệu đã xây dựng ............................ 59
4.3.3.1. Bộ dữ liệu đã xây dựng ......................................................................... 59
4.3.3.2. Kết quả đánh giá trên bộ dữ liệu đã xây dựng ...................................... 59
4.4. Cài đặt triển khai thử nghiệm. ........................................................................ 60
KẾT LUẬN .................................................................................................................. 64
DANH MỤC TÀI LIỆU THAM KHẢO ................................................................... 66
vi
DANH MỤC CÁC THUẬT NGỮ, CHỮ VIẾT TẮT
VIẾT TẮT TIẾNG ANH TIẾNG VIỆT
CNN Convolutional Neural Network Mạng Nơ ron tích chập
CV Curriculum Vitae Hồ sơ cá nhân
AI Artificial Intelligence Trí tuệ nhân tạo
DL Deep Learning Học sâu
ML Mechine Learning Học máy
Conv Convolutional layer Lớp tích chập
ReLU Rectified Linear Unit Hàm kích hoạt trong mạng nơ ron nhân tạo
vii
DANH SÁCH BẢNG
Bảng 3.1: Danh mục nhãn .............................................................................................. 30
Bảng 3.3: Thông tin các nhãn tương ứng với các bức ảnh ............................................ 31
viii
DANH SÁCH HÌNH VẼ
Hình 2.1: Mô hình học sâu ............................................................................................. 12
Hình 2.2: Hình ảnh tỷ lệ xám chỉ có một kênh .............................................................. 17
Hình 2.3: Mạng Alexnet, một kiến trúc điển hình của CNN ......................................... 17
Hình 2.4: Kiến trúc LeNet .............................................................................................. 19
Hình 2.5: Kiến trúc AlexNet .......................................................................................... 19
Hình 2.6: Hàm ReLU ..................................................................................................... 21
Hình 2.7: Phương pháp dropout ..................................................................................... 21
Hình 2.8: Kiến trúc VGG-16 .......................................................................................... 22
Hình 2.9: Kiến trúc GoogleNet ...................................................................................... 23
Hình 2.10: Kiến trúc GoogleNet - Inception version 3 .................................................. 25
Hình 3.1: Hình ảnh trong tập dữ liệu Adience ............................................................... 28
Hình 3.2: Thư mục chứa các ảnh được giải nén ............................................................ 29
Hình 3.3: Mạng Alexnet ................................................................................................. 33
Hình 3.4: Ví dụ thí nghiệm sử dụng ReLU .................................................................... 35
Hình 3.5: Tổ chức thư mục ............................................................................................ 36
Hình 3.6: Mô hình gồm 5 block ..................................................................................... 40
Hình 3.7: Kết quả huấn luyện độ tuổi dạng biểu đồ ...................................................... 49
Hình 3.8: Kết quả huấn luyện độ tuổi ............................................................................ 50
Hình 3.9: Kết quả huấn luyện giới tính dạng biểu đồ .................................................... 51
Hình 3.10: Kết quả huấn luyện giới tính ........................................................................ 51
ix
Hình 4.1: Giao diện tải ảnh lên hệ thống đánh giá ......................................................... 54
Hình 4.2: Giao diện khi đã tải hình ................................................................................ 54
Hình 4.3: Kết quả dự đoán giới tính nam độ tuổi 12 ..................................................... 55
Hình 4.4: Kết quả dự đoán giới tính nam độ tuổi 45 ..................................................... 55
Hình 4.5: Kết quả dự đoán giới tính nữ độ tuổi 40 ........................................................ 56
Hình 4.6: Kết quả dự đoán giới tính nữ độ tuổi 18 ........................................................ 56
Hình 4.7: Kết quả dự đoán giới tính nam độ tuổi 28 ..................................................... 57
Hình 4.8: Kết quả kiểm chứng mô hình với dự đoán giới tính với dữ liệu công khai ... 58
Hình 4.9: Kết quả kiểm chứng mô hình với dự đoán tuổi với dữ liệu công khai .......... 58
Hình 4.10: Kết quả kiểm chứng mô hình dự đoán giới tính với dữ liệu đã xây dựng ... 59
Hình 4.11: Kết quả kiểm chứng mô hình với dự đoán tuổi với dữ liệu đã xây dựng .... 60
Hình 4.12: Giao diện hệ thống ....................................................................................... 60
Hình 4.13: Giao diện nhập thông tin ứng viên ............................................................... 61
Hình 4.14: Giao diện chọn ảnh ứng viên ....................................................................... 61
Hình 4.15: Giao diện khi đã nhập xong thông tin .......................................................... 62
Hình 4.16: Giao diện kết quả nghi vấn dưới độ tuổi lao động ....................................... 62
Hình 4.17: Giao diện kết quả trong độ tuổi lao động ..................................................... 63
Hình 4.18: Giao diện kết quả nghi vấn quá độ tuổi lao động ........................................ 63
1
MỞ ĐẦU
Sự phát triển kinh tế - xã hội phụ thuộc vào nhiều yếu tố khác nhau, nhưng tập
trung chủ yếu vào nguồn nhân lực. Dù có máy móc, thiết bị, nhưng chúng trở nên vô
dụng nếu thiếu sự can thiệp của con người. Nguồn nhân lực đóng vai trò trung tâm và
quan trọng nhất trong phát triển kinh tế-xã hội của đất nước, đặc biệt trong giai đoạn
đẩy mạnh công nghiệp hóa, hiện đại hóa và hội nhập kinh tế quốc tế.
Tuyển dụng tốt sẽ tạo đội ngũ nhân lực phù hợp với công việc và vị trí, từ đó
nâng cao hiệu quả công việc và chất lượng nguồn nhân lực của doanh nghiệp. Đồng
thời giúp tiết kiệm được chi phí đào tạo nhân lực, tránh tình trạng ứng viên khai gian
dối độ tuổi lao động gây ra vi phạm luật lao động hiện hành dẫn tới phải liên tục tuyển
dụng nhân sự mới, doanh nghiệp lại phải tốn chi phí và thời gian cho công tác tuyển
dụng lại nhân sự.
Tuyển dụng, là một trong những lĩnh vực quan trọng của xã hội đang dần được
cải tiến và nâng cao hiệu quả bằng các công nghệ mới. Ngày nay có nhiều hệ thống hỗ
trợ trong công tác tuyển dụng nhân sự phổ biến ở nước ta như: Base E-hiring, Talent
Solution, Zoho Recruit, Greenhouse, Workable…Nhưng đa phần các hệ thống này chỉ
tập trung vào quản lý ứng viên, đăng tin tuyển dụng, lập báo cáo.
Bằng cách áp dụng các kỹ thuật của trí tuệ nhân tạo kết hợp với mạng CNN đề
án đã áp dụng các giải pháp này để hướng đến xây dựng hệ thống hỗ trợ công tác tuyển
dụng thông qua dự đoán độ tuổi và giới tính từ đó đưa ra nhận định ứng viên có phù
hợp theo độ tuổi lao động hiện hành [3] giúp nhà tuyển dụng tránh được sự khai man
của các ứng viên. Kết quả của quá trình này đó là đề án đã xây dựng được một ứng
dụng hỗ trợ công tác tuyển dụng. Kết quả trả về bao gồm kết quả chính xác và các kết
quả liên quan. Ứng dụng đã được cài đặt, thử nghiệm tại phòng nhân sự VNPT Tây
Ninh giúp cho quá trình tuyển dụng trở nên hiệu quả hơn.
2
Kết quả của đề án được trình bày trong các phần như mở bài, mục lục, kết luận
và kiến nghị, danh mục hình vẽ, danh mục bảng biểu, tài liệu tham khảo, phụ lục, và
phần chính của đề án bao gồm 4 chương như sau:
Chương 1 Đề án giới thiệu các thông tin về nghiên cứu liên quan, phân
tích và đánh giá thực trạng, trình bày mục tiêu và giới hạn của đề án,
cung cấp ý nghĩa lý luận và thực tiễn, trình bày phương pháp nghiên cứu,
hướng tiếp cận giải quyết vấn đề, và mô tả nội dung thực hiện của đề án.
Chương 2 Trình bày cơ sở lý thuyết liên quan đến vấn đề học sâu và thị
giác máy tính, bao gồm các lý thuyết về mô hình mạng nơ ron tích chập
(CNN) cùng với các phương pháp xây dựng mô hình dữ liệu.
Chương 3 Trình bày tổng quan về bài toán dự đoán độ tuổi và giới tính
bằng phương pháp học sâu. Giới thiệu về hệ thống và một số phương
pháp tiếp cận.
Chương 4 Cài đặt thử nghiệm và đánh giá. Thực hiện mô hình mạng nơ
ron tích chập CNN, xây dựng ứng dụng hỗ trợ tuyển dụng. Tiến hành
thực nghiệm, so sánh và đánh giá kết quả.
3
CHƯƠNG 1 - TỔNG QUAN
1.1 Lý do chọn đề án
Lĩnh vực quản lý nhân sự được coi là một trong những lĩnh vực quan trọng nhất
đối với mọi doanh nghiệp. Một trong những nhiệm vụ quan trọng nhất của nhà quản lý
nhân sự là tuyển dụng và chọn lọc những ứng viên sao cho phù hợp với các công việc
cụ thể. Để đảm bảo tính hiệu quả của quá trình tuyển dụng, nhà quản lý nhân sự cần
phải đưa ra những quyết định đúng đắn và nhanh chóng dựa trên những thông tin chính
xác và đầy đủ về ứng viên.
Với sự vận động, phát triển mạnh mẽ của lĩnh vực tuyển dụng ở Việt Nam, việc
sử dụng phương pháp học sâu để dự đoán độ tuổi và giới tính của ứng viên đang trở
thành xu hướng mới nhằm giúp cho quá trình tuyển dụng trở nên hiệu quả và chính xác
hơn bao giờ hết. Bằng cách áp dụng các kỹ thuật của trí tuệ nhân tạo giúp dự đoán độ
tuổi và giới tính với độ chính xác cao trong việc xác định các ứng viên phù hợp nhất
với yêu cầu, tính chất của công việc, tránh tình trạng khai man khi dự tuyển.
Hình ảnh khuôn mặt mang rất nhiều thông tin quan trọng như: tuổi tác, giới tính,
trạng thái cảm xúc, dân tộc…Trong đó, việc xác định tuổi tác và giới tính là hết sức
quan trọng, như trong giao tiếp, cần sử dụng những từ ngữ phù hợp với giới tính của
người nghe ví dụ trong tiếng Việt có: anh/chị, cô/chú…[2] Ngoài ra nó còn được áp
dụng vào nhiều lĩnh vực khác nhau như vào lĩnh vực tuyển dụng ta vừa đề cập ở trên.
Do đó, việc xác định tuổi và giới tính dựa trên khuôn mặt là một bài toán hết sức quan
trọng, có ý nghĩa thực tế to lớn.
Có nhiều nghiên cứu, giải pháp đã đề xuất cho bài toán dự đoán tuổi và giới tính
trong những năm trước đây. Hầu hết dựa vào phương pháp truyền thống, trích xuất đặc
trưng bằng tay sau đó đưa vào bài toán phân lớp. Các nghiên cứu gần đây đã cho thấy
4
kết quả khá tốt, tuy nhiên, trong vấn đề nhận diện thời gian thực, các mô hình này vẫn
chưa đạt hiệu quả cao do thiết kế quá phức tạp [2].
Hiện nay với sự phát triển của mạng học sâu, thì bài toán dự đoán tuổi và giới
tính cho những kết quả vượt bậc trong các bài toán điển hình [2] và thực hiện end-to-
end ít cần sự trích xuất đặc trưng bằng tay. Một mô hình mới đã được đề xuất bởi Alex
và nhóm nghiên cứu của họ [4]. Mô hình này sử dụng mạng CNN và đã đạt thành công
đáng kinh ngạc khi giành chiến thắng trong cuộc thi ImageNet năm 2012. Cuộc thi này
được coi là sự kiện quy mô lớn nhất trên thế giới trong lĩnh vực nhận diện đối tượng
trong ảnh.
Từ thực tiễn trên, tôi thực hiện một nghiên cứu, ứng dụng phương pháp học sâu
trong dự đoán độ tuổi và giới tính. Nghiên cứu của tôi đã tập trung vào việc xây dựng
một mô hình dự đoán tuổi và giới tính từ những hình ảnh trên chiếc CV của các ứng cử
viên từ đó hệ thống phân tích và dự đoán một cách nhanh chóng và chính xác để đáp
ứng các nhu cầu hiện hữu thông qua phương pháp “dự đoán tuổi và giới tính bằng
phương pháp học sâu” đó là lý do tôi chọn thực hiện đề án này.
1.2 Tổng quan vấn đề nghiên cứu
Tổng quan
Với nhu cầu tuyển dụng ngày càng tăng, đặc biệt là trong các doanh nghiệp lớn,
việc xác định độ tuổi và giới tính của ứng viên là điều rất quan trọng, tránh được các
rủi ro cần thiết như khai man độ tuổi lao động, hỗ trợ nhà tuyển dụng lọc các ứng viên
nhanh chóng. Tuy nhiên, quá trình này thường đòi hỏi sự nhận định và khả năng đánh
giá của nhà tuyển dụng, và có thể dẫn đến sai sót. Vì vậy, việc áp dụng phương pháp
học sâu vào việc dự đoán tuổi và giới tính của ứng viên và đưa ra đánh giá có thể giúp
cho quá trình tuyển dụng trở nên chính xác và hiệu quả hơn.
5
Mục tiêu của nghiên cứu này là xây dựng một mô hình học sâu để dự đoán tuổi
và giới tính của ứng viên trong quá trình tuyển dụng. Bằng cách sử dụng các thuật toán
học sâu như mạng nơ ron tích chập (CNN) nghiên cứu này mong muốn đem lại kết quả
chính xác và đáng tin cậy.
Hiện nay có nhiều giải pháp liên quan đến nghiên cứu của đề án, nhiều nghiên
cứu trên thế giới và Việt Nam đã quan tâm đến vấn đề nhận dạng độ tuổi và giới tính
con người đã được nghiên cứu từ rất lâu, hầu như chúng chỉ nghiên cứu tách rời nhau.
Việc xây dựng hệ thống dự đoán tuổi và giới tính trong bối cảnh Việt Nam có ý
nghĩa quan trọng từ cả mặt lý thuyết và thực tiễn.
Các công trình nghiên cứu liên quan
- Năm 2012, Alex Krizhevsky, Ilya Sutskever và Geoffrey Hinton với công
trình nghiên cứu “Phân loại ImageNet bằng mạng nơ ron tích chập sâu” [4]
được coi là một công trình đầy tầm quan trọng trong lĩnh vực Deep learning.
Các tác giả đề xuất một kiến trúc mạng nơ ron sâu được gọi là AlexNet, đạt
được thành công đột phá đáng kể trong cuộc thi “ImageNet Large Scale
Visual Recognition Challenge” năm 2012. Kiến trúc AlexNet đạt được tỷ lệ
lỗi là 15,3%, vượt qua phương pháp tốt nhất thứ hai một khoảng cách hơn
10%. Các đóng góp của bài báo bao gồm việc phát triển kiến trúc AlexNet,
sử dụng một số kỹ thuật đổi mới như hàm kích hoạt ReLU, chuẩn hóa đáp
ứng cục bộ, chế độ giảm thiểu và tăng lượng dữ liệu để cải thiện hiệu suất
mạng, mở đường cho việc áp dụng rộng rãi deep learning trong các ứng
dụng thị giác máy tính.
- Năm 2016, Linnan Zhu cùng các cộng sự đã công bố công trình nghiên cứu
“Học một mạng tích chập sâu nhẹ cho nhận dạng đồng thời tuổi và giới tính”
[5] đề xuất một mô hình đa nhiệm vụ giải quyết cả hai bài toán cùng một lúc.
Bài báo đề cập đến vấn đề nhận dạng đồng thời tuổi và giới tính của một
6
người từ một hình ảnh đã cho. Các tác giả đề xuất một kiến trúc mạng tích
chập sâu nhẹ được thiết kế để đạt độ chính xác cao trong khi giảm thiểu độ
phức tạp tính toán. Các tác giả đánh giá mạng được đề xuất trên hai bộ dữ
liệu công khai: bộ dữ liệu Adience và bộ dữ liệu FG-NET. Kết quả cho thấy
rằng mạng được đề xuất vượt qua các phương pháp tiên tiến hiện có về độ
chính xác và hiệu suất tính toán.
1.3 Mục tiêu nghiên cứu
Mục tiêu tổng quát
Nghiên cứu này nhằm mục đích áp dụng phương pháp học sâu của mạng nơ ron
tích chập CNN để dự đoán tuổi và giới tính.
Từ các kết quả tìm hiểu về cơ sở lý thuyết, thực hiện phát triển thành ứng dụng
hỗ trợ công tác tuyển dụng với các chức năng hỗ trợ cho các đối tượng là nhà tuyển
dụng. Hệ thống cần phải đáp ứng được các yêu cầu về hỗ trợ như: Xác định được giới
tính ứng viên, xác định độ tuổi lao động của ứng viên và đưa ra kết luận dự đoán cho
từng ứng viên. Đóng góp vào việc cải thiện quá trình tuyển dụng, trở nên nhanh chóng
và chính xác hơn.
Mục tiêu cụ thể
Đề án này tập trung nghiên cứu các lý thuyết cơ bản liên quan đến xử lý ảnh,
nhận dạng và dự đoán.
Nghiên cứu các lý thuyết liên quan bài toán xác độ tuổi và giới tính các khuôn
mặt trong ảnh để giải quyết các lớp vấn đề liên quan, bao gồm:
- Tổng quan về phương pháp học sâu và ứng dụng của nó trong việc dự đoán
tuổi và giới tính.
Tìm hiểu và phân tích các khái niệm và thành phần cơ bản của phương
7
Tham khảo các nghiên cứu liên quan đến phương pháp học sâu trong việc
pháp học sâu.
Xác định cách thức áp dụng mạng nơ ron tích chập vào việc dự đoán tuổi
dự đoán tuổi và giới tính.
và giới tính trong lĩnh vực tuyển dụng.
Thu thập dữ liệu từ bộ dữ liệu công khai Adience Dataset.
Tiền xử lý dữ liệu: lựa chọn, chuyển đổi, chuẩn hóa tập huấn luyện.
Thiết kế và triển khai mô hình mạng nơ ron tích chập để dự đoán tuổi và
- Xây dựng mô hình dự đoán tuổi và giới tính sử dụng phương pháp học sâu.
Đánh giá hiệu suất của mô hình bằng các chỉ số như độ chính xác, xác
giới tính.
suất.
- Đánh giá hiệu quả của phương pháp CNN trong việc dự đoán tuổi và giới
Đánh giá khả năng áp dụng thực tế của phương pháp CNN trong quá
tính trong lĩnh vực tuyển dụng.
Đề xuất những cải tiến và phát triển tiếp theo cho phương pháp CNN
trình tuyển dụng và quy mô mở rộng.
trong việc dự đoán tuổi và giới tính trong lĩnh vực tuyển dụng.
1.4 Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu
- Các phương pháp và các kỹ thuật của học sâu, thị giác máy tính.
- Các phương pháp xử lý hình ảnh.
8
- Các phương pháp nhận dạng tuổi và giới tính.
- Phân tích thiết kế và xây dựng chức năng của ứng dụng của hệ thống hỗ trợ
tuyển dụng.
Phạm vi nghiên cứu
- Mô hình kiến trúc mạng nơ ron tích chập (CNN).
Giới tính nam.
Giới tính nữ.
- Phương pháp nhận dạng giới tính:
- Để nhận dạng giới tính thông qua bức ảnh, có thể sử dụng các đặc trưng sau
Kích thước khuôn mặt: Ví dụ khuông mặt giới tính nam sẽ thường to hơn
đây để đạt được hiệu suất tốt hơn như sau:
Đặc trưng khuôn mặt: Một số đặc trưng có thể trích xuất từ khuôn mặt
so với giới tính nữ.
như đặc điểm của mắt, mũi, miệng, vùng trán.... Điều này có thể cung
cấp thông tin quan trọng để phân biệt giữa các đặc điểm giới tính. Ví dụ
Các đặc điểm hình học: Các đặc điểm hình học như hình dáng khuôn mặt
miệng của giới tính nam thường sẽ to hơn so với nữ.
(hình vuông hoặc tròn), tỷ lệ giữa các phần của khuôn mặt có thể có ý
Kiểu tóc: Kiểu tóc thường khác biệt giữa nam và nữ. Thông qua đặc
nghĩa trong việc nhận dạng giới tính.
Chi tiết vùng mắt: vùng mắt có thể cung cấp nhiều thông tin về giới tính.
trưng như độ dài, kiểu tóc.
9
Từ 0 tuổi đến 14 tuổi.
Từ 15 tuổi đến 45 tuổi.
Lớn hơn 65 tuổi.
- Phương pháp xác định đối tượng trong các nhóm độ tuổi được chia cố định:
- Có thể sử dụng các đặc trưng sau đây để đạt được hiệu suất tốt hơn đối với
Nếp nhăn và đặc điểm khuôn mặt: Những nếp nhăn, vết chân chim và các
nhận dạng độ tuổi như sau:
đặc điểm khuôn mặt khác có thể chứa thông tin về độ tuổi của người.
Sắc tố da và tóc: Sự thay đổi của màu da và tóc thường đi kèm với tuổi
Nám và tàn nhang: Những dấu hiệu của tuổi tác như nám, tàn nhang.
Kiểu tóc và màu tóc: Kiểu tóc và màu tóc cũng có thể thay đổi theo độ
tác
tuổi. Chẳng hạn, sự xuất hiện của sợi tóc bạc thường đi kèm với tuổi tác
Biểu cảm khuôn mặt: Những biểu cảm khuôn mặt cũng có thể thay đổi
cao hơn.
Kích thước mắt, miệng: Kích thước của các phần trên khuôn mặt cũng có
theo độ tuổi.
thể thay đổi theo độ tuổi.
1.5 Phương pháp nghiên cứu
Đề án kết hợp việc sử dụng phương pháp nghiên cứu lý thuyết và xây dựng ứng
dụng thực nghiệm.
Tìm hiểu về học sâu, tìm hiểu về thị giác máy tính, trí tuệ nhân tạo.
- Nghiên cứu lý thuyết:
Tìm hiểu kiến trúc mạng nơ ron tích chập.
10
Thực hiện dự đoán tuổi và giới tính bằng mạng mạng nơ ron tích chập.
Thực nghiệm xây dựng hệ thống hỗ trợ công tác tuyển dụng từ hình ảnh
- Nghiên cứu thực nghiệm:
ứng viên cung cấp cho nhà tuyển dụng.
1.6 Ý nghĩa khoa học và thực tiễn của đề án
Ý nghĩa khoa học
Áp dụng công nghệ mới trong lĩnh vực tuyển dụng nhân sự. Phát triển ứng dụng
để góp phần từng bước phổ biến và làm phát triển công nghệ này.
Ý nghĩa thực tiễn
Áp dụng các kỹ thuật xử lý ảnh và sử dụng mô hình mạng nơ ron tích chập
(CNN), ứng dụng này đóng góp quan trọng cho việc nghiên cứu, tìm hiểu, sử dụng và
khai thác tài liệu liên quan đến đề án. Đồng thời, nó cũng hỗ trợ quá trình tuyển dụng
nhân sự một cách nhanh chóng, hiệu quả và chính xác.
11
CHƯƠNG 2 - CƠ SỞ LÝ THUYẾT
2.1. Giới thiệu về học sâu và thị giác máy tính
2.1.1. Học sâu
Học sâu (Deep learning) là một phương pháp tiên tiến trong lĩnh vực trí tuệ nhân
tạo, nhằm giúp máy tính học và xử lý dữ liệu theo mô phỏng quá trình tư duy trong não
bộ con người. Mô hình học sâu có khả năng nhận diện và hiểu được nhiều mẫu phức
tạp trong hình ảnh, văn bản, âm thanh và các dữ liệu khác, từ đó đưa ra thông tin và dự
đoán chính xác. Các phương pháp học sâu cũng đóng vai trò quan trọng trong việc tự
động hóa các tác vụ mà trước đây yêu cầu sự can thiệp và trí tuệ của con người.
Các thuật toán học sâu là các mạng nơ ron được mô hình hóa theo bộ não con
người. Ví dụ, bộ não con người có hàng triệu nơ ron kết nối với nhau, hoạt động cùng
nhau để tìm hiểu và xử lý thông tin. Tương tự, các mạng nơ ron học sâu, hay còn gọi là
mạng nơ ron nhân tạo, được hình thành từ nhiều lớp nơ ron nhân tạo hoạt động cùng
nhau bên trong máy tính.
Các nơ ron nhân tạo là các mô đun phần mềm được gọi là nút, sử dụng các phép
toán để xử lý dữ liệu. Các mạng nơ ron nhân tạo là các thuật toán học sâu sử dụng các
nút này để giải quyết các vấn đề phức tạp.
12
Hình 2.1: Mô hình học sâu
2.1.1.1. Các thành phần của mô hình học sâu
Một mạng nơ ron chuyên sâu có các thành phần sau:
Lớp đầu vào (Input Layer)
- Một mạng nơ ron nhân tạo sẽ bao gồm một số nút dùng để nhập dữ liệu đầu
vào. Các nút này tạo nên lớp đầu vào của hệ thống.
Lớp ẩn (Hidden Layer)
- Lớp đầu vào trong mạng nơ ron xử lý và truyền dữ liệu đến các lớp sâu hơn.
Các lớp ẩn này thực hiện xử lý thông tin ở các cấp độ khác nhau, thích ứng
với hành vi của chúng khi nhận thông tin mới. Mạng học sâu có thể có hàng
trăm lớp ẩn, cho phép phân tích vấn đề từ nhiều góc độ khác nhau.
13
- Ví dụ, trong trường hợp phân loại hình ảnh của một loài vật chưa được xác
định, cần so sánh hình ảnh đó với các loài vật đã biết. Để thực hiện điều này,
quan sát các đặc điểm như hình dáng của cặp mắt, đôi tai, kích thước, số
lượng chi và hình mẫu lông của loài vật. Mục tiêu là xác định các hình mẫu
Loài vật có móng guốc nên nó có thể là lợn rừng hoặc hươu đỏ.
Một loài vật có đặc điểm là có mắt mèo có thể là một loài mèo hoang dã
này để phân loại đúng loài vật đó như sau:
chưa được xác định.
- Trong mạng nơ ron học sâu, các lớp ẩn hoạt động theo cùng một cách tiếp
cận. Khi một thuật toán học sâu đang cố gắng phân loại một hình ảnh động
vật, mỗi lớp ẩn của thuật toán sẽ xử lý một đặc điểm riêng biệt của con vật
và cố gắng phân loại nó một cách chính xác.
Lớp đầu ra (Output Layer)
- Lớp đầu ra bao gồm các nút xuất dữ liệu. Các mô hình học sâu có thể đưa ra
đáp án “có” hoặc “không” bằng cách sử dụng hai nút trong lớp đầu ra. Nếu
mô hình cần đưa ra nhiều đáp án hơn, thì số lượng nút trong lớp đầu ra sẽ
2.1.1.2. So với máy học, mô hình học sâu mang lại những lợi ích sau
tăng tương ứng.
Xử lý hiệu quả dữ liệu phi cấu trúc
- Phân tích dữ liệu phi cấu trúc là một thách thức đối với các phương pháp
máy học, do tập dữ liệu huấn luyện có thể thay đổi đáng kể. Trong khi đó,
các mô hình học sâu có khả năng hiểu được dữ liệu phi cấu trúc và đưa ra
nhận xét tổng quát mà không cần trích xuất đặc trưng thủ công. Ví dụ, một
mạng nơ ron có thể nhận ra rằng hai câu đầu vào khác nhau về cú pháp
nhưng mang cùng ý nghĩa:
Có thể chỉ cho tôi cách thanh toán không?
Tôi có thể chuyển tiền bằng cách nào?
14
Khám phá những mối quan hệ và mẫu ẩn
- Ứng dụng của học sâu cho phép phân tích sâu hơn một lượng lớn dữ liệu và
khám phá ra thông tin chuyên sâu mới mà có thể chưa được đào tạo trước đó.
Ví dụ, giả sử sử dụng một mô hình học sâu để phân tích giao dịch mua hàng
của người tiêu dùng. Mô hình này chỉ được huấn luyện trên dữ liệu của
những mặt hàng đã được mua. Tuy nhiên, mạng nơ ron nhân tạo có khả
năng đề xuất các mặt hàng mới mà người tiêu dùng chưa từng mua, bằng
cách so sánh các mẫu mua hàng của người dùng với dữ liệu từ nhiều khách
hàng tương tự khác.
Học không giám sát
- Các mô hình học sâu có khả năng học hỏi và cải thiện theo thời gian dựa
trên hành vi của người dùng mà không yêu cầu tập dữ liệu được dán nhãn có
sự biến động cao. Ví dụ, một mạng nơ ron tự động có thể điều chỉnh và đề
xuất từ ngữ dựa trên phân tích hành vi đánh máy. Giả sử mô hình được huấn
luyện bằng tiếng Anh và có khả năng kiểm tra ngữ pháp tiếng Anh. Tuy
nhiên, nếu người dùng thường xuyên gõ các từ không phải tiếng Anh như
“danke”, mạng nơ ron sẽ tự động học và điều chỉnh để nhận biết và sử dụng
những từ này.
Xử lý dữ liệu dễ biến động
- Các tập dữ liệu dễ biến động có tính biến động cao. Mạng nơ ron học sâu
cũng có khả năng phân loại và sắp xếp dữ liệu.
15
2.1.2. Thị giác máy tính
Thị giác máy tính là khả năng của máy tính trích xuất thông tin và dữ liệu
chuyên sâu từ hình ảnh và video. Các kỹ thuật học sâu được sử dụng để giúp máy tính
hiểu và phân tích hình ảnh như con người. Các thuật toán phân tích và xử lý dựa trên
các đặc trưng trong ảnh và video, từ đó đưa ra các dự đoán. Thị giác máy tính đã được
ứng dụng trong nhiều lĩnh vực, bao gồm:
- Nhận dạng khuôn mặt để xác định khuôn mặt và nhận biết các đặc điểm như
mở mắt, đeo kính và có râu.
- Phân loại hình ảnh để xác định quần áo và các chi tiết khác trong hình ảnh.
- Kiểm duyệt nội dung để tự động loại bỏ các nội dung không an toàn hoặc
không phù hợp khỏi kho lưu trữ hình ảnh và video.
Một kiến trúc mạng nơ ron được sử dụng phổ biến trong thị giác máy tính đó là
mạng nơ ron tích chập (Convolutional Neural Network - CNN). Đây là một kiến trúc
đa tầng được sử dụng để xử lý dữ liệu đầu vào và tạo ra một tập hợp số để so sánh với
các dữ liệu đã biết, nhằm định nghĩa và phân loại dữ liệu đó. Có nhiều loại kiến trúc
CNN nổi tiếng như AlexNet, VGGNet, GoogleNet, và còn nhiều kiến trúc khác.
2.2. Kiến trúc mạng nơ ron tích chập
2.2.1. Tổng quan về kiến trúc mạng tích chập
Mạng nơ ron tích chập là một trong những mô hình học sâu tiên tiến và được sử
dụng rộng rãi. Nó rất hiệu quả trong việc xử lý dữ liệu hình ảnh và đã đóng góp đáng
kể vào việc xây dựng các hệ thống thông minh hiện đại với độ chính xác cao.
Lý do CNN được sử dụng phổ biến trong xử lý hình ảnh
16
- Một hình ảnh là một ma trận các pixel, nhưng thường không biến đổi ma
trận thành một vector và xử lý nó bằng cách sử dụng kiến trúc mạng nơ ron
truyền thống. Lý do là vì ngay cả với hình ảnh đơn giản nhất, các pixel liền
kề có sự phụ thuộc lẫn nhau, việc biến đổi thành vector sẽ làm mất đi thông
tin phụ thuộc này và làm thay đổi ý nghĩa của bức hình. Ví dụ, biểu tượng
của mắt, miệng con người hoặc thậm chí là cạnh của một đối tượng khác
được xây dựng từ một số pixel được bố trí theo một cách nhất định. Nếu xử
lý hình ảnh thành một vector, những phụ thuộc này bị mất và làm giảm độ
chính xác của mô hình.
- CNN có khả năng ghi lại sự phụ thuộc không gian của hình ảnh kể từ khi nó
xử lý chúng dưới dạng ma trận và phân tích toàn bộ các phần của một hình
ảnh tại một thời điểm, tùy thuộc vào kích thước của bộ lọc. Ví dụ: một lớp
lọc (convolutional layer) có kích thước 3 x 3 sẽ phân tích 9 điểm ảnh tại một
thời điểm cho đến khi nó bao phủ toàn bộ hình ảnh.
- Mỗi phần của hình ảnh được cung cấp một tập hợp các tham số (chiều rộng
và độ lệch) sẽ tham chiếu mức độ liên quan của tập hợp pixel đó với toàn bộ
hình ảnh, tùy thuộc vào bộ lọc. Theo điều này, bằng cách giảm số lượng các
tham số và bằng cách phân tích hình ảnh theo từng phần, CNN có thể hiển
thị đại diện tốt hơn của hình ảnh.
- Mỗi giá trị của ma trận đại diện cho một pixel trong hình ảnh, trong đó số
được xác định bởi cường độ của màu, với các giá trị nằm trong khoảng từ 0
đến 255. Thang độ xám, pixel trắng được biểu thị bằng số 255 và pixel đen
bằng số 0. Pixel xám là bất kỳ số nào ở giữa, tùy thuộc vào cường độ của
màu sắc, màu xám càng nhạt, con số càng gần 255. Hình ảnh có màu thường
được biểu diễn bằng hệ thống RGB, hệ thống này đại diện cho mỗi màu là
sự kết hợp của đỏ, xanh lá cây và xanh lam. Ở đây, mỗi pixel sẽ có ba kích
17
thước, một cho mỗi màu. Các giá trị trong mỗi thứ nguyên sẽ nằm trong
khoảng từ 0 đến 255. Ở đây, màu càng đậm, con số càng gần 255. Ở đây,
kích thước đầu tiên đề cập đến chiều cao của hình ảnh (trong số pixel), kích
thước thứ hai đề cập đến chiều rộng của hình ảnh (trong số pixel) và thứ
nguyên thứ ba được gọi là kênh và đề cập đến bảng màu của hình ảnh. Số
kênh cho hình ảnh màu là ba (một kênh cho mỗi màu trong Hệ thống RGB).
Hình 2.2: Hình ảnh tỷ lệ xám chỉ có một kênh
2.2.2. Các đặc trưng chung của mạng CNN
Hình 2.3: Mạng Alexnet, một kiến trúc điển hình của CNN
18
Sử dụng phương pháp tích chập: Các mạng nơ ron tích chập đều sử dụng
phương pháp tích chập để trích xuất các đặc trưng từ dữ liệu. Do đó, chúng được gọi
chung là mạng nơ ron tích chập.
Kiến trúc phân tầng: Kiến trúc phân tầng trong mạng CNN giúp cho quá trình
học của mạng xảy ra ở nhiều cấp độ khác nhau, từ cấp độ thấp đến cao. Khi đó, mạng
CNN có khả năng tiếp cận và học các đặc trưng từ mức độ thấp như đường chéo,
ngang, dọc, rìa và cạnh, tới các đặc trưng chi tiết hơn. Các đặc trưng này được tổng
hợp và trích xuất thông qua các tầng tích chập của mạng.
Được huấn luyện trên những bộ dữ liệu lớn: Sự khác biệt quan trọng giữa mô
hình học sâu nhiều tầng và các phương pháp học máy truyền thống chỉ trở nên rõ rệt
khi huấn luyện trên các bộ dữ liệu lớn. Trên bộ dữ liệu nhỏ, phương pháp truyền thống
có thể đủ để phân biệt các nhãn với nhau, và không có sự ưu thế đáng kể của mạng nơ
ron đa tầng. Tuy nhiên, trên các bộ dữ liệu lớn, kiến trúc học sâu nhiều tầng đã chứng
tỏ sự vượt trội về độ chính xác và khả năng biểu diễn. Điều này dễ hiểu bởi mạng nơ
ron có thể có hàng chục triệu tham số, vượt xa số lượng tham số của các phương pháp
học máy truyền thống, cho phép nó có khả năng biểu diễn tốt hơn.
Kích thước layers giảm dần: Nghiên cứu đã chứng minh rằng việc giảm kích
thước layers có thể giảm số lượng tham số của mô hình một cách đáng kể, từ đó tạo ra
các mạng nhẹ hơn và tăng tốc độ dự đoán. Đồng thời, sự giảm này không ảnh hưởng
đáng kể đến độ chính xác của mô hình.
Độ sâu tầng layers tăng dần: Bằng việc tăng số lượng bộ lọc theo cấp số nhân,
độ sâu của các layers trong mạng CNN được gia tăng. Điều này giúp mô hình học được
nhiều đặc trưng đa dạng hơn. Các layers đầu tiên thường tạo ra những đặc trưng chung
có hình dạng và phương hướng tương tự, do đó không cần nhiều bộ lọc. Tuy nhiên, khi
đến các layers sau, yêu cầu độ chi tiết tăng cao hơn, điều này đồng nghĩa với việc cần
nhiều bộ lọc hơn để phân biệt được các chi tiết đặc trưng.
19
Từ mạng CNN, quá trình tích chập tạo ra các đặc trưng hai chiều. Để sử dụng
những đặc trưng này trong quá trình phân loại của mạng CNN, cần được chuyển thành
đặc trưng một chiều thông qua phương pháp flatten và được truyền qua các layers kết
nối đầy đủ. Mỗi layer được kích hoạt bằng hàm phi tuyến để tăng khả năng biểu diễn
và cải thiện kết quả phân loại.
2.2.3. Các mạng CNN tiêu biểu
LeNet-5 (1998)
Hình 2.4: Kiến trúc LeNet
LeNet-5 là một kiến trúc pionner trong việc áp dụng mạng tích chập hai chiều,
được sáng tạo bởi giáo sư Yan Lecun, người được coi là cha đẻ của kiến trúc CNN. Mô
hình ban đầu đơn giản, chỉ gồm 2 convolutional layers và 3 fully-connected layers.
Mặc dù đơn giản, LeNet-5 đã cho thấy hiệu suất vượt trội so với các thuật toán máy
học truyền thống khác.
AlexNet (2012)
Hình 2.5: Kiến trúc AlexNet
20
AlexNet là một mạng CNN ra mắt vào năm 2012 bởi Alex Krizhevsky và đã
xuất sắc giành chiến thắng trong cuộc thi ImageNet với sự chênh lệch đáng kể so với
đội thứ hai. Thành công của AlexNet đã chứng minh rằng các đặc trưng học được từ
mô hình có thể vượt trội hơn so với các đặc trưng được tạo ra bằng cách thủ công sử
dụng các thuật toán như SUFT, HOG và SHIFT. Ý tưởng của AlexNet dựa trên kiến
trúc LeNet của Yan Lecun và có các cải tiến sau:
- Tăng kích thước đầu vào và độ sâu của mạng.
- Để phù hợp với kích thước của các đặc trưng chung và đặc trưng riêng,
mạng CNN sử dụng các bộ lọc (kernel hoặc filter) có kích thước giảm dần
qua các tầng (layers).
- Để tăng tốc độ hội tụ của quá trình, mạng CNN sử dụng phương pháp chuẩn
hóa (local normalization) để điều chỉnh các tầng (layer) của nó.
Mạng đã được cải tiến trong quá trình tối ưu hóa như sau:
- Mạng đã áp dụng hàm kích hoạt ReLU thay cho Sigmoid. Đây là lần đầu
tiên hàm kích hoạt ReLU được sử dụng trong mạng nơ ron, nhờ tính chất
đạo hàm đơn giản chỉ gồm 2 giá trị {0, 1} và không có lũy thừa cơ số như
hàm Sigmoid. Hàm ReLU giúp tạo ra tính phi tuyến cho mạng và có tốc độ
tính toán nhanh.
21
Hình 2.6: Hàm ReLU
- Mạng đã được cải tiến bằng việc sử dụng dropout layer, giúp giảm số lượng
kết nối giữa các nơ ron và kiểm soát hiện tượng overfitting.
Hình 2.7: Phương pháp dropout
22
Thông qua mỗi lớp trong mạng, kích thước đầu ra giảm dần trong khi độ sâu
tăng lên theo từng bộ lọc.
Mạng AlexNet có resolution của input và số lượng layer lớn hơn nên số lượng
tham số của nó lên tới 60 triệu, lớn hơn so với LeNet rất nhiều.
VGG-16 (2014)
Hình 2.8: Kiến trúc VGG-16
Với mô hình VGG-16, mạng nơ ron đã được chứng minh mang lại lợi ích đáng
kể trong việc cải thiện độ chính xác của mô hình. Về kiến trúc thì VGG-16 vẫn dữ các
đặc điểm của AlexNet nhưng có những cải tiến:
- Mạng VGG-16 được xây dựng với mức độ sâu hơn, bao gồm 13 lớp tích
chập hai chiều (so với 5 lớp của AlexNet) và 3 lớp fully connected.
- Một điểm đáng chú ý trong VGG-16 là việc sử dụng khái niệm khối tích
chập (block), đó là việc lặp lại một tập hợp các lớp CNN giống nhau. Kiến
trúc khối đã trở thành một mẫu thiết kế phổ biến trong các mạng CNN từ đó.
- VGG-16 cũng tiếp tục sử dụng hàm kích hoạt ReLU như AlexNet.
- Một thay đổi quan trọng khác là VGG-16 thay đổi thứ tự của các khối khi
xếp các lớp CNN và max pooling. Thay vì xen kẽ một lớp CNN và max
pooling như AlexNet, VGG-16 xếp nhiều lớp CNN liên tiếp trước khi áp
dụng max pooling.
23
- VGG-16 chỉ sử dụng các bộ lọc kích thước nhỏ 3x3 thay vì nhiều kích thước
bộ lọc như AlexNet. Kích thước bộ lọc nhỏ sẽ giúp giảm số lượng tham số
cho mô hình và mang lại hiệu quả tính toán hơn.
- Một đặc điểm khác của VGG-16 là sử dụng bộ lọc kích thước nhỏ 3x3. Sử
dụng các bộ lọc nhỏ này giúp giảm số lượng tham số của mô hình và đồng
thời cải thiện hiệu suất tính toán.
Mạng VGG-16 có độ sâu lớn hơn so với AlexNet và tổng số tham số của nó lên
tới 138 triệu. Điều này đặt VGG-16 vào danh sách các mạng có số lượng tham số lớn
nhất. Ngoài ra, còn có một phiên bản khác của VGG-16 gọi là VGG-19, mở rộng thêm
3 lớp để tăng độ sâu của mạng.
GoogleNet - Inception-V1 (2014)
Hình 2.9: Kiến trúc GoogleNet
24
Trước đây, các kiến trúc mạng nơ ron thường sử dụng các bộ lọc với nhiều kích
thước khác nhau như 11x11, 5x5, 3x3 và thậm chí cả bộ lọc nhỏ nhất là 1x1. Tuy nhiên,
trong nghiên cứu này, đề xuất một phương pháp kết hợp đồng thời tất cả các bộ lọc này
vào cùng một khối, và phương pháp này đã mang lại hiệu quả đáng kể. Gọi kiến trúc
này là “kiến trúc khối Inception”.
- Trong phương pháp kiến trúc khối Inception, đề xuất sử dụng 4 nhánh song
song. Mỗi nhánh áp dụng các bộ lọc có kích thước khác nhau như 1x1, 3x3,
5x5 trong mô đun Inception, nhằm trích xuất các đặc trưng đa dạng từ các
vùng nhận thức có kích thước khác nhau.
- Ở những nhánh đầu tiên (nhánh 1, 2, 4 từ trên xuống), sử dụng phép tích
chập 1x1 trên từng điểm ảnh như một kết nối fully connected, nhằm giảm
độ sâu kênh và số lượng tham số của mô hình.
- Nhánh thứ 3 từ trên xuống cần giảm chiều dữ liệu bằng một layer max
pooling kích thước 3x3 và sau đó áp dụng bộ lọc kích thước 1x1 để thay đổi
số kênh.
- Trong nhánh thứ 3 (từ trên xuống), giảm kích thước dữ liệu bằng một lớp
max pooling có kích thước 3x3, sau đó áp dụng một bộ lọc 1x1 để thay đổi
số kênh.
Trong kiến trúc Inception-V1, áp dụng khối Inception lặp lại 7 lần. Toàn bộ
mạng bao gồm 22 lớp, làm tăng đáng kể so với VGG-16. Một trong những đóng góp
quan trọng của kiến trúc này là việc sử dụng tích chập 1x1, giúp giảm số lượng tham số
xuống chỉ còn 5 triệu, ít hơn gần 27 lần so với VGG-16. Điều này đạt được nhờ việc áp
dụng kỹ thuật giảm chiều dữ liệu thông qua tích chập 1x1, giúp tiết kiệm tài nguyên
tính toán và giảm độ phức tạp của mô hình.
25
GoogleNet - Inception-V3 (2015)
Hình 2.10: Kiến trúc GoogleNet - Inception version 3
Inception-V3 là một phiên bản tiếp nối của Inception-V1 và có tổng cộng 24
triệu tham số. Tất cả các lớp tích chập trong Inception-V3 được theo sau bởi một lớp
batch normalization và một hàm kích hoạt ReLU. Batch normalization là một kỹ thuật
giúp chuẩn hóa đầu vào của mỗi lớp theo phân phối chuẩn N(0,1) trong từng mini
batch, điều này giúp gia tăng tốc độ huấn luyện của mô hình.
Inception-V3 là một kiến trúc mạng nơ ron có khả năng giải quyết vấn đề thắt
cổ chai, tức là kích thước của các lớp không giảm một cách đột ngột. Điều này được
26
đạt được thông qua việc sử dụng phương pháp nhân tố, một cách tính toán hiệu quả
trong mô hình.
Hiện tại mô đun Inception bao gồm 4 version:
- Inception-A là một cải tiến của Inception module V1. Ở nhánh thứ nhất,
thay thế một layer tích chập kích thước 5x5 bằng hai layer tích chập kích
thước 3x3 liên tiếp. Điều này giúp giảm số lượng tham số từ 25 xuống 18 và
tăng độ sâu của mô hình.
- Inception-B là một cải tiến tiếp theo dựa trên Inception-A. Thay thế layer
tích chập kích thước 3x3 bằng layer tích chập kích thước 7x7 ở cả nhánh thứ
nhất và nhánh thứ hai. Đồng thời, phân tách nhân tố tích chập kích thước
7x7 thành hai tích chập liên tiếp 7x1 và 1x7 để giảm số lượng tham số so
với việc sử dụng hai tích chập 3x3 liên tiếp. Kết quả là số lượng tham số
giảm từ 18 xuống 14.
- Inception-C là một cải tiến tiếp theo của Inception-B. Thay thế tích chập
7x1 bằng tích chập 3x1 và 1x7 bằng tích chập 1x3, và đặt chúng cạnh nhau
thay vì liên tiếp. Kiến trúc này giúp giảm số lượng tham số từ 14 xuống 6.
Ngoài ra Inception-V3 cũng áp dụng hai kiến trúc giảm chiều dữ liệu là
Reduction-A và Reduction-B.
27
CHƯƠNG 3 - PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
Trong chương này sẽ trình bày tổng quan về bài toán dự đoán độ tuổi và giới
tính bằng phương pháp học sâu. Giới thiệu về hệ thống và một số phương pháp tiếp cận.
Các chức năng chính của hệ thống. Trong phạm vi chương này, đề án sẽ trình bày cũng
như sẽ nghiên cứu và xây dựng hệ thống hỗ trợ công tác tuyển dụng thông qua bài toán
dự đoán độ tuổi và giới tính.
3.1. Hướng tiếp cận
Mô hình sẽ tập huấn trên dữ liệu gồm rất nhiều gương mặt cùng với nhãn là giới
tính cho mạng dự đoán giới tính, nhãn là tuổi cho dự đoán tuổi.
Sau khi huấn luyện được hoàn thành 2 mô hình trên thì sẽ tiến hành dự đoán
trên dữ liệu thực tế, một tấm ảnh hoàn chỉnh gồm khuôn mặt người, độ tuổi khác nhau.
Xây dựng hệ thống dựa trên kết quả của mạng nơ ron tích chập trên vào hỗ trợ
công tác tuyển dụng nhân sự.
3.2. Dữ liệu huấn luyện
3.2.1. Giới thiệu về tập dữ liệu
Tên tập dữ liệu công khai: Adience Dataset.
Bộ dữ liệu Adience là một tập dữ liệu quan trọng trong lĩnh vực nhận dạng
khuôn mặt, được sử dụng rộng rãi trong nghiên cứu và ứng dụng thực tế. Bộ dữ liệu đa
dạng về đặc trưng khuôn mặt như tuổi, giới tính, dạng tóc, kính, phụ kiện đeo trang sức
và áo khoác.
Sử dụng bộ dữ liệu Adience để đào tạo các mô hình học máy nhằm nhận diện
khuôn mặt, phân loại giới tính và ước lượng tuổi. Điều này rất quan trọng trong việc
phát triển hệ thống nhận dạng khuôn mặt hiệu quả và đáng tin cậy cho các ứng dụng.
28
Bộ dữ liệu Adience được phát triển bởi một nhóm các nhà khoa học máy tính tại
Đại học Texas tại Austin và Đại học của Torino. Họ đã thu thập dữ liệu từ nhiều nguồn
khác nhau, bao gồm các hình ảnh chụp trong môi trường tự nhiên và trong phòng thí
nghiệm. Mỗi hình ảnh khuôn mặt trong bộ dữ liệu Adience đã được xác định đúng tuổi
và giới tính của người trong ảnh, cùng với thông tin về các đặc trưng khác như tóc,
kính và trang sức.
Bộ dữ liệu Adience được sử dụng rộng rãi trong các nghiên cứu về nhận dạng
khuôn mặt và học sâu. Có thể sử dụng nó để đào tạo và kiểm tra các mô hình nhận
dạng khuôn mặt, đánh giá hiệu suất của các mô hình này và so sánh với các phương
pháp khác.
Hình 3.1: Hình ảnh trong tập dữ liệu Adience
29
3.2.2. Các bước xây dựng từ tập dữ liệu Adience Dataset
_Download ảnh: aligned.tar.gz (User & Pw FTP: adiencedb; adience)
Hình 3.2: Thư mục chứa các ảnh được giải nén
Các file ảnh khuôn mặt này đã được aligned, nghĩa là đã được xử lý thẳng đều
giữa 2 mắt.
Thiết lập nhãn cho các hình ảnh tương ứng:
30
Bảng 3.1: Danh mục nhãn
STT Ký hiệu Mô tả VÍ DỤ
(115321157@N03,
Định danh sẽ 115321157@N08,
1 user_id thuộc về thư mục 100003415@N08, nào.
....)
(10424815813_e94629b1ec_o.jpg,
2 original_image Tên file ảnh 10437979845_5985be4b26_o.jpg,
…)
3 face_id Kiểu khuôn mặt
4 age Nhóm tuổi ([0-14], [15-45], [45,100])
M - Nam 5 gender Giới tính F - Nữ
6 x Tọa độ x
7 y Tọa độ y
8 dx Chiều rộng
9 dy Chiều cao
Góc nghiêng của 10 tilt_ang khuôn mặt
31
Góc quay của 11 fiducial_yaw_angle khuôn mặt
Một chỉ số đánh
giá độ chính xác 12 fiducial_score căn chỉnh khuôn
mặt
Bảng 3.2: Thông tin các nhãn tương ứng với các bức ảnh
3.3. Tiền xử lý dữ liệu
3.3.1. Loại bỏ đặc trưng không cần thiết
Để đạt được kết quả tốt trong quá trình huấn luyện mô hình, cần tiến hành phân
biệt và loại bỏ các trường dữ liệu không cần thiết trong bộ dữ liệu được sử dụng cho
32
bài toán dự đoán tuổi và giới tính. Dựa trên yêu cầu thực tế của bài toán, tôi đã thực
hiện loại bỏ các trường như biểu cảm (Expressions) và tư thế (Pose) không có ý nghĩa
quan trọng trong việc dự đoán này.
3.3.2. Chỉnh kích thước ảnh sang kích thước phù hợp
Bởi vì các ảnh trong Adience Dataset có kích thước tương đối lớn (816x816x3)
vì thế để scale về kích thước mà mô hình cần có để huấn luyện có thể sử dụng.
3.4. Mô hình được sử dụng
3.4.1. Tổng quan mô hình
Để đạt được hiệu quả cao trong việc xây dựng mô hình, có những yếu tố quan
trọng cần được xem xét. Đầu tiên, cấu trúc mạng nơ ron và thuật toán được sử dụng
đóng vai trò quan trọng. Ngoài ra, việc xác định các biến dữ liệu phù hợp và điều chỉnh
tham số mô hình dựa trên bộ dữ liệu huấn luyện cũng là yếu tố quan trọng khác.
Tôi sẽ sử dụng mạng CNN để dự đoán độ tuổi và giới tính từ hình ảnh. Bộ dữ
liệu sử dụng đã được giới thiệu trong phần trước và sẽ được sử dụng để huấn luyện mô
hình.
Cấu trúc mô hình mạng nơ ron tích chập được áp dụng trong bài toán dựa trên
mô hình AlexNet. Mô hình này bao gồm tổng cộng 8 lớp tích chập (Convolution). Chi
tiết cấu trúc của mô hình bao gồm 5 lớp tích chập (convolutional layer), 2 lớp hoàn
toàn kết nối (fully connected layer) và 1 lớp hoàn toàn kết nối đầu ra (fully connected
layer output). Bên cạnh đó, thay vì sử dụng activation function(hàm kích hoạt) là
ReLU, thì trong mạng AlexNet sử dụng hàm Sigmoid. Mô hình bao gồm các chi tiết cụ
thể như sau:
33
Hình 3.3: Mạng Alexnet
Convolution layer
Trong một convolution layer bất kỳ sẽ bao gồm nhiều kernel có cùng kích thước.
Ví dụ như convolution layer đầu tiên của AlexNet chứa 96 kernel có kích thước
(11x11x3). Thông thường thì width và height của một kernel bằng nhau, và độ sâu
(depth) thường bằng số lượng kênh màu.
Các convolutional layer 1 và convolutional layer 2 trong mô hình được kết nối
với nhau thông qua một Overlapping Max Pooling layer ở giữa. Tương tự, giữa
convolutional layer 2 và convolutional layer 3 cũng có một Overlapping Max Pooling
layer. Các convolutional layer 3, convolutional layer 4 và convolutional layer 5 kết nối
trực tiếp với nhau mà không thông qua bất kỳ lớp trung gian nào. Convolutional layer 5
kết nối với fully connected layer 1 thông qua một Overlapping Max Pooling layer, sau
đó là một fully connected layer tiếp theo. Cuối cùng, một bộ phân lớp softmax với
1000 lớp nhãn được áp dụng.
34
ReLU nonlinearity được áp dụng sau tất cả các convolutional layer và fully
connected layer trong mô hình. Trước đây, ReLU nonlinerity của lớp convolution 1 và
2 thường theo sau bởi một bước chuẩn hóa cục bộ (local normalization) rồi mới thực
hiện pooling. Tuy nhiên, các nghiên cứu sau đó nhận thấy rằng việc sử dụng
normalization không thật sự hữu ích.
Overlapping Max Pooling
Max Pooling layer thường được sử dụng để giảm kích thước không gian của
một tensor (chiều dài và chiều rộng), trong khi vẫn giữ nguyên chiều sâu. Overlapping
Max Pool layter cũng tương tự như Max Pool layter, ngoại trừ việc là một window của
bước này sẽ có một phần chồng lên window của bước tiếp theo. Tác giả sử dụng
pooling có kích thước 3x3 và bước nhảy là 2 giữa các pooling. Nghĩa là giữa pooling
này và pooling khác sẽ overlapping với nhau 1 pixel. Các thí nghiệm thực tế đã chứng
minh rằng việc sử dụng overlapping giữa các pooling giúp giảm độ lỗi top-1 error 0.4%
và top-5 error là 0.3% khi so với việc sử dụng pooling có kích thước 2x2 và bước nhảy
2 (vector output của cả hai đều có số chiều bằng nhau).
ReLu Nonlinearity
Một cải tiến quan trọng khác của AlexNet là việc sử dụng hàm phi tuyến ReLU.
Trước đây, các nhóm nghiên cứu khác thường sử dụng hàm kích hoạt là hàm Sigmoid
để huấn luyên mô hình mạng nơ ron. AlexNet chỉ ra rằng, khi sử dụng ReLU, mô hình
học sâu CNN sẽ huấn luyện nhanh hơn so với việc sử dụng sigmoid. Hình bên dưới
được rút ra từ bài báo chỉ ra rằng với việc sử dụng ReLU (đường nét liền trong hình),
AlexNet đạt độ lỗi 25% trên tập huấn luyện và nhanh hơn gấp 6 lần so với mô hình
tương tự.
35
Hình 3.4: Ví dụ thí nghiệm sử dụng ReLU
3.4.2. Định nghĩa
Đầu tiên, thực hiện import các thư viện cần thiết cho bài toán, bao gồm:
- OS: Thư viện được sử dụng để hỗ trợ thao tác với các thư mục trong máy
tính.
- Tensorflow: Thư viện hỗ trợ về các phương thức học máy.
- Numpy : Các thao tác thực hiện với dữ liệu kiểu mảng.
36
- Keras: Thư viện được sử dụng để xây dựng và huấn luyện mô hình mạng,
bao gồm các hàm như “model”, “layer”, “conv”, “maxpooling”.
- Sklearn: được sử dụng để hỗ trợ các thao tác liên quan đến xử lý dữ liệu và
huấn luyện mô hình, bao gồm các chức năng như đọc ghi dữ liệu, thay đổi
kích thước ảnh và các phép biến đổi dữ liệu.
- Cv2: Thư viện được sử dụng để xử lý ảnh và video. Thư viện này cung cấp
các chức năng để đọc, ghi, hiển thị, xử lý và phân tích các tệp ảnh và video.
- Glob: Thư viện được sử dụng để tìm kiếm các tệp trong thư mục bằng cách
sử dụng các quy tắc định dạng.
- H5py: Sử dụng để làm việc với tệp dữ liệu định dạng HDF5 (Hierarchical
Data Format 5).
- Pandas: Thư viện được sử dụng để xử lý và phân tích dữ liệu.
- Livelossplot: Thư viện sử dụng để vẽ các biểu đồ theo dõi quá trình đào tạo
mô hình.
Thực hiện tổ chức thư mục như sau:
Hình 3.5: Tổ chức thư mục
37
- Thư mục checkpoint: lưu trọng số sau khi huấn luyện xong, 2 model đều
lưu trong đây.
- Thư mục encoder: lưu file One hot vector của nhãn tuổi & giới tính.
- Thư mục test_image: chứa hình ảnh để test dữ liệu.
from os import path config = {} config["BASE_COLAB_PATH"] = "/content/drive/MyDrive/KhoaLuanHTTT/age_gender_prediction/" config["DATASET_PATH"] = config["BASE_COLAB_PATH"] + "adience/" config["BASE_GOOGLE_DRIVE_PATH"] = "/content/drive/MyDrive/KhoaLuanHTTT/age_gender_prediction/" config["AGE_TRAINED_MODEL"] = config["BASE_GOOGLE_DRIVE_PATH"] + "checkpoints/age_best_model.hdf5" config["GENDER_TRAINED_MODEL"] = config["BASE_GOOGLE_DRIVE_PATH"] + "checkpoints/gender_best_model.hdf5" config["AGE_LABEL_ENCODER"] = config["BASE_GOOGLE_DRIVE_PATH"] + "encoder/age_le.cpickle" config["GENDER_LABEL_ENCODER"] = config["BASE_GOOGLE_DRIVE_PATH"] + "encoder/gender_le.cpickle" config["NUM_VAL_IMAGES"] = 0.15 config["DLIB_LANDMARK_PATH"] = config["BASE_GOOGLE_DRIVE_PATH"] + "shape_predictor_68_face_landmarks.dat" config["IMAGES_TEST_PATH"] = config["BASE_GOOGLE_DRIVE_PATH"] + "test_images/"
Thực hiện khởi tạo các đường dẫn đến các thư mục:
38
3.4.3.Chuẩn bị dữ liệu tập huấn
Với bộ dữ liệu Adience Dataset đã có thì vẫn chưa thể đưa vào model train được,
def buildAgeBins(self):
ageBins = [(0,14), (15,45), (46,np.inf)] return ageBins def toLabel(self, valLabel, dtype): if dtype == "age": return self.toAgeLabel(valLabel) return self.toGenderLabel(valLabel) def toAgeLabel(self, age): label = None age = age.replace("(", "").replace(")", "").split(", ") (ageLower, ageUpper) = np.array(age, dtype="int") for (lower, upper) in self.buildAgeBins(): if ageLower >= lower and ageUpper <= upper: label = "{}_{}".format(lower, upper)s break; return label def toGenderLabel(self, gender): return 0 if gender == "m" else 1
đầu vào yêu cầu luôn luôn là 1 bức ảnh với nhãn của bức ảnh đó.
Phương thức buildAgeBins thực hiện trả về một danh sách các phân khúc độ
tuổi để sử dụng trong việc phân loại độ tuổi.
Phương thức toLabel thực hiện chuyển đổi giá trị và loại dữ liệu đầu vào và trả
về nhãn tương ứng (độ tuổi hoặc giới tính).
Phương thức toAgeLabel thực hiện chuyển đổi một dải độ tuổi đầu vào thành
nhãn tương ứng dựa trên các phân khúc độ tuổi.
Để thực hiện thì phải gộp dữ liệu (giữa ảnh và nhãn), mục đích là lấy ra từng
cặp gồm:
- Đường dẫn tới bức ảnh.
39
- Nhãn của bức ảnh.
Cách lấy là duyệt từng dòng trong file .txt ( các file danh sách nhãn) lấy 5 giá trị
đầu tiên, dựa vào face_id & original_image + landmark_aligned_face tạo thành chuỗi
rồi duyệt tìm trong thư mục chứa ảnh → get địa chỉ file ảnh.
Trong 5 giá trị đầu tiên, tiếp tục lấy ra nhãn tuổi và giới tính của cho bức ảnh đó.
Đầu ra là 2 danh sách gồm đường dẫn trực tiếp của các bức ảnh, và nhãn của
def buildPathsAndLabels(self, dtype): paths = []
labels = []
foldPaths = os.path.sep.join([self.config["DATASET_PATH"] + "folds", "*.txt"]) foldPaths = glob.glob(foldPaths) for foldPath in foldPaths: rows = open(foldPath).read() rows = rows.strip().split("\n")[1:] for row in rows: row = row.split("\t") (usserID, imagePath, faceID, age, gender) = row[:5] if age[0] != "(" or gender not in ("m", "f"): continue p = "landmark_aligned_face.{}.{}".format(faceID, imagePath) p = os.path.sep.join([self.config["DATASET_PATH"] + "aligned", usserID, p]) label = None if dtype == "age": label = self.toLabel(age, dtype) else: label = self.toLabel(gender, dtype) if label is None: continue paths.append(p) labels.append(label) return (paths, labels)
bức ảnh đó.
Giá trị sẽ được trả về là 1 danh sách gồm các đường dẫn đến ảnh & danh sách
nhãn tương ứng với dtype.
40
Tiếp theo thực hiện encode nhãn tuổi và giới tính của 2 model, lưu với dạng
if dtype == "age": lb = LabelBinarizer().fit(trainLabels) trainLabels = lb.transform(trainLabels) print("[INFO] serializing label encoder...") f = open(config["AGE_LABEL_ENCODER"], "wb") f.write(pickle.dumps(lb)) f.close()
One-hot vector.
Cuối cùng tập dữ liệu được chia làm 2 phần, 85% dùng để train & 15% dùng
cho test, kết thúc chuẩn bị dữ liệu.
3.4.4. Kiến trúc
Dựa trên kiến trúc Alexnet, đầu vào của mạng là một bức ảnh RGB có kích
thước 256x256 pixel, kể cả toàn bộ các bức ảnh của tập train và tập test đều có kích
thước 256x256 pixel - nghĩa là những ảnh nào không đủ kích thước hoặc dư thừa resize
bỏ phần dư thừa, đưa về đúng chuẩn.
Hình 3.6: Mô hình gồm 5 block
Mô hình gồm 5 block:
Block 1 gồm:
- 1 convolution layer:
Sử dụng 96 filter khác nhau kích thước 7x7.
Activation = Relu.
41
Strike = (4, 4).
- BatchNormalization.
- MaxPooling size 3x3, strides = (2, 2).
- Dropout = 0.25.
Block 2 gồm:
- 1 convolution layer:
Activation = Relu.
Sử dụng 256 filter khác nhau kích thước 5x5.
Padding = same.
- BatchNormalization.
- MaxPooling size 3x3, strides = (2, 2).
- Dropout = 0.25.
Block 3 gồm:
- 1 convolution layer:
Activation = Relu.
Sử dụng 384 fillter khác nhau kích thước 3x3.
Padding = same.
- BachNormalization.
- MaxPooling size 3x3, strides = (2, 2).
- Dropout = 0.25.
Block 4 & block 5 gồm:
42
- Block 4 sử dụng Flatten.
Gồm 512 units.
Hàm activation = Relu.
- Cả 2 có 1 Dense layer:
- BatchNormalization.
- Dropout = 0.5.
Cuối cùng add thêm 1 lớp Dense tương ứng với từng model, với hàm activation
sẽ là activation = softmax.
Trong nghiên cứu này, sử dụng framework Keras để xây dựng và huấn luyện
mô hình trên ngôn ngữ Python. Loại mô hình mà tôi sẽ sử dụng là mô hình tuần tự
(Sequential). Một cách dễ dàng để xây dựng một mô hình trong Keras là sử dụng mô
hình tuần tự. Có thể xây dựng mô hình bằng cách thêm từng lớp vào mô hình sử dụng
hàm “Add()” trong Keras.
Bắt đầu khai báo và định nghĩa mô hình mạng CNN. Đầu tiên, tôi sẽ khai báo
# Define model type model = Sequential()
kiểu mô hình là mô hình tuần tự (sequential model).
Tiếp theo, tôi sẽ thiết lập các lớp trong mô hình bằng cách sử dụng hàm “Add()”
để thêm các tầng vào mô hình, giống như việc truyền các tham số của từng tầng vào
def build_model(input_shape, dtype="age"): model = Sequential() # Block #1: first CONV => RELU => POOL layer set model.add(Conv2D(96, (7, 7), activation='relu',
hàm “Add()”.
kernel_initializer='he_uniform', strides=(4, 4), input_shape=input_shape))
model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) model.add(Dropout(0.25))
# Block #2: second CONV => RELU => POOL layer set model.add(Conv2D(256, (5, 5), activation='relu', kernel_initializer='he_uniform', padding='same'))
model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) model.add(Dropout(0.25)) # Block #3: second CONV => RELU => POOL layer set model.add(Conv2D(384, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))
model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) model.add(Dropout(0.25)) # Block #4: first set of FC => RELU layers model.add(Flatten()) model.add(Dense(512, activation='relu', kernel_initializer='he_uniform')) model.add(BatchNormalization()) model.add(Dropout(0.5)) # Block #5: second set of FC => RELU layers model.add(Dense(512, activation='relu', kernel_initializer='he_uniform')) model.add(BatchNormalization()) model.add(Dropout(0.5)) # softmax classifier if dtype == "age": model.add(Dense(3, activation='softmax')) else: model.add(Dense(2, activation='softmax')) return model
43
3.4.5. Huấn luyện mô hình
3.4.5.1 Khởi tạo mô hình
age_model = build_model((256, 256, 3)) opt = Adam(learning_rate=0.001) age_model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy']) age_model.summary()
- Giá trị đầu vào sẽ là 1 ảnh 3 kênh màu có kích thước 256x256.
44
- Thuật toán optimizer được sử dụng là Adam với hệ số học là 0.001
Dự đoán tuổi là categorical_crossentropy.
Dự đoán giới tính là binary_crossentropy.
- Hàm loss được sử dụng với mô hình:
Sau khi đã khai báo và thêm tất cả các tầng vào mô hình, có thể xem tổng quan
về cấu trúc của mạng và số lượng các tham số trên từng tầng bằng cách sử dụng hàm
Model: "sequential" ___________________________________________________________________________ Layer (type) Output Shape Param # =========================================================================== conv2d (Conv2D) (None, 63, 63, 96) 14208 batch_normalization (BatchN (None, 63, 63, 96) 384 ormalization) max_pooling2d (MaxPooling2D) (None, 31, 31, 96) 0 dropout (Dropout) (None, 31, 31, 96) 0 conv2d_1 (Conv2D) (None, 31, 31, 256) 614656 batch_normalization_1 (Batc (None, 31, 31, 256) 1024 hNormalization) max_pooling2d_1 (MaxPooling (None, 15, 15, 256) 0 2D) dropout_1 (Dropout) (None, 15, 15, 256) 0 conv2d_2 (Conv2D) (None, 15, 15, 384) 885120 batch_normalization_2 (Batc (None, 15, 15, 384) 1536 hNormalization) max_pooling2d_2 (MaxPooling (None, 7, 7, 384) 0 2D) dropout_2 (Dropout) (None, 7, 7, 384) 0
“summary()” sẽ trả về kết quả như sau :
flatten (Flatten) (None, 18816) 0 dense (Dense) (None, 512) 9634304 batch_normalization_3 (Batc (None, 512) 2048 hNormalization) dropout_3 (Dropout) (None, 512) 0 dense_1 (Dense) (None, 512) 262656 batch_normalization_4 (Batc (None, 512) 2048 hNormalization) dropout_4 (Dropout) (None, 512) 0 dense_2 (Dense) (None, 3) 1539 =========================================================================== Total params: 11,419,523 Trainable params: 11,416,003 Non-trainable params: 3,520
3.4.5.2 Các phương thức tiền xử lý ảnh
45
Bởi vì các ảnh trong tập dữ liệu Adience Dataset có kích thước tương đối lớn
(816x816x3) vì thế để scale về kích thước mà mô hình cần có để training và sử dụng
class SimplePreprocessor: def __init__(self, width=None, height=None, inter=cv2.INTER_AREA): self.width = width self.height = height self.inter = inter def preprocess(self, image): if self.width is None and self.height is None: return image try: resized_image = cv2.resize(image, (self.width, self.height), interpolation=self.inter) except cv2.error as e: return None, error_msg return resized_image
class SimplePreprocessor.
46
Tiếp sau đó sử dụng hàm ImageToArrayPreprocessor để chuyển đổi hình ảnh
class ImageToArrayPreprocessor: def __init__(self, dataFormat=None): self.dataFormat = dataFormat def preprocess(self, image): try: return img_to_array(image) except: return None
class ImageDatasetGenerator: def __init__(self, dtype, dataset_type , batchSize, preprocessors=None, aug=None): self.batchSize = batchSize self.preprocessors = preprocessors self.aug = aug self.dtype = dtype agh = AgeGenderHelper(config) (trainPaths, trainLabels) = agh.buildPathsAndLabels(dtype) numVal = int(len(trainPaths) * config["NUM_VAL_IMAGES"]) if dtype == "age": lb = LabelBinarizer().fit(trainLabels) trainLabels = lb.transform(trainLabels) # serialize the label encoder print("[INFO] serializing label encoder...") f = open(config["AGE_LABEL_ENCODER"], "wb") f.write(pickle.dumps(lb)) f.close() (trainPaths, valPaths, trainLabels, valLabels) = train_test_split(trainPaths, trainLabels, test_size=numVal, stratify=trainLabels) else: le = LabelEncoder().fit(trainLabels)
sang định dạng ma trận.
trainLabels=np_utils.to_categorical(le.transform(trainLabels), 2) # serialize the label encoder print("[INFO] serializing label encoder...") f = open(config["GENDER_LABEL_ENCODER"], "wb") f.write(pickle.dumps(le)) f.close() (trainPaths, valPaths, trainLabels, valLabels) = train_test_split(trainPaths, trainLabels, test_size=numVal, stratify=trainLabels) if dataset_type == "train": self.paths = np.array(trainPaths) self.labels = np.array(trainLabels) else: self.paths = np.array(valPaths) self.labels = np.array(valLabels) self.numImages = self.paths.shape[0] def generator(self, passes=99999999): epochs = 0 while epochs < passes: for i in np.arange(0, self.numImages, self.batchSize): images = [] imgPaths = self.paths[i:i+self.batchSize] for path in imgPaths: image = cv2.imread(path) if self.preprocessors is not None: for p in self.preprocessors: image = p.preprocess(image) images.append(image) labels = self.labels[i:i + self.batchSize] if self.aug is not None: (images, labels) = next(self.aug.flow(np.array(images), np.array(labels), batch_size=self.batchSize)) yield(images, labels) epochs += 1
47
Class ImageDataSetGenerator trên dùng để:
- Phân chia dataset thành tập dữ liệu train và tập dữ liệu test theo tỉ lệ đã được
thiết lập.
- Chuyển đổi label ground truth thành one hot vector và ghi vào file ánh xạ:
Tuổi chuyển thành one hot vector với độ dài là 3 tương ứng với 3 khoảng
48
Giới tính chuyển thành one hot vector với độ dài là 2 vì output của mô
tuổi.
hình giới tính sẽ là vector 2 phần tử tương ứng với 2 giá trị là nam và nữ.
- Lấy dữ liệu theo batch size và tiến hành các tác vụ tiền xử lý được truyền
3.4.5.3 Các bước tiến hành huấn luyện mô hình
vào.
Sau khi đã chuẩn bị dữ liệu và định nghĩa mô hình mạng CNN cho bài toán dự
aug = ImageDataGenerator(rotation_range = 20, zoom_range = 0.15, width_shift_range = 0.2, height_shift_range = 0.2, shear_range = 0.15, horizontal_flip = True, fill_mode = "nearest") sp = SimplePreprocessor(256, 256) iap = ImageToArrayPreprocessor() batchSize = 128 trainGen = ImageDatasetGenerator("age", "train", batchSize, aug=aug, preprocessors=[sp, iap]) valGen = ImageDatasetGenerator("age", "val", batchSize, aug=aug, preprocessors=[sp, iap]) checkpoint = ModelCheckpoint(config["AGE_TRAINED_MODEL"], monitor="val_loss", save_best_only=True, verbose=1) age_model.fit_generator(trainGen.generator(), steps_per_epoch=trainGen.numImages // batchSize, validation_data=valGen.generator(), validation_steps=valGen.numImages // batchSize, epochs=40, max_queue_size=20 * 2, shuffle=True, callbacks=[PlotLossesKeras(), checkpoint])
đoán độ tuổi và giới tính, tiếp tục thực hiện huấn luyện mô hình độ tuổi như sau:
- Cài đặt và sử dụng thư viện livelossplot để trực quan hóa quá trình huấn
luyện.
49
- Sử dụng ImageDataGenerator trong thư viện keras.preprocessing.image để
làm đa dạng mẫu tăng hiệu quả cho quá trình học.
- Sử dụng class SimplePreprocess để scale ảnh về kích thước 256x256.
- Sử dụng class ImageToArrayPreprocessor để chuyển ảnh về ma trận.
- Sử dụng class ImageDatasetGenerator để lấy được tập dữ liệu huấn luyện và
đánh giá đã qua xử lý các bước tiền xử lý nêu trên.
- Sử dụng ModelCheckpoint trong thư viện keras.callbacks để lưu lại được
các trọng số có giá trị loss thấp nhất trong quá trình huấn luyện.
Kết quả của quá trình huấn luyện được hiển thị bên dưới
Hình 3.7: Kết quả huấn luyện độ tuổi dạng biểu đồ
50
Hình 3.8: Kết quả huấn luyện độ tuổi
aug = ImageDataGenerator(rotation_range=20, zoom_range=0.15, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.15, horizontal_flip=True, fill_mode="nearest") sp = SimplePreprocessor(256, 256) iap = ImageToArrayPreprocessor() batchSize = 128 trainGen = ImageDatasetGenerator("gender", "train", batchSize, aug=aug, preprocessors=[sp, iap]) valGen = ImageDatasetGenerator("gender", "val", batchSize, aug=aug, preprocessors=[sp, iap]) checkpoint = ModelCheckpoint(config["GENDER_TRAINED_MODEL"], monitor="val_loss", save_best_only=True, verbose=1) gender_model.fit_generator(trainGen.generator(), steps_per_epoch=trainGen.numImages, validation_data=valGen.generator(), validation_steps=valGen.numImages, epochs=50, max_queue_size=16 * 2, shuffle=True, callbacks=[PlotLossesKeras(), checkpoint])
Thực hiện huấn luyện mô hình giới tính như sau:
Kết quả của quá trình huấn luyện được hiển thị bên dưới:
51
Hình 3.9: Kết quả huấn luyện giới tính dạng biểu đồ
Hình 3.10: Kết quả huấn luyện giới tính
52
CHƯƠNG 4 - CÀI ĐẶT THỬ NGHIỆM VÀ ĐÁNH GIÁ
4.1. Cài đặt môi trường
Trong quá trình triển khai và xây dựng mô hình cho đề án này, tôi đã áp dụng
các giải pháp phần mềm sau.
Ngôn ngữ lập trình Python
Trong lĩnh vực học máy và học sâu, Python hiện đang là ngôn ngữ lập trình phổ
biến nhất được sử dụng cho nghiên cứu và phát triển. Python cung cấp nhiều thư viện
hỗ trợ mạnh mẽ cho tính toán số học, xử lý dữ liệu, xử lý hình ảnh và cho phép dễ dàng
triển khai các thuật toán và xây dựng các mô hình học máy. Trong đề án này, tôi đã sử
dụng ngôn ngữ lập trình Python với phiên bản cụ thể là Python 3.8.10.
Môi trường cài đặt
- Trên môi trường Google Colab.
- Máy tính hệ điều hành Windows 10.
- CPU Intel core i5 6200U 2.3GHz.
- RAM 8 GB.
- SSD 480 GB.
4.2. Phương pháp đánh giá
Để đánh giá hiệu suất của bài toán dự đoán tuổi và giới tính bằng phương pháp
học sâu tôi sử dụng các độ đo như: Accuracy, Precision, Recall.
Accuracy: hay còn gọi là độ chính xác, đo lường khả năng của mô hình trong
việc phân loại dữ liệu một cách chính xác, tức là xác định đúng nhãn hoặc lớp tương
ứng cho từng mẫu dữ liệu. Độ chính xác thường được tính bằng công thức sau:
53
Accuracy = TP + TN (TP + TN) + (FP + FN)
Precision: Được định nghĩa như là xác suất mà một dự đoán phân loại là đúng
khi biết rằng nó đã được phân loại là một dự đoán thuộc lớp đó. Precision được tính
bằng cách chia số lượng các mẫu được phân loại chính xác thuộc lớp đó cho tổng số
các mẫu được phân loại thuộc lớp đó. Công thức ước lượng precision như sau:
Precision = TP TP + FP
Recall: hay còn gọi là độ phủ, là xác suất mà một mẫu có nhãn là 1 đã được
phân loại đúng. Recall được tính bằng cách chia số lượng các mẫu được phân loại đúng
thuộc lớp đó cho tổng số các mẫu thực tế thuộc lớp đó. Công thức ước lượng recall như
sau:
Recall = TP TP + FN
4.3. Phân tích đánh giá hệ thống đề xuất
4.3.1. Xây dựng mô đun đánh giá
Mô đun thực hiện tải hình ảnh có chứa khuôn mặt người cần dự đoán. Dữ liệu
đầu vào là một ảnh chứa dữ liệu khuôn mặt và tên ảnh phải được dán nhãn ví dụ: 0_15.
- Với 0 là đại diện cho giới tính nữ (0 là giới tính nữ, 1 là giới tính nam).
- Sau ký tự ‘_’ là độ tuổi chính xác, ví dụ: _15 là 15 tuổi.
Sau khi đã có dữ liệu đầu vào, tiến hành thực hiện đánh giá như sau:
54
Hình 4.1: Giao diện tải ảnh lên hệ thống đánh giá
Sau khi tải hình ảnh đã chuẩn bị vào hệ thống, hệ thống hiển thị giao diện sau:
Hình 4.2: Giao diện khi đã tải hình
Chọn nút “Dự đoán” hệ thống tiến hành thực hiện dự đoán hình ảnh đầu vào và
cho ra kết quả với các thông tin sau:
- Thông tin độ tuổi thực tế.
- Thông tin giới tính thực tế.
- Thông tin độ tuổi dự đoán.
- Thông tin giới tính dự đoán.
- Kết quả dự đoán.
55
Hình 4.3: Kết quả dự đoán giới tính nam độ tuổi 12
Hình 4.4: Kết quả dự đoán giới tính nam độ tuổi 45
56
Hình 4.5: Kết quả dự đoán giới tính nữ độ tuổi 40
Hình 4.6: Kết quả dự đoán giới tính nữ độ tuổi 18
57
Hình 4.7: Kết quả dự đoán giới tính nam độ tuổi 28
4.3.2. Kiểm tra đánh giá hệ thống trên bộ dữ liệu công khai
4.3.2.1. Bộ dữ liệu công khai Adience
Tôi đã phân chia bộ dữ liệu thành hai tập, gồm tập huấn luyện và tập kiểm tra,
để sử dụng trong quá trình đánh giá và kiểm tra hiệu suất của mô hình. Tổng số bản ghi
trong bộ dữ liệu là 26.580. Tập huấn luyện bao gồm 26.000 bản ghi, tương đương với
97.8% tổng số bản ghi. Tập kiểm tra có 580 bản ghi, tương đương với 2.2% tổng số
4.3.2.2. Kết quả đánh giá trên bộ dữ liệu công khai Adience
bản ghi.
Dựa trên kết quả từ quá trình huấn luyện, đã tiến hành kiểm chứng mô hình đã
được huấn luyện bằng tập dữ liệu kiểm tra. Kết quả kiểm chứng được ghi nhận như
sau:
Dự đoán giới tính:
58
Dựa trên kết quả kiểm chứng, mô hình dự đoán giới tính trên bộ dữ liệu công
khai Adience đạt được độ chính xác phân loại ở mức tương đương 86.6666666667%.
Tiếp theo, tôi sẽ xem xét các độ đo khác như Precision và Recall, F1-Scrore từ kết quả
sau đây:
Hình 4.8: Kết quả kiểm chứng mô hình với dự đoán giới tính với dữ liệu công khai
Dự đoán tuổi:
Dựa trên kết quả kiểm chứng, mô hình dự đoán độ tuổi trên bộ dữ liệu công khai
Adience đạt được độ chính xác phân loại ở mức tương đương 92.3076923077%. Tiếp
theo, tôi sẽ xem xét các độ đo khác như Precision và Recall, F1-Scrore từ kết quả sau
đây:
Hình 4.9: Kết quả kiểm chứng mô hình với dự đoán tuổi với dữ liệu công khai
59
4.3.3. Kiểm tra đánh giá hệ thống trên bộ dữ liệu đã xây dựng
4.3.3.1. Bộ dữ liệu đã xây dựng
Tôi thực hiện thu thập bộ dữ liệu chứa hình khuôn mặt người và thông tin độ
tuổi và giới tính một cách chính xác thông qua việc khảo sát những đồng nghiệp làm
việc tại VNPT Tây Ninh. Bộ dữ liệu gồm 30 ảnh khuôn mặt và thông tin chính xác về
4.3.3.2. Kết quả đánh giá trên bộ dữ liệu đã xây dựng
độ tuổi cũng như giới tính của người đó.
Từ kết quả của quá trình huấn luyện, tôi đã thực hiện kiểm chứng mô hình đã
được huấn luyện trên tập dữ liệu đã xây dựng. Dưới đây là kết quả thu được:
Dự đoán giới tính:
Từ kết quả kiểm chứng với chỉ số đánh giá là độ chính xác phân lớp của mô
hình dự đoán giới tính trên bộ dữ liệu đã xây dựng tôi nhận được ở mức tương đương
89.6551724138%. Tôi sẽ xem xét với độ đo khác như Precision và Recall, F1-Scrore từ
kết quả dưới đây:
Hình 4.10: Kết quả kiểm chứng mô hình dự đoán giới tính với dữ liệu đã xây dựng
Dự đoán tuổi:
60
Từ kết quả kiểm chứng với chỉ số đánh giá, tôi nhận được độ chính xác phân
loại của mô hình dự đoán độ tuổi trên bộ dữ liệu đã xây dựng ở mức tương đương
90.00%. Dưới đây là các độ đo khác như Precision và Recall, F1-Scrore từ kết quả thu
được:
Hình 4.11: Kết quả kiểm chứng mô hình với dự đoán tuổi với dữ liệu đã xây dựng
4.4. Cài đặt triển khai thử nghiệm.
Hệ thống áp dụng kết quả đạt được của quá trình dự đoán độ tuổi và giới tính
vào ứng dụng hỗ trợ công tác tuyển dụng.
Sau khi truy cập, hệ thống sẽ hiển thị màn hình sau:
Hình 4.12: Giao diện hệ thống
61
Nhà tuyển dụng thực hiện nhập thông tin ứng viên đã nhập trên CV ứng tuyển
với thông tin:
- Họ và tên ứng viên đã tự khai (bắt buộc và phải là ký tự chữ).
- Năm sinh ứng viên đã tự khai (bắt buộc, thuộc ký tự số và không được lớn
hơn năm hiện tại).
- Giới tính ứng viên đã tự khai (bắt buộc).
Hình 4.13: Giao diện nhập thông tin ứng viên
Sau đó nhà tuyển dụng thực hiện chọn ảnh của ứng viên ở vị trí sau:
Hình 4.14: Giao diện chọn ảnh ứng viên
Sau khi thực hiện đầy đủ thông tin của ứng viên theo yêu cầu. Nhà tuyển dụng
chọn nút “Dự đoán” ở góc dưới bên phải màn hình.
62
Hình 4.15: Giao diện khi đã nhập xong thông tin
Sau khi thực hiện thực hiện dự đoán hình ảnh và dữ liệu nhà tuyển dụng nhập
vào hệ thống tiến hành xử lý và trả về kết quả dự đoán với 3 trường hợp sau:
Không đủ tuổi lao động - Cần phải xem xét lại:
Hình 4.16: Giao diện kết quả nghi vấn dưới độ tuổi lao động
63
Trong độ tuổi lao động:
Hình 4.17: Giao diện kết quả trong độ tuổi lao động
Nghi vấn quá tuổi lao động - Cần phải xem xét lại:
Hình 4.18: Giao diện kết quả nghi vấn quá độ tuổi lao động
64
KẾT LUẬN
Trong nghiên cứu này, tôi đã giới thiệu một mô hình học sâu sử dụng mạng
CNN để nhận dạng độ tuổi và giới tính của con người dựa trên hình ảnh khuôn mặt.
Mô hình mới này cho phép sử dụng một số lượng nhỏ các tham số và đạt hiệu suất của
dự đoán giới tính với 86.6667 % bộ dữ liệu công khai Adience và 89.6551% với bộ dữ
liệu thu thập, còn đối với dự đoán độ tuổi 92.3077% bộ dữ liệu công khai Adience và
90.000% với bộ dữ liệu thu thập.
Trong tương lai gần, tôi đang có kế hoạch để nâng cao độ chính xác của mô
hình, đặc biệt là trong việc ước lượng độ tuổi và giới tính. Ngoài ra, tôi cũng sẽ áp
dụng mô hình của mình cho các bài toán hỗ trợ tuyển dụng một cách rộng rãi, nhanh
chống và chính xác hơn.
Những kết quả hoạt động chính của đề án
Trong nghiên cứu này, tôi đã tìm hiểu và áp dụng phương pháp học sâu để dự
đoán độ tuổi và giới tính. Mục tiêu của tôi là áp dụng các kỹ thuật này để giải quyết bài
toán hỗ trợ công tác tuyển dụng thông qua việc dự đoán độ tuổi và giới tính của ứng
viên. Tiếp theo, tôi đã tiến hành tìm hiểu và nghiên cứu một mô hình mạng nơ ron tích
chập, một mô hình phổ biến trong lĩnh vực học sâu. Tôi đã khám phá các thành phần,
kiến trúc mô hình và chức năng của mạng nơ ron tích chập, cũng như ứng dụng thực tế
của nó. Sau đó, tôi đã xây dựng mô hình mạng nơ ron tích chập để dự đoán độ tuổi và
giới tính của con người dựa trên hình ảnh. Quá trình này bao gồm việc huấn luyện mô
hình, điều chỉnh các tham số và áp dụng các kỹ thuật để đạt được độ chính xác cao
trong việc dự đoán độ tuổi và giới tính. Tuy nhiên, đề án còn một số vấn đề tiếp tục
phát triển.
65
Về ứng dụng
Xây dựng được một ứng dụng web hỗ trợ công tác tuyển dụng.
Hạn chế đề án
Vẫn còn hạn chế về độ chính xác khi các hình ảnh có thể gặp những trường hợp
phức tạp, đặc biệt là khi đối tượng trong hình ảnh không tuân thủ theo những đặc điểm
phổ biến về độ tuổi và giới tính, ví dụ: nữ để tóc ngắn.
Đề án mới chỉ dừng ở mức xây dựng mô hình dự đoán tuổi và giới tính hỗ trợ
trong công tác tuyển dụng về mặt độ tuổi và giới tính, chưa hỗ trợ chuyên sâu như phân
tích đánh giá vị trí công việc.
Đề án không tránh khỏi các sai sót trong báo cáo này, kính mong được sự thông
cảm của quý Thầy Cô và các Nhà khoa học vì một số hạn chế về thời gian, kinh
nghiệm và ngôn ngữ.
Định hướng phát triển
Hướng nghiên cứu tiếp theo của đề án sẽ tập trung vào phần xây dựng mô hình
mạng phân loại độ tuổi và giới tính với độ chính xác cao hơn, có thể sử dụng mô hình
áp dụng nhiều tầng tích chập, phân tích được các đặc trưng chi tiết hơn. Dự đoán cùng
lúc nhiều người cho ra kết quả chính xác hơn kể cả những trường hợp đặt biệt về hình
dạng.
66
DANH MỤC TÀI LIỆU THAM KHẢO
Tiếng Việt
[1] Phạm Thị Út Hạnh, “Công tác tuyển dụng nhân lực tại công ty cổ phần nhiệt
điện Phả Lại”.
[2] Ma Thị Hồng Thu, Phùng Thị Thu Trang, “Một mô hình Deep Learning nhẹ
cho bài toán nhận dạng tuổi và giới tính sử dụng mạng CNN”.
[3] Theo quy định tại “Khoản 1 Điều 3 Bộ luật lao động năm 2012”.
Tiếng Anh
[4] A. Krizhevsky, I. Sutskever, and G. E. Hinton (2012), “Imagenet classification
with deep convolutional neural networks”.
[5] L. Zhu, K. Wang, L. Lin, and L. Zhang (2016), “Learning a lightweight
deep convolutional network for joint age and gender recognition”.
[6] E. Eidinger, R. Enbar, and T. Hassner (2014), “Age and gender estimation of
[7] G.
unfiltered faces”.
Levi and T. Hassner (2015), “Age and gender
[8] N.
classification using convolutional neural networks”.
Ramanathan and R. Chellappa (2006), “Modeling
age progression in young faces”.
[9] I. Ullah, M. Hussain, G. Muhammad, H. Aboalsamh, G. Bebis, and A. M.
Mirza (2012), “Gender recognition from face images with local wld
descriptor”.
[10] X. Zhuang, X. Zhou, M. Hasegawa-Johnson, and T. Huang (2008), “Face age
estimation using patch-based hidden markov model supervectors”.