Tải bản đầy đủ (.docx) (15 trang)

ĐỒ ÁN TÌM HIỂU BÀI TOÁNPHÂN LOẠI CHỮ SỐ VIẾT TAY

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (363.26 KB, 15 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
---oOo---

ĐỒ ÁN 2
TÌM HIỂU BÀI TỐN
PHÂN LOẠI CHỮ SỐ VIẾT TAY

Giảng viên hướng dẫn:
TS. Huỳnh Ngọc Tín
Lớp: SE122.L11.PMCL
Nhóm sinh viên thực hiện:
Nguyễn Thanh Trung - 17520021

Tp. Hồ Chí Minh, 01/2021

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THÔNG TIN


LỜI CẢM ƠN
Để hồn thành đồ án này, nhóm thực hiện đồ án xin gửi lời cảm ơn sâu sắc đến TS.
Huỳnh Ngọc Tín là người đã tận tình hướng dẫn nhóm. Trong suốt q trình thực hiện đồ
án, Thầy ln quan tâm và góp ý kịp thời để nhóm thực hiện đúng như kế hoạch đã định
ra, cũng như cung cấp những tài liệu quan trọng về những kiến thức liên quan để nhóm
bổ sung và tìm ra những hướng giải quyết đúng đắn cho đồ án.
Một lần nữa nhóm xin chân thành cảm ơn!
Nhóm thực hiện đồ án

MỤC LỤC


LỜI CẢM ƠN

2

MỤC LỤC

3

DANH MỤC KÝ HIỆU, CHỮ VIẾT TẮT

4

LỜI MỞ ĐẦU

5

CHƯƠNG I: TỔNG QUAN

6

I.1.

Giới thiệu bài toán

6

I.2.

Mục tiêu, đối tượng và phạm vi nghiên cứu của đề tài


7

I.2.1.

Mục tiêu

7

I.2.2.

Đối tượng

7

I.2.3.

Phạm vi nghiên cứu

7

CHƯƠNG II: CÁC KHÁI NIỆM VÀ CÔNG NGHỆ LIÊN QUAN
II.1.

Các khái niệm liên quan

8
8

II.1.1.


Machine Learning

8

II.1.2.

Digit Recognizer

9

II.2.

Các công nghệ liên quan

9

II.2.1.

Python

9

II.2.2.

Bộ cơ sở dữ liệu MNIST

9

CHƯƠNG III: HƯỚNG TIẾP CẬN VÀ GIẢI PHÁP


10

III.1.

Giới thiệu thuật toán K-means clustering

10

III.2.

Thuật toán

12

2


III.3. Hạn chế thuật toán
CHƯƠNG IV: THỰC NGHIỆM VÀ XÂY DỰNG CHƯƠNG TRÌNH

12
13

IV.1.

Cài đặt mơi trường, dữ liệu

13

IV.2.


Mã nguồn

14

CHƯƠNG V: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

16

VI.1.

Kết luận

16

VI.2.

Hướng phát triển

16

PHỤ LỤC

18

DANH MỤC KÝ HIỆU, CHỮ VIẾT TẮT
(1) UIT: University of Information Technology (Trường Đại học Công nghệ Thông tin)
(2) DR: Digit Recognizer
(3) ML: Machine Learning
(4) AI: artificial intelligence


3


LỜI MỞ ĐẦU
Cuộc cách mạng 4.0 mang đến sự bùng nổ về công nghệ, nhiều công nghệ bậc cao lên
ngôi và trở nên phổ biến trong hầu hết dữ liệu được đưa vào máy vi tính thơng qua bàn
phím. Nhưng trong một số trường hợp, sử dụng chữ viết tay vẫn thích hợp hơn chẳng hạn
như cơng việc ghi chép bài vở trên lớp học. Trong hồn cảnh đó, bài tốn nhận dạng chữ
viết

tay

được nghiên cứu nhằm làm hồn thiện thêm cách thức giao tiếp giữa người và máy.
Bài toán nhận dạng chữ viết tay đã được nghiên cứu và phát triển trong 40 năm
qua, và cũng đã đạt được nhiều kết quả đáng kể. Trong đồ án này, em tìm hiểu về bài tốn
phân loại chữ viết thay thơng qua thuật tốn K-mean để có cái nhìn tổng quan về bài tốn
và máy học
Các vấn đề và cơng nghệ liên quan đến quá trình nghiên cứu và hiện thực đồ án sẽ được
nhóm trình bày cụ thể trong những phần sau của báo cáo này.
Bố cục báo cáo gồm có 6 chương:
Chương I: Tổng quan. Giới thiệu khái quát về bài tốn Digit Recogizer; các cơng trình
nghiên cứu liên quan trong và ngoài nước; mục tiêu, đối tượng, phạm vi nghiên cứu của
đề tài.
4


Chương II: Các khái niệm và công nghệ liên quan. Giới thiệu về những khái niệm và các
công nghệ liên quan trong quá trình hiện thực đồ án như: Machine Learning,
Chương III: Hướng tiếp cận và giải pháp. Các giai đoạn hiện thực bài tốn, cơng cụ và

cách hiện thực từng giai đoạn.
Chương IV: Thực nghiệm và xây dựng chương trình. Hiện thực các giai đoạn được giới
thiệu trong Chương III.
Chương V: Kết luận và hướng phát triển. Tóm tắt kết quả thực hiện được và đề xuất
hướng phát triển mới trong tương lai.

CHƯƠNG I: TỔNG QUAN
Để giải quyết được bài toán chúng ta cần nắm rõ bài toán này là gì, các u cầu của nó
như thế nào. Những câu hỏi đó sẽ được trả lời trong chương này. Ngồi ra, chương này
cịn trình bày tổng quan về một số cơng trình nghiên cứu liên quan đến bài tốn đã được
cơng bố trong và ngồi nước. Từ đó xác định mục tiêu, đối tượng và phạm vi nghiên cứu
cho đồ án.

I.1.

Giới thiệu bài toán

Nhận dạng chữ số viết tay là cần thiết và được ứng dụng rộng rãi trong nhiều lĩnh vực
như nhận dạng các chữ số trên chi phiếu ngân hàng, mã số trên bì thư của dịch vụ bưu
chính, hay các chữ số trên các biểu mẫu nói chung. Vấn đề nhận dạng chữ viết tay nói
chung và nhận dạng chữ số viết tay nói riêng là một thách thức lớn đối với các nhà
nghiên cứu. Bài tốn lớn ln đặt ra phía trước vì sự phức tạp của việc nhận dạng chữ
viết phụ thuộc nhiều vào phong cách viết và cách thể hiện ngôn ngữ của người viết.
Chúng ta không thể luôn luôn viết một ký tự chính xác theo cùng một cách. Do vậy, xây
dựng hệ thống nhận dạng chữ viết có thể nhận dạng bất cứ ký tự nào một cách đáng tin
cậy trong tất cả các ứng dụng là điều không dễ dàng. Hệ thống nhận dạng thường bao
gồm hai bước: rút trích đặc trưng từ ảnh và học tự động từ các đặc trưng để có thể nhận
dạng ký tự. Hiệu quả của hệ thống nhận dạng phụ thuộc vào các phương pháp sử dụng ở
5



hai giai đoạn trên

Các nghiên cứu
-

Hệ thống hiện nay (LeCun et al., 1998), (Simard et al., 2003), (Kégl & BusaFekete,
2009) đều sử dụng các đặc trưng cơ bản từ ảnh ký tự như đường biên, cạnh, độ dày,
giá trị mức xám, haar-like, với các xử lý đặc thù như lấy mẫu, dao động các điểm ảnh,
biến đổi ảnh, thêm dữ liệu ảo, hay trung lập.
.

I.2.

Mục tiêu, đối tượng và phạm vi nghiên cứu của đề tài

I.2.1. Mục tiêu
Tìm hiểu và áp dụng các thuật toán cơ bản của ML vào trong bài toán nhận diện chữ viết
tay. Và cụ thể hơn là bài tốn phân loại hình ảnh.
I.2.2. Đối tượng
Các hình ảnh chụp chữ số viết tay được chụp lại
I.2.3. Phạm vi nghiên cứu
Các hình ảnh trên thư viện MNIST.

CHƯƠNG II: CÁC KHÁI NIỆM VÀ CÔNG NGHỆ LIÊN QUAN
Trong chương này sẽ trình bày về các khái niệm và cơng nghệ liên quan trong quá trình
hiện thực đồ án. Đây là những khái niệm và công nghệ quan trọng và cốt lõi cần nắm rõ
để có thể hiện thực được đồ án một cách tốt nhất.

II.1. Các khái niệm liên quan

II.1.1. Machine Learning
Machine Learning là một tập con của AI.
Trong giới chun mơn khơng có một khái niệm cụ thể và được xem là đúng đắn nhất về
6


Machine Learning [6]. Tuy nhiên có một vài định nghĩa được đánh giá cao như sau:
-

Theo A Samuel: Machine Learning là một lĩnh vực nghiên cứu mà máy tính có thể tự
học mà khơng cần lập trình cụ thể.

-

Theo Tom Mitchell: Machine Learning là chương trình máy tính sử dụng kinh nghiệm
E để thực hiện công việc T với hiệu năng P.

Ví dụ: chức năng tự gắn thẻ bạn bè trên Facebook, chức năng gợi ý sản phẩn liên quân
của Amazon, …
Sự ra đời của Machine Learning giúp con người giải quyết nhanh chóng những cơng việc
phức tạp nếu xử lí thủ cơng sẽ tốn rất nhiều thời gian, chi phí và nhân lực.

II.1.2. Digit Recognizer
Bài tốn là từ dữ liệu văn bản đầu vào là một hình ảnh chụp lại của các chữ số viết bằng
tay, từ đó có thể nhận dạng được và số hóa vào máy tính
Ví dụ: Lĩnh vực như nhận dạng các chữ số trên chi phiếu ngân hàng, mã số trên bì thư
của dịch vụ bưu chính, hay các chữ số trên các biểu mẫu nói chung.
Các giai đoạn chính trong việc xử lí bài toán:
-


Giai đoạn 0: Thu thập dữ liệu

-

Giai đoạn 1: Tiền xử lí

-

Giai đoạn 2: Mã hóa dữ liệu

-

Giai đoạn 3: Dạy cho máy học

II.2. Các công nghệ liên quan
II.2.1. Python
-

Python là ngơn ngữ lập trình hướng đối tượng, cấp cao, mạnh mẽ, được tạo ra bởi
Guido van Rossum. Nó dễ dàng để tìm hiểu và đang nổi lên như một trong những
ngơn ngữ lập trình nhập mơn tốt nhất cho người lần đầu tiếp xúc với ngơn ngữ lập
trình. Python hoàn toàn tạo kiểu động và sử dụng cơ chế cấp phát bộ nhớ tự động.
Python có cấu trúc cấp cao mạnh mẽ và cách tiếp cận đơn giản nhưng hiệu quả đối
7


với lập trình hướng đối tượng. Cú pháp lệnh của Python là điểm cộng vơ cùng lớn
vì sự rõ ràng, dễ hiểu và cách gõ linh động làm cho nó nhanh chóng trở thành một
ngơn ngữ lý tưởng để viết script và phát triển ứng dụng trong nhiều lĩnh vực, ở hầu
hết các nền tảng.

II.2.2. Bộ cơ sở dữ liệu MNIST
Bộ cơ sở dữ liệu MNIST là bộ cơ sở dữ liệu lớn nhất về chữ số viết tay và được
sử dụng trong hầu hết các thuật toán nhận dạng hình ảnh (Image Classification).

CHƯƠNG III: HƯỚNG TIẾP CẬN VÀ GIẢI PHÁP
III.1.

Giới thiệu thuật toán K-means clustering

Trong thuật toán K-means clustering, chúng ta không biết nhãn (label) của từng điểm dữ
liệu. Mục đích là làm thể nào để phân dữ liệu thành các cụm (cluster) khác nhau sao
cho dữ liệu trong cùng một cụm có tính chất giống nhau.
Ý tưởng đơn giản nhất về cluster (cụm) là tập hợp các điểm ở gần nhau trong một khơng
gian nào đó (khơng gian này có thể có rất nhiều chiều trong trường hợp thơng tin về một
điểm dữ liệu là rất lớn). Hình bên dưới là một ví dụ về 3 cụm dữ liệu

Bài toán với 3 clusters.

8


Giả sử mỗi cluster có một điểm đại diện (center) màu vàng. Và những điểm xung quanh
mỗi center thuộc vào cùng nhóm với center đó. Một cách đơn giản nhất, xét một điểm bất
kỳ, ta xét xem điểm đó gần với center nào nhất thì nó thuộc về cùng nhóm với center đó.
Tới đây, chúng ta có một bài tốn thú vị: Trên một vùng biển hình vng lớn có ba đảo
hình vng, tam giác, và trịn màu vàng như hình trên. Một điểm trên biển được gọi là
thuộc lãnh hải của một đảo nếu nó nằm gần đảo này hơn so với hai đảo kia . Hãy xác
định ranh giới lãnh hải của các đảo.
Hình dưới đây là một hình minh họa cho việc phân chia lãnh hải nếu có 5 đảo khác nhau
được biểu diễn bằng các hình tròn màu đen:


Phân vùng lãnh hải của mỗi đảo. Các vùng khác nhau có màu sắc khác nhau.
Chúng ta thấy rằng đường phân định giữa các lãnh hải là các đường thẳng (chính xác hơn
thì chúng là các đường trung trực của các cặp điểm gần nhau). Vì vậy, lãnh hải của một
đảo sẽ là một hình đa giác.
Cách phân chia này trong toán học được gọi là Voronoi Diagram.

9


Trong khơng gian ba chiều, lấy ví dụ là các hành tinh, thì (tạm gọi là) lãnh khơng của mỗi
hành tinh sẽ là một đa diện. Trong không gian nhiều chiều hơn, chúng ta sẽ có những thứ
(mà tơi gọi là) siêu đa diện (hyperpolygon).

III.2.

Thuật toán

Đầu vào: Dữ liệu X và số lượng cluster cần tìm K.
Đầu ra: Các center M và label vector cho từng điểm dữ liệu Y.
1. Chọn K điểm bất kỳ làm các center ban đầu.
2. Phân mỗi điểm dữ liệu vào cluster có center gần nó nhất.
3. Nếu việc gán dữ liệu vào từng cluster ở bước 2 khơng thay đổi so với vịng lặp
trước nó thì ta dừng thuật tốn.
4. Cập nhật center cho từng cluster bằng cách lấy trung bình cộng của tất các các
điểm dữ liệu đã được gán vào cluster đó sau bước 2.
5. Quay lại bước 2.
Chúng ta có thể đảm bảo rằng thuật toán sẽ dừng lại sau một số hữu hạn vịng lặp.
III.3.


Hạn chế thuật tốn

Có một vài hạn chế của thuật toán K-means clustering:
-

Chúng ta cần biết số lượng cluster cần clustering Trong thực tế, nhiều trường hợp
chúng ta không xác định được giá trị này.

-

Nghiệm cuối cùng phụ thuộc vào các centers được khởi tạo ban đầu Tùy vào các
center ban đầu mà thuật tốn có thể có tốc độ hội tụ rất chậm, hoặc thậm chí cho
chúng ta nghiệm khơng chính xác (chỉ là local minimum - điểm cực tiểu - mà
không phải giá trị nhỏ nhất)

-

Các cluster cần có dạng hình trịn Tức các cluster tuân theo phân phối chuẩn và ma
trận hiệp phương sai là ma trận đường chéo có các điểm trên đường chéo giống
nhau.

-

Khi một cluster nằm phía trong 1 cluster khác

Có một vài cách khắc phục đó là:
10





Chạy K-means clustering nhiều lần với các center ban đầu khác nhau rồi chọn
cách có hàm mất mát cuối cùng đạt giá trị nhỏ nhất.



K-means++ -Improve initialization algorithm - wiki.



Có thể xem bài báo khoa học “Cluster center initialization algorithm for K-means
clustering”.

-

Các cluster cần có só lượng điểm gần bằng nhau

CHƯƠNG IV: THỰC NGHIỆM VÀ XÂY DỰNG CHƯƠNG TRÌNH
Nội dung chính của chương này sẽ trình bày chi tiết về quá trình hiện thực chương trình
từ các bước chuẩn bị (thiết kế và xây dựng cơ sở dữ liệu, cài đặt môi trường) đế giai đoạn
hiện thực mã nguồn cho chương trình.

IV.1. Cài đặt mơi trường, dữ liệu

import numpy as np
from mnist import MNIST # require `pip install python-mnist`
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

Thực hiện thuật toán K-means clustering trên toàn bộ 10k chữ số.

from display_network import *

mndata = MNIST('../MNIST/') # path to your MNIST folder
mndata.load_testing()
X = mndata.test_images

kmeans = KMeans(n_clusters=K).fit(X)
pred_label = kmeans.predict(X)

11


IV.2. Mã nguồn

12


13


Áp dụng K-means clustering vào tập test set của bộ cơ sở dữ liệu MNIST với K = 10 cluster. Cột 1:
centers của các cluster. Các cột còn lại: Mỗi hàng là 20 điểm dữ liệu ngẫu nhiên được chọn ra từ
mỗi cluster

14


CHƯƠNG V: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Chương này với mục đích kết luận về kết quả thực hiện được trong đồ án và từ đó đề ra
hướng phát triển cho đồ án trong tương lai.


VI.1. Kết luận
Mặc dù có những hạn chế, K-means clustering vẫn cực kỳ quan trọng trong
Machine Learning và là nền tảng cho nhiều thuật toán phức tạp khác sau này.

VI.2. Hướng phát triển
Chạy K-means clustering nhiều lần với các center ban đầu khác nhau rồi chọn
cách có hàm mất mát cuối cùng đạt giá trị nhỏ nhất.
K-means++ -Improve initialization algorithm - wiki.
Có thể xem bài báo khoa học “Cluster center initialization algorithm for K-means
clustering”.
Các cluster cần có só lượng điểm gần bằng nhau
CNN (Convolutional neural network) là một thuật tốn có thể giải quyết tốt hơn
DANH MỤC TÀI LIỆU THAM KHẢO

[1] Machine Learning cơ bản: />[2] Khóa học Machine Learning của Andrew Ng: />
PHỤ LỤC

15



×