MẪU ĐỒ ÁN KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VIỆT HÀN ĐỒ ÁN CƠ SỞ 4 ĐỀ TÀI PHẦN MỀM NHẬN DẠNG TRÁI CÂY DỰA TRÊN NỀN TẢNG DEEP LEARNING LỜI CẢM ƠN NHẬN XÉT (Của cơ[.]
Trang 2LỜI CẢM ƠN
NHẬN XÉT
(Của cơ quan thực tập, nếu có) Bold, size 16, xếp sau trang Lời cảm ơn
size 13………
………
………
………
………
………
Là sinh viên năm 3 của Trường Đại Học Công Nghệ Thông Tin và Truyền Thông Việt – Hàn Chúng em đã ý thức được việc phát triển bản thân, những kỹ năng
và điều thiết yếu trong quá trình làm đồ án Tiếp thu và hoàn thiện những kỹ năng còn thiếu trong quá trình đang học tập tại trường Để có thể tạo ra những sản phẩm bóa cáo hoàn thiện trong môn đồ án 4 này
Nhóm đồ án chúng em xin gửi lời cảm ơn đến thầy Nguyễn Hà Huy Cường – giảng viên hướng dẫn đồ án cơ sở 4 đã trang bị cho em những kiến thức, kỹ năng cơ bản cần có để hoàn thành đề tài này
Tuy nhiên trong quá trình nghiêm cứu đề tài, do kiến thức chuyên ngành còn hạn chế nên nhóm chúng em vẫn còn nhiều thiếu sót khi tìm hiểu, đánh giá và trình bày về đề tài Rất mong nhận được sự quan tấm và góp ý của thầy/cô bộ môn để tài của
em được đầy đủ và hoàn chỉnh hơn
Xin chân thành cảm ơn!
Trang 31.2 Tổng quan kiến trúc của một hệ thống nhận dạng mẫu 21.3 Hạn chế tồn tại của bài toán nhận dạng 3
1.4.1 Giới thiệu ngôn ngữ lập trình Python 4
1.4.3 Giới thiệu về thư viện Tensorflow 61.4.4 Môi trường lập trình Visual Studio Code 7
2.1.1 Một số phương pháp xác định khuôn mặt người 8
2.2.1 Kỹ thuật phát hiện Haar Cascade Classifier 10
2.2.2.6 Cascade of boosting classifiers: 14
2.4.1 Mô hình mạng neural trong huấn luyện 212.5 Tập dữ liệu hình ảnh trái cây tiền đề 22
Trang 4Chương 3 Phân tích và triển khai xây dựng 25
3.3 Triển khai cài đặt, mô phỏng hệ thống 27
3.3.1.2 Cài đặt các thư viện phụ thuộc cần thiết 28
Trang 5DANH MỤC HÌNH
Trang
Hình 1: Các bước xử lý chính trong bài toán nhận dạng 3
Hình 2: Ngôn ngữ lập trình Python 4
Hình 3: Thư viện OpenCV 5
Hình 4: Thư viện Tensorflow 6
Hình 5: Môi trường lập trình Visual Studio Code 7
Hình 6: Phát hiện vật thể 8
Hình 7 Đặt trưng Haar-like cơ bản 12
Hình 8 Cách tính Integral Image của ảnh 13
Hình 9 Cascade of classifiers 14
Hình 10 Cascade of boosting classifiers 14
Hình 11: Mô hình CNN - Deep Learning 15
Hình 12 Lớp convolutional neural networks 16
Hình 13: Lớp Convolutional layers 16
Hình 14: Lớp Pooling layers 17
Hình 15: Lớp fully connected layers 18
Hình 16 Lớp loss layers 18
Hình 17 Lớp recurrent netral network 19
Hình 18: Lớp Deep belief network 19
Hình 19 Mô hình CNN khi sử dụng thư viện Tensorflow 20
Hình 20 Cấu trúc mạng neural trong mô hình và mô phỏng 21
Hình 21 Sơ đồ ngữ cảnh hệ thống 25
Hình 22 Huấn luyện mô hình CNN sử dụng tập dữ liệu trái cây 25
Hình 23 Sơ đồ hệ thống phát hiện trái cây và lưu vào tập dữ liệu 26
Hình 24 Sơ đồ hệ thống huấn luyện mô hình 26
Hình 25 Sơ đồ hệ thống nhận dạng trái cây 26
Hình 26 Sơ đồ tổng thể của hệ thống nhận dạng trái cây 27
Hình 27 Tải và cài đặt môi trường Python 27
Hình 28 Tạo môi trường Python trên Pycharm 28
Hình 29 Kiểm tra OpenCV có được hỗ trợ trong Python 28
Hình 30 Kiểm tra quá trình import thư viện 28
Hình 31 Cài đặt thư viện Numpy 29
Hình 32 Cài đặt thư viện Pillow 29
Hình 33 Cài đặt framwork Flask 29
Hình 34 Cài đặt thư viện Tensorflow 29
Hình 35 Sơ đồ thư mục đồ án 30
Hình 36 Tập dữ liệu của 131 loại trái cây được thu thập trong đồ án 30
Hình 37 Hình ảnh của 1 loại trái cây cụ thể trong tập dữ liệu 30
Hình 38 Hàm tạo 2 biểu đồ đánh giá quá trình huấn luyện 31
Hình 39 Hàm chuyển đổi màu RGB sang HSV và xám 31
Trang 6Hình 40 Hàm thay đổi màu sắc và độ bão hòa theo điều kiện ánh sáng 31
Hình 41 Lớp network xây dựng mô hình từ hình ảnh 32
Hình 42 Hàm train_and_evaluate_model 33
Hình 43 Hàm đưa tới đường dẫn chính của trang website 33
Hình 44 Thực hiện việc lưu hình ảnh từ website gửi về 33
Hình 45 Thực hiện công việc so sánh và gửi trả kết quả về website 34
Hình 46 Quá trình huấn luyện của tập dữ liệu 34
Hình 47 Kết thúc của mỗi vòng lặp huấn luyện 35
Hình 48 Mô hình độ chính xác (trái) và mô hình độ hao hụt của quá trình huấn luyện 35
Hình 49 Trang website chính của hệ thống nhận dạng 35
Hình 50 Dưa Lê với độ chính xác là 99,999905% 36
Hình 51 Trái Thơm với độ chính xác 100% 36
Hình 52 Quả Dưa Hấu với độ chính xác là 100% 36
Hình 53 Trái Cà Chua với độ chính xác là 100% 36
Trang 79 Local Binary Patterns LBP
11 Local Binary Patterns Histogram LBPH
Trang 8Phần I Mở đầu
1 Tổng quan
Dưới công cuộc phát triển vượt trội cả cuộc cách mạng 4.0 cùng với cácvấn đề liên quan như Trí Tuệ Nhân Tạo, Điện Toán Đám Mây, Internet VạnVật và BigData Hiện nay Trí Tuệ Nhân Tạo đang là một xu hướng có tiềmnăng trong lĩnh vực công nghệ thông tin và là yếu tố then chốt với vô số ứngdụng trong mọi khía cạnh của cuộc sống như Smart Home, xe tự hành, hệthống nhận dạng
Hiện nay, do sự phổ biến theo nhu cầu của con người đã làm cho lượngthông tin thu được bằng hình ảnh ngày càng tăng Theo đó lĩnh vực xử lý ảnhcũng được chú trọng và phát triển, ứng dụng rộng rãi trong đời sống xã hộihiện đại Không chỉ dừng lại ở việc chỉnh sửa, tăng chất lượng hình ảnh màvới công nghệ xử lý ảnh hiện nay giúp con người có thể giải quyết các bàitoán nhận dạng chữ viết, nhận dạng vân tay, nhận dạng thực phẩm an toàn
Nhận dạng thực phẩm là một mô hình mới được triển khai gần đây Cóthể được ứng dụng trong công nghiệp, nông nghiệp và dịch vụ Khi áp dụng
hệ thống vào đời sống, việc lựa chọn thực phẩm sạch, an toàn được cải thiệnnhư nhận biết được trái cây đang trong tình trạng như thế nào, đánh giá tìnhtrạng thực phẩm dựa trên bề mặt của nó hoặc với ứng dụng trong mô hìnhnông nghiệp, hệ thống nhận dạng có thể dự đoán những trái xoài hay tráithơm khi nào có thể thu hoạch trên diện rộng
Và được tích lũy kinh nghiệp từ hệ thống nhận dạng khuôn mặt ở đồ án
cơ sở 3 và bài báo kỹ thuật tự động chấm công trong dạy học thông minhdựa trên phương pháp Machine Learning ở Hội thảo CITA 2020 Chính vì thế,
nhờ những yếu tố trên, nhóm đồ án đưa ra mô hình hệ thống nhận dạng trái
cây dựa trên nền tảng Deep Learning.
2 Mục đích
- Xây dựng Mô hình hệ thống nhận dạng trái cây
- Tìm hiểu về mô hình mạng neural tích chập(CNN)
- Tìm hiểu thư viện của Python trong việc tiền xử lý hình ảnh
- Tìm hiểu về Deep Learning và Machine Learning
3 Phương pháp
a) Đối tượng:
- Các phương pháp, thuật toán phục vụ cho việc phát hiện và nhận dạngkhuôn mặt người trên ảnh
- Bộ thư viện xử lý ảnh OpenCv
- CSDL tự tạo bằng cách thu thập dữ liệu sinh viên (khuôn mặt)
Trang 9b) Phạm vi nghiên cứu:
- Tập trung tìm hiểu nhận dạng khuôn mặt (Face Recognition)
- Xử lí ảnh khuôn mặt và huấn luyện để nhận diện
- Nhận dạng khuôn mặt với webcam và điểm danh
Phần II Nội dung
Chương 1 Nghiên cứu tổng quan
1 Các phương pháp
1.1 Bài toán nhận dạng mẫu
Nhận dạng mẫu là một ngành thuộc lĩnh vực học máy (machine learning).Nói cách khác, nó có thể được xem là việc “cần thực hiện một tác động vào dữliệu thô mà tác động cụ thể là gì sẽ tùy thuộc vào loại dữ liệu đó” Nhận dạngmẫu nhằm mục đích phân loại dữ liệu dựa trên: kiến thức tiên nghiệm hoặc dựavào thông tin thống kê được trích rút từ các mẫu có sẵn Các mẫu cần đượcphân loại thường được biễu diễn thành các nhóm của các dữ liệu đo đạc hayquan sát được, mỗi nhóm là một điểm ở trong một không gian đa chiều phùhợp Đó là không gian của các đặc tính để dựa vào đó ta có thể phân loại
Việc phân loại thường dựa vào sự có sẵn của một tập các mẫu mà đãđược phân loại sẵn Tập các mẫu này được gọi là tập huấn luyện và chiến lượchọc nhằm phân loại mẫu vào một trong các lớp có sẵn được gọi là học có giámsát Việc học cũng có thể là không có giám sát, theo nghĩa là hệ thống khôngđược cung cấp các mẫu được đánh nhã tiên nghiệm mà nó được tự đưa ra cáclớp để phân loại dựa vào tính ổn định trong thông kê của các mẫu
Các ứng dụng phổ biến là nhận dạng tiếng nói tự động, phân loại văn bảnthành nhiều loại các nhau, nhận dạng tự động các mã bưu điện viết tay trên cácbao thư, hay hệ thông nhận dạng danh tính dựa vào mặt người Cả ba ví dụ cuốitạo thành lĩnh vực con phân tích ảnh của nhận dạng mẫu với đầu vào là các ảnhsố
1.2 Tổng quan kiến trúc của một hệ thống nhận dạng mẫu
Cùng với sự phát triển của kinh tế xã với ngành kỹ thuật hiện nay Đòi hỏi
sự quản lý và xử lý thông tin chính xác mà nó vượt quá sức của con người Vì vậychúng ta cần có máy móc hoặc giảm tải hoặc thay thế công việc nặng nhọc, đòihỏi sự chính xác cao và tiết kiệm nhân lực sức người Việc giúp máy móc nhậndạng (thu thập, phân loại thông tin) như con người sẽ giúp máy móc hoạt độnghiệu quả như con người và độ chính xác cao hơn nhiều
Một số ứng dụng của bài toán nhận dạng
Nhận dạng giọng nói: ứng dụng này được tích hợp trên nhiều sản phẩm,bạn sẽ điều khiển các thiết bị qua giọng nói của mình thay vì phải thao tác trực
Trang 10tiếp bằng tay, như trong mô hình nhà thông minh, trên điện thoại, … Ví dụ: ứngdụng Jibbigo trên điện thoại di động Ứng dụng này có thể dịch được tiếng nóicủa người sử dụng với 8 ngôn ngữ khác nhau như tiếng Anh, Pháp, Đức, Nhật,Hàn Quốc, Tây Ban Nha, Trung Quốc.
Trang 11Nhận dạng dấu vân tay: thuộc ngành sinh trắc học, ở Việt Nam đã được sử dụngtrong việc chấm công, điểm danh và làm khóa an toàn cho các loại cửa sắt, máytính xách tay, … Nó tạo sự tiện dụng và tính an toàn.
Nhận dạng khuôn mặt: thuộc ngành sinh trắc học Tương tự như ở nhậndạng dấu vân tay Sử dụng một mẫu huấn luyện cho trước để có thể so sánh vớikhuôn mặt của người dùng Hiện nay đang được phát triển mạnh mẽ trong việcquản lý công dân, giám sát và kiểm tra thông qua camera, giúp nhà nước quản lý
dễ dàng hơn
Thông thường, một bài toán nhận dạng thường có các bước xử lý sau:
1.3 Hạn chế tồn tại của bài toán nhận dạng
Bài toán nhận dạng là bài toán đã được nghiên cứu từ những năm 70 Tuynhiên, đây là bài toán khó nên những nghiên cứu hiện tại vẫn chưa được kết quảmong muốn Chính vì thế, vấn đề này vẫn đang được nhiều nhóm nghiên cứutrên thế giới quan tâm Khó khăn của nhận dạng có thể kể đến như sau:
a) Tư thế chụp, góc chụp: ảnh chụp có thể đánh giá chất lượng rất nhiều bởi
vì góc chụp giữa camera và vật thể không chính xác hoàn toàn Ở cả bướctiền xử lý tập dữ liệu và nhận dạng Chẳng hạn như: chụp thẳng, chụpchéo bên trái độ hay chụp chéo bên phải 45 độ, chụp từ trên xuống haychụp từ dưới lên, … Với các tư thế khác nhau, các thành phần trên khuônmặt như mắt, mũi, miệng có thể bị khuất môt phần hoặc thậm khuấthoàn toàn
b) Sự xuất hiện hoặc mất một số thành phần của vật thể: các đặc trưng củavật thể có thể xuất hiện hoặc không Vấn đề này làm bài toán trở nên khókhăn hơn nhiều
c) Sự che khuất: Vật thể có thể bị che khuất bởi các đối tượng khác hoặc vậtthể khác
d) Hướng của ảnh: Các ảnh khuôn mặt có thể biến đổi rất nhiều với các gócquay khác nhau của trục camera Chẳng hạn chụp với trục máy ảnhnghiêng làm cho vật thể bị nghiêng so với trục
e) Điều kiện của ảnh: Ảnh được chup trong các điều kiện khác nhau về:chiếu sang, tính chất camera, ảnh có chất lượng thấp so với chất lượng
Hình 1: Các bước xử lý chính trong bài toán nhận dạng
Trang 12vật thể Việc nhận dạng thay đổi theo thời gian còn là một vấn đề khókhăn, ngay cả đối với khả năng nhận dạng của con người.
Trang 131.4 Công nghệ thực hiện
Để giải quyết bài toán phát hiện trái cây sử dụng thư viện OpenCV, chúng
ta có thể sử dụng các ngôn ngữ lập trình như: NET C#, IronPython, Java, C++, …
Trong đồ án này ngôn ngữ lập trình được sử dụng là Python, được viếttrên phần mềm Pycharm làm giao diện lập trình và sử dụng môi trường Python3.8 Trong hệ thống nhận diện trái cây, nhóm đồ án sử dụng nhiều thư viện củapython cụ thể như: Numpy, Tensorflow, Keras, Pillow, OpenCV, …
1.4.1 Giới thiệu ngôn ngữ lập trình Python
Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đanăng, do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991 Pythonđược thiết kế với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ Python là ngônngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới họclập trình Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với sốlần gõ phím tối thiểu
Python hoàn toàn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ tự động;
do vậy nó tương tự như Perl, Ruby, Scheme, Smalltalk, và Tcl Python được pháttriển trong một dự án mã mở, do tổ chức phi lợi nhuận Python SoftwareFoundation quản lý
Ban đầu, Python được phát triển để chạy trên nền Unix Nhưng rồi theothời gian, Python dần mở rộng sang mọi hệ điều hành từ MS-DOS đến Mac OS,OS/2, Windows, Linux và các hệ điều hành khác thuộc họ Unix Mặc dù sự pháttriển của Python có sự đóng góp của rất nhiều cá nhân, nhưng Guido vanRossum hiện nay vẫn là tác giả chủ yếu của Python Ông giữ vai trò chủ chốttrong việc quyết định hướng phát triển của Python
Trang 14Hình 2: Ngôn ngữ lập trình Python
Trang 151.4.2 Giới thiệu về thư viện OpenCV
OpenCv (Open Source Computer Vision) là một thư viện mã nguồn mở vềthị giác máy với hơn 500 hàm và hơn 2500 các thuật toán đã được tối ưu về XLA,
và các vấn đề liên quan tới thị giác máy OpenCv được thiết kế một cách tối ưu,
sử dụng tối đa mạnh của các dòng chip đa lõi… để thực hiện các phép tính toántrong thời gian thực, nghĩa là tốc độ đáp ứng của nó thể đủ nhanh cho các ứngdụng thông thường
OpenCv là thư viện được thiết kế để chạy trên nhiều nền tảng khác nhau(cross-platform), nghĩa là nó có thể chạy trên hệ điều hành Window, Linux, Mac,iOS… Việc sử dụng thư viện OpenCv tuân theo các quy định về sử dụng phầnmềm mã nguồn mở BSD do đó bạn có thể sử dụng thư viện này một cách miễnphí cho các mục đích phi thương mại lẫn thương mại
Dự án về OpenCv được khởi động từ những năm 1999, đến năm 2000 nóđược giới thiệu trong một hội nghị của IEEE về các vấn đề trong thị giác máy vànhận dạng, tuy nhiên bản OpenCV 1.0 mãi tới tận năm 2006 mới chính thứcđược công bố và năm 2008 bản 1.1 (prerelease) mới được ra đời Tháng 10 năm
2009, bản OpenCV thế hệ thứ hai ra đời (thường gọi là phiên bản 2.x), phiên bảnnày có giao diện của C++ (khác với phiên bản trước có giao diện của C) và cónhiều điểm khác biệt so với phiên bản thứ nhất
Thư viện OpenCV ban đầu được sự hỗ trợ từ Intel, sau đó được hỗ trợbởi Willow Garage, một phòng thí nghiệm chuyên nghiên cứu về công nghệrobot Cho đến nay, OpenCV vẫn là thư viện mở, được phát triển bởi nguồn quỹkhông lợi nhuận (none-profit foundation) và được sự hưởng ứng rất lớn củacộng đồng
Hình 3: Thư viện OpenCV
Trang 161.4.3 Giới thiệu về thư viện Tensorflow
Trong đồ án này, với mục đích triển khai đào tạo và thử nghiệm network.Nhóm đồ án đã sử dụng thư viện Tensorflow Đây là mã nguồn mở dành cho họcmáy do Google tạo ra để tính toán số sử dụng biểu đồ luồng dữ liệu Các núttrong biểu đồ đại diện cho các phép toán, trong khi các cạnh của đồ thị đại diệncho các mảng dữ liệu nhiều chiều được gọi là tensors Các thành phần chínhtrong Tensorflow là máy khách, sử dụng giao diện Session để giao tiếp với máychủ và một hoặc nhiều quy trình công nhân, với mỗi quy trình công nhận chịunhiều trách nhiệm phân xử quyền truy cập vào môt hoặc nhiều thiết bị tính toán
để thực hiện các nút đồ thị trên các thiết bị đó
Tensorflow cung cấp một số tính năng mạnh mẽ như: nó cho phép ánh xạtính toán với nhiều máy, không giống như hầu hết các framework tương tựkhác; nó đã được tích hợp hỗ trợ tính toán gradient tự động; nó có thể thực thimột phần các đồ thị con của toàn bộ đồ thị và nó có thể thêm các ràng buộc chocác thiết bị, như đặt các nút trên một loại thiết bị nhất định, đảm bảo rằng haihoặc nhiều đối tượng được đặt trong cùng một không gian, v.v Bắt đầu vớiphiên bản 2.0, TensorFlow bao gồm các tính năng của khung Keras Keras cungcấp các trình bao bọc cho các hoạt động được triển khai trong TensorFlow, đơngiản hóa đáng kể các cuộc gọi và giảm lượng mã tổng thể cần thiết để đào tạo vàkiểm tra một mô hình
TensorFlow được sử dụng trong một số dự án, chẳng hạn như Mô hìnhphân loại hình ảnh ban đầu Dự án này đã giới thiệu một mạng hiện đại để phânloại và phát hiện trong Thử thách nhận dạng hình ảnh quy mô lớn ImageNetnăm 2014 Trong dự án này, việc sử dụng tài nguyên máy tính được cải thiệnbằng cách điều chỉnh chiều rộng và chiều sâu của mạng trong khi vẫn giữ ngânsách tính toán không đổi Một dự án khác sử dụng khung công tác TensorFlow làDeepSpeech, được phát triển bởi Mozilla Kiến trúc là một hệ thống nhận dạnghiện đại được phát triển bằng cách sử dụng học sâu end-to-end Đơn giản hơn làcác kiến trúc khác và không cần các thành phần được thiết kế thủ công cho tiếng
ồn xung quanh, độ vang hoặc sự biến đổi của loa Chúng tôi sẽ trình bày cácphương pháp và kiểu dữ liệu được sử dụng quan trọng nhất từ TensorFlow cùngvới mô tả ngắn gọn cho từng phương pháp đó
Trang 17Hình 4: Thư viện Tensorflow
Trang 181.4.4 Môi trường lập trình Visual Studio Code
Visual Studio Code là một trình biên tập mã được phát triển bởi Microsoftdành cho Windows, Linux và macOS Nó hỗ trợ chức năng debug, đi kèm với Git,
có syntax highlighting, tự hoàn thành mã thông minh, snippets, và cải tiến mãnguồn Nó cũng cho phép tùy chỉnh, do đó, người dùng có thể thay đổi theme,phím tắt, và cá tùy chọn khác Nó miễn phí và là phần mềm mã nguồn mở, mặc
dù gói tải xuống chính thì là có giấy phép
Visual Studio Code được dựa trên Electron, một nền tảng được sử dụng đểtriển khai các ứng dụng Node.js máy tính cá nhân chạy trên động cơ bố trí Blink.Mặc dù nó sử dụng nền tảng Electron nhưng phần mềm này không phải là mộtbản khác của Atom, nó thực ra được dựa trên trình biên tập của Visual StudioOnline (tên mã là "Monaco")
Hình 5: Môi trường lập trình Visual Studio Code
Trang 19Chương 2 Tổng quan về Nhận Dạng Trái Cây
2 Hệ thống phát hiện đối tượng
2.1 Định nghĩa
Phát hiện đối tượng (ObjectDetection) là một công nghệ máy tính liênquan đến thị giác máy tính và xử lý hình ảnh nhằm phát hiện các trường hợp đốitượng được nghiên cứu kỹ lưỡng bao gồm phát hiện khuôn mặt và phát hiệnngười đi bộ Phát hiện đối tượng có ứng dụng trong nhiều lĩnh vực của thị giácmáy tính, bao gồm truy xuất hình ảnh và giám sát video
Phát hiện đối tượng được sử dụng rộng rãi trong các tác vụ thị giác máytính như chú thích hình ảnh, nhận dạng hoạt động, phát hiện khuôn mặt, nhậndạng khuôn mặt, đồng phân đoạn đối tượng video Cũng như được sử dụng đểtheo dõi đối tượng, ví dụ theo dõi một quả bóng trong trận đấu bóng đá, theodõi chuyển động của gậy cricket hoặc theo dõi một người trong video
Hình 6: Phát hiện vật thể
Trang 202.1.1 Một số phương pháp xác định khuôn mặt người
Các phương pháp phát hiện đối tượng thường rơi vào cách tiếp cận dựa trênmáy học hoặc tiếp cận dựa trên học sâu Đối với các phương pháp tiếp cận Họcmáy, trước tiên cần xác định các tính năng bằng một trong các phương pháp bêndưới, sau đó sử dụng kỹ thuật như support vector machine(SVM) để thực hiệnphân loại Mặt khác, các kỹ thuật học sâu có thể thực hiện phát hiện đối tượngend-to-end mà không cần xác định cụ thể các tĩnh năng và thường dựa trênmạng nơron tích chập (CNN)
Các phương pháp tiếp cận máy học:
o Khung phát hiện đối tượng Viola – Jones dựa trên các tính năngHaar
o Chuyển đổi tính năng bất biến tỷ lệ
o Biểu đồ của các tính năng gradient có định hướng (HOG)
Phương pháp học sâu:
o Đề xuất khu vực (R-CNN, Fast R-CNN faster, …)
o Máy dò MultiBox Single Shot (SSD)
o Mạng nơron làm tinh chỉnh một lần để phát hiện đối tượng
o Retina – Net
2.1.2 Phương pháp áp dụng trong đồ án
Để xây dựng một hệ thống nhận dạng mặt, cũng không hề đơn giản, bướcđầu tiên cần thực hiện là face detection, tức là phát hiện phần ảnh mặt trong dữliệu input (CSDL ảnh, video …) và cắt lấy phần ảnh mặt để thực hiện nhận dạng(face cropping), bước thứ hai là tiền xử lý ảnh (preprocessing) bao gồm các bướccăn chỉnh ảnh (face image alignment) và chuẩn hóa ánh sáng (illuminationnormalization), tiếp đến là bước trích chọn đặc điểm (feature extraction), ởbước này một phương pháp trích chọn đặc điểm nào đó (mẫu nhị phân cục bộ –Local Binary Pattern – LBP, Gabor wavelets, …) sẽ được sử dụng với ảnh mặt đểtrích xuất các thông tin đặc trưng cho ảnh, kết quả là mỗi ảnh sẽ được biểu diễndưới dạng một vector đặc điểm (feature vector), bước tiếp theo là bước nhậndạng (recognition) hay phân lớp (classification), tức là xác định danh tính(identity) hay nhãn (label) của ảnh – đó là ảnh của ai
Ở bước classification, thường thì phương pháp k-láng giềng gần nhất nearest neighbor: kNN) sẽ được sử dụng, thực tế cho thấy việc dùng SVM(Support Vector Machine) không mang lại hiệu quả cao hơn mà còn chậm hơn
(k-Dữ liệu cho một hệ thống nhận dạng mặt được chia làm 3 tập: tập huấn luyện(training set), tập tham chiếu (reference set hay gallery set) và tập để nhận dạng(probe set hay query set, đôi khi còn gọi là test set) Trong nhiều hệ thống, tậptraining trùng với tập reference
Tập training gồm các ảnh được dùng để huấn luyện (hay học-learning), thôngthường tập này được dùng để sinh ra một không gian con (projection subspace)
là một ma trận và phương pháp hay được sử dụng là PCA (Principal ComponentAnalysis), WPCA (Whitened PCA), LDA (Linear Discriminant Analysis), KPCA
Trang 21(Kernel PCA) Tập reference gồm các ảnh đã biết danh tính được chiếu(projected) vào không gian con ở bước training
Bước training nhằm 2 mục đích: giảm số chiều (dimension reduction) củacác vector đặc điểm (feature vector) vì các vector này thường có độ dài khá lớn(vài nghìn tới vài trăm nghìn) nên nếu để nguyên thì việc tính toán sẽ rất rất lâu,thứ hai là làm tăng tính phân biệt (discriminative) giữa các ảnh khác lớp (địnhdanh khác nhau), ngoài ra có thể làm giảm tính phân biệt giữa các ảnh thuộc vềmột lớp (tùy theo phương pháp, ví dụ như Linear Discriminant Analysis LDA- còngọi là Fisher Linear Discriminant Analysis-Fisherface là một phương pháp làmviệc với tập training mà mỗi đối tượng có nhiều ảnh mặt ở các điều kiện khácnhau)
Sau khi thực hiện chiếu tập reference vào không gian con, hệ thống lưulại kết quả là một ma trận với mỗi cột của ma trận là một vector tương ứng vớiảnh (định danh đã biết) để thực hiện nhận dạng (hay phân lớp) Nhận dạng (hayphân lớp) được thực hiện với tập các ảnh probe, sau khi tiền xử lý xong, mỗi ảnh
sẽ được áp dụng phương pháp trích chọn đặc điểm (như với các ảnh thuộc tậptraining và reference) và được chiếu vào không gian con Tiếp đến việc phân lớp
sẽ dựa trên phương pháp k-NN, định danh của một ảnh cần xác định sẽ đượcgán là định danh của ảnh có khoảng cách (distance) gần với nó nhất Ở đây cầnlưu ý là mỗi ảnh là một vector nên có thể dùng khái niệm hàm khoảng cách giữahai vector để đo sự khác biệt giữa các ảnh
2.2 Tổng quan về kỹ thuật phát hiện
2.2.1 Kỹ thuật phát hiện Haar Cascade Classifier
2.2.1.1 Tổng quan về Adaboost
Học theo adaboost là một cách trong hướng tiếp cận dựa trên diện mạo,Viola và AdaBoost kết hợp cascade để xác định khuôn mặt người [1] với các đặctrưng dạng Haar wavelet-like Tốc độ xử lý khá nhanh và tỷ lệ chính xác hơn 80%trên ảnh xám
2.2.1.2 Tiếp cận Boosting
Về lịch sử, boosting bắt nguồn từ câu nói nổi tiền được đưa ra bởi Kearnsvào đầu năm 1989: “Liệu có thể tạo ra một strong classifier từ một tệp các bộphân loại yếu?” Năm 1990, Robert Schapire và Simard kiểm nghiệm trong cácchương trình nhận dạng (OCR application) Freund đã tiếp tục các nghiên cứucủa Schapire và đến năm 1995 thì ông cùng với Schapire phát triển boostingthành adaboost
Như vậy, nguyên lý cơ bản của boosting là sự kết hợp các weak classifiers thànhmột strong classifiers Trong đó, weak classifiers là các bộ phân loại đơn giản chỉ
Trang 22cần có độ chính xác trên 50% Bằng cách này, chúng ta nói bộ phân loại đã được
“boost”
Để hiểu cách hoạt động của thuật toán boosting, ta xét một bài toán phânloại 2 lớp (mẫu cần nhận dạng chỉ thuộc một trong hai lớp) với D là tập huấnluyện gồm có n mẫu Trước tiên, chúng ta sẽ chọn ngẫu nhiên ra n1 mẫu từ tập
D (n1<n) để tạo tập D1 Sau đó, chúng ta sẽ xây dựng weak classifier đầu tiên C1
từ tập D1 Tiếp theo, chúng ta xây dựng tập D2 để huấn luyện bộ phân loại C2.D2 sẽ được xây dựng sao cho một nửa số mẫu của nó được phân loại đúng bởiC1 và nửa còn lại bị phân loại sai bởi C1 Bằng cách này, D2 chứa đựng nhữngthông tin bổ sung cho C1 Bây giờ chúng ta sẽ xây huấn luyện C2 từ D2
Tiếp theo, chúng ta sẽ xây dựng tập D3 từ những mẫu không được phânloại tốt bởi sự kết hợp giữa C1 và C2: những mẫu còn lại trong D mà C1 và C2cho kết quả khác nhau Như vậy, không hiệu quả Sau cùng, chúng ta sẽ huấnluyện bộ phân loại C3 từ D3 Bây giờ chúng ta đã có một strong classifier: sự kếthợp C1, C2 và C3 Khi tiến hành nhận dạng một mẫu X, kết quả sẽ được quyếtđịnh bởi sự thỏa thuận của 3 bộ C1, C2 và C3: Nếu cả C1 và C2 đều phân X vàocùng một lớp thì lớp này chính là kết quả phân loại của X; ngược lại, nếu C1 vàC2 phân X vào 2 lớp khác nhau, C3 sẽ quyết định X thuộc về lớp nào
2.2.2.3 Adaboost
Như đã biết, AdaBoost (Adaptive Boost) là một bộ phân loại mạnh phituyến phức dựa trên hướng tiếp cận boosting được Freund và Schapire đưa ravào năm 1995 Adaboost hoạt động trên nguyên tắc kết hợp tuyến tính các weakclassifier dựa trên các đặc trưng Haar- Line để hình thành một strong classifier
Để có thể kết hợp các bộ phân loại yếu, adaboost sử dụng một trọng số (weight)
để đánh dấu các mẫu khó nhận dạng Trong quá trình huấn luyện, cứ mỗi weakclassifier được xây dựng, thuật toán sẽ tiến hành cập nhật lại trọng số để chuẩn
bị cho việc xây dựng weak classifier tiếp theo: tăng trọng số của các mẫu bị nhậndạng sai và giảm trọng số của các mẫu được nhận dạng đúng bởi weak classifiervừa xây dựng Bằng cách này, các weak classifier sau có thể tập trung vào cácmẫu mà các weak classifier trước đó chưa thực hiện tốt Sau cùng các weakclassifier sẽ được kết hợp tùy theo mức độ ‘tốt’ của chúng để tạo nên mộtstrong classifier
Các weak classifiers hk(x) là các bộ phân loại yếu, được biểu diễn như sau:
Trong đó:
x: mẫu hay cửa sổ con cần xét (x = (x1, x2, …, xn) là vector đặc trưng của mẫu)θk: ngưỡngk: ngưỡng
fk: giá trị của đặc trưng Haar-like
pk: hệ số quyết định chiều của bất phương trình
Công thức trên có thể diễn giải như sau: Nếu giá trị đặc trưng của mẫu
Trang 23đấy là khuôn mặt (gọi là object: đối tượng cần nhận dạng), ngược lại thì mẫu làbackground (không phải là đối tượng).
Thuật toán adaBoost:
Cho một tập gồm n mẫu có đánh dấu (x1,y1), (x2,y2),… (xn,yn) với xk = (xk1,xk2, … , xkm) là vector đặc trưng và yk {-1, 1} là nhãn của mẫu (1 ứng vớiobject, -1 ứng với background)
Khởi tạo trọng số ban đầu cho tất cả các mẫu: với m là số mẫu đúng (ứng vớiobject và y = 1) và l là số mẫu sai (ứng với background và y = -1)
Xây dựng T weak classifiers:
Lặp t = 1, …, T
Với mỗi đặc trưng trong vector đặc trưng, xây dựng một weak classifier hj
với ngưỡng θk: ngưỡngj và lỗi εj.j
Chọn ra hj với εj.j nhỏ nhất, ta được ht:
Cập nhật lại trọng số:
Trong đó:
Zt: Hệ số dùng để đưa Wt+1 về đoạn [0,1] (normalization factor)
Strong classifier được xây dựng:
2.2.2.4 Các đặc trưng Haar-Like
Trang 24Viola và Jones dùng 4 đặc trưng cơ bản [20] để xác định khuôn mặtngười Mỗi đặc trưng Haar–like là sự kết hợp của hai hay ba hình chữ nhật
"trắng" hay "đen" như trong hình sau:
Để áp dụng các đặt trưng này vào việc bài toán xác định mặt người, 4 đặt trưngHaar-like cơ bản được mở rộng ra, và được chia làm 3 tập đặc trưng như sau:
1 Đặc trưng cạnh (edge features):
2 Đặc trưng đường (line features):
3 Đặc trưng xung quanh tâm (center-surround features):
Lợi ích của các đặc trưng Haar-like là nó diễn đạt được tri thức về các đốitượng trong ảnh (bởi vì nó biểu diễn mối liên hệ giữa các bộ phận của đốitượng), điều mà bản thân từng điểm ảnh không diễn đạt được Để tính giá trịcác đặc trưng haar-like, ta tính sự chênh lệch giữa tổng của các pixel của cácvùng đen và các vùng trắng như trong công thức sau:
f(x) = Tổngvùng đen(pixel) - Tổngvùng trắng(pixel)
Hình 7 Đặt trưng Haar-like cơ bản
Trang 25Như vậy ta có thể thấy rằng, để tính các giá trị của đặc trưng Haar-like, taphải tính tổng của các vùng pixel trên ảnh Nhưng để tính toán các giá trị của cácđặc trưng Haar-like cho tất cả các vị trí trên ảnh đòi hỏi chi phí tính toán khá lớn,không đáp ứng được cho các ứng dụng đòi hỏi tính run-time Do đó Viola vàJones đưa ra một khái niệm gọi là Integral Image để tính toán nhanh cho các đặctrưng cơ bản Sau này, Lienhart kế thừa Integral Image (SAT) và đưa thêm kháiniệm Rotated Summed Area Table (RSAT) dùng để tính toán nhanh cho các đặctrưng xoay 1 góc 45o Integral Image là một mảng 2 chiều với kích thước bằngvới kích của ảnh cần tính các đặc trưng Haar-like, với mỗi phần tử của mảng nàyđược tính bằng cách tính tổng của điểm ảnh phía trên (dòng-1) và bên trái (cột-1) của nó Bắt đầu từ vị trí trên, bên trái đến vị trí dưới, phải của ảnh, việc tính
toán này đơn thuần chỉ đựa trên phép cộng số nguyên đơn giản, do đó tốc độthực hiện rất nhanh
2.2.2.5 Cascade of Classifiers
Ta thấy quá trình huấn luyện, bộ phân loại phải duyệt qua tất cả các đặctrưng của các mẫu trong tập training Việc này tốn rất nhiều thời gian Tuynhiên, trong các mẫu đưa vào, không phải mẫu nào cũng thuộc loại khó nhậndạng, có những mẫu background rất dễ nhận ra (ta gọi đây là những mẫubackground đơn giản) Đối với những mẫu này, ta chỉ cần xét một hay vài đặctrưng đơn giản là có thể nhận diện được chứ không cần xét tất cả các đặc trưng.Nhưng đối với các bộ phân loại thông thường thì cho dù mẫu cần nhận dạng là
dễ hay khó thì nó vẫn sẽxét tất cả các đặc trưng mà nó rút ra được trong quátrình học Do đó, chúng tốn thời gian xử lý một cách không cần thiết
Cascade of Classifiers được xây dựng chính là nhằm rút ngắn thời gian xử
lý, giảm thiểu false alarm cho bộ phân loại Cascade tree gồm nhiều stage (haycòn gọi là layer), mỗi stage của cây sẽ là một stage classifier Một mẫu để đượcphân loại là đối tượng thì nó cần phải đi qua hết tất cả các stages của cây Cácstage classifiers ở stage sau được huấn luyện bằng những mẫu negative màstage classifier trước nó nhận dạng sai, tức là nó sẽ tập trung học từ các mẫubackground khó hơn, do đó sự kết hợp các stage classifiers này lại sẽ giúp bộphân loại có false alarm thấp Với cấu trúc này, những mẫu background dễ nhậndiện sẽ bị loại ngay từ những stages đầu tiên, giúp đáp ứng tốt nhất đối với độ
Hình 8 Cách tính Integral Image của ảnh
Trang 26Thuật toán Cascade training:
1 Gọi:
F: là giá trị false alarm và d là độ chính xác của weak classifier ở mỗi stage Ftarget: Giá trị max false alarm.
P, N: là số lượng mẫu positive và negative.
Pi, Ni: là tập positive và negative cho bộ phân lớp ở tầng thứ i.
Fi, Di: Giá trị false alarm và độ chính xác của cascade trước khi đến tầng
N = {số mẫu sai ở stage hiện tại phân loại sai}
P = {số mẫu positive mà stage hiện tại phân loại đúng}
2.2.2.6 Cascade of boosting classifiers:
Hình 9 Cascade of classifiers
Trang 27Cascade of boosting classifiers là mô hình cascade of classifiers với mỗi classifierđược xây dựng bằng Adaboost sử dụng haar-like.
Viola và Jones đã sử dụng rất thành công cascade of boosting classifierscho bài toán nhận dạng mặt người Với tập huấn luyện gồm 4196 hình mặtngười được đưa về ảnh grayscale kích thước 24x24 và 9500 hình background,hai ôngđã xây dựng cấu trúc cascade tree gồm 38 stage với tổng cộng 6060 đặctrưng haar-like Thực nghiệm đã cho thấy classifier ở stage đầu tiên sử dụng 2đặc trưng và loại được khoảng 50% mẫu background (không phải mặt người) và
có độ chính xác là d = 100% Classifier ở stage thứ 2 sử dụng 10 đặc trưng loạiđược 80%0020mẫu background với độ chính xác vẫn là 100% Hệ thống nàyđược so sánh với hệ thống của Rowley-Baluja-Kanade (sử dụng mạng neural),Schneiderman-Kanade (sử dụng phương pháp thống kê), và cho thấy tỉ lệ nhậndạng là ngang nhau, trong khi hệ thống của Viola và Jones chạy nhanh hơn đến
15 lần so với hệ thống của Rowley-Baluja-Kanade và nhanh hơn 600 lần hệ thốngcủa Schneiderman-Kanade
Lý do mà cấu trúc cascade đạt tốc độ nhận dạng nhanh chính là nhờ nósớm loại bỏ được các mẫu background đơn giản (thường có số lượng lớn hơnnhiều so với các mẫu chứa object – các mẫu chưa khuôn mặt cần tiến hành nhậndạng) Bên cạnh đó, hệ thống của Viola và Jones cũng đạt được độ chính xác khácao nhờ vào thuật toán cascade training, các bộ nhận dạng được huấn luyệnbằng AdaBoost với đặc trưng Haar-like mô tả tốt thông tin đối tượng, cùng vớicách Integral Image tính nhanh các đặc trưng, không làm giảm tốc độ nhận dạngcủa hệ thống Như vậy, mô hình Cascade of Boosted Classifiers thật sự là mộtcách tiếp cận tốt cả về tốc độ lẫn khả năng nhận dạng, rất phù hợp với bài nhậndạng mặt người
2.3 Kỹ thuật huấn luyện ảnh
2.3.1 Deep Learning
Hình 10 Cascade of boosting classifiers
Trang 28Trong lĩnh vực nhận dạng và phân loại ảnh, các kết quả thành công nhấtkhi sử dụng mạng nơron nhân tạo Các mạng này tạo tiền đề cho hầu hết các môhình học sâu Học sâu là một lớp các thuật toán máy học sử dụng nhiều lớp chứacác đơn vị xử lý phi tuyến Mỗi cấp độ học cách chuyển đổi dữ liệu đầu vào của
nó thành một biểu diễn tổng hợp và trừu tượng hơn Các mạng thần kinh sâu đãquản lý để vượt trội hơn các thuật toán học máy khác Thu được các kết quả
tuyệt vời trong lĩnh vực nhận dạng hình ảnh
Hình 11: Mô hình CNN - Deep Learning
Trang 292.3.2 Convolutional neural networks (CNN)
Mạng nơron tích chập là một phần của mô hình học sâu, một mạngnơron có thể bao gồm các lớp convolutional layers, pooling layers, ReLU layers,fully connected layers và loss layers Trong một kiến trúc CNN điển hình, mỗiconvolutional layers được theo sau bởi một lướp đơn vị tuyến tính đã chỉnhlưu(ReLU), sau đó là Poolong layer rồi một hoặc nhiều convolutional layer vàcuối cùng là một hoặc nhiều fully connected layer
Kiến trúc của nơron tích chập tương tự như mô hình kết nối của các nơrontrong bộ não con người và được lấy cảm hứng từ hệ thống vỏ thị giác trong bộnão (Visual cortex) Các nơron riêng lẻ chỉ phản ứng với các kích thích trong mộtkhu vực hạn chế của trường thị giác được ọi là trường tiếp nhận (ReceptiveField) Một tập hợp các trường như vậy chồng lên nhau để bao hủ toàn bộ khuvực thị giác
2.3.3 Convolutional layers
Các lớp chuyển đổi được đặt tên theo phép toán tích chập Trong toánhọc, phép tích chập là một phép toán trên hai hàm tạo ra hàm thứ ba là phiênbản sửa đổi (tích chập) của một trong các hàm ban đầu hàm kết quả cho tíchphân của phép nhân theo chiều kim đồng hồ của hai hàm dưới dạng một hàmcủa lượng mà ột trong các hàm ban đầu được dịch Lớp chập bao gồm các nhóm
tế bào thân kinh tạo nên các nhân Các nhân có kích thước nhỏ nhưng chúngluôn có cùng độ sâu với đầu vào Các nơron từ nhận được kết nối với một vùngnhỏ của đầu vào, được gọi là trường tiếp nhận, bởi vì việc liên kết tất cả các
Hình 12 Lớp convolutional neural networks
Trang 30nơron với tất cả các đầu ra trước đó rất kém hiệu quả trong trường hợp đầu vào
có kích thước cao như hình ảnh
Hình 13: Lớp Convolutional layers
Trang 31Thay vì mỗi nơron có trọng số cho kích thước đầy đủ của đầu vào, môt nơron giữ trọng số cho kích thước của đầu vào hạt nhân Các hạt nhân trượt qua chiều rộng và chiều cao của đầu vào, trích xuất các tính năng cấp cao và tạo ra bản đồ kích hoạt 2 chiều Bước tiến mà tại đó hạt nhân trượt được đưa ra một tham số.Đầu ra của một lớp phức hợp được thực hiện bằng cách xếp chồng các bản đồ kích hoạt kết quả, đến lượt được sử dụng để xác định đầu vào của lớp tiếp theo.Việc áp dụng một lớp chập trên một hình ảnh có kích thước 32 x 32 dẫn đến mộtbản đồ kích hoạt có kích thước 28 x 28 Nếu được áp dụng nhiều lớp phực hợp hơn, kích thước sẽ giảm hơn nữa, và kết quả là kích thước hình ảnh sẽ giảm đáng kể gây mất thông tin và gradient biến mất, vì thế nên sử dụng padding Padding làm tăng kích thước của dữ liệu đầu vào bằng cách điền vào các hằng sốxung quanh dữ liệu đầu vào Trong hầu hết các trường hợp, hằng số này bằng 0 nên phép toán được đặt tên là Zero padding Same padding có nghĩa là bản đồ đối tượng đầu ra có cùng kích thước không gian và bảng đồ đối tượng đầu vào Thao tác này cố gắng chèn đều bên tría và bên phải, nhưng nếu số cột được thêm vào là số lẻ, nó sẽ thêm một cột thừa bên phải các bước này khiến hạt nhân bỏ qua các pixel trong hình ảnh và không đưa chúng vào đầu ra Các bước xác định các hoạt động của phép toán tích chập với hạt nhân khi một hình ảnh lớn hơn và hạt nhân phức tạp hơn được sử dụng Khi môt hạt nhân đang trượt đầu vào, nó sử dụng tham số bước để xác định có bao nhiêu vị trí cần bỏ qua ReLU layer hoặc Rectified linear chỉnh lưu Áp chức chức năng kích hoạt max (0, x) Nó không làm giảm kích thước của mạng, nhưng nó làm tăng tính chất phi tuyến tính.
2.3.4 Pooling layers
Tương tự như lớp tích chập (Convolutional Layer), lớp gộp (Pooling) chịu trách nhiệm làm giảm chiều kết quả tích chập (Convoled Feature) Điều này nhằm mục đích để giảm chi phí tính toán cần phải có để xử lý dữ liệu thông qua việc giảm kích thước tính năng đầu vào Hơn nữa, nó rất hữu ích để trích xuất các đặc trưng cốt lõi, cái thường bất biến trước các phép xoay và phép trượt, do đó làm cho quá trình huấn luyện mô hình hiệu quả hơn.
Lớp tích chập (Convolutional Layer) và lớp gộp (Pooling layer), kết hợp với nhau tạo thành lớp thứ ii của mạng nơron tích chập Tùy thuộc vào độ phức tạp của ảnh, số lượng các lớp như vậy có thể được tăng lên
để có thể bắt được các đặc trưng ở mức độ chi tiết hơn nữa, nhưng chi phí cho sức mạnh tính toán cũng sẽ nhiều hơn.
Sau khi đi qua quá trình trên, chúng ta đã thiết lập thành công mô hình nơron tích chập để học các đặc trưng Tiếp theo, chúng ta sẽ làm phẳng (flattening) đầu ra cuối và đưa nó vào mạng nơron thông thường cho mục đích phân loại.
24
Trang 322.3.5 Fully connected layers
Fully connected layers lấy các hình ảnh đã lọc ở cấp cao và chuyển chúngthành các phiếu bầu (vote) Giống như các layer khác, có thể được xếp chồng lên
vì đầu ra của chúng giống với đầu vào Trong thực tế, một vài fully connectedlayer thường được xếp chống lên với nhau với mỗi layer trung gian bỏ phiếu chocác loại ẩn Mỗi layer bổ sung sẽ cho phép mạng học các tổ hợp tinh vi hơn cácfeature và sẽ giúp nó đưa ra quyết định tốt hơn Mỗi nơron từ fully connectedlayer được liên kết với mỗi đầu ra của lớp trước đó Các hoạt động đằng sau một
Hình 15: Lớp fully connected layers