1. Trang chủ
  2. » Luận Văn - Báo Cáo

CNN nhận diện chữ số viết tay handwriting number detection

20 1,2K 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 770,32 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong CNN, tích chập được thực hiện trên giá trị đầu vào của dữ liệu và kernel/filter để tạo ra một bản đồ đặc trưng feature map.. Tại mỗi node, mô hình thực hiện quá trình linear regres

Trang 1

MÔN XỬ LÝ ẢNH

CONVOLUTIONAL NEURAL NETWORK

TP HỒ CHÍ MINH, THÁNG 06 NĂM 2020

Trang 2

:

MỤC LỤC

1 Lý thuyết 3

1.1 Tổng quát 3

1.2 Convolutional Layers 3

1.3 Pooling Layers 4

1.4 Fully Connected Layers 5

1.5 Lớp Softmax 9

1.6 Một số hàm tối ưu (Optimizer) 10

2 Ví dụ minh họa 12

2.1 Import các thư viện 12

2.3 Reshape các bức dữ liệu 14

2.4 Biến đổi nhãn ngõ ra sang dạng ma trận One Hot Encoding 14

2.5 Xây dựng mô hình CNN 15

2.6 Huấn luyện tệp dữ liệu 16

2.7 Đánh giá khả năng dự đoán của mô hình qua đồ thị 17

2.8 Đánh giá mô hình 18

2.9 Dự đoán ảnh 18

3 Tài liệu tham khảo 19

Trang 3

:

1 Lý thuyết

1.1 Tổng quát

Convolutional Neural Network (CNN) hay còn được gọi là mạng Nơ-ron tích chập được dùng để dạy thuật toán nhận diện đối tượng trong hình ảnh

CNNs được chia thành 3 chiều : rộng, cao, sâu Các Nơ- ron trong mạng không liên kết hoàn toàn với toàn bộ Nơ-ron kế đến mà chỉ liên kết tới một vùng nhỏ Cuối cùng, một tầng đầu ra được tối giản thành vec-tơ của giá trị xác suất

CNNs gồm 2 thành phần:

 Phần tầng ẩn hay phần rút trích đặc trưng: Trong phần này, mạng sẽ tiếng hành tính toán hàng loạt phép tích chập (Convolutional layer) và phép hợp nhất (pooling) để phát hiện các đặc trưng [1]

 Phần phân lớp: Tại phần này, một số lớp các liên kết đầy đủ (Fully Connected) sẽ đóng vai trò như một bộ phân lớp các đặc trưng đã rút trích trước đó.Tầng này sẽ đưa ra xác suất của một đối tượng trong hình.[1]

H1.1 Cấu trúc của CNN[1]

1.2 Convolutional Layers

Khối tích chập( convolution): Sử dụng phép hợp nhất của hai hàm tạo thành hàm thứ ba Trong

CNN, tích chập được thực hiện trên giá trị đầu vào của dữ liệu và kernel/filter để tạo ra một bản đồ đặc trưng (feature map)

Ta thực hiện phép tích chập bằng cách trượt kernel/filter theo kiểu dữ liệu đầu vào Tại mỗi vị trí,

ta tiến hành phép nhân ma trận và tính tổng để đưa vào feature map

Ở lớp đầu tiên, khối tích chập dùng để phát hiện cạnh thẳng đứng và cạnh nằm ngang, cạnh chéo,

…Việc cần dùng bao nhiêu kernel hay dùng những kernel gì sẽ do CNN tự tìm

Trang 4

:

Dưới đây là ví dụ về việc nhận diện cạnh thẳng đứng:

H1.2 Vertical Edge Detection example

Tại khối tích chập, các thông số được sử dụng bao gồm:

 Stride (S) : Khoảng cách giữa 2 kernel khi quét.Ví dụ với stride=1, kernel sẽ quét 2 ô ngay cạnh nhau Với stride=2, kernel sẽ quét ô số 1 và ô số 3, bỏ qua ô ở giữa Điều này nhằm tránh việc lặp lại giá trị ở các ô bị quét

 Padding (P): Tăng thêm một số hàng và cột ( thường có giá trị bằng 0) để tránh việc giảm kích thước ở output cũng như để lấy thông tin ở các pixel ngoài cùng Có 2 loại padding là “valid” tức là padding =0 và “same” tức là padding để kích thước ngõ ra bằng kích thước ngõ vào

 #filters (nc) : Số filter được sử dụng ở mỗi layers

 f : kích thước của mỗi filter là f *f

H1.3 Các thông số của conv layers

1.3 Pooling Layers

