Tải bản đầy đủ (.pdf) (27 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 (997.29 KB, 27 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 :

Vũ Duy Hiến

Sinh viên thực hiện

:

Nhóm 11

Lớp

:

K22CLCH

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


DANH SÁCH SINH VIÊN THƯC HIỆN
ST


Họ và tên

MSV

Nhiệm vụ

T
1

Tỷ lệ
đóng góp

Nguyễn Mai Anh

22A4030549

- Làm nội dung: chương 1

25%

- Làm nội dụng: chương 2
- Tìm dữ liệu ảnh
- Làm word, slide
- Làm nội dung video, lồng
tiếng
- Thuyết trình
2

Nguyễn Hiếu Anh


22A4050469

- Làm nội dung chương 3

25%

- Làm nội dung chương 4
- Tìm dữ liệu ảnh
- Làm word, slide
- Làm nội dung video
- Thuyết trình
3

Nguyễn Quang Hiếu

22A4030179

- Làm nội dung video, edit

25%

- Tìm dữ liệu ảnh
- Xây dựng và chạy Google
colab
- Đánh giá độ chính xác
- Thuyết trình
- Thiết kế App
4

La Vạn Thiết


22A4010993

- Tìm dữ liệu ảnh
- Xây dựng và chạy Google
colab
- Sửa mã lệnh
- Giải thích thuật tốn
- Hồn thiện bản Word,
- Đánh giá độ chính xác
- Thuyết trình

25%


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 TỐN..........................
1.1. Lý do lập bài tố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 TOÁ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.............................................................................................


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


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


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 loà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


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


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


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


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


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


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


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


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 toán CNN (Nguồn: miai.com)

11


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


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


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,

MaxPooling2D, Flatten
model=tf.keras.models.Sequential()
# lớp CNN1
14

Dropout,

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



- 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


*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


Đố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


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


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ự đố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


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

Bọ







Hổ

Hươu

Ngựa

cao cổ

vằn 

Rùa



Voi

ngựa


mập

dory

17

16

18

15

16

17

15

16

17

14

3

4

2


5

4

3

5

4

3

6

85%

80%

90%

75% 80% 85%

75%

80% 85%

giác

đúng
Dự đốn

sai
Tỷ lệ dự

70%

đố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


CHƯƠNG V. KẾT LUẬN
Kết quả độ chính xác chung của việc nhận diện đúng 10 loài động vật trong tập
Test.
Tập ảnh test

Đúng

Sai

Tỷ lệ chính xác

200

161


39

80.5%

Tổng hợp lại kết quả sau khi chạy mơ hình với 200 ảnh động vật gồm 10 loài
động vật, kết quả thu được khá tốt với đúng là 161/200 và Sai là 39/200, Tỷ lệ chính
xác đạt tới 80.5%.
Hạn chế: 
Thơng qua việc huấn luyện mơ hình và đánh giá độ chính xác thực tế có thể
thấy mặc dù độ chính xác của mơ hình là tương đối cao, tuy nhiên vẫn cịn có các
hạn chế nhất định còn chưa giải quyết được:
 Vẫn còn 39/200 ảnh bị nhận diện nhầm lẫn với các loài động vật khác.
 Val_acc = ~86% chưa được tối ưu nhất.
Nguyên nhân:
Theo nhóm có thể do các nguyên nhân sau: 
 Một số lồi có màu sắc, hình dáng tương tự nhau.
 Số lượng 2000 ảnh/ 10 loài ~ 200 ảnh/loài động vật có khả năng là tương đối
ít để có thể nhận diện chính xác hơn
 Ngồi số lượng ảnh ra thì chất lượng ảnh cũng là một yếu tố quan trọng để
nâng cao nhận diện, có khá nhiều ảnh lồi động động vật nhóm thu thập có
kích thước khá nhỏ, và thực tế các có ảnh các lồi động vật này ngụy trang
hay có màu sắc gần giống màu của mơi trường chụp được trong bức ảnh. 
 Và có khả năng các thơng số như vịng lặp, lớp CNN hiện tại nhóm sử dụng
cho ra kết quả tốt nhất trong các lần thử nghiệm, và có thể chưa tìm được con
số tối ưu chuẩn nhất cho mơ hình.
22


×