Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN &
TRUYỀN THÔNG VIỆT HÀN
Khoa Khoa Học Máy Tính
ĐỒ ÁN CHUYÊN NGÀNH 2
ĐỀ TÀI : XÂY DỰNG ỨNG DỤNG PHÁT HIỆN
VÀ PHÂN LOẠI BỆNH TRÊN CÂY SẮN MÌ
Giảng viên hướng dẫn : NGUYỄN HÀ HUY CƯỜNG
Sinh viên thực hiện : TRƯƠNG THỊ MAI THANH
PHAN THỊ THẢO NGUYÊN
Lớp : 17IT2
Đà Nẵng, tháng 4 năm 2021
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN &
TRUYỀN THÔNG VIỆT HÀN
Khoa Khoa Học Máy Tính
ĐỒ ÁN CHUYÊN NGÀNH 2
ĐỀ TÀI : XÂY DỰNG ỨNG DỤNG PHÁT HIỆN
VÀ PHÂN LOẠI BỆNH TRÊN CÂY SẮN MÌ
Giảng viên hướng dẫn : NGUYỄN HÀ HUY CƯỜNG
Sinh viên thực hiện : TRƯƠNG THỊ MAI THANH
PHAN THỊ THẢO NGUYÊN
Lớp : 17IT2
Đà Nẵng, tháng 4 năm 2021
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
LỜI CẢM ƠN
Sau một thời gian học tập và nghiên cứu đề tài “Xây dựng ứng dụng phát
hiện và phân loại bệnh trên cây sắn mì” chúng em đã không ngừng được củng cố,
mở mang thêm nhiều kiến thức và tầm hiểu biết về lĩnh vực Công nghệ Thông tin
qua sự dạy dỗ, đào tạo tận tình của các thầy cô bộ môn trong khoa công nghệ thông
tin và sự học hỏi lẫn nhau giữa bạn bè cùng khóa.
Thông qua bản báo cáo này, chúng em xin được gửi lời chân thành cảm ơn
đến Ban Giám Hiệu Trường và cùng các thầy cô trong khoa đã tạo những điều kiện
tốt nhất cho chúng em trong suốt thời gian học tập và sinh hoạt tại trường; xin chân
thành cảm ơn thầy Nguyễn Hà Huy Cường, giáo viên phụ trách hướng dẫn chúng
em tận tình trong suốt quá trình thực hiện đề tài này.
Chúng em xin chân thành cảm ơn quý thầy cô đã nhiệt tình giảng dạy, truyền đạt
những kiến thức, kinh nghiệm quý báu và hơn hết là tình cảm mà quý thầy cô đã
dành cho chúng em trong suốt quá trình giảng dạy.
Mặc dù cố gắng hoàn thành đồ án trong phạm vi và khả năng cho phép
nhưng chắc chắn sẽ không tránh khỏi những thiếu sót. Chúng em rất mong nhận
được sự thông cảm, góp ý và tận tình chỉ bảo của thầy, cô và tất cả các bạn để đề tài
ngày càng hoàn thiện hơn.
Chúng em xin trân trọng cảm ơn!
Sinh viên,
TRƯƠNG THỊ MAI THANH
PHAN THỊ THẢO NGUYÊN
MỤC LỤC
Chương 1. TỔNG QUAN VỀ ĐỀ TÀI .................................................................................... 1
1.1 Deep Learning .............................................................................................................. 1
1.1.1 Deep Learning là gì ? ............................................................................................ 1
1.1.2 Cách thức hoạt động .............................................................................................. 2
1.2 Tổng quan về thư viện Tensorflow .............................................................................. 3
1.2.1 Tensorflow là gì ? .................................................................................................. 3
1.2.3 Cách thức hoạt động .............................................................................................. 4
1.3 Mô hình CNN – Convolutional Neural Network ......................................................... 5
1.3.1 Convolutional là gì? .............................................................................................. 5
1.3.2 Cấu trúc của mạng CNN........................................................................................ 6
1.4. Tổng quan về mạng ResNet ........................................................................................ 8
1.4.1. Giới thiệu về mạng ResNet .................................................................................. 8
1.4.2. Vanishing Gradient ............................................................................................... 8
1.4.3. Kiến trúc mạng ResNet ................................................................................ 10
1.4.4. Xây dựng mạng ResNet-50 ................................................................................ 12
1.5. Tìm hiểu về Keras ..................................................................................................... 13
1.5.1. Giới thiệu về Keras ............................................................................................. 13
1.5.2 Keras với linear regression .................................................................................. 14
1.5.3. Keras với logistic regression .............................................................................. 15
Chương 2. PHÂN TÍCH VÀ THIẾT KẾ .............................................................................. 16
2.1 Mô tả bài toán............................................................................................................. 16
2.2. Yêu cầu .................................................................................................................. 16
2.3. Phân tích dữ liệu khám phá ....................................................................................... 17
2.4. Chuẩn bị dữ liệu ........................................................................................................ 18
2.5. Phân tích yêu cầu hệ thống....................................................................................... 18
2.5.1 Usecase Upload hình ảnh .................................................................................... 18
Mô tả usecase: ........................................................................................................... 18
Biểu đồ Use case ....................................................................................................... 19
Chương 3. XÂY DỰNG ĐỀ TÀI ........................................................................................... 20
3.1. Các bước huấn luyện mô hình ................................................................................... 20
3.2. Cài đặt công cụ và môi trường .................................................................................. 20
3.3. Cài đặt thư viện ......................................................................................................... 21
3.4. Tiến hành lập trình .................................................................................................... 21
3.5. Một số hình ảnh của đề tài ........................................................................................ 24
KẾT LUẬN .............................................................................................................................. 25
1. Kết quả đạt được .......................................................................................................... 25
2. Hạn chế của đề tài ........................................................................................................ 25
3. Hướng phát triển của đề tài .......................................................................................... 26
TÀI LIỆU THAM KHẢO ...................................................................................................... 27
DANH MỤC CÁC TỪ VIẾT TẮC
VIẾT TẮT NỘI DUNG
CNN Convolutional Neural Network
DL Deep Learning
AI Artificial intelligence
TNTK The Microsoft Cognitive Toolkit
GPU Graphics processing unit
DANH MỤC HÌNH VẼ
Hình 1: Mạng lưới kết nối dữ liệu .............................................................................. 1
Hình 2:Của sổ trượt trên ma trận .............................................................................. 6
Hình 3: Các lớp trong Convolutional Layer .............................................................. 7
Hình 4. Vanishing Gradient 1 .................................................................................... 9
Hình 5. Vanishing Gradient 2 .................................................................................... 9
Hình 6. Kiến trúc mạng ResNet ................................................................................ 10
Hình 7. So sánh VGG-19, ResNet- 152 và Feedforward Neural Network ............... 11
Hình 8. Mô tả chi tiết kiến trúc mạng nơ ron ResNet............................................... 12
Hình 9. Các thư viện được sử dụng nhiều nhất ........................................................ 13
Hình 10. Biểu đồ Usercase ....................................................................................... 19
Hình 11. Activity Diagram ....................................................................................... 19
Hình 12. Cài đặt Visual Studio Code ....................................................................... 20
Hình 13. Cài đặt Anaconda ...................................................................................... 21
Hình 14. Import thư viện .......................................................................................... 21
Hình 15. Đặt tên class .............................................................................................. 22
Hình 16.Upload mô hình .......................................................................................... 22
Hình 17. Trang index................................................................................................ 23
Hình 18. Xử lí tệp ..................................................................................................... 23
Hình 19. Trang chủ .................................................................................................. 24
Hình 20. Kết quả sau khi upload hình ...................................................................... 24
MỞ ĐẦU
1. Giới thiệu đề tài
Việt Nam là một nước phát triển nông nghiệp, nông nghiệp đóng một vai trò
quan trọng trong nền kinh tế nước nhà. Vì thế, bệnh trên lá cây được xem là bệnh
phổ biến đối với người nhà nông mỗi loại bệnh trên lá cây làm cho cây sinh trưởng
phát triển kém năng suất.
Trên thế giới đã có một số công trình nghiên về cứu nhận dạng sâu bệnh trên
trái cà chua, dưa chuột,… bằng cách vận dụng kỹ thuật xử lý ảnh và nhận dạng đã
đạt được một số kết quả khả quan. Các hệ thống nhận dạng sâu bệnh thường được
thử nghiệm trong điều kiện lý tưởng là môi trường nhà kính, chưa được áp dụng
rộng rãi vào môi trường thực tế ngoài trời.
Nhận dạng các loại bệnh trên lá cây thông qua xử lý ảnh là phương pháp
nhận dạng màu sắc, hình dạng, kích thước của lá cây bị vàng so với lá cây bình
thường ban đầu từ đó rút ra nguyên nhân gây bệnh của cây mà khắc phục. Nghiên
cứu này có thể nhận biết chính xác lá cây có hoặc không có sâu bệnh nằm trên đó.
Hệ nhận dạng có thể nhận dạng sâu bệnh tổng quát khi đã có dữ liệu sâu bệnh sử
dụng kết hợp kỹ thuật nhận dạng với bộ lọc tương hợp để nhận dạng sâu bệnh. Đến
nay, vẫn có rất ít hệ thống nhận dạng sâu bệnh cho một loại nông sản. Ở Việt Nam,
hiện nay chưa có các công bố về hệ thống phát hiện và nhận dạng sâu bệnh trên cây
trồng mặc dù phát triển mạnh về nông nghiệp. Vì vậy, nhóm em đã chọn nghiên cứu
về đề tài “Xây dựng ứng dụng phát hiện và phân loại bệnh hại lá sắn” một ứng dụng
nhân dạng bệnh dựa vào các biểu hiện của lá cây từ ảnh chụp có ý nghĩa khoa học
và thực tiễn cao
2. Mục tiêu đề tài
Tìm hiểu được các loại bệnh trên lá cây sắn mì và xây dựng giải thuật nhận
diện các loại bệnh trên lá cây thông qua kĩ thuật xử lí ảnh. Thực hiện tính toán, phân
tích và so sánh dữ liệu bệnh trên lá, từ đó xây dựng ứng dụng hỗ trợ cho người dùng
biết và khắc phục bệnh cho cây.
3. Đối tượng người dùng
• Người nông dân trồng sắn.
• Người có nhu cầu tìm hiểu về các loại bệnh của cây sắn.
4. Phạm vi
Phạm vi thực hiện đồ án dựa trên những kiến thức thu được từ những
môn học trong quá trình học tập tại trường và tham khảo thêm một số tài liệu bên
ngoài đề bổ sung thêm kiến thức nhằm hoàn thiện đồ án tốt hơn đáp ứng được mục
tiêu của đồ án.
Tập trung vào tìm hiểu các loại bệnh trên cây, tập hợp mô hình cơ sở dữ liệu
từ đó xây dựng giao diện tương tác người dùng.
1
Chương 1. TỔNG QUAN VỀ ĐỀ TÀI
1.1 Deep Learning
1.1.1 Deep Learning là gì ?
Deep learning được bắt nguồn từ thuật toán Neural network vốn xuất phát
chỉ là một ngành nhỏ của Machine Learning. Deep Learning là một chi của ngành
máy học dựa trên một tập hợp các thuật toán để cố gắng mô hình dữ liệu trừu tượng
hóa ở mức cao bằng cách sử dụng nhiều lớp xử lý với cấu trúc phức tạp, hoặc bằng
cách khác bao gồm nhiều biến đổi phi tuyến.
Tương tự như cách chúng ta học hỏi từ kinh nghiệm thuật toán, deep learning
sẽ thực hiện một nhiệm vụ nhiều lần mỗi lần tinh chỉnh nhiệm vụ một chút để cải
thiện kết quả. Deep Learning chỉ đơn giản là kết nối dữ liệu giữa tất cả các tế bào
thần kinh nhân tạo và điều chỉnh chúng theo dữ liệu mẫu.
Hình 1: Mạng lưới kết nối dữ liệu
Càng có nhiều tế bào thần kinh được thêm vào thì kích thước của dữ liệu sẽ
càng lớn. Nó tự động có tính năng học tập ở nhiều cấp độ trừu tượng. Qua đó cho
phép một hệ thống học hàm ánh xạ phức tạp mà không phụ thuộc vào bất kỳ thuật
2
toán cụ thể nào. Không ai thực sự biết những gì xảy ra trong một mạng lưới thần
kinh nhân tạo. Vì vậy, hiện tại bạn có thể gọi Deep Learning là một cái hộp đen.
Deep Learning đã giúp máy tính thực thi những việc tưởng chừng như không
thể vào 15 năm trước: phân loại cả ngàn vật thể khác nhau trong các bức ảnh, tự tạo
chú thích cho ảnh, bắt chước giọng nói và chữ viết của con người, giao tiếp với con
người, hay thậm chí cả sáng tác văn, phim, ảnh, âm nhạc.
Deep learning là một phần của Machine Learning, một ngành rất rộng và nặng về
toán, gồm rất nhiều thuật toán và mỗi thuật toán có ứng dụng riêng tùy vào bài toán:
• Linear Regression
• Logistic Regresstion
• Decision Tree and Random Forest
• Naive Bayes
• Support Vector Machines
• K-Nearest Neighbors
• Principal component analysis (PCA)
• Neural network
1.1.2 Cách thức hoạt động
Cách thức hoạt động của thuật toán Deep Learning diễn ra như sau: Các
dòng thông tin sẽ được trải qua nhiều lớp cho đến lớp sau cùng. Lấy quy trình học
của con người làm ví dụ cụ thể. Qua các lớp đầu tiên sẽ tập trung vào việc học các
khái niệm cụ thể hơn trong khi các lớp sâu hơn sẽ sử dụng thông tin đã học để
nghiên cứu và phân tích sâu hơn trong các khái niệm trừu tượng . Quy trình xây
dựng biểu diễn dữ liệu này được gọi là trích xuất tính năng.
Để có thể dễ hình dung về Deep Learning chúng ta sẽ tìm hiểu cách nó hoạt
động thông qua một số ví dụ sau. Hãy bắt đầu với một ví dụ đơn giản về Deep
Learning ở cấp độ khái niệm. Hãy cùng suy nghĩ làm thế nào để chúng ta có thể
nhận biết được một hình nào đó là hình vuông.
3
Có thể đầu tiên bạn sẽ kiểm tra xem hình đó có 4 cạnh hay không, nếu nó
đúng chúng ta sẽ kiểm tra tiếp 4 cạnh này có được kết nối với nhau thành 1 hình tứ
giác hay không, nếu đúng chúng ta sẽ kiểm tra tiếp 4 cạnh này có vuông góc với
nhau không và chúng có kích thước bằng nhau không. Nếu tất cả đều đúng thì kết
quả nó là hình vuông
Nhìn chung thì cũng không có gì phức tạp cả nó chỉ là 1 hệ thống phân cấp
các khái niệm. Chẳng hạn như ví dụ ở trên chúng ta đã chia nhiệm vụ xác định hình
vuông thành những nhiệm vụ nhỏ và đơn giản hơn. Deep Learning cũng hoạt động
tương tự như vậy nhưng ở quy mô lớn hơn.
1.2 Tổng quan về thư viện Tensorflow
1.2.1 Tensorflow là gì ?
Với sự bùng nổ của lĩnh vực Trí Tuệ Nhân Tạo – A.I. trong thập kỷ vừa qua,
machine learning và deep learning rõ ràng cũng phát triển theo cùng. Và ở thời
điểm hiện tại, TensorFlow chính là thư viện mã nguồn mở cho machine learning nổi
tiếng nhất thế giới, được phát triển bởi các nhà nghiên cứu từ Google. Việc hỗ trợ
mạnh mẽ các phép toán học để tính toán trong machine learning và deep learning đã
giúp việc tiếp cận các bài toán trở nên đơn giản, nhanh chóng và tiện lợi hơn nhiều.
Các hàm được dựng sẵn trong thư viện cho từng bài toán cho phép
TensorFlow xây dựng được nhiều neural network. Nó còn cho phép bạn tính toán
song song trên nhiều máy tính khác nhau, thậm chí trên nhiều CPU, GPU trong
cùng 1 máy hay tạo ra các dataflow graph – đồ thị luồng dữ liệu để dựng nên các
model.
Kiến trúc TensorFlow hoạt động được chia thành 3 phần:
- Tiền xử lý dữ liệu
- Dựng model
- Train và ước tính model
4
Tensor đại diện cho các loại dữ liệu được đưa vào trong Tensorflow. Mỗi thuộc
tính trong tensor sẽ có những đặc điểm và tính năng khác nhau. Để giúp bạn hiểu
hơn về Tensorflow, Bizfly sẽ giới thiệu ngay đến bạn những thuộc tính cơ bản sau
đây:
• Rank: Trong các cấu trúc dữ liệu, thuộc tính bậc được hiểu một cách đơn
giản chính là sự phân cấp bậc và là căn cứ cho việc phân loại các tensor. Mỗi
tensor khi được phân bậc sẽ có tên gọi khác nhau, cụ thể bậc 0 là Scalar, bậc
1 là Vector bậc 2 là Matrix, các bậc cao hơn nữa sẽ được gọi là n-tensor.
• Shape: Đây là thuộc tính chiều của tensor các cấu trúc dữ liệu.
• Type: Kiểu dữ liệu của các element và là thuộc tính type duy nhất có trong
tensor. Một tensor chỉ có một loại type duy nhất cho toàn bộ các element có
trong tensor. Vì vậy mà cấu trúc dữ liệu có tính thống nhất.
1.2.3 Cách thức hoạt động
TensorFlow cho phép các lập trình viên tạo ra dataflow graph, cấu trúc mô tả
làm thế nào dữ liệu có thể di chuyển qua 1 biểu đồ, hay 1 sê-ri các node đang xử lý.
Mỗi node trong đồ thị đại diện 1 operation toán học, và mỗi kết nối hay edge giữa
các node là 1 mảng dữ liệu đa chiều, hay còn được gọi là ‘tensor’.
TensorFlow cung cấp tất cả những điều này cho lập trình viên theo phương
thức của ngôn ngữ Python. Vì Python khá dễ học và làm việc, ngoài ra còn cung
cấp nhiều cách tiện lợi để ta hiểu được làm thế nào các high-level abstractions có
thể kết hợp cùng nhau. Node và tensor trong TensorFlow là các đối tượng Python,
và các ứng dụng TensorFlow bản thân chúng cũng là các ứng dụng Python.
Các operation toán học thực sự thì không được thi hành bằng Python. Các
thư viện biến đổi có sẵn thông qua TensorFlow được viết bằng các binary C++ hiệu
suất cao. Python chỉ điều hướng lưu lượng giữa các phần và cung cấp các high-level
abstraction lập trình để nối chúng lại với nhau.Các ứng dụng TensorFlow có thể
chạy trên hầu hết mọi mục tiêu thuận tiện: máy cục bộ, cụm trong đám mây, thiết bị
iOS và Android, CPU hoặc GPU. Nếu bạn sử dụng đám mây của riêng Google, bạn
5
có thể chạy TensorFlow trên silicon Đơn vị xử lý TensorFlow (TPU) tùy chỉnh của
Google để tăng tốc hơn nữa. Tuy nhiên, các mô hình kết quả được tạo bởi
TensorFlow, có thể được triển khai trên hầu hết mọi thiết bị nơi chúng sẽ được sử
dụng để phục vụ dự đoán. TensorFlow 2.0, được ra mắt vào tháng 10 năm 2019, cải
tiến framework theo nhiều cách dựa trên phản hồi của người dùng, để dễ dàng và
hiệu quả hơn khi làm việc cùng nó (ví dụ: bằng cách sử dụng các Keras API liên
quan đơn giản cho việc train model). Train phân tán dễ chạy hơn nhờ vào API mới
và sự hỗ trợ cho TensorFlow Lite cho phép triển khai các mô hình trên khá nhiều
nền tảng khác nhau. Tuy nhiên, nếu đã viết code trên các phiên bản trước đó của
TensorFlow thì bạn phải viết lại, đôi lúc 1 ít, đôi lúc cũng khá đáng kể, để tận dụng
tối đa các tính năng mới của TensorFlow 2.0.
1.3 Mô hình CNN – Convolutional Neural Network
Convolutional Neural Network (CNNs – Mạng nơ-ron tích chập) là một
trong những mô hình Deep Learning tiên tiến. Nó giúp cho chúng ta xây dựng được
những hệ thống thông minh với độ chính xác cao như hiện nay. CNN được sử dụng
nhiều trong các bài toán nhận dạng các object trong ảnh.
CNN cũng có lịch sử khá lâu đời. Kiến trúc gốc của mô hình CNN được giới
thiệu bởi một nhà khoa học máy tính người Nhật vào năm 1980. Sau đó, năm 1998,
Yan LeCun lần đầu huấn luyện mô hình CNN với thuật toán backpropagation cho
bài toán nhận dạng chữ viết tay. Tuy nhiên, mãi đến năm 2012, khi một nhà khoa
học máy tính người Ukraine Alex Krizhevsky (đệ của Geoffrey Hinton) xây dựng
mô hình CNN (AlexNet) và sử dụng GPU để tăng tốc quá trình huấn luyện deep
nets để đạt được top 1 trong cuộc thi Computer Vision thường niên ImageNet với
độ lỗi phân lớp top 5 giảm hơn 10% so với những mô hình truyền thống trước đó,
đã tạo nên làn sóng mãnh mẽ sử dụng deep CNN với sự hỗ trợ của GPU để giải
quyết càng nhiều các vấn đề trong Computer Vision.
1.3.1 Convolutional là gì?
Là một cửa sổ trượt (Sliding Windows) trên một ma trận.
6
Hình 2:Của sổ trượt trên ma trận
Các convolutional layer có các parameter(kernel) đã được học để tự điều
chỉnh lấy ra những thông tin chính xác nhất mà không cần chọn các feature.
Trong hình ảnh ví dụ trên, ma trận bên trái là một hình ảnh trắng đen được số hóa.
Ma trận có kích thước 5×5 và mỗi điểm ảnh có giá trị 1 hoặc 0 là giao điểm của
dòng và cột.
Convolution hay tích chập là nhân từng phần tử trong ma trận 3. Sliding Window
hay còn gọi là kernel, filter hoặc feature detect là một ma trận có kích thước nhỏ
như trong ví dụ trên là 3×3.
Convolution hay tích chập là nhân từng phần tử bên trong ma trận 3×3 với ma trận
bên trái. Kết quả được một ma trận gọi là Convoled feature được sinh ra từ việc
nhận ma trận Filter với ma trận ảnh 5×5 bên trái.
1.3.2 Cấu trúc của mạng CNN
Mạng CNN là một tập hợp các lớp Convolution chồng lên nhau và sử dụng
các hàm nonlinear activation như ReLU và tanh để kích hoạt các trọng số trong các
node. Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo ra các thông tin trừu
tượng hơn cho các lớp tiếp theo.
Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo ra các thông tin trừu
tượng hơn cho các lớp tiếp theo. Trong mô hình mạng truyền ngược (feedforward
7
neural network) thì mỗi neural đầu vào (input node) cho mỗi neural đầu ra trong các
lớp tiếp theo.
Mô hình này gọi là mạng kết nối đầy đủ (fully connected layer) hay mạng
toàn vẹn (affine layer). Còn trong mô hình CNNs thì ngược lại. Các layer liên kết
được với nhau thông qua cơ chế convolution.
Layer tiếp theo là kết quả convolution từ layer trước đó, nhờ vậy mà ta có
được các kết nối cục bộ. Như vậy mỗi neuron ở lớp kế tiếp sinh ra từ kết quả của
filter áp đặt lên một vùng ảnh cục bộ của neuron trước đó.
Mỗi một lớp được sử dụng các filter khác nhau thông thường có hàng trăm
hàng nghìn filter như vậy và kết hợp kết quả của chúng lại. Ngoài ra có một số layer
khác như pooling/subsampling layer dùng để chắt lọc lại các thông tin hữu ích hơn
(loại bỏ các thông tin nhiễu).
Trong quá trình huấn luyện mạng (traning) CNN tự động học các giá trị qua
các lớp filter dựa vào cách thức mà bạn thực hiện. Ví dụ trong tác vụ phân lớp ảnh,
CNNs sẽ cố gắng tìm ra thông số tối ưu cho các filter tương ứng theo thứ tự raw
pixel > edges > shapes > facial > high-level features. Layer cuối cùng được dùng để
phân lớp ảnh.
Hình 3: Các lớp trong Convolutional Layer
Trong mô hình CNN có 2 khía cạnh cần quan tâm là tính bất biến (Location
Invariance) và tính kết hợp (Compositionality). Với cùng một đối tượng, nếu đối
8
tượng này được chiếu theo các gốc độ khác nhau (translation, rotation, scaling) thì
độ chính xác của thuật toán sẽ bị ảnh hưởng đáng kể. Pooling layer sẽ cho bạn tính
bất biến đối với phép dịch chuyển (translation), phép quay (rotation) và phép co
giãn (scaling). Tính kết hợp cục bộ cho ta các cấp độ biểu diễn thông tin từ mức độ
thấp đến mức độ cao và trừu tượng hơn thông qua convolution từ các filter. Đó là lý
do tại sao CNNs cho ra mô hình với độ chính xác rất cao. Cũng giống như cách con
người nhận biết các vật thể trong tự nhiên.
Mạng CNN sử dụng 3 ý tưởng cơ bản:
• Các trường tiếp nhận cục bộ (local receptive field)
• Trọng số chia sẻ (shared weights)
• Tổng hợp (pooling).
1.4. Tổng quan về mạng ResNet
1.4.1. Giới thiệu về mạng ResNet
ResNet (Residual Network) được giới thiệu đến công chúng vào năm 2015 và
thậm chí đã giành được vị trí thứ 1 trong cuộc thi ILSVRC 2015 với tỉ lệ lỗi top 5
chỉ 3.57%. Không những thế nó còn đứng vị trí đầu tiên trong cuộc thi ILSVRC and
COCO 2015 với ImageNet Detection, ImageNet localization, Coco detection và
Coco segmentation.Hiện tại thì có rất nhiều biến thể của kiến trúc ResNet với số lớp
khác nhau như ResNet-18, ResNet-34, ResNet-50, ResNet-101, ResNet-152,...Với
tên là ResNet theo sau là một số chỉ kiến trúc ResNet với số lớp nhất định.
1.4.2. Vanishing Gradient
Trước hết thì Backpropagation Algorithm là một kỹ thuật thường được sử
dụng trong quá trình tranining. Ý tưởng chung của thuật toán lá sẽ đi từ output layer
đến input layer và tính toán gradient của cost function tương ứng cho từng parameter
(weight) của mạng. Gradient Descent sau đó được sử dụng để cập nhật các
parameter.
9
Hình 4. Vanishing Gradient 1
Toàn bộ quá trình trên sẽ được lặp đi lặp lại cho tới khi mà các parameter của
network được hội tụ. Thông thường chúng ta sẽ có một hyperparametr (số Epoch -
số lần mà traninig set được duyệt qua một lần và weights được cập nhật) định nghĩa
cho số lượng vòng lặp để thực hiện quá trình này. Nếu số lượng vòng lặp quá nhỏ thì
ta gặp phải trường hợp mạng có thể sẽ không cho ra kết quả tốt và ngược lại thời
gian tranining sẽ lâu nếu số lượng vòng lặp quá lớn.
Tuy nhiên, trong thực tế Gradients thường sẽ có giá trị nhỏ dần khi đi xuống
các layer thấp hơn. Dẫn đến kết quả là các cập nhật thực hiện bởi Gradients Descent
không làm thay đổi nhiều weights của các layer đó và làm chúng không thể hội tụ và
Hình 5. Vanishing Gradient 2
10
mạng sẽ không thu được kết quả tốt. Hiện tượng như vậy gọi là Vanishing
Gradients. Mạng ResNet ra đời cũng giải quyết vấn đề đó.
1.4.3. Kiến trúc mạng ResNet
Cho nên giải pháp mà ResNet đưa ra là sử dụng kết nối "tắt" đồng nhất để
xuyên qua một hay nhiều lớp. Một khối như vậy được gọi là một Residual Block,
như trong hình sau :
ResNet gần như tương tự với các mạng gồm có convolution, pooling,
activation và fully-connected layer. Ảnh bên trên hiển thị khối dư được sử dụng
trong mạng. Xuất hiện một mũi tên cong xuất phát từ đầu và kết thúc tại cuối khối
dư. Với H(x) là giá trị dự đoán, F(x) là giá trị thật (nhãn), chúng ta muốn H(x) bằng
hoặc xấp xỉ F(x). Việc F(x) có được từ x như sau:
X->weight1-> ReLU -> weight2
Giá trị H(x) có được bằng cách:
F(x) + x -> ReLU
Hình 6. Kiến trúc mạng ResNet
11
Như chúng ta đã biết việc tăng số lượng các lớp trong mạng làm giảm độ chính
xác, nhưng muốn có một kiến trúc mạng sâu hơn có thể hoạt động tốt.
• Hình 1. VGG-19 là một mô hình CNN sử dụng kernel 3x3 trên toàn bộ
mạng, VGG-19 cũng đã giành được ILSVRC năm 2014.
• Hình 2. ResNet sử dụng các kết nối tắt ( kết nối trực tiếp đầu vào của lớp (n)
với (n+x) được hiển thị dạng mũi tên cong. Qua mô hình nó chứng minh
được có thể cải thiện hiệu suất trong quá trình training model khi mô hình có
hơn 20 lớp.
Hình 7. So sánh VGG-19, ResNet- 152 và Feedforward Neural Network
12
• Hình 3. Tổng cộng có 12 đầu ra từ ResNet-152 và VGG-19 đã được sử dụng
làm đầu vào cho mạng có 2 lớp hidden. Đầu ra cuối cùng được tính toán
thông qua hai lớp ẩn ( hidden). Việc xếp chồng các lớp sẽ không làm giảm
hiệu suất mạng.Với kiến trúc này các lớp phía trên có được thông tin trực
tiếp hơn từ các lớp dưới nên sẽ điều chỉnh trọng số hiệu quả hơn.
1.4.4. Xây dựng mạng ResNet-50
Hình dưới đây mô tả chi tiết kiến trúc mạng nơ ron ResNet
"ID BLOCK" trong hình trên là viết tắt của từ Identity block và ID BLOCK x3
nghĩa là có 3 khối Identity block chồng lên nhau. Nội dung hình trên như sau :
• Zero-padding : Input với (3,3)
• Stage 1 : Tích chập (Conv1) với 64 filters với shape(7,7), sử dụng stride
(2,2). BatchNorm, MaxPooling (3,3).
• Stage 2 : Convolutiontal block sử dụng 3 filter với size 64x64x256, f=3, s=1.
Có 2 Identity blocks với filter size 64x64x256, f=3.
• Stage 3 : Convolutional sử dụng 3 filter size 128x128x512, f=3,s=2. Có 3
Identity blocks với filter size 128x128x512, f=3.
• Stage 4 : Convolutional sử dụng 3 filter size 256x256x1024, f=3,s=2. Có 5
Identity blocks với filter size 256x256x1024, f=3.
• Stage 5 :Convolutional sử dụng 3 filter size 512x512x2048, f=3,s=2. Có 2
Identity blocks với filter size 512x512x2048, f=3.
• The 2D Average Pooling : sử dụng với kích thước (2,2).
Hình 8. Mô tả chi tiết kiến trúc mạng nơ ron ResNet
13
• The Flatten.
• Fully Connected (Dense) : sử dụng softmax activation.
Thực tế, ResNet không phải là kiến trúc đầu tiên sử dụng các kết nối tắt,
Highway Network là một ví dụ. Trong thử nghiệm cho thấy Highway Network hoạt
động không tốt hơn ResNet.Giải pháp ResNet đưa ra đơn giản hơn và tập trung vào
cải thiện thông tin thông qua độ dốc của mạng. Sau ResNet hàng loạt biến thể của
kiến trúc này được giới thiệu. Thực nghiệm cho thấy những kiến trúc này có thể
được huấn luyện mạng nơ ron với độ sâu hàng nghìn lớp và nó nhanh chóng trở
thành kiến trúc phổ biến nhất trong Computer Vision.
1.5. Tìm hiểu về Keras
1.5.1. Giới thiệu về Keras
Các thư viện deep learning thường được ‘chống lưng’ bởi những hãng công
nghệ lớn: Google (Keras, TensorFlow), Facebook (Caffe2, Pytorch), Microsoft
(CNTK), Amazon (Mxnet), Microsoft và Amazon cũng đang bắt tay xây dựng
Gluon (phiên bản tương tự như Keras). (Các hãng này đều có các dịch vụ cloud
computing và muốn thu hút người dùng).
Hình 9. Các thư viện được sử dụng nhiều nhất
14
Sau đây là một vài thống kê để mọi người có cái nhìn tổng quan về các thư
viện được sử dụng nhiều nhất.
Keras được coi là một thư viện ‘high-level’ với phần ‘low-level’ (còn được
gọi là backend) có thể là TensorFlow, CNTK, hoặc Theano. Keras có cú pháp đơn
giản hơn TensorFlow rất nhiều. Với mục đích giới thiệu về các mô hình nhiều hơn là
các sử dụng các thư viện deep learning, sẽ chọn Keras với TensorFlow là ‘backend’.
Những lý do nên sử dụng Keras để bắt đầu:
• Keras ưu tiên trải nghiệm của người lập trình
• Keras đã được sử dụng rộng rãi trong doanh nghiệp và cộng đồng nghiên cứu
• Keras giúp dễ dàng biến các thiết kế thành sản phẩm
• Keras hỗ trợ huấn luyện trên nhiều GPU phân tán
• Keras hỗ trợ đa backend engines và không giới hạn bạn vào một hệ sinh thái
Với Keras, ta thường sử dụng tf.keras.Sequential để xây dựng Model bằng
cách thêm từng layer một cách nối tiếp nhau
1.5.2 Keras với linear regression
Ta cùng làm một ví dụ đơn giản. Dữ liệu đầu X vào có số chiều là 2, đầu ra y
= 2*X[0] + 3*X[1] + 4 + e với e là nhiễu tuân theo một phân phối chuẩn có kỳ vọng
bằng 0, phương sai bằng 0.2.
Sequantial([<a list>]) là thể hiện việc các layer được xây dựng theo đúng thứ
tự trong [<a list>]. Phần tử đầu tiên của list thể hiện kết nối giưa input layer và layer
tiếp theo, các phần tử tiếp theo của list thể hiện kết nối của các layer tiếp theo.
Dense thể hiện một fully connected layer, tức toàn bộ các unit của layer trước
đó được nối với toàn bộ các unit của layer hiện tại. Giá trị đầu tiên
trong Dense bằng 1 thể hiện việc chỉ có 1 unit ở layer này (đầu ra của linear
regression trong trường hợp này bằng 1. input_shape = 2, chính là kích thước của
dữ liệu đầu vào. Kích thước này là một tuple nên ta cần viết dưới dạng 2. Về sau,
15
khi làm việc với dữ liệu nhiều chiều, ta sẽ có các tuple nhiều chiều. Ví dụ, nếu input
là ảnh RGB với kích thước 224x224x3 pixel thì input_shape = 224, 224, 3.
Thể hiện việc chọn phương pháp cập nhật nghiệm, ở đâu ta sử
dụng Stochastic Gradient Descent (SGD) với learning rate lr=0.1. Các phương pháp
cập nhật nghiệm khác có thể được tìm thấy tại Keras-Usage of
optimizers. loss='mse' chính là mean squared error, là hàm mất mát của linear
regression.
Keras khá giống với scikit-learn ở chỗ cùng huấn luyện các mô hình bằng
phương thức .fit(). Ở đây, epochs chính là số lượng epoch và batch_size chính là
kích thước của một mini-batch.
1.5.3. Keras với logistic regression
Có hai sự khác biệt ở Activation và loss vì logistic regression sử dụng hàm
activation là sigmoid, hàm mất mát là trường hợp đặc biệt của cross entropy với hai
class.
16
Chương 2. PHÂN TÍCH VÀ THIẾT KẾ
2.1 Mô tả bài toán
Nông nghiệp ứng dụng công nghệ thông tin đang trở thành xu thế mới, cải
thiện đáng kể nền nông nghiệp ở nhiều nơi, nhất là trong điều kiện biến đổi khí hậu
như hiện nay. Công nghệ thông tin ngày càng được ứng dụng rộng rãi trong nông
nghiệp, lĩnh vực phát triển nhất của nước ta. Các ứng dụng, hệ thống phát hiện và
nhận dạng sâu bệnh sử dụng kỹ thuật xử lý ảnh và thị giác máy tính đang thu hút
nhiều nhà nghiên cứu trong và ngoài nước.
Sắn là một loại cây được trồng rộng rãi ở vùng nhiệt đới và là lương thực
chính ở những vùng này. Tuy nhiên, mặc dù có khả năng chống chịu với các điều
kiện khắc nghiệt, sắn thường bị ảnh hưởng bởi các bệnh do vi rút gây ra, có thể gây
thiệt hại nghiêm trọng đến năng suất cây trồng. Do đó, một quy trình quan trọng
trong canh tác sắn là xác định các cây bị bệnh để có thể loại bỏ chúng kịp thời trước
khi bệnh lây lan thêm. Quy trình kiểm tra này theo truyền thống thường được thực
hiện thủ công bởi các chuyên gia nông nghiệp, nhưng việc này vừa tốn kém vừa
không hiệu quả. Với sự trưởng thành gần đây của thị giác máy tính, hy vọng rằng
quá trình kiểm tra có thể được giao cho máy móc trong tương lai rất gần. Việc triển
khai các mô hình học máy, học sâu có thể phân loại chính xác các cây sắn bị bệnh
có thể cung cấp một công cụ hiệu quả và tiết kiệm chi phí để hỗ trợ nông dân trồng
sắn bảo vệ cây trồng của họ.
Nghiên cứu này trình bày phương pháp để phát hiện và nhận dạng sâu bệnh
trên lá sắn. Bài toán được giải quyết thông qua hai giai đoạn chính là: phát hiện
vùng ứng viên có khả năng là sâu bệnh; nhận dạng sâu bệnh từ các vùng ứng viên
đã phát hiện.
2.2. Yêu cầu
• Tính tiện dụng: Trang web phải dễ đọc, dễ hiểu, dễ dùng. Thiết kế phải mới,
tuy nhiên không quá phức tạp gây khó chịu cho người dùng.
• Tính đúng đắn: Ứng dụng chạy không lỗi.
17
• Tính thích nghi: Ứng dụng có thể chạy tốt trên nhiều thiết bị với cấu hình
phần cứng khác nhau và thiết kế kiến trúc thiết bị khác nhau.
• Tính tiến hoá: Ứng dụng phải dễ dàng được phát triển thêm tính năng mà
không gây ảnh hưởng đến những tính năng đã phát triển trước đó.
2.3. Phân tích dữ liệu khám phá
Các hình ảnh được phân thành năm loại, bốn trong số đó là các bệnh khác nhau
mà cây có thể mắc phải. Loại thứ năm là cây khỏe mạnh không bị bệnh nào trong số
bốn loại bệnh trên. Số lượng hình ảnh trong tập dữ liệu đào tạo cho mỗi lớp được
xác định như sau:
• Bệnh bạc lá do vi khuẩn sắn (CBB)
• Bệnh đốm nâu trên sắn (CBSD)
• Sâu xanh trên cây sắn (CGM)
• Bệnh khảm sắn (CMD)
• Cây khỏe mạnh
Bước tiếp theo là là kiểm tra một số hình ảnh đại diện từ mỗi lớp được lấy ngẫu
nhiên để cố gắng xác định bằng mắt một một số đặc điểm có thể được mô hình khai
thác. Các bức ảnh được chụp ở nhiều góc độ và điều kiện ánh sáng và góc độ chụp
khác nhau.
Tập dữ liệu được thay đổi kích thước thành 96x96 và sau đó CNN được đào tạo
với 2 lớp chập và hai lớp dày đặc. Lớp chập thứ nhất và thứ hai có 32 bộ lọc với
nhân 3x3 và 64 bộ lọc với nhân 3x3 tương ứng. Tổng hợp tối đa được thực hiện sau
mỗi lớp tích chập. Hai lớp dày đặc có 200 tế bào thần kinh và 5 tế bào thần kinh
(một cho mỗi lớp). Độ chính xác xấp xỉ 65%. Tập dữ liệu lớn hơn sẽ cung cấp cho
mô hình một loạt hình ảnh đa dạng hơn để đào tạo, do đó, nó có thể thu nhận các
đặc điểm tinh tế hơn giúp phân biệt các lớp khác nhau.
18
2.4. Chuẩn bị dữ liệu
Tập dữ liệu gồm 21.367 hình ảnh được dán nhãn được thu thập trong một cuộc
khảo sát thường xuyên ở Uganda. Hầu hết các hình ảnh có nguồn gốc từ những
người nông dân chụp ảnh khu vườn của họ và được chú thích bởi các chuyên gia tại
Viện Nghiên cứu Tài nguyên Cây trồng Quốc gia (NaCRRI) phối hợp với phòng thí
nghiệm AI tại Đại học Makerere, Kampala. Đây là định dạng thể hiện thực tế nhất
những gì nông dân cần chẩn đoán trong cuộc sống thực.
Dữ liệu được phân ra thành 5 loại: 4 loại bệnh và lá khoẻ mạnh.
- Các tập tin:
• [train / test] _images các tệp hình ảnh.
• image_id: tên tệp hình ảnh.
• Label: mã ID của bệnh.
• sample_submission.csv: Bản gửi mẫu được định dạng đúng, với nội dung
bộ thử nghiệm được tiết lộ.
• image_id: tên tệp hình ảnh.
• label mã ID: dự đoán cho bệnh.
• [train / test] _tfrecords tệp hình ảnh ở định dạng tfrecord.
• label_num_to_disease_map.json Ánh xạ giữa mỗi mã bệnh và tên bệnh
thực.
2.5. Phân tích yêu cầu hệ thống
2.5.1 Usecase Upload hình ảnh
Mô tả usecase:
Tóm tắt: Use case này thể hiện chức năng chính của hệ thống.
Dòng sự kiện chính:
1. Người dùng mở ứng dụng.
2. Đưa người dùng đến màn hình chính.
19
3. Người dùng load ảnh có sẵn vào phần upload image hiển thị trên màn hình
chính và chờ kết quả từ hệ thống.
4. Hệ thống hiển thị kết quả.
5. Người dùng chọn thao tác phù hợp để thực hiện.
6. Hệ thống lưu lại kết quả của hoạt động.
7. Kết thúc.
Tiền điều kiện: Người dùng mở ứng dụng. CSDL được load thành công.
Hậu điều kiện: Lưu lại việc thực thi các thao tác trên hệ thống (nếu có).
Biểu đồ Use case
Hình 10. Biểu đồ Usercase
Activity Diagram
Hình 11. Activity Diagram
20
Chương 3. XÂY DỰNG ĐỀ TÀI
3.1. Các bước huấn luyện mô hình
Việc huấn luyện mô hình Deep Learning bao gồm các bước:
• Chuẩn bị dữ liệu
• Xây dựng network
• Chọn thuật toán cập nhật nghiệm, xây dựng loss và phương pháp đánh
giá mô hình
• Huấn luyện mô hình.
• Đánh giá mô hình
3.2. Cài đặt công cụ và môi trường
Chúng em sử dụng trình biên tập mã Visual Studio Code để soạn thảo mã
nguồn.
Hình 12. Cài đặt Visual Studio Code
21
Chúng em sử dụng Python 3.7 trên nền tảng platform Anaconda.
3.3. Cài đặt thư viện
Các thư viện được chúng em sử dụng trong đề tài là : TensorFlow, Numpy, Flask,
Keras.
3.4. Tiến hành lập trình
Import các thư viện
Hình 13. Cài đặt Anaconda
Hình 14. Import thư viện
22
Đặt tên Class
Hình 15. Đặt tên class
Tải mô hình lên
Hình 16.Upload mô hình
23
Trang chủ em sử dụng html với trang index.html
Xử lý tệp và dự đoán label của nó
Hình 17. Trang index
Hình 18. Xử lí tệp
24
3.5. Một số hình ảnh của đề tài
Hình 19. Trang chủ
Hình 20. Kết quả sau khi upload hình
25
KẾT LUẬN
1. Kết quả đạt được
Trong quá trình xây dựng đề tài, nhóm đã cùng tìm hiểu và hoàn thành một
trang web tương đối hoàn chỉnh. Với sự hướng dẫn tận tình từ thầy Nguyễn Hà Huy
Cường, cùng kiến thức mà thầy cung cấp, chúng em đã áp dụng được Deep
Learning và mô hình CNN vào bài toán. Trong một khoảng thời gian hạn chế, nhóm
đã phát triển một trang web tương đối hoàn thiện. Trang web hiện tại đã có thể đáp
ứng tốt được các chức năng cơ bản của người sử dụng thông thường trong việc nhận
dạng được bệnh trên lá từ những hình ảnh được truyền vào.
Giao diện trang web thân thiện và dễ sử dụng. Nhóm đã đưa ra thiết kế sau
khi tham khảo trên nhiều ứng dụng khác nhau, vì vậy ứng dụng sẽ phù hợp với thói
quen của người sử dụng. Nhờ bộ dữ liệu và thuật toán áp dụng vào mà sau khi
người dùng nhập vào hình ảnh lá cây sắn đưa ra kết quả với độ chính xác cao, phân
loại được 4 loại bệnh phổ biến trên lá cây sắn mì và phát hiện được cây khoẻ mạnh.
Từ đó giúp người nông dân có thể mau chóng phát hiện bệnh trên cây sắn mì và có
cách khắc phục nhanh chóng, tránh được nhiều rủi ro cho người nông dân.
Bên cạnh đó, nhờ thực hiện đề tài mà chúng em còn có thêm nhiều hiểu biết
về Deep Learning, mô hình học sâu CNN và các thư viện như keras,
TensorFlow,…Từ đó áp dụng vào đề tài Phát hiện và phân loại bệnh trên cây sắn
mì.
2. Hạn chế của đề tài
Mặc dù đã cố gắng hoàn thành tốt đề tài nhưng vì thời gian còn có hạn nên
chúng em còn nhiều thiếu xót không tránh khỏi mong thầy cô cảm thông. Một số
hạn chế của đề tài như sau:
• Trang web còn chưa được hoàn thiện hoàn toàn
• Giao diện khá đơn giản
• Còn nhiều bệnh chưa phổ biến chưa phát hiện được
26
3. Hướng phát triển của đề tài
Với những hạn chế tồn tại nêu trên, trong tương lai nhóm sẽ tiếp tục hoàn
thiện đề tài với những dự kiến như sau:
• Tìm hiểu và thêm nhiều bộ dữ liệu khác về bệnh trên cây sắn mì vào
trang web
• Cải thiện về mặt giao hiện trang web đẹp mắt và dễ sử dụng hơn
• Phát triển trên nhiều nền tảng khác nhau
• thử nghiệm thêm một số phương pháp phát hiện và nhận dạng khác để so
sánh ưu, khuyết điểm so với phương pháp đề xuất
27
TÀI LIỆU THAM KHẢO
[1] https://codelearn.io/
[2] https://ichi.pro/vi/phan-tich-du-lieu-kham-pha-va-mo-hinh-co-so-
127992819476141
[3] https://www.thegioimaychu.vn/blog/
[4] https://vi.wikipedia.org/wiki/TensorFlow
[5] http://nghelaptrinh.net/convolutional-neural-network-la-gi/
[6] https://trituenhantao.io/kien-thuc/resnet-mang-hoc-sau-dung-nghia/
[7] https://keras.io/