Khối Pooling: Mục đích là làm giảm số parameters mà ta cần phải tính toán, từ đó giảm thời gian

tính toán Ngoài ra nó còn tránh overfitting

Trang 5

:

Có 2 loại pooling: max pooling lấy giá trị lớn nhất trong một pooling window và mean pooling lấy giá trị trung bình trong một pooling window

Pooling hoạt động gần giống convolution, ở max pooling cửa sổ trượt qua từng giá trị của ma trận dữ liệu đầu vào, chọn ra giá trị lớn nhất nằm trong cửa sổ trượt

H1.4 Max pooling [1]

1.4 Fully Connected Layers

Neural Network

Mạng neural network hay mạng neural nhân tạo là một thuật toán của "Máy Học" và là một nhánh của "Học Sâu" lấy cảm hứng từ mạng neuron của con người Ở đó, lớp đầu tiên đưa các đặc tính vào mạng được gọi là Input Layer và lớp cuối cùng để đưa ra các giá trị dự đoán gọi là Output Layer Giữa 2 lớp Input và Output gồm 1 hay nhiều lớp ẩn khác giúp tăng khả năng học và dự đoán của mạng được gọi Hidden Layer Mỗi Layer là tập hợp gồm nhiều node khác nhau, các node của lớp trước được kết nối với toàn bộ các node của lớp sau Tại mỗi node, mô hình thực hiện quá trình linear regression (hồi quy tuyến tính):

Trong đó:

(i): mẫu thứ i của tập dữ liệu

[l]: lớp thứ l trong mạng

k: node thứ k trong lớp thứ l

Trang 6

:

ak(i)[l-1]: ngõ ra của node thứ k của layer phía trước thuộc mẫu thứ i tức là ngõ vào của lớp đang xét

wk(i)[l].T: chuyển vị của ma trận tham số w của node thứ k lớp thứ l mẫu thứ i

bk(i)[l]: ma trận tham số b của node thứ k lớp thứ l mẫu thứ i

g(i)[l]: hàm kích hoạt của lớp thứ l mẫu thứ i

ak(i)[l]: ngõ ra của node thứ k của layer đang xét thuộc mẫu thứ i

Những phương trình này sẽ được sắp xếp các tham số theo từng lớp lại thành các ma trận để quá trình xử lí nhanh hơn Quá trình này được gọi là vector hoá (Vectorization)

Xét trên 1 mẫu:

Ma trận W có kích thước k x n, ma trận a[l-1]có kích thước n x 1, ba có kích thước ma trận k x 1

Z và a[l]có kích thước k x 1

Xét trên m mẫu:

Trang 7

:

Sau khi vector hóa trên m mẫu, Z và a[l] từ kích thước k x 1 thành k x m

Sau khi tìm được y hàm mất mát(Loss Function) sẽ được tính toán để xác định sai số giữa dự đoán của mô hình với đầu ra thực tế

Toàn bộ quá trình xử lí như trên qua tất cả các node từ input layer đến output layer được gọi là

truyền xuôi (Forward Propagation) Sau đó quá trình truyền ngược (Back Propagation) được tính

toán để tìm đạo hàm của hàm Loss Fuction theo các tham số của từng lớp Quá trình Back Propagation này cũng được vector hoá

Từ đó quá trình Gradient Descent diễn ra để cập nhập lại các tham số W,b của từng lớp để khả năng dự đoán của mô hình tăng lên Vector hoá cũng được áp dụng cho quá trình này

Trong đó được  gọi là tốc độ học (learning rate)

H1.4.quá trình Forwardpropagation và Backpropagation [3]

Trang 8

:

H1.5.Phép Flatten chuyên tensor thành vector [2]

Trong mạng CNN, các quá trình trên thường được áp dụng ở các lớp cuối sau khi quá trình Flatten - quá trình làm phẳng lớp 2 chiều phía trước thành lớp 1 chiều - diễn ra Khi đó, các mạng này được gọi là Fully Connected, tức là các node của lớp trước kết nối hoàn toàn với node của lớp sau

H1.6.Mô tả đoạn thuật toán Neural Network được áp dụng trong mạng CNN trong mô hình CNN

LeNet-5.[3]

Trang 9

:

1.5 Lớp Softmax

Sau khi mạng CNNs học qua các lớp phía trước, ta thu được vector đặc trưng Khi đó, cần dựa vào vector đặc trưng này để phân loại vào các lớp theo yêu cầu bài toán Hàm softmax là một

mô hình xác suất để với mỗi input x, tính được output ai thể hiện xác suất để input đó rơi vào lớp thứ

i

