Chương 1. Giới thiệu tổng quan 1.1. Giới thiệu đề tài. Hiện nay, ở nước ta nói riêng và ở các nước đang phát triển có nền nông nghiệp là một trong các ngành sản xuất chủ yếu, quá trình thu hoạch, phân loại và đánh giá chất lượng các loại sản phẩm nông nghiệp, đặc biệt là các loại hoa quả, chủ yếu còn phải thực hiện bằng các phương pháp thủ công. Đây là công việc không quá khó, nhưng tiêu tốn nhiều thời gian, công sức của con người và là rào cản đối với mở rộng phát triển quy mô sản xuất nông nghiệp. Do đó, nhiều phương pháp tự động hóa công việc thu hoạch, nhận dạng và đánh giá chất lượng hoa quả đã được nghiên cứu và đưa vào ứng dụng thực tế, trong đó sử dụng chủ yếu các phương pháp Xử lý ảnh đơn thuần. Tuy nhiên, các phương pháp này vẫn chưa thực sự thỏa mãn yêu cầu về khả năng nhận dạng một số lượng lớn các loại hoa quả với độ chính xác cao do bị hạn chế bởi các đặc trưng của bài toán phân loại hoa quả hư hay tốt: sự biến thiên về hình dạng, màu sắc, chi tiết trong từng loại quả cũng rất khó dự đoán trước… Trong thời gian gần đây, nhờ có sự phát triển mạnh mẽ về khả năng tính toán của các thế hệ máy tính hiện đại cũng như sự bùng nổ về dữ liệu thông qua mạng lưới Internet trải rộng, ta đã chứng kiến nhiều sự đột phá trong lĩnh vực Học máy, đặc biệt là trong lĩnh vực Thị giác máy tính. Sự quay lại và phát triển vượt bậc của các phương pháp Học sâu đã giúp Thị giác máy tính đạt được những thành tựu đáng kể trong lĩnh vực Nhận dạng ảnh, trong đó có bài toán phân loại hoa quả hư hay tươi. Đề tài nghiên cứu “Phân loại trái cây hư hay tươi.” đã được đưa ra với hy vọng có thể ứng dụng thành công các mô hình học sâu hiện đại để xây dựng một hệ thống phân loại hoa quả tự động, đặc biệt là đối với các loại hoa quả phổ biến tại nước ta.
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
KHOA ĐIỆN ĐIỆN TỬ
BỘ MÔN KỸ THUẬT MÁY TÍNH - VIỄN THÔNG
BÁO CÁO MÔN HỌC MACHINE LEARNING
PHÂN LOẠI TRÁI CÂY HƯ HAY TƯƠI
NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN MÁY TÍNH
Trang 2BẢN NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Trang 3
Tuy nhiên trong quá trình nghiên cứu đề tài, do kiến thức chuyên ngành còn hạn chếnên 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
Trang 4Mục lục
Chương 1 Giới thiệu tổng quan 1
1.1 Giới thiệu đề tài 1
1.2 Mục tiêu 1
1.3 Thách thức 1
Những khó khăn tiêu biểu phải kể đến: 1
1.4 Giới hạn đề tài 4
Chương 2 Mạng nơ-ron tích chập (CNN) 5
2.1 Giới thiệu mạng nơ-ron tích chập 5
2.2 Kiến trúc Mạng nơ-ron tích chập 5
2.3 Sử dụng CNN trong model 8
Chương 3 Datashet và phương pháp đánh giá 11
3.1 Bộ datashet sử dụng 11
3.2 Môi trường huấn luyện 12
3.3 Phương pháp đánh giá 13
3.4 Đánh giá model 14
Chương 4 Kết quả 16
4.1 Đồ thị Loss và Accuracy 16
4.2 Kết quả 16
Chương 5 Kết luận 20
TÀI LIỆU THAM KHẢO 21
Trang 5Danh mục hình vẽ
Hình 1: Vật thể đa dạng về góc nhìn 2
Hình 2: Vật thể đa dạng về kích thước, hình dạng, số lượng 2
Hình 3: Vật thể đa dạng về chủng loại 3
Hình 4: Vật thể bị nhiễu hạt 3
Hình 5: Vật thể bị lẫn vào nền 3
Hình 6: Kiến trúc cơ bản của một mạng tích chập 5
Hình 7: Ví dụ bộ lọc tích chập được sử dụng trên ma trận điểm ảnh 6
Hình 8: Trường hợp thêm/không thêm viền trắng vào ảnh khi tích chập 6
Hình 9: Phương thức Avarage Pooling và Max Pooling 7
Hình 10: Model dự án 9
Hình 11: Bộ datashet lấy từ trang Kaggle.com 10
Hình 12: Chia bộ train tổng thành 2 bộ nhỏ là train và validation 10
Hình 13: Data trong bộ train 11
Hình 14: Data trong bộ validation 11
Hình 15: Data trong bộ test 11
Hình 16: Notebook trên kaggle 12
Hình 17: Phương pháp Hold out 13
Hình 18: Đưa bộ train và bộ test vào để train model 13
Hình 19: Kết quả sau khi train xong model 13
Hình 20: Đánh giá model bằng bộ test 14
Hình 21: Gọi lại model lần nữa để đánh giá 14
Hình 22: Đồ thị Loss và Accuracy 15
Trang 6Danh mục từ viết tắt
1 CNN Convolutional Neural Network – Mạng nơ ron tích chập
2 ReLU Rectified Linear Unit – Tinh chỉnh đơn vị tuyến tính
Trang 7Chương 1 Giới thiệu tổng quan
1.1 Giới thiệu đề tài.
Hiện nay, ở nước ta nói riêng và ở các nước đang phát triển có nền nông nghiệp
là một trong các ngành sản xuất chủ yếu, quá trình thu hoạch, phân loại và đánh giá
chất lượng các loại sản phẩm nông nghiệp, đặc biệt là các loại hoa quả, chủ yếu còn
phải thực hiện bằng các phương pháp thủ công Đây là công việc không quá khó,
nhưng tiêu tốn nhiều thời gian, công sức của con người và là rào cản đối với mở rộng
phát triển quy mô sản xuất nông nghiệp Do đó, nhiều phương pháp tự động hóa công
việc thu hoạch, nhận dạng và đánh giá chất lượng hoa quả đã được nghiên cứu và đưa
vào ứng dụng thực tế, trong đó sử dụng chủ yếu các phương pháp Xử lý ảnh đơn
thuần Tuy nhiên, các phương pháp này vẫn chưa thực sự thỏa mãn yêu cầu về khả
năng nhận dạng một số lượng lớn các loại hoa quả với độ chính xác cao do bị hạn chế
bởi các đặc trưng của bài toán phân loại hoa quả hư hay tốt: sự biến thiên về hình
dạng, màu sắc, chi tiết trong từng loại quả cũng rất khó dự đoán trước…
Trong thời gian gần đây, nhờ có sự phát triển mạnh mẽ về khả năng tính toán
của các thế hệ máy tính hiện đại cũng như sự bùng nổ về dữ liệu thông qua mạng lưới
Internet trải rộng, ta đã chứng kiến nhiều sự đột phá trong lĩnh vực Học máy, đặc biệt
là trong lĩnh vực Thị giác máy tính Sự quay lại và phát triển vượt bậc của các phương
pháp Học sâu đã giúp Thị giác máy tính đạt được những thành tựu đáng kể trong lĩnh
vực Nhận dạng ảnh, trong đó có bài toán phân loại hoa quả hư hay tươi Đề tài nghiên
cứu “Phân loại trái cây hư hay tươi.” đã được đưa ra với hy vọng có thể ứng dụng
thành công các mô hình học sâu hiện đại để xây dựng một hệ thống phân loại hoa quả
tự động, đặc biệt là đối với các loại hoa quả phổ biến tại nước ta
Những khó khăn tiêu biểu phải kể đến:
- Sự đa dạng trong điểm nhìn – Viewpoint: Cùng một vật thể nhưng có thể có
rất nhiều vị trí và góc nhìn khác nhau, dẫn đến các hình ảnh thu được về vật thể đó sẽ
không giống nhau Việc huấn luyện để máy tính có thể hiểu được điều này thực sự là
một thách thức khó khăn
Trang 8Hình 1: Vật thể đa dạng về góc nhìn.
- Sự đa dạng trong kích thước, số lượng, hình dạng: Các bức ảnh không có
cách nào thể hiện trường thông tin về kích thước, số lượng, hình dạng của vật thể
trong đời thực, và máy tính cũng chỉ có thể tính toán được tỉ lệ tương đối của vật thể
so với bức ảnh bằng cách đếm theo số lượng các điểm ảnh vật thể đó chiếm trong ảnh
Hình 2: Vật thể đa dạng về kích thước, hình dạng, số lượng.
Trang 9Hình 3: Vật thể đa dạng về chủng loại.
- Vật thể bị nhiễu hạt: Trong các bức ảnh, vật thể có thể bị nhiễu bởi các hạt
chấm đen nhỏ, do ảnh bị hư bi nhiễu điều này làm cho kết quả có phần bị sai sót
Hình 4: Vật thể bị nhiễu hạt.
- Sự lộn xộn phức tạp của nền: Trong nhiều trường hợp, vật thể cần nhận dạng
bị lẫn gần như hoàn toàn vào nền của bức ảnh, sự lẫn lộn về màu sắc, họa tiết giữa vật
thể và nền khiến cho việc nhận dạng trở nên vô cùng khó khăn, kể cả với con người
Trang 10Hình 5: Vật thể bị lẫn vào nền.
1.4 Giới hạn đề tài.
- Vì đề mục tiêu ở trên nhóm đưa ra phân biệt trái cây hư hay tốt, trong 3 loại
trái cây: Táo, cam, chuối, nên mô hình của nhóm chỉ thực hiện phân loại trái cây hư
hay tốt, không nhận biết được là loại trái cây nào, các hình ảnh đã được tách riêng
từng trái cây trong 1 hình không lẫn lộn nhiều loại trái cây, hình ảnh có các trái cây hư
hết hoặc tốt hết không phân biệt được trái nào hư trái nào tốt
Trang 11Chương 2 Mạng nơ-ron tích chập (CNN)
2.1 Giới thiệu mạng nơ-ron tích chập.
Mạng nơ-ron tích chập (CNN - Convolutional Neural Network) là một trong
những mô hình mạng Học sâu phổ biến nhất hiện nay, có khả năng nhận dạng và phân
loại hình ảnh với độ chính xác rất cao, thậm chí còn tốt hơn con người trong nhiều
trường hợp Mô hình này đã và đang được phát triển, ứng dụng vào các hệ thống xử lý
ảnh lớn của Facebook, Google hay Amazon… cho các mục đích khác nhau như các
thuật toán tagging tự động, tìm kiếm ảnh hoặc gợi ý sản phẩm cho người tiêu dùng
Sự ra đời của mạng CNN là dựa trên ý tưởng cải tiến cách thức các mạng nơ-ron
nhân tạo truyền thống học thông tin trong ảnh Do sử dụng các liên kết đầy đủ giữa các
điểm ảnh vào node, các mạng nơ-ron nhân tạo truyền thẳng (Feedforward Neural
Network) bị hạn chế rất nhiều bởi kích thước của ảnh, ảnh càng lớn thì số lượng liên
kết càng tăng nhanh và kéo theo sự bùng nổ khối lượng tính toán Ngoài ra sự liên kết
đầy đủ này cũng là sự dư thừa khi với mỗi bức ảnh, các thông tin chủ yếu thể hiện qua
sự phụ thuộc giữa các điểm ảnh với những điểm xung quanh nó mà không quan tâm
nhiều đến các điểm ảnh ở cách xa nhau Mạng CNN ra đời với kiến trúc thay đổi, có
khả năng xây dựng liên kết chỉ sử dụng một phần cục bộ trong ảnh kết nối đến node
trong lớp tiếp theo thay vì toàn bộ ảnh như trong mạng nơ-ron truyền thẳng
2.2 Kiến trúc Mạng nơ-ron 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 (Convolutional),
Lớp kích hoạt phi tuyến ReLU (Rectified Linear Unit), Lớp lấy mẫu (Pooling) và Lớp
kết nối đầy đủ (Fully-connected), được thay đổi về số lượng và cách sắp xếp để tạo ra
các mô hình huấn luyện phù hợp cho từng bài toán khác nhau
Hình 6: Kiến trúc cơ bản của một mạng tích chập.
- Lớp tích chập:
Đây là thành phần quan trọng nhất trong mạng CNN, cũng là nơi 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
Trang 12Hình 7: Ví dụ bộ lọc tích chập được sử dụng trên ma trận điểm ảnh.
Trong ví dụ ở hình 7, ta thấy bộ lọc được sử dụng là một ma trận có kích thước
3x3 Bộ lọc này được dịch chuyển lần lượt qua từng vùng ảnh đến khi hoàn thành quét
toàn bộ bức ảnh, tạo ra một bức ảnh mới có kích thước nhỏ hơn hoặc bằng với kích
thước ảnh đầu vào Kích thước này được quyết định tùy theo kích thước các khoảng
trắng được thêm ở viền bức ảnh gốc và được tính theo công thức (1)
O= i+2∗p−k s +1(1)
Trong đó:
- o: kích thước ảnh đầu ra
- i: kích thước ảnh đầu vào
- p: kích thước khoảng trắng phía ngoài viền của ảnh gốc
- k: kích thước bộ lọc
- s: bước trượt của bộ lọc
Trang 13Hình 8: Trường hợp thêm/không thêm viền trắng vào ảnh khi tích chập.
Như vậy, sau khi đưa một bức ảnh đầu vào cho lớp Tích chập ta nhận được kết
quả đầu ra là một loạt ảnh tương ứng với các bộ lọc đã được sử dụng để 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 xuyên suốt quá trình huấn luyện
- Lớp kích hoạt phi tuyến ReLU:
Lớp này được xây dựng với ý nghĩa đảm bảo tính phi tuyến của mô hình huấn
luyện sau khi đã thực hiện một loạt các phép tính toán tuyến tính qua các lớp Tích
chập Lớp Kích hoạt phi tuyến nói chung sử dụng các hàm kích hoạt phi tuyến như
ReLU hoặc sigmoid, tanh… để giới hạn phạm vi biên độ cho phép của giá trị đầu ra
Trong số các hàm kích hoạt này, hàm ReLU được chọn do cài đặt đơn giản, tốc độ xử
lý nhanh mà vẫn đảm bảo được tính toán hiệu quả Cụ thể, phép tính toán của hàm
ReLU chỉ đơn giản là chuyển tất cả các giá trị âm thành giá trị 0
f(x)=max(0 ,x)(2)
Thông thường, lớp ReLU được áp dụng ngay phía sau lớp Tích chập, với đầu ra
là một ảnh mới có kích thước giống với ảnh đầu vào, các giá trị điểm ảnh cũng hoàn
toàn tương tự trừ các giá trị âm đã bị loại bỏ
- Lớp lấy mẫu:
Một thành phần tính toán chính khác trong mạng CNN là lấy mẫu (Pooling),
thường được đặt sau lớp Tích chập và lớp ReLU để làm giảm kích thước kích thước
ảnh đầu ra trong khi vẫn giữ được các thông tin quan trọng của ảnh đầu vào Việc giảm
kích thước dữ liệu có tác dụng làm giảm được số lượng tham số cũng như tăng hiệu
quả tính toán Lớp lấy mẫu cũng sử dụng một cửa sổ trượt để quét toàn bộ các vùng
trong ảnh tương tự như lớp Tích chập, và thực hiện phép lấy mẫu thay vì phép tích
chập – tức là ta sẽ chọn lưu lại một giá trị duy nhất đại diện cho toàn bộ thông tin của
vùng ảnh đó
Hình 9 thể hiện các phương thức lấy mẫu thường được sử dụng nhất hiện nay, đó là
Max Pooling (lấy giá trị điểm ảnh lớn nhất) và Avarage Pooling (lấy giá trị trung bình
của các điểm ảnh trong vùng ảnh cục bộ)
Trang 14Hình 9: Phương thức Avarage Pooling và Max Pooling.
Như vậy, với mỗi ảnh đầu vào được đưa qua lấy mẫu ta thu được một ảnh đầu ra
tương ứng, có kích thước giảm xuống đáng kể nhưng vẫn giữ được các đặc trưng cần
thiết cho quá trình tính toán sau này
- Lớp kết nối đầy đủ:
Lớp kết nối đầy đủ này được thiết kế hoàn toàn tương tự như trong mạng nơ-ron
truyền thống, tức là tất cả các điểm ảnh được kết nối đầy đủ với node trong lớp tiếp
theo So với mạng nơ-ron truyền thống, các ảnh đầu vào của lớp này đã có kích thước
được giảm bớt rất nhiều, đồng thời vẫn đảm bảo các thông tin quan trọng cho việc nhận
dạng Do vậy, việc tính toán nhận dạng sử dụng mô hình truyền thẳng đã không còn
phức tạp và tốn nhiều thời gian như trong mạng nơ ron truyền thống
2.3 Sử dụng CNN trong model.
Hình 10 thể hiện model có sử dụng 3 lớp layer để trích xuất đặc trưng, 1 lớp
Fully Connected Layer để kết nối các đặc trưng lại cho ra được kết quả
Đối với Pooling layer, chúng ta chỉ có hyper-parameters do người dùng thiết lập
lúc đầu là Filter size, Stride và Filter type (Max hoặc Avg Pooling) mà không có các
parameters được học trong quá trình huấn luyện Do đó, trong nhiều trường hợp chúng
ta thường coi Convolutional Layer + Pooling layer là 1 Layer
Ở lớp layer 1 ta cho dữ liệu đầu vào qua lớp Convolution để lọc sau đó kích hoạt
phi tuyến ReLu Sau đó tiến hành gọi hàm BatchNormalization() để chuẩn hóa dữ liệu
đầu vào Tiếp tục gọi hàm SeparableConv2D() với đầu vào là dữ liệu đã qua hàm
Conv2D trước đó, tiếp tục kích hoạt hàm tuyến ReLu Mục đích của việc sử dụng
Convolution là để phát hiện các patterns trong dữ liệu đầu vào như edge, objects, shape
….Sau khi đã Convolution tiến hành gọi MaxPooling2D để làm giảm kích thước kích
thước ảnh đầu ra trong khi vẫn giữ được các thông tin quan trọng của ảnh đầu vào
Việc giảm kích thước dữ liệu có tác dụng làm giảm được số lượng tham số cũng như
tăng hiệu quả tính toán Tiếp đó tiến hành BacthNomalization() để chuẩn hóa Sau khi
đã hoàn thành các bước trên ta tiến hành gọi hàm Dropout(0.3) Hàm này thực hiện
chức năng bỏ đi 30% kết quả thu được chỉ lấy 70% kết quả
Ở lớp layer 2 ta thực hiện tương tự như ở layer 1, với dữ liệu đầu vào là 70% kết
quả của lớp layer 1 Tiến hành SeparableConv2D(), tiếp tục kích hoạt hàm tuyến
ReLu Mục đích của việc sử dụng Convolution là để phát hiện các patterns trong dữ
liệu đầu vào như edge, objects, shape ….Sau khi đã Convolution tiến hành gọi Tiếp đó
tiến hành BacthNomalization() để chuẩn hóa Sau đó gọi hàm MaxPooling2D để làm
giảm kích thước kích thước ảnh đầu ra trong khi vẫn giữ được các thông tin quan trọng
của ảnh đầu vào Việc giảm kích thước dữ liệu có tác dụng làm giảm được số lượng
Trang 15tham số cũng như tăng hiệu quả tính toán Sau khi đã hoàn thành các bước trên ta tiến
hành gọi hàm Dropout(0.4) Hàm này thực hiện chức năng bỏ đi 40% kết quả thu được
chỉ lấy 60% kết quả trong 70% của layer 1
Ở lớp layer 3 ta thực hiện tương tự như ở layer 2, với dữ liệu đầu vào là 60% kết
quả của lớp layer 2 Tiến hành SeparableConv2D(), tiếp tục kích hoạt hàm tuyến
ReLu Mục đích của việc sử dụng Convolution là để phát hiện các patterns trong dữ
liệu đầu vào như edge, objects, shape ….Sau khi đã Convolution tiến hành gọi Tiếp đó
tiến hành BacthNomalization() để chuẩn hóa Sau đó gọi hàm MaxPooling2D để làm
giảm kích thước kích thước ảnh đầu ra trong khi vẫn giữ được các thông tin quan trọng
của ảnh đầu vào Việc giảm kích thước dữ liệu có tác dụng làm giảm được số lượng
tham số cũng như tăng hiệu quả tính toán Sau khi đã hoàn thành các bước trên ta tiến
hành gọi hàm Dropout(0.5) Hàm này thực hiện chức năng bỏ đi 50% kết quả thu được
chỉ lấy 50% kết quả trong 60% của layer 2
Ở lớp Fully Connected Layer ta tiến hành gọi hàm Flatten()Trước khi kết nối
với Fully connected layer, chúng ta cần phải thực hiện Flatten để chuyển dữ liệu từ
dạng 3-dimension thành 2-dimension Tiến hành gọi hàm Dense(128, activation='relu',
kernel_initializer='he_uniform') để kết nối các đặc trưng được trích xuất ra ở lớp layer
3 thành 128 đặc trưng Sau đó lại gọi hàm Dropout(0.3) để bỏ đi 30% trong 128 đặc
trưng đã kết nối, chỉ lấy 70% trong 128 đặc trưng Sau đó gọi hàm Dense(1,
activation='sigmoid') để kết nối các đặc trưng trước đó thành 1 đặc trưng duy nhất cũng
là kết quả của model là hư hay tốt Với activation='sigmoid' trả về giá trị là 0 hoặc 1
Trang 16Hình 10: Model dự án.
Trang 17Chương 3 Datashet và phương pháp đánh
giá.
3.1 Bộ datashet sử dụng.
Nhóm sử dụng bộ datashet được lấy từ trang kaggle.com
Bộ datashet nhóm sử dụng ở hình 11 gồm một bộ train, và một bộ test
Bộ Train có chưa 6 mục nhỏ gồm 3 loại trái cây cam, táo, chuối với đặc điểm
hư hay tốt
Bộ Test có chưa 6 mục nhỏ gồm 3 loại trái cây cam, táo, chuối với đặc điểm hư
hay tốt
Hình 11: Bộ datashet lấy từ trang Kaggle.com.
Trong đề tài này nhóm chia bộ datashet train thành 2 bộ nhỏ là bộ train chiếm
80% và bộ validation chiếm 20% Từ đó datashet có 3 bộ: bộ train, bộ test, bộ
validation
Hình 12: Chia bộ train tổng thành 2 bộ nhỏ là train và validation
Bộ train gồm 4921 ảnh trái táo, cam, chuối tươi và 3799 ảnh trái táo, cam, chuối
hư