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

bài báo cáo học phần trí tuệ nhân tạo trong kinh doanh đề tài ứng dụng nhận diện các loài động vật áp dụng thuật toán cnn

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 (726.15 KB, 28 trang )

HỌC VIỆN NGÂN HÀNG
KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ

BÀI BÁO CÁO
Học phần: Trí tuệ nhân tạo trong kinh doanh

ĐỀ TÀI: Ứng dụng nhận diện các loài động vật áp
dụng thuật toán CNN

Giảng viên hướng dẫn :
Sinh viên thực hiện
Lớp

Hà nội, ngày 12 tháng 4 năm 2022

download by :


DANH SÁCH SINH VIÊN THƯC
ST
T
1

2

3

4

download by :



MỤC LỤC
LỜI MỞ ĐẦU
...................................................................................................................
CHƯƠNG I. PHÁT BIỂU BÀI TOÁN VÀ LÝ DO LẬP BÀI TOÁN ..........................
1.1. Lý do lập bài toán ....................................................................................................
1.2. Phát biểu bài toán...................................................................................................
CHƯƠNG II. CHUẨN BỊ DỮ LIỆU..............................................................................
2.1. Cách thức thu thập dữ liệu
......................................................................................
2.2. Xác định các kiểu dữ liệu ảnh cần thu thập
.............................................................
2.3. Số lượng từng kiểu dữ liệu
.......................................................................................
2.4. Cách tổ chức dữ liệu trên máy tính
..........................................................................
CHƯƠNG III. GIỚI THIỆU TỔNG QUAN THUẬT TỐN SỬ DỤNG...................
3.1. Lý thuyết cơ bản về mạng CNN ...............................................................................
3.2. Ưu điểm
.....................................................................................................................................
10
3.3. Nhược điểm...........................................................................................................11
3.4. Quy trình làm việc.................................................................................................11
CHƯƠNG IV. MÃ LỆNH CHƯƠNG TRÌNH............................................................
4.1. Đọc dữ liệu, tiền xử lý dữ liệu
.....................................................................................................................................
12
4.2. Xây dựng mơ hình, mơ tả rõ số lớp ẩn của mạng CNN
.....................................................................................................................................
14

4.3. Huấn luyện mơ hình và xác định độ chính xác của mơ hình
.....................................................................................................................................
17
4.4. Sử dụng mơ hình
.....................................................................................................................................
19


4.5. Đánh giá độ chính xác của mơ hình
.....................................................................................................................................
21
CHƯƠNG V. KẾT LUẬN.............................................................................................
TÀI LIỆU THAM KHẢO
.............................................................................................

download by :


LỜI MỞ ĐẦU
Từ những kiến thức đã học được từ mơn Trí tuệ nhân tạo trong kinh doanh kết
hợp với các kiến thức thực tế, nhóm chúng tơi đã có được những kiến để hồn thiện
bài báo cáo của mơn học này.
Chúng tôi xin gửi lời cảm ơn chân thành đến thầy Vũ Duy Hiến đã tận tụy
hướng dẫn, dạy những kiến thức tuyệt vời và sửa lại các lỗi sai trong quá trình học
và làm bài tập lớn để chúng tơi có được một bài báo cáo hồn chỉnh và trọn vẹn
nhất.
Trong q trình làm bài khó có thể tránh khỏi những sai lầm, chúng tôi rất
mong nhận được những ý kiến, đánh giá, góp ý đáng quý từ thầy cơ để bài báo cáo
cảu nhóm chúng tơi được hồn thiện nhất.
Chúng tơi xin chân thành gửi lời cảm ơn đến thầy cơ!

Nhóm 11

1

download by :


CHƯƠNG I. PHÁT BIỂU BÀI TOÁN VÀ LÝ DO LẬP BÀI TỐN
1.1. Lý do lập bài tốn.
Trong thời đại 4.0 bùng nổ, mọi sinh hoạt của con người đều gắn liền với cơng
nghệ thơng tin. Khi nhắc tới trí tuệ nhân tạo AI thì khơng thể khơng phủ nhận lợi
ích khi chúng đã góp phần khơng nhỏ thay đổi mọi mặt của cuộc sống. AI giúp
chúng ta đạt nhiều thành tựu trên các lĩnh vực từ kinh tế, văn hóa, giáo dục, nghiên
cứu khoa học,... Tại bài nghiên cứu này, nhóm chúng tơi muốn nhắc tới việc ứng
dụng trí tuệ nhân tạo trong lĩnh vực giáo dục tại các trường mẫu giáo trên toàn
quốc. Trong lứa tuổi đi học đặc biệt là lứa tuổi từ 3 đến 6 tuổi, các thầy cô giáo cần
phát triển thế giới quan cho con trẻ như việc phân biệt được màu sắc, nhận biết
được các loài hoa, nhận diện được các loài động vật khác nhau,...Nhóm chúng tơi
xin xét tới khía cạnh nhận diện và phân biệt các loài động vật khác nhau. Trong các
bài giảng hiện nay, để nhận diện các loài động vật cho trẻ con thì các thầy cơ giáo
thực hiện giảng giải bằng miệng hoặc cho trẻ nhỏ xem video. Tuy nhiên hình thức
này chỉ giúp trẻ phân biệt được ngay tại thời điểm đó, vì bản tính của con trẻ tuy rất
dễ tiếp thu nhưng lại rất nhanh quên. Đặt ra vấn đề này, nhóm chúng tơi đưa ra
hướng giải quyết là áp dụng công nghệ trong việc nhận diện hình ảnh các lồi động
vật để giảm gánh nặng cho giáo viên không phải giảng đi giảng lại cho trẻ đồng
thời giúp chúng nhớ lâu khi ôn tập lại ở nhà cùng gia đình. Với mong muốn trở
thành một cơng cụ hữu ích cho các thầy cơ giáo trong việc đem lại kiến thức về các
loài động vật cho trẻ nhỏ, nhóm chúng tơi quyết định lựa chọn đề tài “Ứng dụng
nhận diện các loài động vật áp dụng thuật tốn CNN”.
1.2. Phát biểu bài tốn