Hàm softmax có đầu vào là 1 vector, đầu ra là một vector có cùng số chiều ( ) :a z R nR n

có công thức là:

1

exp( )

, 1, 2,3,

exp( )

i

i C

j j

z

z

với C là số lớp ngõ ra Nhận xét:

- Giá trị zi càng lớn thì xác suất dữ liệu rơi vào lớp thứ i càng cao

- Các ai lớn hơn 0 và có tổng bằng 1

H1.7.Ví dụ về đầu vào và đầu ra của hàm softmax.[2]

Trang 10

:

1.6 Một số hàm tối ưu (Optimizer)

1.6.1 Mini-batch

Với một tệp dữ liệu quá lớn việc huấn luyện tệp và tính Gradient Descent rất mất thời gian

Vì vậy thay vì huấn luyện toàn bộ tệp, người ta thường phân nhỏ các tệp ra thành các mini-batch Giả sử với một tệp 5.000.000 mẫu ta có thể phân nhỏ thành các mini-batch có kích thước 1000 mẫu

Trong đó, x(1) là mẫu thứ 1 của X , X{1} là mini-batch thứ 1 của X

Lựa chọn mini-batch thích hợp sẽ giúp quá trình vector hóa dữ liệu nhanh hơn do ít mẫu hơn

và không cần phải đợi toàn bộ quá trình xảy ra mà có thể dừng lại khi tỉ lệ dự đoán đã đạt yêu cầu

Các kích thước của mini-batch thường được chọn là : 64(26),128(27),256(28),1024(29) Các bước học với mini-batch gradient descent diễn ra như sau:

Quá trình trải qua toàn bộ các mini-batch này gọi là 1 "epoch"

Trang 11

:

1.6.2 ADAM Optimizer

Thuật toán tối giản ADAM(Adaptive Moment Estimation) được xem như thuật toán tối giản tốt nhất khi kết hợp hai phương pháp Gradient Descent với động lực và RMS:

Quá trình ADAM diễn ra như sau:

Thêm quá trình "correct" để tránh sai sót do quá trình quá độ khi khởi tạo các giá trị ban đầu bằng 0, với các lần lặp t sau, quá trình "correct" cũng không ảnh hưởng lên quá nhiều vì βt với t lớn xấp xỉ bằng 0 nên VdWcorrect ≈ VdW

1.6.3 Categorical Crossentropy

Khi huấn luyện mô hình, để biểu thị chênh lệch giữa ngõ ra dự đoán và ngõ ra thực tế, ta sử dụng hàm mất mát (Loss function)

^

( , )

L y y .

( ,y)= log

K

k

y

 

oss cr

L

0

Hàm mất mát càng nhỏ thì độ chính xác càng cao Hàm mất mát được định nghĩa trong Keras là Categorical Crossentropy

Trang 12

:

2 Ví dụ minh họa

2.1 Import các thư viện

H2.1 import các thư viện

import numpy as np: import thư viện numpy với kiểu truy cập thư viện là "np" Thư viện

numpy giúp ta có thể thao tác với các mảng đại số, thức hiện các phép toán liên quan đến đại số tuyến tính

import os: import module os để tương tác với hệ điều hành, cho phép chúng ta làm việc với các

thư mục và tệp tin

import matplotlib.pyplot as plt: import thư viện matplotlib với module pyplot với kiểu truy cập

là "plt" Thư viện và module này giúp ta thao tác trên đồ thị

from keras.models import Sequential: từ thư viện Keras import module models và trong

models import Sequential dùng để khởi tạo model

from keras.layers import Dense,Dropout, Activation, Flatten

from keras.layers import Conv2D, MaxPooling2D

2 lệnh trên từ thư viện Keras import model layers để xây dựng các layer cho mạng CNN Từ model layer import một số function để thao tác trên các layer CNN

Trang 13

: H2.2 Kiến trúc Keras[4]

import keras.utils: Từ thư viện keras import module util chứa các function giúp ta thực hiện xử

lý dữ liệu nhanh hơn

from keras.datasets import mnist: Function mnist được dùng để tải dữ liệu.

2.2 Tải tập dữ liệu và phân chia tập training và tập validation

H2.3.Phân chia dữ liệu

Trang 14

:

mnist.load_data(): Tải dữ liệu từ một nguồn có sẵn, sau đó dữ liệu được phân về 2 tập: tập Huấn

luyện - Training (X_train,y_train) và tập Kiểm tra - Test (X_test,y_test) Ở đây, tập training gồm

60000 mẫu và tập test gồm 10000 mẫu

Sau đó, từ tập training ta xác định tập Thẩm định – validation (X_val,y_val)

