Đối tƣợng và phạm vi nghiên cứu
- Đối tƣợng nghiên cứu lý thuyết: Nghiên cứu mạng ANN, mạng CNN và mô hình DL áp dụng phân loại và nhận dạng ảnh
- Đối tƣợng nghiên cứu thực tiễn: mô hình DL phân loại và nhận dạng ảnh
Phạm vi nghiên cứu tập trung vào việc sử dụng dữ liệu huấn luyện từ bộ CIFA10 và CIFA100 trong dataset của Keras Dữ liệu nhận dạng được áp dụng là các hình ảnh phổ biến, bao gồm ảnh JPG được chụp từ điện thoại di động.
Phương pháp nghiên cứu
- Phương pháp nghiên cứu lí thuyết và phương pháp thực nghiệm
- Dựa trên các tài liệu thu thập từ nhiều nguồn (sách, báo, Internet, …) tổng hợp, phân tích và trình bày lại theo sự hiểu biết của bản thân
- Thử nghiệm để đánh giá mô hình.
Cấu trúc của luận văn
Ngoài phần mở đầu, kết luận, tài liệu tham khảo, luận văn có cấu trúc 3 chương như sau:
Chương 1: Một số kiến thức cơ bản liên quan: Trình bày tổng quan về
ML, bài toán phân loại, mạng ANN, tổng quan về Deep Learning
Chương 2: Mạng Neural tích chập (CNN): Cấu trúc mạng CNN, vai trò các lớp, tính toán tại các lớp, huấn luyện mạng, thủ tục xây dựng mạng
Chương 3 trình bày ứng dụng phân loại hình ảnh và nhận dạng thông qua việc phân tích dữ liệu ảnh trong bộ CIFA Nội dung bao gồm xây dựng mô hình mạng CNN, tiến hành huấn luyện mạng, áp dụng mô hình vào thực tế và thực hiện nhận dạng thử nghiệm.
MỘT SỐ KIẾN THỨC LIÊN QUAN
Phân nhóm các thuật toán h c máy
1.2.1 Phân nhóm theo phương thức học
Các thuật toán học máy được phân loại thành bốn nhóm chính dựa trên phương thức học, bao gồm Học có giám sát (Supervised Learning), Học không giám sát (Unsupervised Learning), Học bán giám sát (Semi-supervised Learning) và Học tăng cường (Reinforcement Learning).
1.2.1.1 Học có giám sát (Supervised Learning)
Học có giám sát là phương pháp học máy nhằm xây dựng hàm từ dữ liệu huấn luyện, trong đó dữ liệu bao gồm các cặp đầu vào (thường ở dạng vector) và đầu ra mong muốn Nếu đầu ra của hàm là giá trị liên tục, mô hình sẽ thuộc loại hồi quy; ngược lại, nếu đầu ra là tập hữu hạn các giá trị rời rạc, mô hình sẽ là phân lớp.
Kết quả của học có giám sát là việc xây dựng mô hình có khả năng dự đoán đầu ra cho dữ liệu mới dựa trên các cặp dữ liệu và nhãn đã biết Các cặp này bao gồm dữ liệu (input) và đầu ra (outcome), giúp mô hình học hỏi và cải thiện độ chính xác trong việc dự đoán.
Về m t toán h c, dữ liệu cho h c có giám sát là tập hợp biến đầu vào
X là một tập hợp các vector x x x và y là tập hợp nhãn tương ứng y = {y1, y2, , yN}, trong đó mỗi y_i là một vector Tập dữ liệu huấn luyện g_i được xác định bởi các cặp dữ liệu (x_i, y_i) thuộc X × Y Từ tập dữ liệu này, mục tiêu là xây dựng một hàm số để ánh xạ mỗi phần tử từ tập X tới một phần tử tương ứng trong tập Y.
Mục đích là xấp xỉ hàm số f thật tốt để khi có một dữ liệu x mới, chúng ta có thể tính được nhãn tương ứng của nó y f x ( )
Nhƣ trên đã đề cập sơ lƣợc, thuật toán h c có giám sát đƣợc chia thành
Phân loại là một bài toán trong đó các nhãn của dữ liệu đầu vào được phân chia thành một tập hợp hữu hạn các giá trị rời rạc.
Trong bài toán nhận dạng chữ viết tay, dữ liệu đầu vào bao gồm hàng nghìn bức ảnh chữ số viết tay từ nhiều người khác nhau, với nhãn dữ liệu là 10 giá trị từ 0 đến 9.
Hồi quy là một bài toán trong đó nhãn của dữ liệu đầu vào là những giá trị thực cụ thể Ví dụ, nếu một học sinh có số giờ học là a và số giờ ngủ là b, thì điểm trung bình học tập của họ sẽ là một giá trị thực Giải quyết câu hỏi về điểm trung bình học tập chính là lời giải cho bài toán hồi quy.
1.2.1.2 Học không giám sát (Unsupervised learning)
Học không giám sát là phương pháp học từ dữ liệu mẫu không có nhãn, giúp đưa ra quyết định dựa trên các đối tượng tương tự để rút ra kết luận Phương pháp này còn hỗ trợ phát hiện cấu trúc trong tập dữ liệu, với các bài toán tiêu biểu như phân cụm dữ liệu và tìm luật kết hợp.
Thuật toán h c không giám sát đƣợc chia thành 2 loại:
Phân nhóm (Clustering): là bài toán phân tập dữ liệu thành các nhóm nhỏ dựa trên sự tương quan về tính chất giữa các dữ liệu trong mỗi nhóm
Kết hợp (Association) Là bài toán khi chúng ta muốn khám phá ra một số quy luật dựa trên tập dữ liệu cho trước
1.2.1.3 Học bán giám sát (hay học kết hợp - Semi-supervised Learning)
Bài toán này sử dụng tập dữ liệu mẫu bao gồm cả dữ liệu có nhãn và không có nhãn Trong một số trường hợp, mặc dù có lượng dữ liệu lớn, chỉ một phần được gán nhãn, tức là có đầy đủ cặp dữ liệu đầu vào và đầu ra Phần còn lại chỉ chứa dữ liệu đầu vào, tạo ra những bài toán nằm giữa hai nhóm học có giám sát và học không có giám sát, kết hợp cả hai phương thức này.
1.2.1.4 Học củng cố (Reinforcement Learning)
Các bài toán giúp hệ thống tự động nhận diện hành vi và học từ chuỗi hành vi để đạt được kết quả thông qua việc hoàn tất chuỗi biến đổi Phương pháp này thường được ứng dụng trong lý thuyết trò chơi và điều khiển tự động, chẳng hạn như trong mô hình Markov ẩn.
Dữ liệu x trong học tăng cường được tạo ra trong quá trình agent tương tác với môi trường, nơi agent thực hiện hành động yt và nhận quan sát xt cùng với chi phí tức thời Ct Mục tiêu chính là phát triển một chiến lược lựa chọn hành động nhằm tối thiểu hóa chi phí dài hạn, tức là chi phí tích lũy mong đợi Mặc dù quy trình hoạt động của môi trường và chi phí dài hạn cho mỗi chiến lược thường không được biết, nhưng chúng có thể được ước lượng Mạng neural nhân tạo thường được áp dụng trong học tăng cường như một phần của thuật toán toàn cục, giúp giải quyết các bài toán điều khiển, trò chơi và nhiệm vụ quyết định tuần tự khác.
1.2.2 Phân nhóm dựa trên chức năng
1.2.2.1.Các thuật toán hồi quy (Regression Algorithms)
Hồi quy là quá trình xác định mối quan hệ giữa biến phụ thuộc và nhiều biến độc lập khác Mục tiêu của hồi quy là ước lượng và dự đoán giá trị kỳ vọng của biến phụ thuộc dựa trên giá trị đã biết của các biến độc lập Các biến này có thể được gọi là biến giải thích, biến dự báo, hoặc biến kiểm soát.
Bài toán dự đoán giá nhà có thể được giải quyết bằng cách sử dụng dữ liệu thống kê từ 1000 căn nhà trong thành phố Ví dụ, với một căn nhà có diện tích x1 m², x2 phòng ngủ và cách trung tâm x3 km, chúng ta có thể áp dụng các thông số này để dự đoán giá trị của căn nhà mới Liệu rằng với những thông tin này, chúng ta có thể đưa ra một dự đoán chính xác về giá trị của căn nhà hay không?
1.2.2.2 Các thuật toán phân cụm
Phân cụm dữ liệu là quá trình chia nhỏ một tập dữ liệu thành các nhóm, trong đó các phần tử trong cùng một cụm có sự tương đồng cao, trong khi các phần tử thuộc các cụm khác lại khác biệt Số lượng cụm có thể được xác định trước dựa trên kinh nghiệm hoặc được tự động xác định thông qua các phương pháp phân cụm.
Sau khi xác định các đặc tính của dữ liệu, cần tìm cách phù hợp để đo khoảng cách giữa các đối tượng dữ liệu Các hàm này được sử dụng để tính độ tương tự hoặc độ phi tương tự giữa các đối tượng Giá trị của hàm đo tương tự càng cao thì sự giống nhau giữa các đối tượng càng lớn, trong khi đó độ phi tương tự lại tỉ lệ nghịch với độ tương tự.
Mạng neural nhân tạo (Artificial Neural Network - ANN)
1.3.1 Giới thiệu về mạng Neural [1]
Mạng nơ-ron (neural network) là một hệ thống tính toán dựa trên hoạt động của các nơ-ron trong hệ thần kinh, đóng vai trò quan trọng trong lĩnh vực học máy và nhận thức Đây là một mô hình toán học mô phỏng cấu trúc và chức năng của mạng lưới thần kinh sinh học, giúp ước lượng và xấp xỉ các dữ liệu Mạng nơ-ron nhân tạo được xây dựng từ nhiều kết nối thần kinh nhân tạo, cho phép thay đổi cấu trúc bên trong dựa trên thông tin từ môi trường bên ngoài.
Mạng neural, được nghiên cứu từ 50 năm trước bởi McCulloch và Pitts, đã có những bước tiến quan trọng trong lĩnh vực trí tuệ nhân tạo Năm 1985, Hopfield giới thiệu một mạng với cấu trúc động, và năm 1986, Rumelhart cùng McClelland phát triển thuật toán lan truyền ngược cho mạng nhiều mức Đặc trưng nổi bật của mạng neural là khả năng học từ dữ liệu, điều chỉnh bộ trọng số để tối ưu hóa hệ thống Mô hình tính toán của mạng neural hiện được ứng dụng rộng rãi trong các lĩnh vực như nhận dạng mẫu, tối ưu hóa, hồi quy, lập luận và ra quyết định.
Mạng neural có khả năng học theo mẫu và tổ chức tính toán song song Để phát huy những khả năng này, mạng neural sở hữu những đặc trưng riêng biệt.
Yếu tố quan trọng để tổ chức hoạt động suy diễn cho mạng neural là tập dữ liệu mẫu, trong đó dữ liệu xử lý chính là thông tin định lượng Mạng neural học hỏi thông qua việc tổ chức tính toán tại các neuron theo thuật toán, đồng thời điều chỉnh trọng số để cải thiện độ chính xác và hiệu quả của mô hình.
1.3.2 Cấu tạo và quá trình xử lý của một neural sinh học
Neural là đơn vị cơ bản của hệ thống thần kinh và đóng vai trò quan trọng trong cấu trúc não bộ Não người chứa khoảng 10 triệu neural, mỗi neural kết nối với khoảng 10.000 neural khác Mỗi neural bao gồm soma, dendrites, axon và synapses, tạo thành mạng lưới phức tạp cho các chức năng thần kinh.
- Dendrites: là phần nhận tín hiệu đầu vào
- Axon: là phần dẫn ra tín hiệu xử lý
- synapses: là đường tín hiệu điện hóa giao tiếp giữa các neural
Mỗi nơ-ron nhận xung điện từ các nơ-ron khác qua sợi nhánh Khi các xung điện này đủ mạnh để kích hoạt nơ-ron, tín hiệu sẽ được truyền qua sợi trục đến các sợi nhánh của nơ-ron khác Mỗi nơ-ron phải quyết định xem có nên kích hoạt hay không.
Mạng nơ-ron chỉ lấy cảm hứng từ cấu trúc và hoạt động của não bộ, mà không sao chép toàn bộ chức năng của nó Mục tiêu của chúng ta là sử dụng mô hình này để giải quyết các bài toán cụ thể mà chúng ta cần.
1.3.3 Cấu tạo và quá trình xử lý của một neural nhân tạo
1 https://cs231n.github.io/convolutional-networks/
Mỗi neural là một đơn vị xử lý cơ sở mà các thành phần liên quan bao gồm:
Tập các tín hiệu vào x j tương ứng với các tr ng số w j , j 1 , , n
Bộ tích hợp các tín hiệu vào
, àm kích hoạt f để biến đổi giá trị thu đƣợc từ bộ tích hợp
Hàm kích hoạt đơn giản nhất là
x x x f 0 if if ) 1 ( ở đây g i là ngƣỡng, giá trị “kích thích” đủ lớn để xảy ra hoạt động tại neural
Một hàm kích hoạt khác thường dùng nữa là hàm x x e sigmoid
Mạng neural đơn, hay còn gọi là perceptron, chỉ bao gồm các đầu vào và một số đầu ra, nhưng có khả năng tính toán hạn chế, chẳng hạn như không thể mô hình hóa hàm XOR Do đó, việc sử dụng mạng neural nhiều lớp trở nên cần thiết để cải thiện khả năng tính toán và giải quyết các bài toán phức tạp hơn.
1.3.4 Các mô hình hàm kích hoạt của mạng neural nhân tạo
2 http://bis.net.vn/forums/p/482/898.aspx
Công thức tổng quát: g(z) =sigm(z)= 1)
Hàm sigmoid có đặc điểm là khi đầu vào lớn, đầu ra gần 1, và khi đầu vào nhỏ, đầu ra gần 0 Mặc dù trước đây hàm sigmoid được ưa chuộng, nhưng hiện nay, với sự phát triển của nhiều hàm kích hoạt ưu việt hơn và những khuyết điểm của chính hàm sigmoid, nó đã không còn được sử dụng phổ biến như trước.
Khi đầu vào của hàm số có giá trị rất lớn hoặc rất nhỏ, đạo hàm của hàm số sẽ gần bằng 0, dẫn đến việc giá hiện tại của node đang xét dường như không được cập nhật.
Đầu ra của hàm sigmoid không tập trung xung quanh giá trị 0, điều này gây ra những khó khăn trong quá trình huấn luyện mạng neuron.
3 https://cs231n.github.io/neural-networks-1/
Hình 1 4 Đồ thị hàm Tanh
Hàm tanh thường được ưa chuộng hơn hàm sigmoid cho các lớp giữa trong mạng neuron, vì nó giúp các giá trị ở lớp đó có giá trị trung bình là 0, trong khi hàm sigmoid có giá trị trung bình là 0.5.
Hàm tanh vẫn có những ƣu điểm của hàm sigmoid nhƣng hiện nay vẫn không đƣợc áp dụng nhiều vào thực tế
- Hàm Relu (Rectified Linear Unit)
Công thức tổng quát: (𝑠) = max(0, 𝑠) (1.3)
Hình 1 5 Đồ thị hàm Relu
Hàm Relu hiện đang được sử dụng phổ biến nhờ vào tính đơn giản và những ưu điểm vượt trội của nó Nó đã được chứng minh là giúp tăng tốc độ huấn luyện mạng neuron một cách đáng kể Sự nhanh chóng này xuất phát từ cấu trúc đơn giản của hàm và đạo hàm của nó, với giá trị bằng 1 nếu đầu vào dương và bằng 0 nếu đầu vào âm.
Hình 1 6 So sánh tốc độ hội tụ của hàm Relu với hàm Tanh 4
M c dù không có đạo hàm tại 0 nhưng người ta vẫn định nghĩa là đạo hàm của Relu tại 0 là bằng 0
Hàm Relu có nhiều biến thể khác nhƣ Leaky Relu, Noisy Relu, ELUs
Dựa theo số lớp trong mạng neuron đƣợc phân làm 2 loại đó là mạng một lớp và mạng nhiều lớp
Mạng một lớp (perception): Mạng một lớp đƣợc cấu thành từ một lớp mạng, vừa là đầu vào cũng vừa là đầu ra
Hình 1 7 Mô hình mạng neural một lớp 5
Mạng nhiều lớp bao gồm nhiều lớp liên kết, trong đó lớp đầu tiên gọi là input layer, các lớp ở giữa được gọi là hidden layer, và lớp cuối cùng là output layer.
4 https://cs231n.github.io/neural-networks-1/
5 http://www.saedsayad.com/artificial_neural_network_bkp.htm
Hình 1 8 Mô hình mạng neural nhiều lớp 3
Mỗi mô hình bao gồm một lớp đầu vào (input layer) và một lớp đầu ra (output layer), có thể có hoặc không có các lớp ẩn (hidden layers) Tổng số lớp trong mô hình được quy ước tính bằng tổng số lớp trừ đi một lớp đầu vào.
Ví dụ nhƣ ở hình trên có 1 input layer, 2 hidden layer và 1 output layer
Số lƣợng layer của mô hình là 3 layer
Mỗi node trong hidden layer và output layer :
Liên kết với tất cả các node ở layer trước đó với các hệ số w riêng
Tổng quan về bài toán nhận dạng ảnh
Nhận dạng hình ảnh là quá trình trích xuất thông tin từ hình ảnh nhằm phân loại các đối tượng trong đó Bài toán đơn giản nhất đã được giải quyết là nhận dạng chữ số viết tay, trong khi bài toán khó nhất là nhận dạng ảnh tự nhiên, do máy tính gặp nhiều thách thức trong việc hiểu thông tin từ một bức ảnh Những khó khăn này bao gồm sự đa dạng về hình ảnh, ánh sáng, góc nhìn và các yếu tố khác ảnh hưởng đến cách mà máy tính nhận diện.
Sự đa dạng trong điểm nhìn cho thấy rằng cùng một vật thể có thể được quan sát từ nhiều vị trí và góc độ khác nhau, dẫn đến những hình ảnh thu được về vật thể đó không giống nhau.
Sự đa dạng về kích thước của các bức ảnh không thể truyền tải đầy đủ thông tin về kích thước thực tế của vật thể Máy tính chỉ có thể xác định tỉ lệ tương đối của vật thể so với bức ảnh thông qua việc đếm số lượng điểm ảnh mà vật thể chiếm trong ảnh.
Ánh sáng đóng vai trò quan trọng trong việc truyền tải thông tin trong một bức ảnh, đặc biệt là khi xem xét ở mức độ thấp như mức độ điểm ảnh Các điều kiện chiếu sáng khác nhau có thể ảnh hưởng mạnh mẽ đến chất lượng và ý nghĩa của hình ảnh.
Trong các bức ảnh, vật thể có thể bị che khuất một phần bởi các đối tượng xung quanh hoặc nền, dẫn đến việc hình dạng của chúng không hoàn chỉnh Sự thiếu sót này gây khó khăn trong việc nhận diện, vì thông tin về vật thể không đầy đủ và rõ ràng.
Sự lộn xộn phức tạp của nền ảnh có thể khiến cho việc nhận dạng vật thể trở nên khó khăn Trong nhiều trường hợp, vật thể cần nhận diện gần như bị hòa lẫn hoàn toàn với nền do sự tương đồng về màu sắc và họa tiết, điều này gây trở ngại không chỉ cho các hệ thống nhận diện mà còn cho cả thị giác con người.
Sự đa dạng về chủng loại vật thể là một thách thức lớn trong bài toán nhận dạng, bởi các vật thể cần nhận diện có thể có hình dạng, màu sắc và kết cấu rất khác nhau.
1.5 Các hướng tiếp cận trong phân loại ảnh
Bài toán nhận dạng hình ảnh đã tồn tại từ lâu, và nhiều nghiên cứu cũng như bài báo đã được công bố để cải tiến các thuật toán nhận dạng Hiện có hai hướng tiếp cận chính trong lĩnh vực này.
1.5.1 Phương pháp H c máy truyền thống
Hệ thống máy học bao gồm hai giai đoạn chính: Huấn luyện và Thử nghiệm Trong mỗi giai đoạn, hai thành phần quan trọng do người thiết kế bài toán xác định là Trích chọn đặc trưng (Feature Engineering) và Thuật toán phân loại (Algorithms).
Trích chọn đặc trưng là quá trình quan trọng trong việc xử lý dữ liệu thô để biến chúng thành dữ liệu chuẩn, giúp cải thiện khả năng biểu diễn thông tin Để thực hiện điều này, cần loại bỏ dữ liệu nhiễu và giữ lại các thông tin đặc trưng có ý nghĩa, tùy thuộc vào từng loại dữ liệu và bài toán cụ thể Việc tùy biến các phép biến đổi này là cần thiết để nâng cao độ chính xác của mô hình dự đoán.
Dữ liệu đầu vào bao gồm toàn bộ thông tin mà không có quy chuẩn về dạng (véc tơ, ma trận,…) hay kích thước các chiều thông tin Tuy nhiên, vì chứa cả thông tin nhiễu và không có giá trị, kích thước lưu trữ của dữ liệu thường lớn, gây bất lợi cho quá trình tính toán sau này.
Đầu ra của quá trình xử lý dữ liệu là các thông tin hữu ích, đã được tính toán và rút ra từ dữ liệu đầu vào, loại bỏ các thành phần nhiễu và không cần thiết Kích thước dữ liệu đầu ra được giảm thiểu đáng kể so với dữ liệu đầu vào, giúp tăng tốc độ và tính thuận tiện cho các phép tính tiếp theo.
Sau khi trích chọn đặc trưng, các đặc trưng này được lưu trữ ở định dạng chuẩn về kiểu và kích thước dữ liệu Thông tin đặc trưng có thể được kết hợp với các thông tin biết trước về dữ liệu để xây dựng các mô hình dự đoán phù hợp thông qua nhiều thuật toán khác nhau.
Một điểm nổi bật của các phương pháp học máy truyền thống là độ chính xác của mô hình dự đoán phụ thuộc nhiều vào chất lượng các đặc trưng được lựa chọn Các đặc trưng càng phù hợp với bài toán thì kết quả càng tốt, tuy nhiên, đây cũng là điểm yếu vì việc trích chọn đặc trưng yêu cầu sự hiểu biết sâu sắc về bài toán, thuật toán và các thông số trong mô hình huấn luyện Đặc trưng được thiết kế riêng cho từng bài toán cụ thể, do đó hiếm khi có thể tái sử dụng cho các bài toán mới mà thường cần cải thiện hoặc thay thế bằng các đặc trưng khác.
Học sâu là một nhánh của học máy, trở nên phổ biến trong thập kỷ gần đây nhờ vào khả năng tính toán mạnh mẽ của máy tính hiện đại và khối lượng dữ liệu khổng lồ trên Internet Các mạng huấn luyện theo phương pháp học sâu, hay còn gọi là mạng nơ-ron sâu (Deep Neural Network), hoạt động bằng cách phân tích dữ liệu đầu vào qua nhiều lớp khác nhau Mỗi lớp sẽ xem xét dữ liệu từ các khía cạnh khác nhau và theo mức độ trừu tượng ngày càng cao.
Tổng quan về Deep Learning
Deep Learning là một lĩnh vực trong học máy, sử dụng các thuật toán phức tạp để mô hình hóa dữ liệu trừu tượng thông qua nhiều lớp xử lý Để nâng cao khả năng tiếp cận và hiệu quả trong học tập sâu, cần hiểu quy trình của một ứng dụng học sâu điển hình (có giám sát), bắt đầu từ dữ liệu thô và kết thúc với các dự đoán thực tế.
Deep learning, hay học sâu, được đặt tên như vậy vì các mạng mô phỏng có nhiều lớp khác nhau, thể hiện độ sâu trong quá trình học hỏi Những vấn đề cần khả năng "tư duy" để giải quyết đều nằm trong khả năng của deep learning, cho phép nó học hỏi và tìm ra các giải pháp hiệu quả.
Deep learning mang lại khả năng giải quyết các vấn đề phức tạp thông qua việc xử lý các bộ dữ liệu đa dạng, không có cấu trúc và không liên kết Sự nghiên cứu sâu hơn về các thuật toán deep learning mở ra nhiều tiềm năng ứng dụng lớn hơn.
Kết luận chương 1
Chương 1 đã giới thiệu một số kiến thức cơ bản về lý thuyết h c máy, phân nhóm các thuật toán h c máy đồng thời trình bày một số kiến thức về mạng neural Trên cơ sở đó, chúng tôi cũng đã trình bày một bài toán quan tr ng là nhận dạng hình ảnh Việc giải quyết bài toán nhận dạng ảnh đã và đang đƣợc ứng dụng vào các lĩnh vực trong đời sống xã hội, đồng thời nó cũng đang thu hút đƣợc sự quan tâm của nhiều nhóm nghiên cứu.
MẠNG NEURAL TÍCH CHẬP
Khái niệm mạng neural tích chập
Trong những năm gần đây, ngành Thị giác máy tính đã đạt được nhiều thành tựu nổi bật, đặc biệt là trong việc phát triển các hệ thống xử lý hình ảnh Một ví dụ điển hình là việc kiểm tra mã captcha của Google, vốn được thiết kế để xác minh người dùng không phải robot, nhưng đã bị robot vượt qua Do đó, Google đã quyết định phát triển một thuật toán mới, sử dụng camera để chụp ảnh người dùng và áp dụng công nghệ học sâu (DL) nhằm xác minh xem ảnh có chứa một người hay không, thay thế cho hệ thống captcha cũ.
Mạng Neural Tích Chập (CNN) là một trong những mô hình học sâu tiên tiến, giúp xây dựng các hệ thống thông minh với độ chính xác cao, đặc biệt trong nhận diện đối tượng trong ảnh CNN hoạt động dựa trên phép toán tích chập, cho phép dạy thuật toán nhận diện đối tượng hiệu quả Mô hình này được phát triển từ nghiên cứu của D.H Hubel và T.N Wiesel vào những năm 1950-1960, khi họ khám phá cách mà não động vật nhận thức thế giới thông qua hai loại tế bào thần kinh: tế bào đơn giản và tế bào phức tạp.
Các tế bào đơn giản hoạt động khi nhận diện các hình dạng cơ bản như cạnh và góc, trong khi các tế bào phức tạp có vùng tiếp nhận rộng hơn và không bị ảnh hưởng bởi vị trí cố định trong vùng tiếp nhận.
Phép tính Convolution (tích chập)
Tích chập là một lớp quan trọng trong mạng nơ-ron tích chập (CNN), được định nghĩa qua phép toán hợp nhất hai hàm để tạo ra một hàm thứ ba Phép toán này giúp kết hợp hai tập thông tin khác nhau, đóng vai trò then chốt trong việc xử lý và phân tích dữ liệu hình ảnh.
Tích chập được thực hiện trên giá trị đầu vào của dữ liệu và kernel/filter để tạo ra bản đồ đặc trưng (feature map) Quá trình này diễn ra bằng cách trượt kernel/filter trên dữ liệu đầu vào, và tại mỗi vị trí, ta thực hiện phép nhân ma trận và tính tổng các giá trị để đưa vào bản đồ đặc trưng.
Ta có thể theo dõi cơ chế của tích chập qua hình minh h a bên duới
Hình 2.1: Minh họa tích chập
Ma trận bên trái thể hiện một bức ảnh đen trắng, trong đó mỗi giá trị của ma trận tương ứng với một điểm ảnh (pixel) Giá trị 0 biểu thị màu đen và giá trị 1 biểu thị màu trắng Đối với ảnh grayscale, giá trị pixel có thể thay đổi từ 0 đến 255.
Sliding window, còn được gọi là kernel, filter hay feature detector, là một kỹ thuật sử dụng ma trận filter 3×3 để nhân từng thành phần tương ứng với ma trận ảnh bên trái Giá trị đầu ra được tính bằng cách cộng lại các tích của các thành phần này Kết quả của quá trình tích chập là một ma trận (convolved feature) được tạo ra từ việc trượt ma trận filter và thực hiện tích chập trên toàn bộ ma trận ảnh bên trái.
Cấu trúc mạng neural tích chập
Các lớp cơ bản trong một mạng CNN bao gồm: Lớp tích chập
Hình 2 1 Sơ đồ tổng tổng quát cấu trúc mạng CNN
Lớp lấy mẫu (Pooling) và lớp kết nối đầy đủ (Fully-connected) có thể được điều chỉnh về số lượng và cách sắp xếp để phát triển các mô hình huấn luyện tối ưu cho từng bài toán cụ thể.
Input đầu vào là một bức ảnh đƣợc biểu diển bởi ma trận pixel với kích thước: [w x h x d]
D (depth) : Là độ sâu, hay dễ hiểu là số lớp màu của ảnh
Hình 2 2 Phép tính tích chập trên ảnh màu với k=3
Lớp tích chập (Convolutional) là thành phần quan trọng nhất trong mạng CNN, thể hiện tư tưởng xây dựng sự liên kết cục bộ thay vì kết nối toàn bộ các điểm ảnh Các liên kết này được tính toán thông qua phép tích chập giữa các giá trị điểm ảnh trong vùng ảnh cục bộ và các bộ lọc (filters) nhỏ Chỉ một số nút của lớp này được kết nối với một nút lớp sau, thể hiện cho tích chập, kết nối vùng K x K neuron với nút kết quả, cho phép thực hiện phép nhân trong tích chập Vùng K x K là vùng cục bộ của bức ảnh, hay còn gọi là vùng tiếp nhận cục bộ Ví dụ, trên ảnh xám, ảnh được biểu diễn dưới dạng ma trận A có kích thước m*n.
Hình 2 3 Ma trận đầu vào
Kernel là một ma trận vuông kích thước k*k trong đó k là số lẻ k có thể bằng 1, 3, 5, 7,
Hình 2 4 ma trận bộ lọc
Lấy từng vùng X trên ảnh có kích thước k*k nhân với W, phép nhân này được thực hiện bằng cách nhân các phần tử tương ứng trên hai ma trận và cộng tất cả lại Kết quả của phép nhân này chính là tích chập của X và W.
Hình 2 5 Các bước thực hiện phép tính tích chập cho ma trận X với bộ lọc K
Khi tính tại vị trí x22 (ô khoanh đỏ), ma trận A có kích thước tương đương với W, với x22 làm trung tâm có màu nền da cam Kết quả tính toán y11 được xác định bằng công thức y11 = sum(A W), trong đó y11 = x11w11 + x12w12 + x13w13 + x21w21 + x22w22 + x23w23 + x31w31 + x32w32 + x33w33, và kết quả cuối cùng là 4.
Kết quả bằng 4 bỏ vào ô Y[1,1] tương ứng vị trí [2,2] của ảnh Do chập
Khi áp dụng bộ lọc W lên từng phần của ảnh, kích thước ảnh thu được sẽ nhỏ hơn kích thước ban đầu Điều này xảy ra vì các ô nằm sát biên của ảnh không thể tính toán chính xác do bộ lọc W có thể tràn ra ngoài biên ảnh.
Kích thước của ma trận Y nhỏ hơn ma trận X Kích thước ma trận Y là (m-k+1) * (n-k+1) nếu kích thước ảnh là m * n
Khi thực hiện phép tính tích chập, các điểm ảnh ở trung tâm của ma trận đầu vào được bao phủ bởi nhiều vùng 3×3, dẫn đến việc tính toán nhiều giá trị đầu ra Ngược lại, các điểm ảnh ở góc và cạnh chỉ được sử dụng một hoặc hai lần, gây mất mát thông tin quan trọng Để khắc phục điều này, việc thêm đường viền phụ (padding) xung quanh ma trận đầu vào là cần thiết Điều này không chỉ tăng kích thước ma trận đầu vào và đầu ra mà còn giảm độ chênh lệch giữa chúng Hơn nữa, các ô ở cạnh và góc của ma trận gốc sẽ lùi sâu vào bên trong, giúp chúng được sử dụng nhiều hơn trong tính toán và hạn chế mất mát thông tin.
Hình 2 7 Ma trận X (lớp vào) khi thêm viền 0 bên ngoài
Trong hình, ma trận đầu vào kích thước 5×5 được bao bọc bởi đường viền phụ kích thước 1 (p=1), tạo thành ma trận 7×7 với các ô trên đường viền có giá trị bằng không Đường viền phụ thường đối xứng trái-phải và trên-dưới so với ma trận gốc, do đó kích thước của ma trận đầu vào tăng lên 2p mỗi chiều Kết quả là ma trận đầu ra có kích thước (n+2p−k+1)×(n+2p−k+1).
Trong phép nhân chập, bộ lọc trượt qua ma trận đầu vào một hàng hoặc cột trong mỗi bước di chuyển Để giảm kích thước của ma trận Y, có thể bỏ qua một số điểm trên ảnh bằng cách thiết lập giá trị bước di chuyển (stride) là 2, 3 hoặc lớn hơn Ví dụ, nếu S=2, bộ lọc sẽ trượt qua hai hàng hoặc cột trong mỗi lần di chuyển.
Nếu stride = s, padding=1, Kernel = k thì ảnh m x n sau khi convolution có kích thước
Vậy tích chập là xác định đ c trưng ảnh như: cạnh, đường; làm mờ, làm nét ảnh, tùy vào kernel đƣợc ch n
Trường hợp tổng quát đầu ra của lớp convolution layer được g i là Feature map đƣợc xác định theo các tham số:
Với input đầu vào có giá trị W1 x H1 x D1, trong đó:
W1: là chiều rộng của ma trận input
H1: là chiều cao của ma trận input
D1: là chiều sâu của ma trận input (với ảnh rgb chúng ta có giá trị là 3, đại diện cho 3 màu Red, Green, Blue)
Các tham số của lớp convolution:
K: số lƣợng filter định nghĩa
F: Kích thước ma trận filter
S: Khoảng cách trƣợt của ma trạn filter
P: Padding, là viền ngoài đƣợc thêm vào input
Chiều của ma trận filter đúng bằng chiều input đầu vào là D1
Kích thước của feature W2 x H2 x D2 được xác định bởi:
Sau mỗi lớp convolution trong mạng CNN, việc áp dụng hàm activation là cần thiết để khử tính tuyến tính Trong số các hàm activation như Tanh, Sigmoid và Relu, hàm Relu được sử dụng phổ biến nhất Hàm Relu giúp biến đổi các giá trị âm trong feature map thành 0, cho phép mạng phát hiện nhiều đặc trưng khác nhau của ảnh bằng cách sử dụng nhiều filter.
Sau khi đưa một bức ảnh vào lớp Tích chập, chúng ta nhận được một loạt ảnh đầu ra tương ứng với các bộ lọc đã sử dụng trong quá trình thực hiện phép tích chập Các trọng số của các bộ lọc này được khởi tạo ngẫu nhiên trong lần đầu tiên và sẽ được cải thiện dần trong suốt quá trình huấn luyện.
- Lớp lấy mẫu (Pooling layer)
Một thành phần quan trọng trong mạng CNN là lớp lấy mẫu (Pooling), thường được áp dụng sau lớp Tích chập để giảm kích thước ảnh đầu ra mà vẫn giữ được các thông tin quan trọng từ ảnh đầu vào Việc này không chỉ giảm số lượng tham số mà còn tăng hiệu quả tính toán Lớp lấy mẫu sử dụng cửa sổ trượt để quét toàn bộ các vùng trong ảnh, thực hiện phép lấy mẫu để chọn ra một giá trị duy nhất đại diện cho toàn bộ thông tin của vùng ảnh đó.
Để thực hiện pooling, trước tiên chúng ta xác định kích thước khung pooling là K*K Sau đó, khung này sẽ được trượt lên ma trận ảnh sau khi thực hiện convolution, và chúng ta sẽ lấy giá trị tối đa hoặc trung bình từ các giá trị trong khung đó.
Hình 2 8 Lớp lấy mẫu tối đa với kính thước=(3,3), bước nhảy=1, đường viền phụ =0
Pooling thường được sử dụng với kích thước 2 x 2, stride 2 và padding 0, giúp giảm kích thước dữ liệu xuống một nửa Trong khi đó, độ sâu (depth) của dữ liệu vẫn được giữ nguyên do quá trình pooling được thực hiện riêng biệt trên từng mảng 2 chiều.
Hình 2 9 Mô hình lớp lấy mẫu 6 Ảnh 224x224 còn lại 112x112
Max pooling: Lấy giá trị lớn nhất của ma trận pool
Average pooling: Lấy giá trị trung bình của ma trận pool
Sum pooling: Lấy tổng giá trị của ma trận pool
Phổ biến là lấy max và lấy average
Hình 2 10 Ví dụ về lớp lấy mẫu 7
6 http://cs231n.github.io/convolutional-networks/
Mỗi ảnh đầu vào sau khi được lấy mẫu sẽ tạo ra một ảnh đầu ra tương ứng, có kích thước giảm đáng kể nhưng vẫn giữ lại các đặc trưng quan trọng cho các bước tính toán tiếp theo.
Với feature input đầu vào có giá trị W1 x H1 x D1, trong đó:
W1: là chiều rộng của feature
H1: là chiều cao của feature
D1: là chiều sâu của ma trận feature
Các tham số của lớp convolution:
S: Khoảng cách trƣợt của ma trận filter
Kích thước của feature W2 x H2 x D2 được xác định bởi:
Trong lớp pooling, giá trị F thường được chọn là 2 và S cũng là 2 Tuy nhiên, việc chọn F quá lớn có thể dẫn đến việc mất đi các đặc trưng quan trọng của đặc điểm khi kích thước vùng bị giảm quá nhiều.
Đào tạo mạng neural tích chập
Trong quá trình huấn luyện các tham số của mạng nơ-ron tích chập (CNN), mô hình sẽ ngẫu nhiên khởi tạo các trọng số W nhằm tìm ra trọng số tối ưu Để đánh giá độ chính xác của dự đoán, chúng ta cần một hàm gọi là hàm mất mát (loss function).
Khi xây dựng mạng neural network với lớp cuối cùng sử dụng hàm kích hoạt Softmax, mỗi đầu ra không còn là giá trị cho từng lớp mà là một vector, trong đó chỉ có một phần tử bằng 1 và các phần tử còn lại bằng 0 Phần tử bằng 1 xác định lớp mà điểm dữ liệu thuộc về, thể hiện xác suất 100% cho lớp đó.
Khi áp dụng lớp Softmax làm lớp kích hoạt cuối, đầu ra dự đoán a sẽ được tính từ đầu vào vector x thông qua công thức a = (𝑇𝑥 + 𝑏) Đồng thời, đầu ra thực sự vector y được biểu diễn dưới dạng one hot coding, với cấu trúc [0, 1, 0].
Việc xây dựng hàm mất mát nhằm giảm thiểu sự chênh lệch giữa giá trị đầu ra dự đoán a và giá trị đầu ra thực tế y Một trong những giải pháp đầu tiên là sử dụng tổng bình phương sai số.
+ C là số class của mô hình
+ là giá trị đầu ra dự đoán
+ là giá trị đầu ra thực tế
Chúng ta không chỉ sử dụng hàm này mà còn cần một đại lượng đại diện cho nó một cách hiệu quả hơn, đó chính là cross entropy – khoảng cách giữa hai phân bố xác suất.
Cross entropy giữa 2 phân phối xác suất p và q đƣợc định nghĩa là
H(p,q) = Ep[−logq] Đối với đại lƣợng phân phối đúng và đại lƣợng phân phối ƣớc tính q (nhƣ mô hình là y và a), hàm entropy:
) ∑ ) (2 11) Đối với từng dữ liệu đầu vào (𝑥,) thì hàm loss đƣợc tính bằng:
+ 𝑗 là xác suất của vector đầu ra thực tế ⃗⃗⃗ , với ⃗⃗⃗ biểu diễn dưới dạng one hot coding [0, 1, 0]
+ 𝑗 là xác suất của vector đầu ra dự đoán ⃗⃗⃗⃗ , Trong đó ⃗⃗⃗ phụ thuộc vào 𝑥⃗⃗⃗ với bộ tr ng số W
Trong thực tế, quá trình huấn luyện thường thực hiện trên nhiều dữ liệu N lớn hơn 1 nhưng nhỏ hơn tổng thể dữ liệu g, được gọi là batch Do đó, hàm loss L sẽ có dạng phù hợp với kích thước batch này.
+ 𝑥, là c p dữ liệu [1,2,3, N] trong một batch
+ là ma trận tr ng số
+ 𝑁 là kích thước một batch
Với một c p dữ liệu (𝑥,) và vector bias lúc này bằng 0, ta có:
∑ ( 𝑥 ) (∑ 𝑥 ( 𝑥 )) (2 14) Trong đó tổng xác suất của giá trị đầu ra luôn luôn bằng 1:
∑ (2 15) Đạo hàm của hàm mất mát lúc bây giờ sẽ là:
𝑥 ( ) (2 16) Giá trị 𝑗 = 𝑗 − 𝑗 có thể đƣợc coi là sai số dự đoán
Trong các biến thể của Gradient Descent, Mini-batch Gradient Descent được lựa chọn vì nó khắc phục được hai nhược điểm của Stochastic Gradient Descent (SGD) và Batch Gradient Descent Công thức cập nhật trọng số W trong phương pháp này sẽ được áp dụng để tối ưu hóa hiệu suất học máy.
Nguyên tắc xây dựng mạng neural tích chập
Để xây dựng một mô hình Convolutional, thường người ta xếp chồng các lớp Conv-Relu-Pool (Convolutional block), với số lượng block phụ thuộc vào yêu cầu của bài toán và tài nguyên máy tính Sau khi thu được các đặc trưng từ lớp Convolution, các đặc trưng này sẽ được làm phẳng thành một ma trận 1 chiều để chuyển tiếp vào lớp Fully-connected.
INPUT→[[CONV→RELU] * N→POOL?] * M→[FC→RELU] * K→FC
Khi xây dựng mô hình, ưu tiên sử dụng các bộ lọc nhỏ và chồng lên nhau thay vì các bộ lọc lớn Mặc dù việc sử dụng bộ lọc nhỏ tiêu tốn nhiều bộ nhớ, nhưng nó giúp trích xuất nhiều đặc trưng hơn và tránh mất thông tin.
Nên sử dụng Stride S = 1 và padding zeros trong lớp tích chập để tránh thay đổi kích thước đầu vào và đầu ra sau mỗi lần tích chập Việc thay đổi kích thước chỉ nên áp dụng ở lớp pooling Kích thước pooling nên là F = 2, vì với kích thước này, 75% diện tích của đầu vào sẽ được loại bỏ Sử dụng kích thước lớn hơn có thể dễ dàng dẫn đến tình trạng mất thông tin.
Để xây dựng mô hình phù hợp, cần xem xét tài nguyên máy tính hiện có Ví dụ, với một tấm hình kích thước 32 x 32 x 3, sử dụng 4 lớp convolution với filter 3 x 3 và 64 kernel mỗi lớp, tổng bộ nhớ lưu trữ sẽ gần 32MB chỉ cho một bức ảnh Để đạt hiệu suất cao, thường phải huấn luyện trên hệ thống siêu máy tính hoặc máy trạm có tài nguyên lớn.
Một số kiến trúc mạng CNN nổi tiếng [6]
- LeNet : LeNet là một trong những mạng CNN lâu đời nổi tiếng nhất đƣợc
Yann LeCUn phát triển vào những năm 1998s Cấu trúc của LeNet gồm: 2 lớp (Convolution + maxpooling) và 2 lớp fully connected và output là softmax layer
AlexNet is a convolutional neural network (CNN) that won the ImageNet LSVRC-2012 competition in 2012 This groundbreaking network features a substantial number of parameters, totaling 60 million Its architecture consists of five convolutional layers and three fully connected layers, with the ReLU activation function applied after each convolution and fully connected layer.
VGG, ra đời sau AlexNet, đã cải thiện hiệu suất với tỷ lệ lỗi thấp hơn trong cuộc thi ImageNet Large Scale Visual Recognition Challenge (ILSVRC) năm 2014 VGG có hai phiên bản chính là VGG16 và VGG19 Kiến trúc VGG16 bao gồm 16 lớp, với 13 lớp convolution sử dụng kernel 3x3, được kết hợp với max pooling để giảm kích thước xuống còn 0.5, cùng với 3 lớp fully connected VGG19 tương tự VGG16 nhưng bổ sung thêm 3 lớp convolution ở ba lớp cuối.
GoogleNet, được công bố bởi Google vào năm 2014, là một mạng nơ-ron tích chập (CNN) do nhóm nghiên cứu của họ phát triển Mạng này bao gồm 22 lớp, bắt đầu với các lớp convolution đơn giản, tiếp theo là các khối Inception module với max pooling sau mỗi khối GoogleNet sử dụng tổng cộng 9 Inception module và không áp dụng lớp fully connected, thay vào đó sử dụng average pooling để giảm thiểu đáng kể số lượng tham số.
-ResNet: ResNet đƣợc phát triển bởi Microsoft năm 2015 ResNet thắng tại
Cuộc thi ImageNet ILSVRC 2015 đã đạt tỉ lệ lỗi 3.57%, trong đó ResNet nổi bật với cấu trúc tương tự như VGG nhưng có nhiều lớp hơn, giúp mô hình trở nên sâu hơn Kiến trúc của ResNet bao gồm nhiều residual block, trong đó ý tưởng chính là cho đầu vào x đi qua một chuỗi các lớp conv-max-conv, từ đó thu được đầu ra F(x) và cộng thêm x vào kết quả, tạo ra H(x) = F(x) + x.
Kết luận chương 2
Các phương pháp huấn luyện mạng neural nhân tạo đang ngày càng được tối ưu hóa về mặt tính toán và phục vụ cho nhiều mục đích khác nhau Kiến trúc mạng neural, đặc biệt là mạng neural tích chập, đang được hoàn thiện để thực hiện hiệu quả nhiều nhiệm vụ, nổi bật là trong nhận dạng ảnh Những cải tiến trong mạng neural tích chập không chỉ giúp giảm thời gian tính toán mà còn tăng độ chính xác, hứa hẹn sẽ trở thành một trong những phương pháp được ứng dụng rộng rãi trong tương lai.
ỨNG DỤNG MẠNG CNN TRONG PHÂN LOẠI HÌNH ẢNH
Yêu cầu bài toán
Bài toán nhận dạng hình ảnh bao gồm nhiều loại đối tượng như máy bay, ô tô, chim, mèo, hươu, chó, ếch, ngựa, tàu thủy và xe tải, với đầu vào là các file ảnh định dạng *.jpg Mục tiêu là phát triển một chương trình nhận dạng hình ảnh sử dụng mạng nơ-ron tích chập (CNNs) và khai thác cơ sở dữ liệu từ tập Cifar10 để thực hiện nhiệm vụ này.
Ví dụ phân tích ảnh đầu tiên trong tập dữ liệu Cifar10
Hình 3 1 Dữ liệu đầu tiên trong tập dữ liệu CIFAR10
Giải quyết vấn đề
Dữ liệu huấn luyện là bộ ảnh CIFAR-10 https://www.cs.toronto.edu/~kriz/cifar.html
CIFAR-10 là một tập hình ảnh bao gồm 2 phần chính: phần huấn luyện và phần kiểm tra Phần huấn luyện gồm 5 batch với tổng cộng 50.000 hình ảnh, trong khi phần kiểm tra có 1 batch chứa 10.000 hình ảnh để đánh giá độ chính xác của mô hình Tập dữ liệu này được phân chia thành 10 loại nhãn khác nhau, bao gồm máy bay, ô tô, chim, mèo, hươu, chó, ếch, ngựa, tàu thủy và xe tải, với mỗi loại có số lượng hình ảnh nhất định.
6000 hình Mỗi hình trong tập dữ liệu có kích thước 32 x 32 pixel với 3 kênh màu RGB (red, green, blue)
Hình 3 2 Một số hình trong bộ CIFAR10 7
3.3 Mô hình mạng CNN đối với bài toán
Vì input của model là ảnh nên ta sử dụng convolutional neural network (CNN)
Mô hình chung của mạng CNN: Input image -> Convolutional layer (Conv) + Pooling layer (Pool) -> Fully connected layer (FC) -> Output
7 https://www.oreilly.com/library/view/deep-learning/9781491924570/assets/dpln_0408.png
Trong mô hình, chúng ta áp dụng các thuộc tính của mạng CNN, bắt đầu với việc xác định input_shape cho ảnh Với kích thước ảnh màu là (32, 32), input_shape được thiết lập là (32, 32, 3).
Khi thêm Convolutional Layer ta cần chỉ rõ các tham số: K (số lƣợng layer), kernel size (W, H), hàm activation sử dụng cấu trúc: model.add(Conv2D(K, (W, H), activation='tên_hàm_activation'))
Trong chương trình, chúng ta sử dụng hàm kích hoạt ReLU để điều chỉnh giá trị các nút trong mạng, loại bỏ các phần tử âm và thay thế chúng bằng giá trị 0.
Hình 3.3 : Hàm kích hoạt Relu
Nếu X >=0 thì đạo hàm trả về là 1, ngƣợc lại trả về giá trị là 0
When adding a MaxPooling Layer, it's essential to specify the kernel size using model.add(MaxPooling2D(pool_size=(W, H))) The Flatten step converts the tensor into a vector by simply adding a flatten layer To include a Fully Connected Layer (FC), you need to define the number of nodes and the activation function with the structure: model.add(Dense(number_of_nodes, activation='activation_function_name')) In the output layer, we utilize the softmax function to convert the raw values of the nodes into percentage values Since each image belongs to one of 10 classes ranging from 0 to 9, the output layer will contain 10 nodes representing the probabilities for the classes: "airplane, car, bird, cat, deer, dog, frog, horse, ship, truck."
Hàm L giảm dần từ 0 đến 1 Giá trị dự đoán gần 1 giá trị hàm L gần với
0, ngƣợc lại giá trị dự đoán gần với 0 thì L lớn Nên hàm L cho giá trị càng nhỏ thì dự đoán càng đúng
Lớp 1: - Kết hợp với 32 bộ l c khác nhau có kích thước (3x3) với padding “SAME” và chức năng kích hoạt ReLU
Lớp 2: - Kết hợp với 32 bộ l c khác nhau có kích thước (3x3) và chức năng kích hoạt ReLU
Lớp 3: - Max Pooling làm giảm kích thước ma trận input theo một cửa sổ kích thước (2 x 2)
Lớp 5: - Kết hợp với 64 bộ l c khác nhau có kích thước (3x3) với padding “SAME” và chức năng kích hoạt ReLU
Lớp 6: - Kết hợp với 64 bộ l c khác nhau có kích thước (3x3) và chức năng kích hoạt ReLU
Lớp 7: - Max Pooling làm giảm kích thước ma trận input theo một cửa sổ kích thước (2 x 2)
Lớp 9: - Kết hợp với 128 bộ l c khác nhau có kích thước (3x3) với padding
= “SAME” và chức năng kích hoạt ReLU
Lớp 10: - Kết hợp với 128 bộ l c khác nhau có kích thước (3x3) và chức năng kích hoạt ReLU
Lớp 11: - Max Pooling làm giảm kích thước ma trận input theo một cửa sổ kích thước (2 x 2)
Lớp 13: - flatten (2 x 2 x 128) thành layer có 512 nodes,
Lớp 14: - lớp Dense là lớp kết nối đầy đủ với 512 nodes
Huấn luyện
Sau khi hoàn thiện mô hình, bước tiếp theo là định nghĩa hàm loss và chọn optimizer để bắt đầu quá trình huấn luyện Tất cả các optimizer trong Keras đều dựa trên thuật toán Gradient Descent Trong số các optimizer có sẵn, Adam optimizer được ưa chuộng nhất nhờ vào khả năng hội tụ nhanh chóng Để biên dịch mô hình, ta sử dụng câu lệnh: model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']).
Ta thực hiện quá trình huấn luyện mô hình và lưu lại mô hình vào file sau khi hoàn tất Trong chương trình, mô hình được huấn luyện với 100 epochs Cụ thể, ta sử dụng hàm model.fit với các tham số x_train, y_train, dữ liệu kiểm tra validation_data=(x_test, y_test), kích thước lô batch_size=8, số epochs=100, và chế độ hiển thị verbose=1.
Kết quả là thu được mô hình dược lưu trong thư mục 'ngan_model'
Trong quá trình huấn luyện mô hình Deep Learning, việc xử lý khối lượng lớn phép tính là cần thiết Để tăng tốc độ tính toán, Google Colab cung cấp dịch vụ miễn phí với GPU để chạy mã Python cho nghiên cứu Colab đã cài sẵn nhiều thư viện Deep Learning phổ biến như TensorFlow và Keras Ngoài ra, người dùng có thể dễ dàng liên kết Colab với Google Drive để lưu trữ dữ liệu, với đường dẫn sử dụng là: /content/gdrive/My Drive/Colab Notebooks.
Hình 3 5 code để link tới các file trên Google drive
Đánh giá mô hình
Để đánh giá độ chính xác của mô hình, tôi đã sử dụng bộ hình ảnh kiểm tra trong test batch của Cifar-10 mà mô hình chưa từng thấy trong quá trình huấn luyện Mô hình CNN đạt được kết quả thử nghiệm là 0.8078 sau 30 phút huấn luyện Kết quả cho thấy độ chính xác của mô hình khi đánh giá bằng tập kiểm thử thấp hơn một chút so với số liệu trong quá trình huấn luyện.
Hình 3 6 Đồ thị về độ chính xác của mô hình khi huấn luyện và thử nghiệm
3.6 Thử nghiệm nhận dạng ảnh
Sau khi đào tạo mô hình, chúng ta có thể sử dụng nó để dự đoán các hình ảnh thực tế từ điện thoại hoặc máy ảnh Đầu tiên, cần tải lại mô hình đã được huấn luyện Tiếp theo, đưa vào một bức ảnh để xác định nó thuộc về lớp nào trong 10 lớp: “máy bay, ô tô, chim, mèo, hươu, chó, ếch, ngựa, tàu thủy, xe tải” Kết quả dự đoán sẽ được hiển thị sau đó.
Bộ hình ảnh kiểm tra thuộc test batch của Cifar-10, mà mô hình chưa từng thấy trong quá trình huấn luyện, được sử dụng để thử nghiệm Sau khi kết xuất 30 ảnh đầu tiên từ bộ test batch, kết quả cho thấy mô hình dự đoán đúng 24 hình và sai 6 hình, như thể hiện trong hình 3.5.
Hình 3 7 Một số hình minh họa kết quả việc phân loại ảnh trên bộ batch của
Tôi đã tiến hành thử nghiệm với một số hình ảnh chụp từ điện thoại và máy ảnh khi tải vào mô hình Kết quả thu được, như thể hiện trong hình 3.6, cho thấy tỷ lệ đúng vẫn chưa cao Tuy nhiên, chương trình vẫn cho ra kết quả chính xác đối với những bức ảnh có nền phức tạp hoặc chứa nhiều đối tượng, ví dụ như hình ảnh có 2 hoặc 3 con mèo.
Hình 3 8 Một số hình minh họa kết quả việc phân loại của ảnh load lên từ điện thoại
Khi áp dụng mạng neural tích chập cho phân loại ảnh, hệ thống hoạt động ổn định với tỷ lệ sai số thấp, chấp nhận được Bài viết cung cấp hướng dẫn chi tiết từng bước giải quyết bài toán phân loại ảnh, từ phân tích yêu cầu đến quy trình xử lý, thử nghiệm và kết quả đạt được.
Kết quả đạt đƣợc
Nắm vững kiến thức và kỹ thuật cơ bản của Deep Learning giúp bạn xây dựng mô hình học máy hiệu quả cho các bộ dữ liệu khác nhau.
- Cài đ t chương trình bằng Python, ứng dụng mô hình Deep Learning trong phân loại và nhận dạng ảnh màu
Nghiên cứu các thuật toán trong Deep Learning có ý nghĩa khoa học quan trọng, giúp phát triển các mô hình học máy hiệu quả trong việc phân loại và nhận dạng ảnh Ứng dụng thực tiễn của đề tài này không chỉ nâng cao khả năng xử lý hình ảnh mà còn mở ra nhiều cơ hội trong các lĩnh vực như y tế, an ninh và công nghệ thông tin.
4.2 Ưu và nhược điểm của phương pháp
Kiến trúc mạng CNN được đề xuất cho bài toán phân loại ảnh có thể hoạt động hiệu quả với bộ dữ liệu CIFAR-10, nhưng chưa chắc đã phù hợp với các bộ dữ liệu khác Mỗi phương pháp đều có những ưu điểm và nhược điểm riêng Một trong những ưu điểm nổi bật là khả năng tìm kiếm ảnh dựa trên phân lớp, giúp giảm thiểu số lượng ảnh cần so sánh để tìm ra sự tương đồng.
Nhƣợc điểm: Mô hình CNNs càng phức tạp thì h c càng lâu
Trong quá trình thực hiện đề tài, do hạn chế về mặt trình độ và thời gian, luận văn này vẫn còn nhiều điểm cần cải thiện Để phát triển hơn nữa trong tương lai, cần chú trọng vào những vấn đề còn sót lại và tìm cách nâng cao chất lượng nghiên cứu.
Tìm cách tăng độ chính xác tương đồng cho mô hình
Phát triển cho bộ dataset có kích thước lớn có nhiều nhãn dán hơn
Tìm kiếm nhiều đối tƣợng trong ảnh
DANH MỤC TÀI LIỆU THAM KHẢO
[1] TS Lê Xuân Vinh – Đại h c Quy Nhơn - Giáo trình Machine Learning, 2019
[2] Vũ Hữu Tiệp (2017) Machine Learning cơ bản http://machinelearningcoban.com/general/2017/02/06/featureengineering/
[3] Nguyễn Thanh Tuấn, “Sách Deep Learning cơ bản“, https://drive.google.com/file/d/1lNjzISABdoc7SRq8tg- xkCRRZRABPCKi/view, 2019
[4] Z Lai, H F Deng, Medical Image Classification Based on Deep Features
Extracted by Deep Model and Statistic Feature Fusion with Multilayer Perceptron, Comput Intell Neurosci, 2018;
[5] Hai Wang, Yingfeng Cai, Long Chen, A Vehicle Detection Algorithm
Based on Deep Belief Network , The Scientific World Journa, 2014;
[6] https://www.coursera.org/specializations/deep-learning;
[7] Liangji Zhou, Qingwu Li, Guanying Huo, Yan Zhou, Image
Classification Using Biomimetic Pattern Recognition with Convolutional Neural Networks Features, Computational Intelligence and Neuroscience, 2017
[8] Yu Sun, Yuan Liu, Guan Wang, Haiyan Zhang, Deep Learning for Plant
Identification in Natural Environment, Computational Intelligence and Neuroscience, 2017;
[9] Hai Wang, Yingfeng Cai, Long Chen, A Vehicle Detection Algorithm
Based on Deep Belief Network, Hindawi Publishing Corporatione The Scientific World Journal, 2014
[10] Shan Pang, Xinyi Yang, Deep Convolutional Extreme Learning Machine and Its Application in Handwritten Digit Classification, Hindawi Publishing Corporation Computational Intelligence and Neuroscience , 2016
[11] Srdjan Sladojevic, Marko Arsenovic, Andras Anderla, Dubravko
Culibrk, Darko Stefanovic, Deep Neural Networks Based
Plant Diseases by Leaf Image Classification, Hindawi Publishing Corporation Computational Intelligence and Neuroscience , 2016
[12] Wei Hu, Yangyu Huang, Li Wei, Fan Zhang, Hengchao Li, Deep
Convolutional Neural Networks for Hyperspectral Image Classification, Hindawi Publishing Corporation Journal of Sensors,
[13] Kumar, "Achieving 90% accuracy in Object Recognition Task on
CIFAR10 Dataset with Keras: Convolutional Neural Networks,"
[Online] Available: https://appliedmachinelearning.blog/2018/03/24/achieving-90- accuracy-in-object-recognition-task-on-cifar-10-dataset-with-keras- convolutional-neural-networks/, 2018
[14] Ling Zhang ; Bo Zhang, A geometrical representation of McCulloch-
Pitts neural model and its applications, IEEE Transactions on Neural Networks, 1999
[15] lJiuYang ab LidanWang ab YanWang ab TengtengGuo ab , A novel memristive
Hopfield neural network with application in associative memory, Neurocomputing, 2017
[16] Andrej Karpathy (n.d.) CS231n Convolutional Neural Networks for
Visual Recognition - Visualizing what ConvNets learn http://cs231n.github.io/understanding-cnn/
[17] http://bis.net.vn/forums/p/482/898.aspx
[18] https://www.oreilly.com/library/view/deeplearning/9781491924570 /assets/dpln_0408.png
Mã nguồn thuật toán trừ nền trong chương trình: from google.colab import drive drive.mount('gdrive')
To set up a deep learning environment for image classification using the CIFAR-10 dataset, first navigate to the appropriate directory in Google Drive Import necessary libraries including Keras and TensorFlow, and define key parameters such as batch size, number of classes, epochs, and the option for data augmentation The model architecture will utilize a Sequential model with layers including Conv2D, MaxPooling2D, Dense, Dropout, and Flatten, enabling effective training and prediction on the dataset Finally, prepare to visualize the results using Matplotlib after training the model for a specified number of epochs.
# The data, split between train and test sets:
The CIFAR-10 dataset is loaded using the command (x_train, y_train), (x_test, y_test) = cifar10.load_data(), revealing the shape of the training data as well as the number of training and test samples The dataset consists of 10 distinct classes, including airplane, automobile, bird, cat, deer, dog, frog, horse, ship, and truck A visual representation of the first 25 training samples is displayed in a 5x5 grid using Matplotlib, where each image is shown without ticks and grid lines, and labeled with its corresponding class name for easy identification.
To convert class vectors to binary class matrices, use `keras.utils.to_categorical()` for both training and test data The CNN model is defined using the Sequential API, starting with Conv2D layers for feature extraction, followed by MaxPooling2D layers to reduce dimensionality and Dropout layers to prevent overfitting The model includes several convolutional layers with ReLU activation, culminating in a Dense layer with softmax activation for classification After compiling the model with RMSprop optimizer and categorical crossentropy loss, the training data is normalized Finally, the model is trained using the `fit()` method, and the architecture is saved in JSON format along with the model weights in H5 format.
To evaluate the trained model, use the command `scores = model.evaluate(x_test, y_test, verbose=0)` and print the results, including 'Test loss' and 'Test accuracy' multiplied by 100 Save the model with `model.save("ngan_model")` To visualize the model's performance, plot the training and validation accuracy over epochs using `plt.plot(model_detail.history['accuracy'], label='accuracy')` and `plt.plot(model_detail.history['val_accuracy'], label='val_accuracy')`, labeling the axes accordingly and setting the y-axis limit between 0.5 and 1 Finally, re-evaluate the model with `test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)` and print the test accuracy.
## 10 Thử lại 1 ảnh model_json = model.to_json() print(model_json) plt.imshow(x_test[9999]) plt.show() img = x_test[9999].reshape(1, 32, 32, 3)
# prepare pixel data img = img.astype('float32') result = model.predict_classes(img) print(result)
# print('Giá trị dự báo: ', np.argmax(y_predict))
To save images using Keras, utilize the `save_img` function from the `keras.preprocessing.image` module in a loop, as demonstrated by saving ten images in the "test1" directory To load and preprocess images, employ the `load_img` and `img_to_array` functions, while for model operations, the `load_model` function from Keras is essential Additionally, visualizing results can be achieved through the `matplotlib.pyplot` library.
# load and prepare the image def load_image(filename):
# load the image img = load_img(filename, target_size=(32, 32)) plt.imshow(img) plt.show()
# convert to array img = img_to_array(img)
# reshape into a single sample with 3 channels img = img.reshape(1, 32, 32, 3)
# prepare pixel data img = img.astype('float32')
# load an image and predict the class def run_example(filename):
# load the image img = load_image(filename)
# predict the class result = model.predict_classes(img) print(class_names[result[0]])
To run the example, use the command `run_example('test1/0.png')` First, import the necessary modules by executing `from os import listdir` and `from os.path import isfile, join` Next, create a list of files in the "test1/" directory by filtering only the files with `onlyfiles = [f for f in listdir("test1/") if isfile(join("test1/", f))]`, and print this list using `print(onlyfiles)` Then, iterate through each file in the list and execute `run_example('test1/'+ii)` Repeat the process for the "test/" directory by importing the same modules and creating another list of files with `onlyfiles = [f for f in listdir("test/") if isfile(join("test/", f))]`, followed by printing the list and executing `run_example('test/'+ii)` for each file.