- Mơ tả bài tốn:
Trong sự phát triển của trí tuệ nhân tạo AI với phương pháp học sâu của máy,
đặc biệt là mạng CNN nơron tích chập giúp máy tính có thể nhận dạng hình ảnh và
phát hiện đối tượng. Nhận dạng hình ảnh là việc máy tính có thể hiểu nội dung của
ảnh. Bài tốn mà chúng tơi giải quyết sẽ áp dụng một mơ hình mạng CNN có khả
năng phân biệt được các loài động vật khác nhau. Do bởi ngoài tự nhiên có hàng
2

download by :


trăm lồi động vật nên chúng tơi xin phép lựa chọn đại diện 10 loài động vật tiêu
biểu đưa vào mơ hình. Danh sách các lồi động vật mà nhóm chúng tôi lựa chọn để
phân loại trong tập dữ liệu ảnh bao gồm: Bọ Ngựa, Cá Mập, Dory fish, Gà, Hổ,
Hươu cao cổ, Rùa, Tê giác, Ngựa vằn, Voi. Input: Hình ảnh của 10 lồi động vật.
Output: Tên gọi của của 10 lồi động vật tương ứng.
Thuật tốn nhận diện động vật được thể hiện:
Code:
/>
Link Youtube: />- Dựa trên ý tưởng “Ứng dụng nhận diện các loài động vật áp dụng thuật tốn

CNN” nhóm 11 đã đưa ra thiết kế demo app nhận diện động vật trên giao diện điện
thoại. Thiết kế này mang tinh chất ý tưởng minh họa để người xem dễ hình dung.

Hình ảnh App demo động vật trên điện thoại

3

download by :



CHƯƠNG II. CHUẨN BỊ DỮ LIỆU
2.1. Cách thức thu thập dữ liệu
Dữ liệu hình ảnh 10 lồi động vật (Bọ Ngựa, Cá Mập, Dory fish, Gà, Hổ,
Hươu cao cổ, Rùa, Tê giác, Ngựa vằn, Voi ) dùng vào việc huấn luyện mơ hình AI
được thu thập từ Google hình ảnh và />2.2. Xác định các kiểu dữ liệu ảnh cần thu thập
Dữ liệu hình ảnh của 10 lồi động vật: Bọ Ngựa, Cá Mập, Dory fish, Gà, Hổ,
Hươu cao cổ, Rùa, Tê giác, Ngựa vằn, Voi sẽ được chia thành 3 phần (Train,
Validation, Test), mỗi phần đều có hình ảnh của 10 lồi. Trong đó tỉ lệ chia các là:
tệp Train chiếm 70%, tập Validation chiếm 20%, tập Test chiếm 10%.
Tệp Train là tệp chiếm số lượng nhiều nhất dùng để huấn luyện mơ hình; Tệp
Validation là tệp dữ liệu dùng để kiểm tra độ chính xác của mơ hình trong quá trình
huấn luyện từ tệp Train; Tệp Test là tệp dữ liệu dùng để kiểm tra độ chính xác của
mơ hình sau khi được huấn luyện xong, các dữ liệu dùng trong tệp Test sẽ là dữ liệu
mà mô hình chưa được nhìn thấy qua. Chất lượng của bức ảnh cũng một phần làm
ảnh hưởng tới hiệu quả huấn luyện mơ hình.
2.3. Số lượng từng kiểu dữ liệu
- Tổng số ảnh chỗ mỗi loài động vật: 200 ảnh → Tổng số ảnh của cả bộ dữ

