ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN HỌC BÁO CÁO CUỐI KÌ KHOA HỌC DỮ LIỆU ĐỀ TÀI: XÂY DỰNG CHƯƠNG TRÌNH NHẬN DIỆN ẢNH ĐỘNG VẬT ÁP DỤNG THUẬT TOÁN CNN Giảng viên hướng dẫn : N
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN HỌC
BÁO CÁO CUỐI KÌ KHOA HỌC DỮ LIỆU
ĐỀ TÀI:
XÂY DỰNG CHƯƠNG TRÌNH NHẬN DIỆN ẢNH ĐỘNG
VẬT ÁP DỤNG THUẬT TOÁN CNN
Giảng viên hướng dẫn : Nguyễn Năng Hùng Vân
Sinh viên thực hiện : Nguyễn Trần Gia Bảo 19CNTT1
19CNTT1 Nguyễn Hoàng Khánh Nhi 19CNTT1
19CNTT1
Trang 2MỤC LỤC
MỞ ĐẦU 1
1 Lý do lựa chọn đề tài 1
2 Mục tiêu nghiên cứu 1
3 Bố cục đề tài 1
CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ CNN 2
1.1 Mô hình mạng CNN là gì ? 2
1.2 Ưu điểm 2
1.3 Nhược điểm 2
CHƯƠNG 2: SỬ DỤNG THUẬT TOÁN CNN ĐỂ XÂY DỰNG CHƯƠNG TRÌNH NHẬN DIỆN ẢNH ĐỘNG VẬT 3
2.1 Phát biểu bài toán 3
2.2 Chuẩn bị dữ liệu ảnh 3
2.3 Cách thức thu nhập dữ liệu 3
2.4 Công cụ Google Colaboratory 3
2.5 Xây dựng chương trình nhận diện động vật áp dụng thuật toán CNN 4
2.4.1 Khai báo các thư viện cần sử dụng 4
2.4.2 Kết nối với Google Drive để đọc và lưu dữ liệu 5
2.4.3 Khai báo đường dẫn thư mục chứa ảnh dữ liệu 5
2.4.4 Gán nhãn dữ liệu 6
2.4.5 Tiền xử lý dữ liệu ảnh với ImageDataGenerator 6
2.4.6 Đọc dữ liệu train và validation 6
2.4.7 Xây dựng mô hình 7
Trang 32.4.8 Thiết lập các tham số để huấn luyện mô hình 8
2.4.9 Huấn luyện mô hình 9
2.4.10 Sử dụng mô hình 9
CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM 11
3.1 Bảng đánh giá độ chính xác của riêng của từng loài 11
3.2 Bảng đánh giá độ chính xác chung 11
CHƯƠNG 4 : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 12
4.1 Kết quả đạt được 12
4.2 Hạn chế 12
4.3 Nguyên nhân 12
4.4 Phương pháp khắc phục 12
4.5 Hướng phát triển trong tương lai 12
TÀI LIỆU KHAM KHẢO 13
Trang 4DANH MỤC HÌNH ẢNH
Hình 1.1 Cách hoạt động của thuật toán CNN 2
Hình 2.1 Google Colaboratory 4
Hình 2.2 Thư viện được sử dụng trong bài 5
Hình 2.3 Đoạn code kết nối với google driver 5
Hình 2.4 Kết nối thành công với google driver 5
Hình 2.5 Đoạn code khai báo đường dẫn thư mục chứa ảnh dữ liệu 5
Hình 2.6 Đoạn code gán nhãn dữ liệu 6
Hình 2.7 Đoạn code tiền xử lý dữ liệu ảnh với ImageDataGenerator 6
Hình 2.8 Đoạn code đọc dữ liệu train và validation 7
Hình 2.9 Đoạn code xây dựng mô hình 8
Hình 2.10 Đoạn code thiết lập các tham số để huấn luyện mô hình 8
Hình 2.11 Đoạn code huấn luyện mô hình 9
Hình 2.12 Training cho chương trình 9
Hình 2.13 Đoạn code sử dụng mô hình 10
Hình 2.14 Kết quả khi cho kiểm thử ảnh một động vật bất kì……… 10
Trang 5MỞ ĐẦU
1 Lý do lựa chọn đề tài
Nhằm tìm hiểu sâu hơn về môn học khai phá dữ liệu nói chung và về thuật toán CNN nói riêng, nên chúng em quyết định lựa chọn đề tài xây dựng chương trình nhận diện ảnh động vật để tìm hiểu, nghiên cứu và phát triển Hy vọng thông qua
dự án nhỏ lần này thầy có thể đánh giá được năng lực và những kiến thức chúng em đạt được trong suốt quá trình học tập Và vì vẫn còn đang trong quá trình tìm hiểu
và học hỏi, nếu có phát sinh sai sót mong thầy bỏ qua Nhóm chúng em chân thành cảm ơn thầy vì đã tận tình giảng dạy và hướng dẫn trong suốt quá trình học tập cũng như lúc thực hiện đề tài
2 Mục tiêu nghiên cứu
- Thuật toán Convolutional Neural Network (CNN)
- Ngôn ngữ lập trình Python
3 Bố cục đề tài
Chương 1: Giới thiệu tổng quan về CNN
Giới thiệu tổng quan về các lý thuyết liên quan đến CNN
Chương 2: Sử dụng thuật toán CNN để xây dựng chương trình nhận diện ảnh động vật
Ứng dụng CNN để giải quyết bài toán đã đặt ra
Chương 3: Kết quả thực nghiệm và đánh giá
Từ kết quả thực nghiệm thu được nêu ra những đánh giá cụ thể
Chương 4: Kết luận và hướng phát triển
Trình bày các kết quả đạt được thông qua đề tài và hướng phát triển trong tương lai
Trang 6CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ CNN
1.1 Mô hình mạng CNN là gì ?
Mạng nơ ron tích tụ CNN là một mạng nơ ron nhân tạo được sử dụng chủ yếu
để nhận dạng và xử lý ảnh, do khả năng nhận dạng các mẫu trong ảnh Đây là một trong những mô hình Deep Learning vô cùng tiên tiến, CNN sẽ cho phép bạn xây dựng các hệ thống thông minh với độ chính xác vô cùng cao
Hình 1.1 Cách hoạt động của thuật toán CNN
1.2 Ưu điểm
Đem đến cho người dùng 1 mô hình chất lượng, dù bản chất của nó ko phải
là thực toán quá đơn giản nhưng lại mang đến 1 kết quả hữu ích
Tự động học các đặc trung của dữ liệu đẻ thiết lập các đặc trưng mới mà ko cần bất kì sự giám sát nào của người và có thể phân lớp dữ liệu chính xác
1.3 Nhược điểm
Không mã hóa vị trí và hướng của đối tượng, đòi hỏi bộ dữ liệu đưa vào phải
có tính đa dạng và độ chính xác cao
2
Trang 7 Khi bộ dữ liệu ảnh ko đạt yêu cầu, thì việc dự đoán kết quả sẽ không chính xác
Trang 8CHƯƠNG 2: SỬ DỤNG THUẬT TOÁN CNN ĐỂ XÂY DỰNG CHƯƠNG TRÌNH NHẬN DIỆN ẢNH ĐỘNG VẬT
2.1 Phát biểu bài toán
Bài toán mà chúng em thực hiện có mục tiêu là xây dựng một mô hình học máy bằng phương pháp CNN, chương trình sẽ có khả năng nhận diện các loài động vật khác nhau từ các tấm ảnh chụp Nhưng vì ở ngoài tự nhiên có hàng trăm loại động vật khác nhau, nên trong khuôn khổ bài toán chúng em chỉ lựa chọn đại diện
6 loài vật chính là Bọ ngựa, cú, gà, mèo, rùa, voi để thực nghiệm
2.2 Chuẩn bị dữ liệu ảnh
Tổng số ảnh được sử dụng trong bài toán là 6312 ảnh Chúng em tiếp tục chia số dữ liệu ảnh trên làm 3 tệp dữ liệu chính là Train, Validation và Test, với:
Train: Tổng số ảnh trong tệp Train là 5356 ảnh, chiếm khoảng 85% tỷ lệ tổng dữ
liệu ảnh
Validation: Tổng số ảnh trong tệp Validation là 896 ảnh, chiếm khoảng 14% tỷ lệ
tổng dữ liệu ảnh
Test: Tổng số ảnh trong tệp Test là 60 ảnh, chiếm khoảng 1% tỷ lệ tổng dữ liệu ảnh 2.3 Cách thức thu nhập dữ liệu
Dữ liệu được thu nhập chủ yếu thông qua các nguồn sau:
https://images.google.com/
https://www.kaggle.com/
2.4 Công cụ Google Colaboratory
Google Colab có tên gọi đầy đủ là “Google Colaboratory” và chúng là thành quả của dự án Google Research Mục đích của Google Colab đó chính là việc cho
hỗ trợ chạy code Python trực tiếp thông qua trình duyệt và chúng phù hợp với Data analysis (phân tích dữ liệu), machine learning (máy học) và giáo dục
Toàn bộ phần code trong đề tài này sẽ được thực thi trên Google Colab
4
Trang 9Hình 2.2 Google Colaboratory
2.5 Xây dựng chương trình nhận diện động vật áp dụng thuật toán CNN
Chúng em sẽ thực hiện 10 bước theo thứ tự dưới đây để xây dựng một chương trình nhận động vật hoàn chỉnh
2.4.1 Khai báo các thư viện cần sử dụng
Các thư viện được sử dụng bao gồm:
Tensorflow: Là một thư viện có mã nguồn mở, được dùng để tính toán
machine learning với quy mô lớn, có khả năng tương thích và mở rộng tốt
Numpy: Là một thư viện toán học phổ biến của python, hổ trợ cho việc tính
toán các mảng và ma trận đa chiều có kích thước lớn với các hàm đã đc tối
ưu, áp dụng lên các mảng ma trận đa chiều đó với mục đích là xử lý dữ liệu 1 cách nhanh chóng
Trang 10 Matplotlib: Là một trong những thư viện pyhton phổ biến nhất, được sử
dụng để trực quan hóa dữ liệu
Hình 2.3 Thư viện được sử dụng trong bài
2.4.2 Kết nối với Google Drive để đọc và lưu dữ liệu
Ở bước này chúng ta sẽ thực hiện kết nối với tài khoản google drive có chứa sẵn dữ liệu đã chuẩn bị từ trước
Hình 2.4 Đoạn code kết nối với google driver
Đoạn code kết nối với google driver
Hình 2.5 Kết nối thành công với google driver
2.4.3 Khai báo đường dẫn thư mục chứa ảnh dữ liệu
Khai báo đường dẫn thư mục chứa ảnh dữ liệu trong google drive Một đường dẫn trỏ tới file dữ liệu Validation dùng để kiểm định mô hình và 1 đường dẫn trỏ tới file dữ liệu Train dùng để huấn luyện mô hình
Hình 2.6 Đoạn code khai báo đường dẫn thư mục chứa ảnh dữ liệu
6
Trang 112.4.4 Gán nhãn dữ liệu
Vì nhận diện phân loại ảnh là bài toán học có giám sát do đó bộ dữ liệu kiểm định và huấn luyện phải được gán nhãn tên (label) Tên và thứ tự dán nhãn chúng
em đã để tương ứng vs tên và thứ tự thư mục chứa ảnh dữ liệu trong google driver
Hình 2.7 Đoạn code gán nhãn dữ liệu
2.4.5 Tiền xử lý dữ liệu ảnh với ImageDataGenerator
Sử dụng hàm ImageDataGenerator để chuyển từ file ảnh jpg thành dữ liệu tensor cho keras hàm này còn cho phép xin mẫu ngẫu nhiên bằng cách làm biến dạng, gây nhiễu mẫu ảnh gốc trong đó tham số rescale=1/255 có tác dụng chuẩn hóa dữ liệu ảnh, giúp quá trình huấn luyện mô hình đc nhanh hơn
Hình 2.8 Đoạn code tiền xử lý dữ liệu ảnh với ImageDataGenerator
2.4.6 Đọc dữ liệu train và validation
Cho đọc dữ liệu ảnh ở file Train và Validation Trong bước này chúng em sẽ khai báo kích thước của các ảnh huấn luyện, ở đây chúng em đã biến đổi các ảnh về cùng 1 kích thước là 200x200
Trang 12Hình 2.9 Đoạn code đọc dữ liệu train và validation
2.4.7 Xây dựng mô hình
Mô hình này sẽ gồm có 3 lớp CNN:
Tầng thứ 1, sẽ bao gồm có 32 bộ lọc với kích thước là 3x3, tầng CNN kết nối với đầu vào nên sẽ mô tả thông tin của đầu vào
Tầng thứ 2, sẽ bao gồm có 64 bộ lọc, cũng với kích thước là 3x3
Tầng thứ 3, sẽ bao gồm có 128 bộ lọc cũng có kích thước là 3x3
Các hàm được sử dụng:
Hàm Conv2D là phương thức tạo ra 1 phức hợp trong đó tham số đầu tiên là
số bộ lọc tham số thứ 2 là kích thước bộ lọc
Hàm MaxPooling2D dùng để giảm kích thước dữ liệu nhưng vẫn giữ được các thuộc tính quan trọng
Hàm Relu dùng để chuyển các giá trị âm về giá trị 0 và giữ nguyên các giá trị dương
Hàm Flatten dùng để chuyển ảnh từ dạng ma trận về mnarg 1 chiều
Hàm Dense chính là 1 lớp ẩn chứa các nơ-ron kết nối toàn bộ các nơ-ron ở tầng phía trước
8
Trang 13Hình 2.10 Đoạn code xây dựng mô hình
2.4.8 Thiết lập các tham số để huấn luyện mô hình
Mô hình sẽ dụng hàm compile để chọn ra các tham số, chúng em sử dụng tham số optmizers là Adam Ngoài ra đoạn code còn sử dụng các hàm như hàm loss dùng để tính toán sai số giữa giá trị học được và giá trị thực tế Và hàm metric, nhằm đánh giá độ chính xác(accuracy) của chương trình
Hình 2.11 Đoạn code thiết lập các tham số để huấn luyện mô hình
Trang 142.4.9 Huấn luyện mô hình
Sau khi thiết lập các tham số, thì ở bước này chúng em sẽ tiến hành huấn luyện mô hình Tham số epoch chính là số vòng lặp chạy mô hình, ở đây nhóm chúng em sử dụng 50 vòng lặp
Hình 2.12 Đoạn code huấn luyện mô hình
Hình 2.13 Training cho chương trình
2.4.10 Sử dụng mô hình
Ở bước này chúng em sẽ sử dụng mô hình trên để đưa một ảnh loài vật bất kì trong tệp Test đã chuẩn bị từ trước vào để thực hiện dự đoán Ví dụ nếu là mèo thì
sẽ in ra giá trị là Meo, cùng với bức ảnh đã import tương ứng
10
Trang 15Hình 2.14 Đoạn code sử dụng mô hình
Trang 16CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM
3.1 Bảng đánh giá độ chính xác của riêng của từng loài
3.2 Bảng đánh giá độ chính xác chung
12
Trang 17CHƯƠNG 4 : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
4.1 Kết quả đạt được
- Áp dụng được các kiến thức đã học về môn khai phá dữ liệu vào bài toán
- Áp dụng được mô hình CNN vào bài toán
- Nhóm làm việc hiệu quả, chất lượng
- Kết quả bài toán cho ra độ chuẩn xác tương đối cao
4.2 Hạn chế
- Vẫn còn hiện tượng nhận diện nhầm lẫn giữa các loài với nhau
- Tỷ lệ chuẩn xác chưa đạt được con số 90% như mong đợi
4.3 Nguyên nhân
- Một số loài vật có màu sắc, hình dánh tương tự nhau
- File Dataset còn hạn chế
- Chất lượng ảnh kém, màu sắc gần giống nhau
- Các thông số như vòng lặp, lớp CNN có thể chưa tối ưu cho chương trình
4.4 Phương pháp khắc phục
- Chọn ảnh rõ ràng, kích thước lớn
- Tăng số lượng dữ liệu ảnh của mỗi loài nhiều hơn
- Thử nghiệm thay đổi các thông số và chạy lại chương trình nhiều lần hơn
4.5 Hướng phát triển trong tương lai
- Phát triển thêm dữ liệu để chương trình có thể nhận diện thêm nhiều loài động vật hơn
- Tìm ra tham số để tối ưu chương trình, nhằm cho ra kết quả chuẩn xác nhất
Trang 18- Đưa chương trình lên các nền tảng như di động, pc, máy tính bảng để có thể nhận diện loại động vật chỉ định qua Camera
14
Trang 19TÀI LIỆU KHAM KHẢO
[1] https://keras.io/
[2] http://nghelaptrinh.net/convolutional-neural-network-la-gi/ [3] https://vi.wikipedia.org/wiki/TensorFlow
[4] Phân tích dữ liệu với R, tác giả: Nguyễn Văn Tuấn
[5] https://www.youtube.com/watch?v=56ri8v5fM_w&t=338s
[6] https://www.youtube.com/watch?v=uqomO_BZ44g&t=577s