X_val,y_val = X_train[50000:60000,:],y_train[50000:60000]

X_train,y_train = X_train[:50000,:], y_train[:50000]

Sử dụng 50000 mẫu đầu tiên cho training còn 10000 mẫu còn lại được sử dụng cho validation 2.3 Reshape các bức dữ liệu

H2.4.Reshape các mẫu để phù hợp với đầu vào mạng CNN

X_train = X_train.reshape(X_train.shape[0],28,28,1): Làm phẳng 50000 mẫu là một ảnh kích

thước 28x28 thành một ma trận cột 4 chiều

Tương tự cho các tập validation và tập test

2.4 Biến đổi nhãn ngõ ra sang dạng ma trận One Hot Encoding

H2.5 Biến đổi ngõ ra

keras.utils.to_categorical(): Lệnh này được sử dụng để biến đổi từ ma trận chứa dữ liệu của các

nhãn sang dạng one-hot encoding

Trang 15

:

2.5 Xây dựng mô hình CNN

H2.6 Xây dựng mô hình CNN

Sequential(): khởi tạo mô hình CNN

model.add(): thêm 1 lớp vào mạng CNN

Conv2D(number of filters ,kernel size ,activation=""):

Xây dựng lớp tích chập 2 chiều với:

number of filters: số lượng ma trận filter(kernel) lấy tích chập với mẫu

kernel size: kích thước ma trận filter(kernel)

activation: hàm kích hoạt sau khi lấy tích chập

Ở 2 lớp layer đầu sử dụng Conv2D(32,(3,3),activation='sigmoid') để xây mạng tích chập 2 chiều với số lượng ma trận filter là 32, kích thước ma trận là 3x3, hàm kích hoạt sau khi lấy tích chập là hàm sigmoid Kết thúc quá trình từ mẫu có kích thước ma trận 28x28x1 -> 26x26x32 -> 24x24x32

Maxpooling2D(pool_size=""): xây dựng lớp tích chập maxpool với pool_size là kích thước lấy