liệu: 2000 ảnh
- Tổng số ảnh trong tệp Train 1400 ảnh (Mỗi loài động vật 140 ảnh)
- Tổng số ảnh trong tệp Validation 400 ảnh (Mỗi loài động vật 40 ảnh)
- Tổng số ảnh trong tệp Test 200 ảnh (Mỗi loài động vật 20 ảnh)

2.4. Cách tổ chức dữ liệu trên máy tính
Dữ liệu hình ảnh của 10 lồi động vật được thu thập dưới dạng file “.jpg”,
chia vào 10 folder riêng biệt tương ứng với 10 loài động vật: Bọ Ngựa, Cá Mập,
Dory fish, Gà, Hổ, Hươu cao cổ, Rùa, Tê giác, Ngựa vằn, Voi.
4


download by :


Vị trí lưu trữ D:\Computer Vision\Data; trong “Data” có ba Folder Train,
Validation và Test. Sau đó upload dữ liệu lên Google Drive.

Hình ảnh vị trí lưu tập Test, Train và Validation

Hình ảnh vị trí lưu các tệp tương ứng với 10 lồi động vật tại tệp Train

Hình ảnh vị trí lưu các tệp tương ứng với 10 loài động vật tại tệp Validation

Hình ảnh vị trí lưu các tệp tương ứng với 10 loài động vật tại tệp Test

5

download by :


CHƯƠNG III. GIỚI THIỆU TỔNG QUAN THUẬT TOÁN SỬ DỤNG
3.1. Lý thuyết cơ bản về mạng CNN
Mạng nơ-ron tích tụ (CNN) - Convolutional Neural Network là một loại mạng
nơ-ron nhân tạo được sử dụng chủ yếu để nhận dạng và xử lý hình ảnh, do khả năng
nhận dạng các mẫu trong hình ả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. CNN cũng giúp đưa ra ước tính chuyên sâu về ô tô tự lái.
CNN là một công cụ mạnh mẽ nhưng yêu cầu hàng triệu điểm dữ liệu được gắn
nhãn để đào tạo. CNN phải được đào tạo với các bộ xử lý công suất cao, chẳng hạn
như GPU (Bộ xử lý các tác vụ liên quan tới đồ họa) hoặc NPU (Bộ xử lý thần kinh
chuyên dụng), nếu chúng muốn tạo ra kết quả đủ nhanh để hữu ích.

Ngồi việc được thiết kế để giải quyết các vấn đề với hình ảnh trực quan, CNN
cũng có nhiều ứng dụng ngồi nhận dạng và phân tích hình ảnh, bao gồm phân loại
hình ảnh, xử lý ngơn ngữ tự nhiên, khám phá thuốc và đánh giá rủi ro sức khỏe.

CNN bao gồm những phần lớp cơ bản là:
Convolutional layer:
Đây là lớp quan trọng nhất của CNN, lớp này có nhiệm vụ thực hiện mọi tính
tốn. Những yếu tố quan trọng của một convolutional layer là: stride, padding, filter
map, feature map.
CNN sử dụng các filter để áp dụng vào vùng của hình ảnh. Những filter map
này được gọi là ma trận 3 chiều, mà bên trong nó là các con số và chúng là
parameter.
Stride có nghĩa là khi bạn dịch chuyển filter map theo pixel dựa vào giá trị từ trái
sang phải. Và sự chuyển dịch này chính là Stride. Padding: Là các giá trị 0 được
thêm vào với lớp input.
Feature map: Nó thể hiện kết quả của mỗi lần filter map quét qua input. Sau mỗi lần
quét sẽ xảy ra q trình tính tốn.

6

download by :


Bộ lọc tích chập được sử dụng trên ma trận điểm ảnh (Nguồn: Cadalyst.com) Bộ
lọc được sử dụng là một ma trận có kích thước 3x3, bộ lọc này dịch chuyển

lần lượt qua từng vùng ảnh đến khi hoàn thành quét toàn bộ bức ảnh, tạo ra một
bức ảnh mới có kích thước nhỏ hơn hoặc bằng với kích thước ảnh đầu vào. Kích
thước này được quyết định tùy theo kích thước các khoảng trắng được thêm ở viền
bức ảnh gốc và được tính theo cơng thức sau:

O=i+2*p-ks+1
Trong đó:
O: kích thước ảnh đầu ra;

i: kích thước ảnh đầu vào;

p: kích thước khoảng trắng phía ngồi viền của ảnh gốc;
k: kích thước bộ lọc;
s: bước trượt của bộ lọc.
Relu Layer
Relu layer là hàm kích hoạt trong neural network và hàm này còn được gọi là
activation function để giới hạn phạm vi biên độ cho phép của giá trị đầu ra. Trong
activation function thì nó cịn có hàm nghĩa là: Relu, Leaky, Tanh, Sigmoid,
Maxout,...Hiện nay, hàm relu được dùng phổ biến và vơ cùng thơng dụng.
Nó được sử dụng nhiều cho các nhu cầu huấn luyện mạng neuron thì relu
mang ưu điểm nổi bật là cài đặt đơn giản, tốc độ xử lý nhanh mà vẫn đảm bảo được
tính tốn hiệu quả. Phép tính tốn của hàm ReLU chỉ đơn giản là chuyển tất cả các
giá trị âm thành giá trị 0.

