Kiểu mạng này được thiết kế đểgiảm thiểu số lượng thông tin cần xử lý bằng cách sử dụng bộ tích chập Convolutionalfilter để chiết xuất các đặc trưng quan trọng từ dữ liệu đầu vào.. CNN đ
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA CƠ KHÍ CHẾ TẠO MÁY
BỘ MÔN CƠ ĐIỆN TỬ
BÁO CÁO CUỐI KÌ TRÍ TUỆ NHÂN TẠO
NHẬN DIỆN CÔN TRÙNG BẰNG HÌNH ẢNH, XÁC ĐỊNH LOÀI CÔN TRÙNG VÀ ĐƯA RA THÔNG TIN VỀ CHÚNG
GVHD: PGS TS Nguyễn Trường Thịnh
Họ và tên: Tiết Nguyễn Hoàng Tấn ĐạtMSSV: 20146488
Năm học: 2022-2023
Trang 2MỤC LỤC
CHƯƠNG 1 GIỚI THIỆU 1
1.1 Giới thiệu tổng quát các loại côn trùng 1
1.2 Lý do chọn đề tài 2
1.3 Mục tiêu nghiên cứu 2
1.4 Phương pháp nghiên cứu 2
1.5 Nội dung báo cáo 3
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 4
2.1 Thuật toán CNN - Convolutional Neural Network 4
2.1.1 Convolutional Neural Network là gì 4
2.1.2 Cấu trúc của mạng CNN 5
2.2 Thư viện Tensorflow 7
2.3 Thư viện Keras 8
2.4 Thư viện Scikit-learn 8
CHƯƠNG 3 ỨNG DỤNG 10
3.1 Xây dựng mô hình - Trainning models 10
3.1.1 Dữ liệu 10
3.1.2 Xây dựng mô hình 10
3.2 Giao diện trên PyCharm 18
CHƯƠNG 4 KẾT QUẢ 20
CHƯƠNG 5 KẾT LUẬN 25
Trang 3CHƯƠNG 1 GIỚI THIỆU1.1 Giới thiệu tổng quát các loại côn trùng
Hình 1.1 Các loài côn trùngCôn trùng hay còn gọi là sâu bọ, là một lớp (sinh vật) thuộc về ngành động vậtkhông xương sống, chúng có bộ xương ngoài làm bằng kitin
Cơ thể chúng có ba phần (đầu, ngực và bụng), ba cặp chân, mắt kép và mộtcặp râu Côn trùng là nhóm động vật đa dạng nhất hành tinh, gồm hơn một triệu loài đãđược mô tả và gồm hơn một nửa số sinh vật sống
Số loài còn sinh tồn được cho là từ 6 – 10 triệu loài, và đại diện cho 90% dạngsống của các loài động vật khác nhau trên Trái Đất Côn trùng có thể sống được ở hầu hếtcác môi trường sống, mặc dù chỉ có số ít các loài sống ở biển và đại dương, nơi mà độngvật giáp xác chiếm ưu thế hơn
Côn trùng chia ra nhiều loài, tùy loại mà chúng vô hại và gây hại cho con người.Hầu hết chúng ta đều không ý thức được rằng, lợi ích lớn nhất của côn trùng chính là cácloài ăn côn trùng Ví dụ nhiều loài côn trùng như châu chấu có thể sinh sản nhanh đến nỗi
mà chúng có thể bao phủ Trái Đất chỉ trong một mùa sinh sản Tuy Chỉ khoảng 0.1% cácloài côn trùng là có hại cho con người Nhiều côn trùng được coi là những con vật có hạicho con người vì chúng truyền bệnh (ruồi, muỗi), phá hủy các công trình (mối), hay làm
Trang 41.2 Lý do chọn đề tài
Như đã đề cập ở trên tuy chỉ có 0.1% các loài gây hại cho con người nhưng chúng
ta cũng không nên không đề phòng chúng vì chúng có thể gây hại nghiêm trọng chochúng ta theo nhiều cách khác nhau Việt Nam nằm trong khu vực khí hậu nhiệt đới giómùa, là nơi có điều kiện thuận lợi cho việc sinh trưởng và phát triển của các loại côntrùng Một số loài côn trùng thường xuất hiện xung quanh cuộc sống của chúng ta phải kểđến : muỗi, ruồi, kiến, mối, gián,…Chúng luôn là mối đe dọa trong cuộc sống của mỗingười, nào là sốt xuất huyết, bệnh truyền nhiễm, nhiễm trùng từ đường ruột…
Hình 1.2 Ví dụ một số loài gây hại
Hình 1.3 Một số bệnh do côn trùng gây hại gây ra cho người
1.3 Mục tiêu nghiên cứu
Xây dựng mô hình chuẩn đoán các loại côn trùng bằng hình ảnh và đưa ra cách xử lí
Đưa mô hình chuẩn đoán vào giao diện thông qua nền tảng phần mềm PyCharm1.4 Phương pháp nghiên cứu
Tìm hiểu đặc điểm nhận dạng của côn trùng, tiến hành lấy dữ liệu
Xây dựng Model Training trên Google Colab sau đó tiến hành chạy thử và kiểmchứng
Trang 51.5 Nội dung báo cáo
Bài báo cáo tập trung vào việc nghiên cứu phương pháp tạo và training mô hìnhbằng CNN sao cho độ chính xác đạt cao nhất Từ đó đưa ra chuẩn đoán chính xác loạicôn trùng mà người sử dụng muốn biết để xử lí
Bài báo cáo bao gồm các chương như sau: cơ sở lí thuyết, ứng dụng, kết quả vàkết luận
Trang 6CHƯƠNG 2 CƠ SỞ LÍ THUYẾT2.1 Thuật toán CNN - Convolutional Neural Network
2.1.1 Convolutional Neural Network là gì
Convolutional Neural Network được viết tắt là CNN còn được gọi bằng tiếng Việt
là mạng thần kinh tích chập, là một loại kiến trúc mạng thần kinh nhân tạo được sử dụngrộng rãi trong việc xử lí ảnh và nhận dạng đối tượng Kiểu mạng này được thiết kế đểgiảm thiểu số lượng thông tin cần xử lý bằng cách sử dụng bộ tích chập (Convolutionalfilter) để chiết xuất các đặc trưng quan trọng từ dữ liệu đầu vào Sau đó, các tầng kết nốiđầy đủ (fully connected layers) được sử dụng để phân loại hoặc phân đoạn ảnh
Phép tích chập (Convolution) là một phép tính toán trong đó hai hàm được kết nốithông qua phép lật lọc Trong mạng CNN, thường xử lí hình ảnh thông qua vùng ảnh(hay một ma trận tương ứng) Bộ lọc (hay Kernel) được sử dụng trong phép tích chập làmột ma trận có kích thước nhỏ hơn (thường là 3x3 hoặc 5x5) Bằng cách trượt bộ lọctrên đầu vào (có thể là ảnh), phép tích chập tạo ra một đầu ra mới
Hình 1.4 Ví dụ về Convolution
Trang 7CNN được sử dụng rộng rãi trong các ứng dụng liên quan đến hình ảnh như nhậndạng khuôn mặt, phân loại ảnh, phát hiện đối tượng, phân đoạn ảnh, trích xuất đặc trưng,
và nhiều ứng dụng khác Với các đặc tính như khả năng học và tự động điều chỉnh, CNNgiúp giải quyết nhiều bài toán phức tạp trong lĩnh vực computer vision (thị giác máy tính).2.1.2 Cấu trúc của mạng CNN
Mạng Convolutional Neural Network (CNN) là một kiến trúc mạng nơ-ron đượcthiết kế để xử lý các dữ liệu đầu vào có cấu trúc, chẳng hạn như hình ảnh hoặc âm thanh.Cấu trúc của một mạng CNN bao gồm các lớp ở các mức độ khác nhau, như sau:
Lớp Convolutional (Convolutional Layer): Lớp này cần một số lượng bộ lọc (filters)dùng để trích xuất các đặc trưng cục bộ Mỗi bộ lọc là một ma trận được liên kết vớimột vùng của đầu vào và tích chập giữa bộ lọc và vùng đầu vào cho ra đầu ra Sốlượng bộ lọc là một tham số có thể điều chỉnh trong quá trình huấn luyện của môhình
Lớp ReLU (Rectified Linear Unit Layer): Lớp này thực hiện một hàm ẩn số phi tuyếntính (non-linear activation function), thường là hàm ReLU, trên toàn bộ đầu ra củalớp Convolutional
Lớp Pooling (Pooling Layer): Lớp này thực hiện việc giảm kích thước đầu ra thôngqua việc giữ lại thông tin quan trọng nhất Có nhiều kiểu Pooling khác nhau, ví dụnhư Max Pooling hoặc Average Pooling
Lớp Fully Connected (Fully Connected Layer): Lớp này tạo ra các thông tin kết nốiđầy đủ giữa các đặc trưng đầu ra từ lớp trước đó với đầu ra duy nhất Các lớp FullyConnected thường được sử dụng ở cuối kiến trúc CNN để phân loại hoặc dự đoán
Lớp softmax: Lớp này được sử dụng để chuyển đổi đầu ra cuối cùng thành một phânphối xác suất cho các lớp của bài toán phân loại
Trang 8Hình 1.5 Minh họa cấu trúc của CNNThuật toán của CNN bao gồm các bước sau:
Tạo ra một tầng đầu vào, bao gồm một bức ảnh hoặc một tập các bức ảnh để xử lý
Áp dụng các bộ lọc tích chập (convolutional filters) để chiết xuất các đặc trưng quantrọng từ đầu vào Bộ lọc tích chập chuyển các pixel liền kề trong bức ảnh thành cácgiá trị tổng hợp đại diện cho các đặc trưng của ảnh, gọi là feature maps Với mỗi bứcảnh và mỗi bộ lọc, tạo ra nhiều feature maps để giúp mô hình hiểu các đặc trưng vềbức ảnh
Sử dụng hàm kích hoạt (activation function) để chuyển đổi giá trị tổng hợp củafeature maps thành các giá trị phi tuyến tính, giúp mô hình học được các quan hệphức tạp giữa các đặc trưng
Áp dụng lớp giảm mẫu (pooling layer) để giảm kích thước của feature maps và giảmthiểu số lượng thông tin xử lý Lớp giảm mẫu chọn ra giá trị lớn nhất hoặc trung bìnhcủa một vùng nhỏ của feature maps và đưa ra giá trị đại diện cho vùng đó
Lặp lại các bước 2 đến 4 với nhiều tầng tích chập và giảm mẫu để chiết xuất các đặctrưng phức tạp hơn từ đầu vào
Cuối cùng sử dụng các lớp kết nối đầy đủ (fully connected layers) để phân loại ảnhđầu vào thành các lớp khác nhau Các lớp kết nối đầy đủ sẽ xử lý các đặc trưng đãđược trích xuất và tạo ra các đầu ra phân loại
Trang 9 Sử dụng hàm mất mát (loss function) để đánh giá hiệu suất của mô hình và điềuchỉnh các tham số trong quá trình huấn luyện để cải thiện độ chính xác của mô hình.
Sử dụng phương pháp lan truyền ngược (backpropagation) và thuật toán gradientdescent để điều chỉnh các tham số của mô hình để cực tiểu hóa hàm mất mát
Lặp lại quá trình huấn luyện và kiểm tra trên các tập dữ liệu khác nhau để đánh giáhiệu suất và tinh chỉnh mô hình
2.2 Thư viện Tensorflow
Tensorflow là một thư viện mã nguồn mở phục vụ cho hoạt động MachineLearning Nó được xây dựng và phát triển bởi chính Google Trong quy trình phát triểnmột phần mềm bất kỳ đòi hỏi rất nhiều đoạn mã cũng như thuật toán được triển khai.Thuật toán vừa để phân tích, tổng hợp dữ liệu vừa là nền tảng để phần mềm có thể khởichạy Tuy nhiên chương trình càng lớn thì khối lượng phép toán càng nhiều Cách tínhtoán thủ công không thể đảm bảo hiệu suất như mong muốn được Vì thế Tensorflowxuất hiện như một chương trình hỗ trợ tính toán bằng cách tiếp cận mạnh mẽ các phéptính và bài toán phức tạp Nhờ có Tensorflow, người dùng có thể đơn giản hóa toán họcthông qua các đồ thị luồng dữ liệu tổng hợp Ngoài ra, không thể không kể đến các ứngdụng của Tensorflow như:
Tích hợp sẵn rất nhiều các thư viện machine learning
Có khả năng tương thích và mở rộng tốt Được Google phát triển cho machinelearning phục vụ cả nghiên cứu lẫn xây dựng các ứng dụng thực tế
Sử dụng TensorFlow, ta có thể xây dựng các kiến trúc mạng nơ-ron như fullyconnected, convolutional neural network, và recurrent neural network Nó cũng cung cấpcác công cụ để xử lý và trực quan hóa dữ liệu, đồng thời tăng tốc quá trình huấn luyệnqua việc sử dụng GPU hoặc TPU
Như đã nêu ở phần trên, Tensorflow vốn được phát triển từ Python Vì thế bản thânTensorflow cũng là một ứng dụng Python Còn các nodes và tensor trong Tensorflow lànhững đối tượng thuộc Python Điều này giúp ích rất nhiều cho lập trình viên Pythonvốn là một hệ thống dễ sử dụng, nó cho phép các đối tượng trừu tượng bậc cao có thể dễ
Trang 10dàng kết hợp với nhau Chính nhờ sự giúp đỡ đắc lực này, quá trình phát triển phần mềmđược đơn giản hóa đi rất nhiều
2.3 Thư viện Keras
Keras chạy trên các thư viện máy mã nguồn mở như TensorFlow, Theano hoặc Bộcông cụ nhận thức (CNTK) Keras cung cấp một API đơn giản và dễ sử dụng, giúp choviệc xây dựng mô hình nhanh chóng và dễ dàng hơn so với việc sử dụng các thư việnkhác
Keras dựa trên cấu trúc tối thiểu, cung cấp một cách dễ dàng và dễ dàng để tạo các
mô hình học sâu dựa trên TensorFlow hoặc Theano Keras được thiết kế để xác địnhnhanh các mô hình học sâu Chà, Keras là một lựa chọn tối ưu cho các ứng dụng học sâu.Keras tận dụng các kỹ thuật tối ưu hóa khác nhau để làm cho API mạng thần kinhcấp cao dễ dàng hơn và hiệu quả hơn Nó hỗ trợ các tính năng sau:
API nhất quán, đơn giản và có thể mở rộng
Cấu trúc tối thiểu - dễ dàng đạt được kết quả mà không cần rườm rà
Hỗ trợ nhiều nền tảng và backend
Hỗ trợ CPU và GPU
Khả năng mở rộng tính toán cao
Keras năng động, mạnh mẽ và có những ưu điểm sau
Cộng đồng lớn hỗ trợ, dễ dàng cho người mới bắt đầu
Dễ dàng để kiểm tra
Mạng nơ-ron Keras được viết bằng Python giúp mọi thứ đơn giản hơn.Keras được sử dụng rộng rãi trong các ứng dụng phân loại ảnh, xử lý ngôn ngữ tựnhiên và dự báo chuỗi thời gian Nó cũng được sử dụng trong các bài toán phân loại đanhãn, phân đoạn ảnh và mô hình học sâu khác
2.4 Thư viện Scikit-learn
Scikit-learn là một thư viện mã nguồn mở phát triển trên ngôn ngữ lập trìnhPython Thư viện này cung cấp các công cụ cho các tác vụ phân tích dữ liệu, học máy vàkhai phá dữ liệu
Trang 11Scikit-learn bao gồm các thuật toán học máy cho các tác vụ như phân loại, dựđoán, cụ thể là phân loại hồi quy tuyến tính và phi tuyến tính, phân loại cây quyết định,phân loại Naive Bayes, v.v Nó cũng bao gồm các công cụ cho phân tích và khai phá dữliệu, chẳng hạn như chuẩn hoá dữ liệu và trích xuất đặc trưng.
Scikit-learn cho phép người dùng tùy chỉnh các thuật toán học máy và sử dụngchúng trong các dự án của riêng họ Nó cũng cung cấp các hàm xác định để đánh giá hiệusuất của các thuật toán học máy và đưa ra dự đoán về các kết quả mong đợi
Scikit-learn được đánh giá là một trong những thư viện học máy hàng đầu hiệnnay, với khả năng tương thích với các thư viện khác của Python như NumPy và Pandas.Việc sử dụng scikit-learn giúp người dùng tiết kiệm thời gian và nỗ lực trong các tác vụphân tích dữ liệu và học máy
Trang 123.1 Xây dựng mô hình - Trainning models
Để xây dụng mô hình dữ liệu, em sử dụng Google Colab để trainning và xây dựng môhình
3.1.1 Dữ liệu
Với mô hình nghiên cứu này, em sử dụng dữ liệu hình ảnh bao gồm 2350 hình ảnh dữliệu trong đó với 2000 hình dùng để train dữ liệu và 350 hình dùng test mô hình, với 15loại côn trùng
3.1.2 Xây dựng mô hình
Liên kết Google Drive chứa folder hình ảnh dùng để làm train và test
from google.colab import drive
from glob import glob
from keras.modelsimport Sequential,Model
from keras.modelsimport load_model
from keras.utils import load_img
from keras.layersimport LeakyReLU
from keras.optimizers import Adam
from keras.layersimport Dense, Dropout, Flatten,Activation
from keras.layersimport Conv2D, MaxPooling2D, Conv3D,
BatchNormalization
from keras.utils.image_utils import img_to_array
Tạo biến để liên kết đường dẫn vào folder chứa hình ảnh train và test
Trang 13*Các tham số của ImageDataGenerator:
+ rescale: Là tham số để thay đổi tỷ lệ giá trị pixel của hình ảnh, ở đây tỷ lệ sử dụng là1/255 để chuẩn hóa giá trị pixel về khoảng từ 0 đến 1
+ rotation_range: Là số độ (0 đến 180 độ) mà ảnh có thể được xoay ngẫu nhiên trong quátrình huấn luyện mô hình
+ horizontal_flip: Là giá trị boolean (True hoặc False) cho biết liệu ảnh có nên được lậtngang ngẫu nhiên trong quá trình huấn luyện mô hình
+ vertical_flip: Là giá trị boolean (True hoặc False) cho biết liệu ảnh có nên được lật dọcngẫu nhiên trong quá trình huấn luyện mô hình
+ zoom_range: Là khoảng tăng (hoặc giảm) kích thước của ảnh, theo độ lớn từ 0 đến 1
Tạo hai biến để truyền vào đường dẫn của thư mục chứa các hình ảnh huấn luyệntrain_set = data_train.flow_from_directory(folder_train,
target_size=(128, 128), batch_size=20, class_mode='categorical')test_set = data_test.flow_from_directory(folder_test, target_size=(128,
128), batch_size=20, class_mode='categorical')
Trong đó:
+ target_size: kích thước ảnh
+ batch_size: số lượng ảnh trong mỗi batch
+ class_mode: cách mã hóa nhãn theo ‘categorical’
Trang 14 Thông tin chỉ số của mô hình để kiểm tra tính đúng của quá trình tải dữ liệutrain_set.class_indices
test_set.class_indices
=> ta thu được kết quả của quá trình trên như sau:
Tiến hành tạo list các class vừa mới thu được
insect = { :0 'BoCanhCung', 1 'BoNgua', 2 'BoRua', 3 'Buom', 4
'ChauChau', 5 'ChuonChuon', 6 'De', 7 'Kien', 8 'Muoi', 9 'Ong',10: 'Rep', 11: 'Ret', 12: 'Ruoi', 13: 'Sau', 14: 'VeSau'
Khởi tạo mô hình nơ-ron tích chập cơ bản để phân loại ảnh
model.add(MaxPooling2D(( ,2 2),padding = 'same'))
model.add(Conv2D(64,( ,3 3),activation = 'linear',padding = 'same'))
Trang 15model.add(LeakyReLU(alpha = 0.1))
model.add(MaxPooling2D(( ,2 2),padding = 'same'))
model.add(Conv2D(128,( ,3 3),activation = 'linear',padding = 'same'))model.add(LeakyReLU(alpha = 0.1))
model.add(MaxPooling2D(( ,2 2),padding = 'same'))
model.add(Conv2D(256,( ,3 3),activation = 'linear',padding = 'same'))model.add(LeakyReLU(alpha = 0.1))
model.add(MaxPooling2D(( ,2 2),padding = 'same'))
- Các lớp mạng được định nghĩa theo thứ tự sau:
+ Lớp đầu tiên là lớp Conv2D với 32 bộ lọc, kích thước kernel là (3,3), hàm kích hoạtđược sử dụng là 'linear' và đầu vào của lớp là hình ảnh có kích thước 128x128 và 3 kênhmàu (RGB)
+ Tiếp theo là lớp LeakyReLU với hệ số rò rỉ (alpha) là 0.1 Lớp này giúp mô hình tránhđược tình trạng giảm gradient khi sử dụng hàm kích hoạt ReLU
+ Sau đó là lớp MaxPooling2D với kích thước cửa sổ là (2,2) Lớp MaxPooling2D giúpgiảm kích thước của ảnh và giảm số lượng tham số của mô hình
+ Tiếp đó, lặp lại cấu trúc với các lớp Conv2D, LeakyReLU và MaxPooling2D để tạo racác feature maps sâu hơn