max pooling Ở lớp này sử dụng MaxPooling2D(pool_size="(2,2)) tức ta sẽ lấy max pooling với kích thước là 2x2 ở mẫu đầu vào Kết thúc quá trình từ mẫu có kích thước ma trận 24x24x32 -> 12x12x32

Flatten(): Lệnh này được sử dụng để làm phẳng layer 2 chiều phía trước như hình phía dưới Kết

thúc quá trình mẫu có kích thước ma trận 12x12x32 -> 4608x1

Dense(number of units,activation=""): Xây dựng một lớp fully connected với:

number of units: số units trong lớp full connected đó

activation: hàm kích hoạt sau

Trang 16

:

Ở 2 lớp cuối Dense(128,activation="sigmoid"): Tạo 1 lớp fully connected với 128 units và

activation là hàm sigmoid Mẫu có kích thước ma trận 4608x1 thành 128x1

Dense(10,activation="softmax"): Tạo 1 lớp full connected với 10 units và activation là hàm

softmax xác định nhãn cho mẫu Mẫu có kích thước 128x10 xuống còn 10x1 để xác định y cho các nhãn

Compile(loss="",optimizer="",metrics=):Kết hợp tất cả các lớp được tạo ở trên thành mạng

CNN với loss để tính hàm tiêu hao, optimizer để tối ưu hóa, metrics để tìm độ chính xác của mô hình

Compile(loss="category_crossentropy", optimizer="adam",metrics=["accuracy"]) kết hợp

các lớp ở trên, hàm tiêu hao được tính cho bài multi classification, tối ưu hóa theo thuật toán ADAM

và tính thêm độ dự đoán chính xác với mô hình CNN

2.6 Huấn luyện tệp dữ liệu

H2.7 Huấn luyện mô hình CNN

model.fit(x, y, batch_size, validation_data, epochs, verbose):

Huấn luyện mô hình với số epoch cho trước:

x: mẫu huấn luyện

y: nhãn của mẫu huấn luyện

Trang 17

:

batch_size: số mẫu trong một mini_batch

validation_data: dữ liệu kiểm chứng

epoch: số lần "epoch" - số lần quét qua toàn bộ mẫu

verbose=1: hiển thị thanh trạng thái quá trình huấn luyện

ngõ ra trả về quá trình diễn ra huấn luyện, thời gian huấn luyện, hàm hao phí, độ chính xác của tệp huấn luyện, hàm hao phí, độ chính xác của tệp kiểm định qua mỗi lần epoch

2.7 Đánh giá khả năng dự đoán của mô hình qua đồ thị

H2.8 Đánh giá mô hình qua đồ thị

plt.figure(): tạo một đồ thị mới

plt.plot(np.arrange(x1,x2),H.history,label):

biểu diễn dữ liệu với:

np.arrange(x1,x2): dữ liệu được biểu diễn trong khoảng x1 đến x2

H.history: dữ liệu được vẽ

label: gắn nhãn cho dữ liệu được vẽ

Trang 18

:

plt.plot(np.arrange(0,numOfEpoch),H.history['loss'],label="training loss"): Vẽ dữ liệu hàm

mất mát của tệp huấn luyện trên 10 lần epoch và được gán nhãn là "training loss"

plt.tiltle(): Đặt tên cho biểu đồ

plt.xlabel(): Đặt tên cho trục x

plt.ylabel(): Đặt tên cho trục y

plt.legend(): Hiển thị chú thích các đường màu

2.8 Đánh giá mô hình

H2.9 Đánh giá mô hình dùng tập kiểm tra

model.evaluate(x,y,verbose): đánh giá mô hình với tệp kiểm tra

x: mẫu kiểm tra

y: nhãn của mẫu kiểm tra

verbose=0: không hiển thị quá trình

ngõ ra trả về (hàm mất mát của tập kiểm tra, độ chính xác khi kiểm tra)

2.9 Dự đoán ảnh

Trang 19

:

H2.10 Dự đoán ảnh

plt.imshow(image,cmap): hiển thị hình ảnh với

image: ảnh cần hiển thị

cmap ="gray": ảnh hiển thị với thang đo mức xám

model.predict(sample): trả về ma trận y dự đoán khả năng có thể mà bức ảnh phù hợp với từng

nhãn

Ví dụ với mẫu thứ 100 mô hình dự đoán xác suất bức ảnh này thuộc nhãn 1(tức là dự đoán đây là

số 1) chỉ có 1.606795 x 10-7, thuộc nhãn 2 là 2.6708245 x 10-8và tương tự cho các nhãn tiếp theo

np.argmax(y_predict): trả về thứ tự của phần tử có giá trị cao nhất tức là có khả năng cao nhất.

Ở mẫu thứ 100 này nhãn số 6 có xác suất dự đoán là 9.9999988 x 10-11, vậy mẫu này được dự đoán mang nhãn số 6 tức là số 6

3 Tài liệu tham khảo

[1] Nguyễn Phúc Lương,(2017), “Ứng dụng Convolutional Neural Network trong bài toán phân loại ảnh”, Viblo

[2] [1]: Thor Pham Blog, (2018), "Tìm hiểu về thư viện Keras trong Deep Learning",

thorphamblog.github.io

[3] Andrew Ng., "Course 4 - Convolution Network", Coursera.

Ngày đăng: 16/10/2020, 16:38

HÌNH ẢNH LIÊN QUAN

năng dự đoán của mô hình tăng lên. Vector hoá cũng được áp dụng cho quá trình này. Trong đó được α - CNN nhận diện chữ số viết tay handwriting number detection
n ăng dự đoán của mô hình tăng lên. Vector hoá cũng được áp dụng cho quá trình này. Trong đó được α (Trang 7)
Khi huấn luyện mô hình, để biểu thị chênh lệch giữa ngõ ra dự đoán và ngõ ra thực tế, ta sử dụng - CNN nhận diện chữ số viết tay handwriting number detection
hi huấn luyện mô hình, để biểu thị chênh lệch giữa ngõ ra dự đoán và ngõ ra thực tế, ta sử dụng (Trang 11)
2.5. Xây dựng mô hình CNN - CNN nhận diện chữ số viết tay handwriting number detection
2.5. Xây dựng mô hình CNN (Trang 15)
H2.7. Huấn luyện mô hình CNN - CNN nhận diện chữ số viết tay handwriting number detection
2.7. Huấn luyện mô hình CNN (Trang 16)
H2.9. Đánh giá mô hình dùng tập kiểm tra - CNN nhận diện chữ số viết tay handwriting number detection
2.9. Đánh giá mô hình dùng tập kiểm tra (Trang 17)
H2.8. Đánh giá mô hình qua đồ thị - CNN nhận diện chữ số viết tay handwriting number detection
2.8. Đánh giá mô hình qua đồ thị (Trang 17)
plt.imshow(image,cmap): hiển thị hình ảnh với image: ảnh cần hiển thị - CNN nhận diện chữ số viết tay handwriting number detection
plt.imshow (image,cmap): hiển thị hình ảnh với image: ảnh cần hiển thị (Trang 18)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w