7

download by :


Vị trí lớp ReLU ngay phía sau lớp tích chập (Nguồn: Superdatascience.com)

Với đầu ra là một ảnh mới có kích thước giống với ảnh đầu vào, các giá trị điểm
ảnh cũng hoàn toàn tương tự, trừ các giá trị âm đã bị loại bỏ.
fx=max (0,x)
Pooling layer

Khi đầu vào quá lớn, những lớp pooling layer sẽ được xếp vào giữa giữa
những lớp Convolutional layer để làm giảm parameter (tham số). Hiện nay, pooling
layer có 2 loại chủ yếu là:
Max pooling (lấy giá trị điểm ảnh lớn nhất)
Average pooling (lấy giá trị trung bình của các điểm ảnh trong vùng ảnh cục bộ).

Phương thức Average Pooling và Max Pooling (Nguồn: Springer.com)

Fully connected layer
Lớp này có nhiệm vụ đưa ra kết quả sau khi lớp convolutional layer và pooling
layer đã nhận được ảnh truyền. Lúc này, ta thu được kết quả là model đã đọc được
8

download by :


thông tin của ảnh và để liên kết chúng cũng như cho ra nhiều output hơn thì ta sử
dụng fully connected layer.
Ngồi ra, nếu như fully connected layer có được giữ liệu hình ảnh thì chúng sẽ
chuyển nó thành mục chưa được phân chia chất lượng. Cái này khá giống với phiếu
bầu rồi chúng sẽ đánh giá để bầu chọn ra hình ảnh có chất lượng cao nhất.

Hình ảnh lớp kết nối đầy đủ (Nguồn: Researchgate.com)

Cấu trúc của mạng CNN
Mang CNN là một trong những tập hợp của lớp Convolution bị chồng lên nhau cũng
như sử dụng hàm nonlinear activation như ReLU và tanh để kích hoạt trọng số trong node.
Lớp này sau khi thơng qua hàm thì sẽ được trọng số trong các node. Những lớp này sau
khi đã thơng qua hàm kích hoạt thì có thể tạo ra những thông tin trừu tượng hơn cho những
lớp tiếp theo.


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. Ngồ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 q trình huấn luyện mạng (training) 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,
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
9

download by :


pixel > edges > shapes > facial > high-level features. Layer cuối cùng được dùng để
phân lớp ảnh.
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). Nếu như bạn có cùng một đối tượng
mà lại chiếu theo nhiều góc độ khác nhau thì độ chính xác có thể sẽ bị ảnh hưởng. Với
chuyển dịch, quay và co giãn thì pooling layer sẽ được sử dụng để giúp làm bất biến những
tính chất này. Với cùng một đối tượng, nếu đối 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 tốn sẽ bị ảnh
hưởng đáng kể. Vì vậy, CNN sẽ đưa ra kết quả có độ chính xác tương ứng ở từng mơ
hình

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): Lớp này có nhiệm vụ
tách lọc dữ liệu, thơng tin ảnh và lựa chọn các vùng ảnh có giá trị sử dụng
cao nhất.
Trọng số chia sẻ (shared weights): Lớp này giúp làm giảm tối đa lượng
tham số có tác dụng chính của yếu tố này trong mạng CNN. Trong mỗi
convolution sẽ có các feature map khác nhau và mỗi feature lại có khả năng
giúp detect một vài feature trong ảnh.
Tổng hợp (pooling): Pooling layer là lớp cuối cùng và có tác dụng làm đơn
giản các thơng tin đầu ra. Có nghĩa là, sau khi đã hồn tất tính tốn và qt
qua các lớp thì đến pooling layer để lược bớt các thơng tin khơng cần thiết.
Từ đó, cho ra kết quả theo như ý mà người dùng mong muốn.
3.2. Ưu điểm
Thuật toán Convolutional neural network đem đến cho người dùng một mơ
hình chất lượng. Dù bản chất nó khơng phải là thuật toán quá đơn giản nhưng lại
10

download by :


mang đến kết quả hài lịng. Ưu điểm của mơ hình mạng CNN là tự động học các
đặc trưng của dữ liệu để thiết lập các đặc trưng mới mà không cần bất kỳ sự giám
sát nào của con người và có thể phân lớp dữ liệu ảnh chính xác.
3.3. Nhược điểm
CNN 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. Khi bộ

