Professional Documents
Culture Documents
Bao Cao Cky
Bao Cao Cky
Đà Nẵng, 11/2021
1|Page
GVHD:Lê Hoàng Uyên Thục nhóm:7A
2|Page
GVHD:Lê Hoàng Uyên Thục nhóm:7A
3|Page
GVHD:Lê Hoàng Uyên Thục nhóm:7A
LỜI MỞ ĐẦU
Những năm gần đây, AI - Artificial Intelligence (Trí tuệ nhân tạo), và cụ thể hơn là
Machine Learning (Học máy hoặc Máy học) nổi lên như một bằng chứng của cuộc cách
mạng công nghiệp lần thứ tư. Trí tuệ nhân tạo đang len lỏi vào mọi lĩnh vực trong đời
sống mà có thể chúng ta không nhận ra. Theo đó, Machine learning là một lĩnh vực nhỏ
của AI, nó có khả năng tự học hỏi dựa trên dữ liệu đưa vào mà không cần phải được lập
trình cụ thể.
Học phần “Kỹ thuật nhận dạng” là bước đầu để tiếp cận và hiểu rõ hơn về Machine
learning thông qua dự án “Xây dựng ứng dụng phân loại tự động các đối tượng trong ảnh
chụp”. Đặc biệt, trong viễn cảnh khoa học máy tính ngày càng phát triển càng cho thấy
sức nặng và sự quan trọng của dự án nói riêng, của môn học nói chung cho hành trang
sau này.
Để tiến đến gần hơn với dự án, nhóm đã tiến hành tìm kiếm hình ảnh về các đồ dùng
trong nhà bếp được phân công. Quá trình này tốn rất nhiều thời gian và công sức nhưng
bù lại nếu chúng ta thu thập càng kỹ lưỡng thì sẽ rất tốt cho việc huấn luyện máy sau này.
Tập dữ liệu được mở rộng và chuẩn hóa qua quá trình tiền xử lý, thực hiện bằng các phần
mềm Matlab, remove.bg, Paint… Nếu đưa toàn bộ lượng dữ liệu này vào để train cho
máy sẽ tốn rất nhiều bộ nhớ và thời gian, từ đó ta phải tìm cách giảm chiều dữ liệu bằng
cách trích đặc trưng. Hu moments được sử dụng để tính toán 7 vector đặc trưng là biểu
diễn cho các phép dịch chuyển, tỉ lệ, xoay, phản chiếu… Phương pháp thực hiện phân
loại bằng so khớp mẫu sử dụng tập các vector Hu để nhận dạng và đánh giá thông qua
đánh giá chéo K-fold. Cuối cùng, mạng Neuron nhân tạo (Artificial neural network)
truyền thống một lớp ẩn là mô hình xử lý thông tin cần thiết cho quá trình nhận dạng.
Nhờ sự hướng dẫn và giúp đỡ của cô Thục, tụi em đã có thể hoàn thành dự án một cách
hoàn thiện nhất và rút ra được những kiến thức bổ ích từ môn học này.
Chân thành cảm ơn và chúc cô sức khỏe.
4|Page
GVHD:Lê Hoàng Uyên Thục nhóm:7A
5|Page
GVHD:Lê Hoàng Uyên Thục nhóm:7A
- Tìm kiếm từ nguồn dữ liệu được sử dụng ở các dự án nghiên cũ trước đó.
Dữ liệu thu thập phải thỏa mãn các tiêu chuẩn như: ảnh phải thể hiện rõ nét vật thể, hạn
chế các yếu tố bóng đổ, hình dạng méo hay sai lệch nhiều với thông thường, nhiều đối
tượng gây ra nhiễu…
- Kết quả: mỗi bạn thu thập được 100 ảnh quả của mình chưa qua chỉnh sửa.
5.Phương pháp nghiên cứu.
Nghiên cứu thông qua các buổi học trên lớp,thông qua mạng internet,sách báo,
…
6.đối tượng nghiên cứu:
- nhận diện các đồ vật,sự vật trong cuộc sống và đặc biệt đối tượng được nhóm
nghiên cứu là đồ dùng trong nhà bếp.
7.Nội dung nghiên cứu:
- Nhóm 7A thực hiện đề tài là nhận diện các đồ dùng trong nhà bếp, bao gồm: đĩa,
muỗng,chén,đũa,nĩa,dao. Vì nhóm chỉ có 4 thành viên, nên nhóm đã quyết định
chọn 4 trong 6 đồ dùng trong nhà bếp là đĩa,muỗng,chén,đũa để tiến hành thu thập
dữ liệu và xử lý
- Xây dựng chương trình nhận dạng 4 lớp đối tượng từ cơ sở dữ liệu đã được thu
thập trước đó.
NỘI DUNG CHÍNH
1. Tiền xử lý (Preprocessing):
1.1. Cơ sở lý thuyết:
Để đa dạng hóa và làm tăng số lượng cơ sở dữ liệu phục vụ cho quá trình train và đánh
giá, nhóm đã thay đổi một vài yếu tố như góc chụp, ánh sáng, độ tương phản,… Đặc biệt
là hướng vật thể theo các chiều phù hợp với thực tế tránh khả năng nhận nhầm sang loại
đồ dùng khác.
Các bước chỉnh sửa được thực hiện trên Matlab,remove.bg, Paint…
1.2. Quá trình thực hiện:
Loại bỏ nền và các chi tiết gây nhiễu:
6|Page
GVHD:Lê Hoàng Uyên Thục nhóm:7A
7|Page
GVHD:Lê Hoàng Uyên Thục nhóm:7A
8|Page
GVHD:Lê Hoàng Uyên Thục nhóm:7A
9|Page
GVHD:Lê Hoàng Uyên Thục nhóm:7A
10 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
11 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
Khi đã có được 7 đặc trưng Hu moment như trên, chúng sẽ được sử dụng trong việc nhận
dạng và thực hiện phân lớp. Phân loại trong hệ thống nhận dạng mẫu là phân loại thống
kê các vectơ đặc trưng được trích xuất từ các mẫu đầu vào thành một số lớp nhất định.
Mô hình phân loại giúp rút ra một số kết luận từ các giá trị đầu vào dùng để train, từ đó
dự đoán nhãn cho dữ liệu mới. Xây dựng mô hình phân loại gồm các bước:
- Khởi tạo bộ phân loại sẽ được sử dụng
- Huấn luyện cho bộ phân loại
- Dự đoán đầu ra
- Đánh giá quá trình phân loại
Để phù hợp trong việc nhận dạng, phương pháp phân loại được sử dụng chính là phương
pháp so khớp mẫu (template matching). So khớp mẫu được thực hiện bằng cách so sánh
các vector đặc trưng dùng để test với các vector đặc trưng dùng để train, từ đó xác định
sự tương đồng. Sự giống nhau giữa hai điểm dữ liệu được tính toán bằng khoảng cách:
n
Khoảng cách Manhattan: ∑ | xi− yi|
i=1
12 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
Bước 2: Chia thành 2 tập gồm 1 tập train 320 mẫu và 1 tập test 80 mẫu.
Bước 3: Tính khoảng cách Mahattan và khoảng cách Euclidean.
Bước 4: So sánh và tìm khoảng cách nhỏ nhất từ từng ảnh tập test đến tập train.
Bước 5: Lập ma trận nhầm lẫn.
Bước 6: Đánh giá chéo bằng phương pháp holdout.
3.3. Kết quả:đạt được 80%
13 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
Trong đó, lớp ẩn (Hidden Layer) gồm các Neuron, nhận dữ liệu Input từ các Neuron ở
lớp trước đó và chuyển đổi các Input này cho các lớp xử lý tiếp theo. Trong một ANN có
thể có nhiều lớp ẩn. Mỗi Input tương ứng với một thuộc tính của dữ liệu. Output (kết quả)
của một ANN là một nhãn của dữ liệu đó. Connection Weights (trọng số liên kết) là
thành phần rất quan trọng của một ANN. Nó thể hiện mức độ quan trọng (độ mạnh) của
dữ liệu đầu vào đối với quá trình xử lý thông tin (quá trình chuyển đổi dữ liệu từ layer
này sang layer khác). Quá trình học của ANN thực ra là quá trình điều chỉnh các trọng số
(weight) của các Input data để có được kết quả mong muốn. Từ đó ta có hàm tính tổng
các trọng số của tất cả các Input được đưa vào mỗi Neuron được tính theo công thức sau:
Hàm tổng của một Neuron cho biết khả năng kích hoạt của Neuron đó (còn gọi là kích
hoạt bên trong – internal activation). Các Neuron này có thể sinh ra một Output hoặc
không trong ANN. Nói cách khác rằng có thể Output của một Neuron có thể được chuyển
đến layer tiếp trong mạng Neuron hoặc không. Mối quan hệ giữa Internal Activation và
Output được thể hiện bằng hàm chuyển đổi.
Một trong những hàm chuyển đổi phi tuyến được sử dụng phổ biến nhất trong ANN là
sigmoid. Kết quả xử lý tại các Neuron (Output) đôi khi rất lớn, vì vậy hàm chuyển đổi
được sử dụng để xử lý Output này trước khi chuyển đến layer tiếp theo.
Thuật toán lan truyền ngược gồm các bước:
Bước 1: Khởi tạo các trọng số liên kết tương ứng với mỗi tín hiệu đầu vào.
Bước 2: Tính toán đầu ra bằng hàm kích hoạt (hàm chuyển).
Bước 3: Tính toán lỗi:
14 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
Bước 4: Cập nhật lại trọng số liên kết bằng Conjugate-Gradient method rồi lặp lại
từ bước 2 cho đến khi điều kiện dừng được thỏa mãn.
Điều kiện dừng:
- Thay đổi lỗi bình phương trung bình: tỷ lệ thay đổi tuyệt đối trong sai số bình
phương trung bình trên mỗi thời kì là đủ nhỏ (trong phạm vi [0.01; 0.1]).
- Tiêu chí dựa trên tổng quát hóa: sau mỗi chu kỳ (epoch) của ANN sẽ được
kiểm tra để tổng quát hóa. Nếu hiệu suất tổng quát hóa đã đạt đủ thì dừng lại.
Ở đây, kích thước tập train, kiến trúc ANN hay độ phức tạp của đầu vào cũng
ảnh hưởng đến tổng quát hóa. Để cải thiện thêm, cần thu thập thêm dữ liệu
huấn luyện đồng thời huấn luyện một số mạng khác nhau rồi chọn mạng tốt
nhất.
Tại đây nhóm thực hiện ANN truyền thống cùng với 400 mẫu, trong đó 70% mẫu để
huấn luyện (training), 15% để thẩm định (validation) và 15% để kiểm tra (test). Kết quả
thu được là Ma trận nhầm lẫn và ROC tương ứng. Từ ROC ta có thể sử dụng để đánh giá
một mô hình có hoạt động hiệu quả hay không dựa vào đường cong đặc tính.
4.2. Quá trình thực hiện:
Sử dụng Neural network toolbox của Matlab
Bước 1: Nhập nnstart vào Command window rồi chọn Pattern Recognition app (nprtool).
Bước 2: Đưa đầu vào gồm 7 vector Hu moment của 4 mẫu và đầu ra mong muốn.
Bước 3: Chọn tỉ lệ chia thành các tập training, tập validation và tập testing.
Bước 4: Chọn số lượng neuron ẩn.
Số lượng neuron ẩn: chọn sao cho số lượng mẫu của tập train nên gấp từ 5 đến 10 lần
số lượng các trọng số liên kết trong mạng thần kinh nhân tạo.
Bước 5: Huấn luyện cho dữ liệu để tìm được trọng số liên kết thích hợp.
Bước 6: Thay đổi số lượng neuron ẩn để so sánh.
4.3. Kết quả:
Chọn số Neuron ẩn là 6.
15 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
* Nhận xét:
- Dựa vào ma trận nhầm lẫn, mô hình mạng thần kinh nhân tạo cho 4 lớp có độ chính xác
89.9%. Trong đó, muỗng có độ chính xác cao nhất và dĩa bị nhầm lẫn qua các loại quả khác
đặc biệt là nhầm sang chén cần cải thiện lại cơ sở dữ liệu về chất lượng lẫn số lượng.
- Dựa vào biểu đồ ROC, tương tự như ma trận nhầm lẫn, có thể thấy cái muỗng có đường
ROC tuyệt đối cho hiệu suất cao. Tuy nhiên, cái dĩa có đường ROC (màu xanh dương) cong
hơn so với các quả khác nhưng đường cong nằm trong ngưỡng khoảng 0.8 nên mô hình vẫn
cho hiệu suất khá cao.
- Khi thay đổi số lượng neuron ẩn nhiều lần thì nhóm nhận thấy số lượng neuron với 6 là phù
hợp với nhóm.
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Kết luận:
Sau khi thực hiện dự án, có thể thấy rõ rằng phương pháp Teachable Machine thu được
hiệu suất nhận dạng cao nhất, sau đó đến phương pháp ANN (1 lớp ẩn) và cuối cùng so
khớp mẫu. Thuật toán của Google phát triển rất tốt khi tốc độ tiếp nhận, xử lý dữ liệu có
kích thước lớn và nhanh chóng thêm vào đó là khả năng nhận dạng với độ chính xác cao.
16 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
Trong khi đó, mô hình Mạng thần kinh nhân tạo ANN cho độ chính xác từ 89 – 92% dựa
trên nền tảng kiểm tra lỗi và huấn luyện lại. Cuối cùng là phương pháp so khớp mẫu là
phương pháp thủ công, ở quy trình thực hiện, phương pháp này không bao gồm trở lại
đánh giá mô hình và tốn khá nhiều thời gian.
Hướng phát triển:
• Để tăng hiệu suất cho mô hình ta cần tăng số lượng và chất lượng dữ liệu đầu vào.
• Mở rộng số lượng đối tượng nhận dạng, cải thiện tốc độ xử lý tập dữ liệu.
• Ứng dụng nhận dạng vào các khâu sản xuất có tính lặp lại.
• Tìm hiểu thêm các phương pháp trích đặc trưng khác để cải thiện cho Hu moments.
• Tăng số lớp ẩn trong phương pháp mạng thần kinh nhân tạo nhằm nâng cao hiệu suất
cũng như độ chính xác cho đầu ra.
17 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
I= imresize(I,[256 256]);
gray = rgb2gray(I);
J=uint8(zeros(size(gray)));
for i = 1 : 256
for j = 1 : 256
if(gray(i,j)>=threshold)
J(i,j)=255;
else
J(i,j)=0;
end
end
end
clc;
clear all;
close all;
inputs_path='./inputs/'; % path of input
outputs_path =('./trangdenhihi/');%path of output
list=dir(inputs_path);
filenames={list(~[list.isdir]).name};
whos filenames
%thay doi nguong phu hop
threshold=110;
for i=1:length(filenames)
I=imread(strcat(inputs_path,filenames{i}));
18 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
J=thresholding(I,threshold);
H=imbinarize(J)
name{i} = strcat(filenames{i}, '.jpg');
output_name=strcat(outputs_path,name{i},'.bmp');
imwrite(H,output_name);
end
3.code hu-moment
function S=hu_moment(J)
format long;
[w,h]=size(J);
%initialize x_center, y_center, sum
x_=0;
y_=0;
S=0;
for i =1:w
for j=1:h
S=S+double(J(i,j));
x_=x_+double(i*J(i,j));
y_=y_+double(j*J(i,j));
end
end
% caculate x_ceter, y_center
x_=x_/S;
y_=y_/S;
19 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
S1=M(3,1)+M(1,3);
S2=( M(3,1)-M(1,3) )*(M(3,1)+M(1,3)) +4*M(2,2)*M(2,2);
S3=(M(4,1) -3*M(2,3))^2 +(M(1,4)-3*M(3,2))^2;
S4=(M(4,1)+M(2,3))^2+(M(1,4)+M(3,2))^2;
S5=(M(4,1)-3*M(2,3))*(M(4,1)+M(2,3))*( (M(4,1)+M(2,3))^2 -3*(M(1,4)+M(3,2))^2
) +(3*M(3,2) -M(1,4))*(M(1,4)+M(3,2))*(3*(M(4,1)+M(2,3))^2-(M(1,4)+M(3,2))^2);
S6=(M(3,1)-M(1,3))*( (M(4,1)+M(2,3))^2 -(M(1,4) +M(3,2)^2) )
+4*M(2,2)*(M(4,1)+M(2,3))*(M(1,4)+M(3,2));
S7=(3*M(3,2)-M(1,4))*(M(4,1) +M(2,3))*( (M(4,1)+M(2,3))^2
-3*(M(1,4)+M(3,2))^2 ) +(M(4,1) -3*M(2,3)*( M(3,2)+M(1,3))*( 3*(M(4,1)+M(2,3))^2
-(M(1,4)+M(3,2))^2 ));
S=[S1 S2 S3 S4 S5 S6 S7];
%logarit S
S=-sign(S).*log10(abs(S));
%replace Nan values = zeros
S(isnan (S)) = 0;
4.extract-feature
format long;
class= {'chen','dia','dua','muong'};
data_base=struct;
for i=1: length(class)
inputs_folder=strcat('./train/',class{i},'/')
fprintf(strcat('processing...'),inputs_folder);
list=dir(inputs_folder);
filenames={list(~[list.isdir]).name};
features=[];
for j=1:length(filenames)
image_path=strcat(inputs_folder,filenames{j});
I=imread(image_path);
I=I/255;
features=[features;[i,hu_moment(I)]]; %label,features
end
data_base.class{i}=features;
end
save train data_base
5.predict
function kq=predict(test,k)
%I: binary iLage that you want predict
20 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
input_folder='./test/';
classes= {'chen','dia','dua','muong'};
tagets=[];
outputs=[];
k=1;
for i=1:length(classes)
input_folder=strcat('./test/',classes{i})
list=dir(input_folder);
filenames={list(~[list.isdir]).name};
for j=1:length(filenames)
image_path=strcat(input_folder,'/',filenames{j});
I=imread(image_path)
% I=I/255;
feature=[i,hu_moment(I)]; %label,features
tagets=[tagets,i];
outputs=[outputs,predict(feature,k)];
end
end
21 | P a g e
GVHD:Lê Hoàng Uyên Thục nhóm:7A
cm = confusionmat(outputs,tagets,'Order', [1,2,3,4]);
plotConfMat(cm,{'chen','dia','dua','muong'});
22 | P a g e