Các bài toán nhận dạng đang được ứng dụng trong thực tế hiện nay tập trung vào nhận dạng mẫu, nhận dạng tiếng nói và nhận dạng chữ viết… Nhận dạng chữ viết tay là bài toán được quan tâm
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA: ĐIỆN - ĐIỆN TỬ
BÁO CÁO MÔN HỌC
XỬ LÝ ẢNH
Đề tài: NHẬN DẠNG SỐ VIẾT TAY DÙNG CNN
GVHD: TS Nguyễn Văn Thái SVTH:
1 Nguyễn Quang Trường 20151424
2 Trương Quang Trường 20151425
Thành phố Hồ Chí Minh, ngày 30 tháng 12 năm 2022
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
THÀNH PHỐ HỒ CHÍ MINH
KHOA ĐIỆN ĐIỆN TỬ
MÔN XỬ LÝ ẢNH
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập- Tự do - Hạnh phúc
TP HCM, ngày 30 tháng 12 năm 2022
DANH SÁCH THÀNH VIÊN THỰC HIỆN ĐỀ TÀI
HỌC KỲ 1 NĂM 2022 – 2023
1 Mã môn học: IMPR432446.
2 Giảng viên hướng dẫn: TS Nguyễn Văn Thái
3 Tên đề tài: Nhận dạng chữ viết tay dùng CNN
4 Danh sách sinh viên thực hiện đề tài:
STT HỌ VÀ TÊN SINH VIÊN Mã số sinh viên Tỉ lệ % tham gia
02 Trương Quang Trường 20151425 100%
03 Nguyễn Quang Trường 20151424 100%
Ghi chú: Tỷ lệ % = 100%: mức độ phần trăm của từng học sinh tham gia được đánh giá
bởi nhóm trưởng và thống nhất giữa các thành viên trong nhóm
Nhận xét của giáo viên
Giảng viên chấm điểm
Trang 3MỤC LỤC
CHƯƠNG 1: TỔNG QUAN 1
1.1 Giới thiệu 1
1.2 Mục tiêu đề tài 2
1.3 Giới hạn đề tài 2
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 3
2.1 Thuật toán CNN 3
a 3
3
2.1.3 Mô hình mạng nơ-ron tích chập (CNN) 4
2.1.4 Hoạt động của mô hình CNN 8
2.2 Giới thiệu về Python 8
ĐẶC ĐIỂM 8
4.1 Kết quả 17
4.2 Kết luận 17
4.2.1 Kết quả đạt được 17
4.2.2 Hạn chế của đề tài 17
4.2.3 Hướng phát triển 17
Trang 4CHƯƠNG 1: TỔNG QUAN1.1 Giới thiệu
Trong những năm gần đây, chúng ta đã được chứng kiến nhiều thành tựu vượt bậc tronglĩnh vực xử lý ảnh (image processing) Các hệ thống xử lý ảnh lớn như Facebook, Googlehay Amazon đã đưa vào sản phẩm của mình những chức năng thông minh như nhận diệnkhuôn mặt người dùng, phát triển xe hơi tự lái hay drone giao hàng tự động Mạng nơ-rontích chập (Convolutional Neural Network - CNN) là một trong những mô hình học sâu(Deep Learning) tiên tiến giúp cho chúng ta xây dựng được những hệ thống thông minhvới độ chính xác cao như hiện nay
Các bài toán nhận dạng đang được ứng dụng trong thực tế hiện nay tập trung vàonhận dạng mẫu, nhận dạng tiếng nói và nhận dạng chữ viết… Nhận dạng chữ viết tay làbài toán được quan tâm rất nhiều vì nó là một trong các yêu cầu trong nhiều ứng dụngthực tế Các ứng dụng của nhận dạng chữ viết tay đã và đang được ứng dụng vào đờisống như phục vụ cho công việc tự động hóa đọc tài liệu, tăng tốc độ và hiệu quả nhậpthông tin vào máy tính Nhận dạng chữ viết tay có thể phục vụ cho các ứng dụng đọc và
xử lý các chứng từ, hóa đơn, phiếu ghi, bản viết tay chương trình
Hiện nay, đã có một số đề tài nghiên cứu nhận dạng chữ viết tay sử dụng các môhình như: K láng giềng gần nhất (K-Nearest Neighbor - KNN), máy hỗ trợ véc-tơ(Support Vector Machine - SVM), mô hình Markov ẩn (Hidden Markov Model - HMM)
… Tuy nhiên, các mô hình này cho kết quả nhận dạng không cao, mất nhiều thời gian choviệc trích rút các đặc trưng trong ảnh Chính vì vậy, trong nghiên cứu này chúng tôi sẽxây dựng một mô hình mới để có thể trích rút tự động các đặc trưng trong ảnh và mô hìnhmới này cũng phải cho kết quả tốt hơn các mô hình đã xây dựng trước đó
Từ những thành công của mạng nơ-ron trong lĩnh vực xử lý ảnh, chúng tôi sẽxâydựng mô hình học máy tiên tiến mạng nơ-ron tích chập sâu (Deep Convolutional NeuralNetwork - DCNN) kết hợp với Multi-layer Perceptron (MLP) vào giải quyết bài toán
Trang 5nhận dạng chữ số viết tay Nhận dạng chữ viết tay được thực hiện qua hai hình thức đó lànhận dạng online và nhận dạng offline
Nhận dạng online có nghĩa là máy tính sẽ nhận dạng các chữ được viết lên mànhình ngay khi nó được viết Đối với những hệ nhận dạng này, máy tính sẽ lưu lại cácthông tin về nét chữ như thứ tự nét viết, hướng và tốc độ của nét viết trong khi nó đangđược viết Còn nhận dạng offline tức là việc nhận dạng được thực hiện sau khi chữ đãđược viết hay in lên giấy rồi, lúc đó thông tin đầu vào là hình ảnh văn bản hoặc ký tự cầnnhận dạng
Trong khuôn khổ nội dung bài báo này, chúng tôi chỉ xét hình thức nhận dạngoffline cho các chữ số viết tay
Do đó nhóm chúng em quyết định lựa chọn đề tài “NHẬN DẠNG CHỮ VIẾT TAY DÙNG CNN” nhằm để nghiên cứu, áp dụng các kiến thức đã được học về lập trình
xử lý ảnh, hiểu rõ hơn thuật toán CNN để tiến hành nhận diện các chữ số viết tay
1.2 Mục tiêu đề tài
Hiểu và áp dụng được các thuật toán trong quá trình học xử lý ảnh
Hiểu và vận dụng được thuật toán CNN
Nhận dạng được các chữ viết tay dựa trên thuật toán CNN
1.3 Giới hạn đề tài
Chất lượng nhận dạng của thuật toán CNN vẫn chưa thể cho ra kết quả đúng ở lầnđầu tiên nếu có quá nhiều lớp có số phần tử giống nhau
Trang 6CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Thuật toán CNN
2.1.1 Định nghĩa
CNN được viết tắt của Convolutional Neural Network hay còn được gọi là CNNSmạng nơ-ron tích chập, là một trong những mô hình Deep Learning cực kỳ tiên tiến, bởichúng cho phép bạn xây dựng những hệ thống có độ chính xác cao và thông minh Nhờkhả năng đó, CNN có rất nhiều ứng dụng, đặc biệt là những bài toán cần nhận dạng vậtthể (object) trong ảnh
2.1.2 Tích chập
Tích chập (tích chập) được sử dụng đầu tiên trong xử lý tín hiệu số (xử lý tínhiệu) Nhờ vào nguyên lý biến đổi thông tin, các nhà khoa học đã áp dụng các kỹ thuậtnày vào xử lý ảnh và số video Để dễ dàng cấu hình, chúng ta có thể xem màn trập nhưmột cửa sổ trượt (cửa sổ trượt) áp đặt lên một màn hình
Hình 1 Minh họa tích chập
Trang 7Màn hình bên trái là một ảnh xám, mỗi giá trị của màn hình tương ứng với mộtđiểm ảnh (pixel) có giá trị biến thiên từ 0 đến 255 Cửa sổ trượt còn có tên gọi là nhân, bộlọc hoặc trình phát hiện tính năng Ở đây, chúng ta sử dụng một bộ lọc ma trận kích thước3×3 nhân từng thành phần tương ứng với ma trận ảnh bên trái Giá trị đầu ra do tích lũycủa các thành phần này được cộng lại Kết quả của màn trập là một màn trập sinh ra từviệc trượt ma trận bộ lọc và thực hiện chuyển đổi màn trập cùng lúc lên toàn bộ màn hìnhbên trái.
2.1.3 Mô hình mạng nơ-ron tích chập (CNN)
Mô hình CNN chỉ đơn giản gồm một vài layer của convolution kết hợp với cáchàm kích hoạt phi tuyến như ReLU hay tanh để tạo ra thông tin ở mức trừu tượng hơncho các layer tiếp theo
Trong mô hình mạng nơ-ron truyền thẳng(feedforward nơ-ron network), cáclayer kết nối trực tiếp với nhau thông qua một trọng số w(weighted vector) Các layernày còn được gọi là có kết nối đầy đủ(fully connected layer) hay affine layer
Trong mô hình CNN 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ộ Nghĩa là mỗi nơ-ron ở layer tiếp theo sinh ra từ filter áp đặtlên một vùng ảnh cục bộ của nơ-ron layer trước đó Mỗi layer như vậy được áp đặt cácfilter khác nhau, thông thường có vài trăm đến vài nghìn filter như vậy Một số layerkhá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 suốt quá trình huấn luyện, CNN sẽ tự động học được cácthông số cho các filter Ví dụ,trong nhiệm vụphân lớp ảnh như được minh họa trong hình
2, CNN 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ânlớp ảnh
Trang 8Hình 2 Minh họa kiến trúc CNN dùng trong phân loại ảnh
CNN có tính bất biến và cố kết cục bộ (Location Invariance andCompositionality) Với cùng một đối tượng, nếu đối tượng này được chiếu từ nhiều góc
độ khác nhau (tịnh, quay, chia tỷ lệ) thì độ chính xác của thuật toán sẽ bị ảnh hưởng đáng
kể Pooling layer sẽ cho bất biến đối với phép dịch (translation), phép quay (rotation) vàphép chia tỷ lệ (scaling) Tính kết hợp cục bộ mang lại mức độ biểu diễn thông tin từ thấpđến cao và trừu tượng hơn thông qua tích chập từ các bộ lọc Đó là lý do tại sao CNN sảnxuất một mô hình với độ chính xác rất cao Tiếp theo, chúng tôi sẽ trình bày chi tiết cáclớp trong mô hình
Convolutional Layer
Layer này là nơi thể hiện ý tưởng ban đầu của CNN Thay vì kết nối tất cả cácpixel, lớp này sẽ sử dụng một tập hợp các bộ lọc có kích thước nhỏ so với ảnh (thường là5×5 hoặc 3×3) áp dụng cho một vùng trong ảnh và thực hiện tích chập giữa bộ lọc vàhình ảnh giá trị pixel trong khu vực cục bộ đó Bộ lọc sẽ lần lượt được dịch chuyển bởimột giá trị sải chân chạy dọc theo hình ảnh và quét toàn bộ hình ảnh
Trang 9Hình 3 Tính tích chập với các bộ lọc
Như vậy, với một bức ảnh 32×32 và một filter 3×3, ta sẽ có kết quả là một tấmảnh mới có kích thước 32×32(với điều kiện đã thêm padding vào ảnh gốc để tính tíchchập cho các trường hợp filter quét ra các biên cạnh) là kết quả tích chập của filter vàảnh Với bao nhiêu filter trong lớp này thì ta sẽ có bấy nhiêu ảnh tương ứng mà lớp nàytrả ra và được truyền vào lớp tiếp theo Các trọng số của filter ban đầu sẽ được khởi tạongẫu nhiên và sẽ được học dần trong quá trình huấn luyện mô hình Hình 3 minh họa củamột phép tính convolution với bộ lọc có kích thước 3×3
Rectified Linear Unit (ReLU) Layer
Layer này thường được cài đặt ngay sau layer Convolution Layer này sử dụnghàm kích hoạt f(x) = max(0, x) Nói một cách đơn giản, layer này có nhiệm vụ chuyểntoàn bộ giá trị âm trong kết quả lấy từ lớp Convolution thành giá trị 0 Ý nghĩa của cáchcài đặt này chính là tạo nên tính phi tuyến cho mô hình Tương tự như trong mạng truyềnthẳng, việc xây dựng dựa trên các phép biến đổi tuyến tính sẽ khiến việc xây dựng đatầng đa lớp trở nên vô nghĩa Có rất nhiều cách để khiến mô hình trở nên phi tuyến như
sử dụng các hàm kích hoạt sigmoid, tanh, nhưng hàmf(x) = max(0, x) dễ cài đặt, tínhtoán nhanh mà vẫn hiệu quả
Pooling Layer
Layer này sử dụng một cửa sổ trượt quét qua toàn bộ ảnh dữ liệu, mỗi lần trượttheo một bước trượt (stride) cho trước Khác với layer Convolution, layer Pooling không
Trang 10tính tích chập mà tiến hành lấy mẫu (subsampling) Khi cửa sổ trượt trên ảnh, chỉ có mộtgiá trị được xem là giá trị đại diện cho thông tin ảnh tại vùng đó (giá trị mẫu) được giữlại Các phương thức lấy phổ biến trong layer Pooling là MaxPooling(lấy giá trị lớn nhất),MinPooling(lấy giá trị nhỏ nhất) và AveragePooling(lấy giá trị trung bình) Xét một ảnh
có kích thước 32×32 và layer Pooling sử dụng bộ lọc có kích thước 2×2 với bước trượtstride là 2, phương pháp sử dụng là MaxPooling Bộ lọc sẽ lần lượt trượt qua ảnh, vớimỗi lần trượt chỉ có giá trị lớn nhất trong 4 giá trị nằm trong vùng cửa sổ 2×2 của bộ lọcđược giữ lại và đưa vào ma trạn đầu ra Như vậy, sau khi qua layer Pooling, ảnh sẽ giảmkích thước xuống còn 16×16 (kích thước mỗi chiều giảm 2 lần)
Hình 4 Tính toán với phương pháp MaxPooling
Pooling Layer có vai trò giảm kích thước dữ liệu Với một bức ảnh kích thước lớnqua nhiều Pooling Layer sẽ được thu nhỏ lại tuy nhiên vẫn giữ được những đặc trưng cầncho việc nhận dạng (thông qua cách lấy mẫu) Việc giảm kích thước dữ liệu sẽ làm giảmlượng tham số, tăng hiệu quả tính toán và góp phần kiểm soát hiện tượng quá khớp(overfitting)
Fully Connected (FC) Layer
Layer này tương tự với layer trong mạng nơ-ron truyền thẳng, các giá trị ảnh đượcliên kết đầy đủ vào các nơ-ron trong layer tiếp theo Sau khi ảnh được xử lý và rút tríchđặc trưng từ các layer trước đó, dữ liệu ảnh sẽ không còn quá lớn so với mô hình truyềnthẳng nên ta có thể sử dụng mô hình truyền thẳng để tiến hành nhận dạng
Trang 112.1.4 Hoạt động của mô hình CNN
Mô hình CNN được hình thành bằng cách kết nối các layer nêu trên lại với nhau
Mô hình bắt đầu với Convolutional Layer ReLU Layer thường được cài đặt ngay sauConvolutional Layerhoặc thậm chí kết hợp cả hai layer này thành một layer Các layertiếp theo có thể là Convolutional hay Pooling tùy theo kiến trúc mà ta muốn xây dựng.Cuối cùng sẽ là Fully-Connected Layer để tiến hành phân lớp
2.2 Giới thiệu về Python
Python đã được hình thành vào cuối những năm 1980, và việc thực hiện nó vàotháng 12 năm 1989 bởi Guido van Rossum tại Centrum Wiskunde & Informatica (CWI) ở
Hà Lan
Đặc điểm
Là ngôn ngữ kịch bản và thông dịch
Trong sáng, gần gũi và dễ học
+ Tăng cường sử dụng từ khóa tiếng Anh, hạn chế các kí hiệu
+ Hướng tới sự đơn giản
+ Ưu tiên cho việc đọc lại code
Đa năng
+ Lập trình web
+ Ứng dụng desktop, đồ họa, game
+ Lập trình cho điện thoại
+ Đặc biệt hiệu quả trong lập trình tính toán khoa học
Đa biến hóa
+ Cho phép sử dụng nhiều phương pháp lập trình
+ Kiểu động, kiểu vịt và kiểu mạnh
Python mạnh và nhanh
Trang 12+ Kèm sẵn pin (Battery included)
+ Viết mã nhanh với số lần gõ phím tối thiểu
Hòa hợp tốt với các thứ khác
+ Java -> Jython
+ NET -> IronPython, Python for NET
+ Viết module mở rộng cho C/C++
Trang 13CHƯƠNG 3 MÔ PHỎNG 3.1 Code train datasets
Trang 16Vào Windown PowerShell nhập dòng lệnh python train.py az data.csv model handwriting.model
Trang 173.2 Code nhận dạng chữ viết tay
Trang 19Vào Windown PowerShell nhập dòng lệnh python test.py model handwriting.model
image images/23.jpg để tiến hành nhận dạng chữ viết tay
Trang 20CHƯƠNG 4 KẾT QUẢ VÀ KẾT LUẬN 4.1 Kết quả
Đề tài mà nhóm đã thực hiện còn một số hạn chế như sau:
Để chương trình có thể nhận dạng được một cách chính xác nhất người viết cầnviết số mọt cách chính xác gần giống nhiều nhất với mẫu
Kết quả nhận dạng đôi lúc còn bị sai lệch
Trang 21TÀI LIỆU THAM KHẢO