dữ liệu ảnh khơng đạt u cầu thì việc dự đốn kết quả sẽ khơng chính xác.
3.4. Quy trình làm việc
Đầu vào của lớp tích chập là hình ảnh
Chọn đối số, áp dụng các bộ lọc với các bước nhảy, padding nếu cần. Thực
hiện tích chập cho hình ảnh và áp dụng hàm kích hoạt ReLU cho ma trận
hình ảnh.
Thực hiện Pooling để giảm kích thước cho hình
ảnh. Thêm nhiều lớp tích chập sao cho phù hợp
Xây dựng đầu ra và dữ liệu đầu vào thành 1 lớp được kết nối đầy đủ (Full
Connected)
Sử dụng hàm kích hoạt để tìm đối số phù hợp và nhận diện hình ảnh.

Mơ tả quy trình nhận diện hình ảnh ngựa vằn bằng thuật tốn CNN (Nguồn: miai.com)

11

download by :


CHƯƠNG IV. MÃ LỆNH CHƯƠNG TRÌNH
4.1. Đọc dữ liệu, tiền xử lý dữ liệu
*Các thư viện sử dụng trong chương trình
import tensorflow as tf from
tensorflow import keras import
matplotlib.pyplot as plt import
numpy as np
Tensorflow: là thư viện học sâu, có mã nguồn mở, được dùng để tính tốn machine
learning với quy mơ lớn. TensorFlow kết hợp một loạt các mơ hình và thuật toán
machine learning cùng deep learning, cho phép tạo một biểu đồ để thực hiện các
tính tốn. Mỗi nút trong biểu đồ đại diện cho một phép toán và mỗi kết nối đại diện

cho dữ liệu. Tensorflow cung cấp sẵn hàm để đơn giản hóa việc load dữ liệu.
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, Huấn luyện và sử dụng model
Keras: là một mã nguồn mở cho deep learning được viết bằng Python. Nó có thể
chạy trên nền của các deep learning khác như: tensorflow, theano, CNTK. Với các
Application Programming Interface – giao diện lập trình ứng dụng (API) bậc cao,
dễ sử dụng, dễ mở rộng, Keras giúp người dùng xây dựng các deep learning model
một cách đơn giản.
Matplotlib: là một trong những giải pháp như vậy cho người dùng Python, Để thực
hiện các suy luận thống kê cần thiết, cần phải trực quan hóa dữ liệu. Nó là một thư
viện vẽ đồ thị rất mạnh mẽ hữu ích cho những người làm việc với Python và
NumPy. Module được sử dụng nhiều nhất của Matplotlib là Pyplot cung cấp giao
diện như MATLAB nhưng thay vào đó, nó sử dụng Python và nó là nguồn mở.
Numpy: là thư viện lõi phục vụ cho khoa học máy tính của Python, hỗ trợ cho việc
tính tốn các mảng nhiều 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 nhiều chiều đó. Nó cung cấp một đối tượng mảng đa chiều hiệu
suất cao và các công cụ để làm việc với các mảng này. Numpy đặc biệt hữu ích khi
12

download by :


thực hiện các hàm liên quan tới Đại Số Tuyến Tính hay nó cịn được coi là thư viện
xử lý số.
*Kết nối với Google Drive để đọc dữ liệu
from google.colab import drive
drive.mount('/content/drive/')

Bước này cần cho phép con Bot truy cập vào dữ liệu tài khoản Drive lưu tệp
muốn đọc.

*Khai báo đường dẫn thư mục chứa ảnh dữ
liệu import os
train_image_files_path = "/content/drive/MyDrive/AI Btap lớn - Computervision/Data/Train"
valid_image_files_path = "/content/drive/MyDrive/AI Btap lớn - Computervision/Data/Validation"
Khai báo đường dẫn đến 2 thư mục chứa dữ liệu ảnh dùng để huấn luyện
và kiểm định mơ hình.
*Gán nhãn dữ liệu
label=['BoNgua','Camap','Doryfish','Ga','Ho','Huucaoco',
'Nguavan','Rua','Tegiac','Voi']
Với bài toán nhận diện và phân loại hình ảnh các lồi động vật là bài tốn
học có giám sát. Do đó, bộ dữ liệu đầu vào cần được phân loại và gán nhãn. Nhóm
chúng tơi sẽ đặt tên và thứ tự nhãn tương ứng với tên và thứ tự các thư mục chứa
ảnh huấn luyện và kiểm định mơ hình.
*Tiền xử lý ảnh với ImageDataGenerator
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_data_gen = ImageDataGenerator(rescale=1/255)
validation_data_gen = ImageDataGenerator(rescale=1/255)
13

download by :


ImageDataGenerator là lớp học của Keras để tổng hợp dữ liệu hình ảnh cho
học sâu. Nó cho phép dễ dàng truy cập vào hệ thống tệp cục bộ của bạn và nhiều
phương pháp khác nhau để tải dữ liệu từ các cấu trúc khác nhau. Nó cũng có một số
khả năng xử lý trước và tăng cường dữ liệu khá mạnh mẽ. Hàm này dùng để chuyển
từ file ảnh JPG thành dữ liệu tensor cho keras, cho phép sinh mẫu ngẫu nhiên bằng
cách biến dạng, gây nhiễu ngẫu nhiên ảnh gốc. Tùy chỉnh tham số rescale cho phép
chuyển giá trị pixel từ 0:255 thành thang đo [0:1] để thích hợp cho mạng neuron.
Tham số rescale = 1/255 có tác dụng chuẩn hóa dữ liệu ảnh, đưa tồn bộ giá trị

điểm ảnh về các giá trị nằm trong khoảng [0, 1]. Việc chuẩn hóa dữ liệu này giúp
q trình huấn luyện mơ hình được nhanh hơn.
*Đọc dữ liệu Train và Validation
train_generator =
train_data_gen.flow_from_directory( train_image_files_path,

target_size=(200, 200),
class_mode='categorical')
validation_generator =
validation_data_gen.flow_from_directory(
valid_image_files_path,
target_size=(200, 200),
class_mode='categorical')
Target size là kích thước của các ảnh được đưa vào tập huấn luyện Train,
biến đổi chúng về cùng một kích thước (200,200).
Class mode là tính chất của nhãn kết quả = categorical (bài toán phân loại).
4.2. Xây dựng mơ hình, mơ tả rõ số lớp ẩn của mạng
CNN from keras.models import Sequential
from

keras.layers

import

Dense,

Dropout,

MaxPooling2D, Flatten
model=tf.keras.models.Sequential()

# lớớớ̛́p CNN1
14

download by :

Conv2D,


model.add(Conv2D(32,(3,3),
activation='relu',input_shape=(200,200,3)))
model.add(MaxPooling2D(2,2)) # lớớớ̛́p CNN2

model.add(Conv2D(64,(3,3), activation='relu'))
model.add(MaxPooling2D(2,2))
# lớớớ̛́p CNN3
model.add(Conv2D(128,(3,3), activation='relu'))
model.add(MaxPooling2D(2,2))
#

chuyển dữ liệu đầu ra của mạng CNN từ mảng 2 chiều về

mảng 1 chiều
model.add(Flatten())
# lớớớ̛́p ẩn

model.add(Dense(512, activation=tf.nn.relu))
# lớớớ̛́p output
model.add(Dense(10, activation=tf.nn.softmax)) # 10 đầu
ra
- Sequential: là mơ hình tuần tự liên quan tới việc xác định một lớp Sequential và


thêm từng lớp vào mơ hình theo cách tuyến tính, từ đầu vào đến đầu ra.
- Dense: Dense layer hay Fully-connected layer là một lớp cổ điển trong mạng nơ

ron nhân tạo. Mỗi nơron nhận đầu vào từ tất cả nơron lớp trước đó.
- Drop out: Hiểu 1 cách đơn giản thì Dropout là việc bỏ qua các đơn vị (tức là 1 nút

mạng) trong quá trình đào tạo 1 cách ngẫu nhiên. Bằng việc bỏ qua này thì đơn vị
đó sẽ khơng được xem xét trong q trình forward và backward. Theo đó, p được
gọi là xác suất giữ lại 1 nút mạng trong mỗi giai đoạn huấn luyện, vì thế xác suất nó
bị loại bỏ là (1 - p).
- Conv2D: phương thức này tạo ra một lớp phức hợp. Tham số đầu tiên (32) là số

bộ lọc và tham số thứ hai (3,3) là kích thước bộ lọc.
- MaxPooling2D: lớp Pooling thường được dùng giữa các lớp convolutional, để

giảm kích thước dữ liệu nhưng vẫn giữ được các thuộc tính quan trọng. Kích thước
dữ liệu giảm sẽ giúp giảm việc tính tốn trong model.
15

download by :


- Relu: là một hàm kích hoạt có cơng thức y = max (0, x). Hàm này để loại các giá

trị âm tức là nó chuyển tất cả các giá trị âm về giá trị 0 còn giữ nguyên các giá trị
dương.
- Flatten: chuyển ảnh từ dạng ma trận về mảng 1 chiều.

Mơ hình gồm 6 tầng: Input image -> CNN1 -> CNN2 -> CNN3-> Fully connected

layer -> Output.
Mơ hình có 3 lớp CNN:
- Lớp CNN1 gồm 32 bộ lọc kích thước 3x3, kết nối với đầu vào nên mơ tả rõ thông

tin của đầu vào (input_shape).
- Lớp CNN2 gồm 64 bộ lọc kích thước 3x3
- Lớp CNN3 gồm 128 bộ lọc kích thước 3x3

Với mỗi bộ lọc khác nhau sẽ học được những đặc trưng khác nhau của ảnh, do
đó mỗi tầng convolutional ta sẽ dùng nhiều bộ lọc (CNN1 sử dụng 32 bộ lọc, CNN2
sử dụng 64 bộ lọc, CNN3 sử dụng 128 bộ lọc) để học được nhiều đặc trưng của ảnh
(ví dụ biên ngang, biên dọc…). Mỗi lớp CNN làm nhiệm vụ lấy đặc trưng của ảnh
và nén ảnh từ kích cỡ ảnh to về ảnh nhỏ. Từ đó để giảm bớt số lượng nơron cần
phải lưu trữ, giảm bớt độ phức tạp của thuật toán.
- Hidden layer (Lớp ẩn): chứa 512 neuron. Một lớp ẩn nằm giữa đầu vào và đầu ra

của thuật toán. Các lớp ẩn thực hiện các phép biến đổi phi tuyến của các đầu vào
được đưa vào mạng. Các lớp ẩn cho phép chức năng của mạng nơ-ron được chia
nhỏ thành các phép biến đổi dữ liệu cụ thể. Mỗi chức năng lớp ẩn được chuyên biệt
hóa để tạo ra một đầu ra xác định. Ví dụ: các chức năng của lớp ẩn được sử dụng để
xác định mắt và tai của động vật có thể được sử dụng kết hợp với các lớp tiếp theo
để nhận dạng các loài.
- Output layer (Lớp đầu ra): sử dụng hàm Softmax tính tốn xác suất xảy ra của

một sự kiện. Hàm softmax sẽ tính khả năng xuất hiện của một class trong tổng số tất
cả các class có thể xuất hiện. Sau đó, xác suất này sẽ được sử dụng để xác định
class mục tiêu cho các input. Cụ thể, hàm softmax biến vector k chiều có các giá trị
thực bất kỳ thành vector k chiều có giá trị thực có tổng bằng 1. Giá trị nhập có thể
dương, âm, bằng 0 hoặc lớn hơn 1, nhưng hàm softmax sẽ luôn biến chúng thành
một giá trị nằm trong khoảng (0:1].

16

download by :


*Thiết lập các tham số để huấn luyện mơ hình
from tensorflow.keras.optimizers import Adam
model.compile(optimizer=Adam(learning_rate=0.001),
loss='categorical_crossentropy',
metrics=['acc'])
- Compile: chọn các tham số để huấn luyện mơ hình.
- Optimizer: thuật tốn tối ưu là cơ sở để xây dựng mơ hình neural network với

mục đích “học ” được các features ( hay pattern) của dữ liệu đầu vào, từ đó có thể
tìm 1 cặp weights và bias phù hợp để tối ưu hóa model.
- Adam: Nhóm sử dụng Optimizer Adam cho ra độ chính xác cao nhất trong nhiều

lần thử nghiệm so với RMSprop. Adam là sự kết hợp của Momentum và RMSprop.
Nếu giải thích theo hiện tượng vật lý thì Momentum giống như 1 quả cầu lao xuống
dốc, còn Adam như 1 quả cầu rất nặng có ma sát, vì vậy nó dễ dàng vượt qua local
minimum tới global minimum và khi tới global minimum nó khơng mất nhiều thời
gian dao động qua lại quanh đích vì nó có ma sát nên dễ dừng lại hơn.
- Loss: hàm tính tốn sai số giữa giá trị học được và giá trị thực tế, sử dụng

categorical_crossentropy trong trường hợp dự đoán nhiều lớp. Nếu y_true =
y_predict thì trả về 1 ngược lại là 0
- Metrics: thước đo để ta đánh giá accuracy mơ hình.

4.3. Huấn luyện mơ hình và xác định độ chính xác của mơ
hình *Huấn luyện mơ hình:

EPOCHS=100
history=model.fit(
train_generator,
steps_per_epoch=3,
epochs=EPOCHS,
verbose=1,
validation_data = validation_generator,
validation_steps=3)
17

download by :


Đối với mơ hình này, nhóm chúng tơi đã thử nghiệm với nhiều tham số
batch_size, steps_per_epoch, epochs, validation_steps và đã chọn ra tham số phù
hợp để có được kết quả tốt nhất, có thể dự đốn chính xác tên các lồi động vật.
- EPOCHS = 100 là số vịng lặp của mơ hình.
- History=model.fit: Mỗi khi dùng model.fit (), nó sẽ trả về một đối tượng

hard.callbacks. History giúp ghi lại các biến.
- Verbose: 'auto', 0, 1 hoặc 2.

Chế độ chi tiết: 0 = im lặng;
1 = thanh tiến trình [==============================];
2 = một dòng mỗi kỷ nguyên.
-> 'auto' mặc định là 1 cho hầu hết các trường hợp.
- Validation_steps: Chỉ có liên quan nếu validation_data được cung cấp và là tập

dữ liệu. Tổng số bước (lô mẫu) cần vẽ trước khi dừng khi thực hiện xác nhận vào
cuối mỗi Epoch.

*Xác định độ chính xác của mơ hình:
Sau khi chạy, nhóm chúng tôi thu được kết quả như sau:
Epoch 1/100
3/3 [==============================] - 12s 4s/step - loss: 0.0508 - acc:
0.9792 - val_loss: 2.6149 - val_acc: 0.6875
Epoch 2/100
3/3 [==============================] - 10s 4s/step - loss: 0.0612 - acc:
0.9688 - val_loss: 1.6840 - val_acc: 0.7292
Epoch 3/100
3/3 [==============================] - 10s 3s/step - loss: 0.0304 - acc:
0.9896 - val_loss: 1.4946 - val_acc: 0.7396
Epoch 4/100
3/3 [==============================] - 9s 4s/step - loss: 0.0952 - acc:
0.9479 - val_loss: 2.2627 - val_acc: 0.6875
Epoch 5/100
18

download by :


3/3 [==============================] - 9s 3s/step - loss: 0.0387 - acc:
0.9896 - val_loss: 1.6224 - val_acc: 0.6875
.............................................................
Epoch 95/100
3/3 [==============================] - 9s 3s/step - loss: 5.7661e-04 - acc:
1.0000 - val_loss: 3.8172 - val_acc: 0.7292
Epoch 96/100
3/3 [==============================] - 10s 3s/step - loss: 0.0022 - acc:
1.0000 - val_loss: 3.8314 - val_acc: 0.7500
Epoch 97/100

3/3 [==============================] - 9s 3s/step - loss: 3.6547e-04 - acc:
1.0000 - val_loss: 1.4317 - val_acc: 0.7917
Epoch 98/100
3/3 [==============================] - 9s 3s/step - loss: 4.1760e-04 - acc:
1.0000 - val_loss: 2.7634 - val_acc: 0.7500
Epoch 99/100
3/3 [==============================] - 10s 3s/step - loss: 2.9573e-04 acc: 1.0000 - val_loss: 3.3365 - val_acc:
0.7188 Epoch 100/100
3/3 [==============================] - 9s 3s/step - loss: 1.5203e-04 - acc:
1.0000 - val_loss: 1.7888 - val_acc: 0.8646
=> Sau khi chạy xong, Bot sẽ lấy ảnh trên tập Validation được độ chính xác val_acc =
0.8646
Máy nhận diện được ảnh với độ chính xác acc = 1.

4.4. Sử dụng mơ hình
from google.colab import files
from keras.preprocessing import
image %matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
19

download by :


uploaded=files.upload()
for fn in uploaded.keys():
#predicting images
path='/content/'+fn #In ảnh
đọc được

plt.imshow(mpimg.imread(path))
img=image.load_img(path,target_size=(200,200))
x=image.img_to_array(img)
x=np.expand_dims(x,axis=0)
images=np.vstack([x])
y_predict = model.predict(images,batch_size=10)
print(y_predict)
print('Giá trị dự đoán: ',
label[np.argmax(y_predict)])
- Đầu tiên cần import file từ google colab
- From keras.preprocessing import image : Sau khi phân lớp, đầu ra của net là số thứ tự

của lớp (1,2,3,…) nên ta cần decode kết quả tùy thuộc vào bộ dữ liệu sử dụng và thư viện
tiền xử lý đầu vào của file.
- Matplotlib: để thực hiện các suy luận thống kê cần thiết, cần phải trực quan hóa dữ liệu

của bạn và Matplotlib là một trong những giải pháp như vậy cho người dùng Python.
- Uploaded=files.upload() : Tải file từ tệp test
- Path='/content/'+fn : Load ảnh lên và xử lý trước khi đưa vào để phân lớp
- Plt.imshow(mpimg.imread(path)) : In ảnh ra để đọc
- Img=image.load_img(path,target_size=(200,200)) : đặt kích thước của ảnh
- x=image.img_to_array(img) và x=np.expand_dims(x,axis=0) : Tiền xử lý ảnh
- Print(y_predict): In giá trị dự đoán theo giá trị [0, 1].
- Print('Giá trị dự đoán: ', label[np.argmax(y_predict)]): In giá trị dự đoán.

VD như giá trị dự đoán là con rùa

Chạy mơ hình và chọn một bức ảnh động vật bất kì trên tập dữ liệu Test, kết quả sẽ
nhận diện động vật sẽ dựa trên những gì mơ hình được huấn luyện, như sau:


20

download by :


Kết quả của việc chạy mơ hình

4.5. Đánh giá độ chính xác của mơ hình
Độ chính xác kết quả thực nghiệm

Dự đốn

17

đúng
Dự đốn

3

sai
Tỷ lệ dự

85%

đốn
chính xác

=> Thơng qua độ chính xác kết quả thực nghiệm có thể đánh giá thuật toán
chạy dựa trên bộ bộ dữ liệu đầu vào là ảnh của 10 loài động vật là tương đối tốt. Đa
số con vật đều có tỷ lệ dự đốn chính xác cao từ 80% - 90%, có 2 lồi là Gà và

Ngựa vằn có tỷ lệ chính xác là 75% và Voi là 70%.

21

download by :


×