Professional Documents
Culture Documents
Compute Top-1 & Top-5 Error Rates For Alexnet and Two Other Models. Use at Least 5 Classes With Minimum 20 Images Per Class
Compute Top-1 & Top-5 Error Rates For Alexnet and Two Other Models. Use at Least 5 Classes With Minimum 20 Images Per Class
Use at
least 5 classes with minimum 20 images per class
Alexnet 11% 8%
Inceptionv3 4% 1%
ResNet101 5% 2%
Bảng 6.1.1. Top-1 và top-5 error rates của các model
6.1.1. Code
classNames = net.Layers(end).ClassNames;
numClasses = numel(classNames);
I = imread('Hog (20).jpg');
figure
imshow(I)
size(I)
I = imresize(I,inputSize(1:2));
figure
imshow(I)
[label,scores] = classify(net,I);
label
figure
imshow(I)
title(string(label) + ", " + num2str(100*scores(classNames == label),3) + "%");
[~,idx] = sort(scores,'descend');
idx = idx(5:-1:1);
classNamesTop = net.Layers(end).ClassNames(idx);
scoresTop = scores(idx);
figure
barh(scoresTop)
xlim([0 1])
title('Top 5 Predictions')
xlabel('Probability')
yticklabels(classNamesTop)
Hình 6.1.1. Kích thước đầu vào, kích thước ảnh thật và kết quả dự đoán
Hình 6.1.2. Ảnh đầu vào
Hình 6.1.3. Ảnh sau khi điều chỉnh phù hợp với yêu cầu đầu vào
Hình 6.1.4. Kết quả dự đoán có tỷ lệ cao nhất
Wombat 0.95 0.94 0.99 0.3 0.87 0.61 0.99 0.87 0.62 0.99 0.99 0.96 0.33 0.97 0.91 0.99 0.87 0.16 1 0.98
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hog 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Starfish 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Wombat 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Starfish 0.34 0 0.99 1 1 1 0 0.2 1 0.98 0.89 0.001 0.68 0.86 0.31 0.99 0.99 0 0 0.99
Wild boar 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hog 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hare 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild boar 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild boar 0.4 0.68 0.84 0.03 0.43 0 0.6 0.24 0.113 0.12 0.58 0.03 0.61 0.34 0.82 0.1 0.39 0.6 0.9 0.73
Hog 0.43 0.29 0.15 0.94 0.21 0 0.11 0.13 0.110 0 0.35 0 0.14 0.35 0.13 0.03 0.28 0.05 0.08 0.23
Hare 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0
Wombat 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hog 0.82 0 0.05 0.98 0.81 0.86 0.06 0.79 0.99 0.068 0.86 0 0.03 0.55 0.07 0.97 0.47 0.44 0.19 0.98
Hare 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hare 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Wombat 0 0 0 0 0 0 0.32 0 0 0 0 0 0 0 0 0 0 0 0 0
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild boar 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hog 0 0 0 0 0 0 0.003 0 0 0 0 0 0 0 0 0 0 0 0 0
Hare 0.86 0.99 0.58 0.84 0.99 0.71 0 0.26 0.98 0.27 1 0.63 0.28 0.81 0.92 0.64 0.89 0.96 0.93 1
6.2.1. Code
net = inceptionv3;
inputSize = net.Layers(1).InputSize
classNames = net.Layers(end).ClassNames;
numClasses = numel(classNames);
I = imread('Hog (20).jpg');
figure
imshow(I)
size(I)
I = imresize(I,inputSize(1:2));
figure
imshow(I)
[label,scores] = classify(net,I);
label
figure
imshow(I)
[~,idx] = sort(scores,'descend');
idx = idx(5:-1:1);
classNamesTop = net.Layers(end).ClassNames(idx);
scoresTop = scores(idx);
figure
barh(scoresTop)
xlim([0 1])
title('Top 5 Predictions')
xlabel('Probability')
yticklabels(classNamesTop)
Hình 6.2.3 Ảnh sau khi điều chỉnh phù hợp với yêu cầu đầu vào
Hình 6.2.4 Kết quả dự đoán có tỷ lệ cao nhất
Wombat 0.93 0.48 0.83 0.26 0.59 0.03 0.89 0.72 0.94 0.93 0.88 0.93 0.32 0.93 0.96 0.8 0.72 0.87 0.89 0.78
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild
0.0008 0.01 0.001 0 0 0 0 0 0.0004 0 0 0.0009 0 0.0009 0 0 0 0 0.001 0
boar
Hog 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hare 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.002 0 0 0
Starfish 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Wombat 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Starfish 0.88 0 0.99 0.95 0.99 1 0.04 0.97 0.99 0.98 0.99 0.83 0.99 1 1 1 0.99 0.97 0.98 1
Wild boar 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hog 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hare 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild boar 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Wombat 0 0 0 0 0 0 0 0.003 0 0 0 0 0 0 0 0 0 0 0 0
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild boar 0.79 0.76 0.75 0.06 0.6 0.47 0.66 0.47 0.14 0.74 0.62 0.07 0.85 0.8 0.72 0.75 0.65 0.78 0.79 0.73
Hog 0.16 0.17 0.17 0.78 0.22 0.15 0.04 0.42 0.83 0.15 0.36 0.05 0.1 0.14 0.22 0.2 0.3 0.17 0.15 0.23
Hare 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Dog 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Wombat 0 0 0.001 0 0 0 0 0 0 0 0 0 0.03 0 0 0 0 0 0 0
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild boar 0 0.08 0.67 0.004 0.07 0.005 0.64 0.01 0.08 0.18 0.002 0.03 0 0 0 0.002 0.02 0.01 0.01 0.01
Hog 0.88 0.86 0.2 0.79 0.89 0.93 0.18 0.82 0.87 0.7 0.97 0.52 0.24 0.71 0.66 0.99 0.82 0.64 0.85 0.93
Hare 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hare 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Wombat 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild boar 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hog 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hare 0.4 0.93 0.95 0.89 0.95 0.95 0.97 0.97 0.88 0.48 0.94 0.81 0.98 0.94 0.87 0.74 0.94 0.93 0.88 0.9
6.3.1. Code
net = resnet101;
inputSize = net.Layers(1).InputSize
classNames = net.Layers(end).ClassNames;
numClasses = numel(classNames);
I = imread('Hog (20).jpg');
figure
imshow(I)
size(I)
I = imresize(I,inputSize(1:2));
figure
imshow(I)
[label,scores] = classify(net,I);
label
figure
imshow(I)
[~,idx] = sort(scores,'descend');
idx = idx(5:-1:1);
classNamesTop = net.Layers(end).ClassNames(idx);
scoresTop = scores(idx);
figure
barh(scoresTop)
xlim([0 1])
title('Top 5 Predictions')
xlabel('Probability')
yticklabels(classNamesTop)
Wombat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Wombat 0.91 0.97 0.99 0.7 0.83 0.91 0.99 0.8 0.95 0.99 0.98 0.67 0.55 0.35 0.98 0.91 0.23 0.94 0.99 0.99
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0.28 0 0 0 0 0 0
Wild
0.005 0.007 0 0 0 0 0 0 0.01 0 0 0.12 0.19 0 0.005 0 0 0.002 0.0006 0
boar
Hog 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hare 0 0 0 0 0 0 0.0001 0 0 0 0 0 0 0 0 0 0 0 0 0
Wombat 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Starfish 0.86 0.57 0.99 0.98 1 1 0 0.34 1 0.99 0.95 0.03 0.96 0.99 0.99 1 0.98 0.91 0.8 1
Wild boar 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hog 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hare 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild boar 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild boar 0.78 0.67 0.83 0.97 0.61 0 0.69 0.63 0.17 0.64 0.86 0.05 0.91 0.77 0.82 0.86 0.48 0.92 0.78 0.68
Hog 0.2 0.29 0.13 0.01 0.38 0 0.15 0.25 0.81 0.25 0.13 0.06 0.08 0.17 0.15 0.11 0.47 0.06 0.2 0.31
Hare 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hog 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Wombat 0 0 0 0 0 0 0 0 0 0 0 0 0.24 0 0 0 0 0 0 0
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild
0 0.005 0.89 0.001 0.04 0.02 0.37 0.02 0.01 0.22 0.004 0 0 0.0001 0 0.001 0.003 0 0.009 0.005
boar
Hog 0.98 0.99 0.08 0.99 0.25 0.24 0.61 0.82 0.98 0.73 0.93 0.11 0.12 0.98 0.08 0.99 0.99 0.55 0.98 0.99
Hare 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wombat 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Starfish 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Wild boar 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hog 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hare 0.97 0.99 0.96 0.98 0.99 0.77 0.54 0.98 0.99 0.62 0.99 0.9 0.99 0.95 0.94 0.66 0.87 0.98 0.98 0.99
- Hiệu suất của AlexNet trên hình ảnh có nhiều tỷ lệ khung hình khác nhau có thể bị
ảnh hưởng bởi một số yếu tố. AlexNet, được thiết kế cho kích thước đầu vào cụ thể
là 224x224 pixel. Nếu sử dụng hình ảnh có tỷ lệ khung hình khác nhau có thể gặp
- Kích thước đầu vào và tỷ lệ khung hình không khớp: Nếu hình ảnh có tỷ lệ khung
hình khác, cần thay đổi kích thước hoặc cắt chúng để phù hợp với kích thước đầu
vào dự kiến của mạng. Việc thay đổi kích thước hoặc cắt xén này có thể làm sai lệch
tỷ lệ khung hình gốc, có khả năng dẫn đến mất thông tin.
- Thích ứng mô hình: Kiến trúc của AlexNet có thể không tối ưu cho tất cả các loại
hình ảnh. Các mô hình gần đây hơn, chẳng hạn như các mô hình dựa trên ResNet
hoặc EfficiencyNet, được thiết kế để xử lý các biến thể về kích thước đầu vào một
cách đa dạng hơn.
- Tăng cường dữ liệu: Để cải thiện độ mạnh mẽ của mô hình, có thể sử dụng các kỹ
thuật tăng cường dữ liệu. Đối với các hình ảnh có nhiều tỷ lệ khung hình khác nhau,
có thể áp dụng cắt, xoay và lật ngẫu nhiên trong quá trình huấn luyện để hiển thị mô
- Trong các bài toán phân loại Classification sử dụng data input là datasets hoạt
dataframe có chứa những features với kiểu dữ liệu Categorical chúng ta thường
dùng kiểu mã hóa one_hot label encoding thay vì encoding theo thứ tự 1, 2,.. hoặc
mã hóa nhị phân 00, 01,… trong 1 số bài toán vì nhiều lí do:
• Tránh “phân cấp” cho các dữ liệu được mã hóa: việc mã hóa theo thứ tự 1, 2,…
có thể làm mô hình hiểu sai về mối quan hệ giữ các values có trong 1 feature. Ví
dụ như feature Car có 1 số values như Lambo, Toyota, Honda, 3 values này có
“cấp độ” như nhau trong feature Car và chúng cũng không liên hệ với nhau theo
1 quan hệ cụ thể do đó việc chọn one_hot label là phù hợp hơn cả. Ngoài ra khi 1
features có rất nhiều values unique như 10 hay 15 values thì one_hot label rất
phù hợp cho việc mã hóa dữ liệu.
• Phù hợp cho các bài toán phân loại đa lớp Multi-Label Classification: việc sử
dụng one_hot label trong các bài toán này giúp cho mạng neuron dễ dàng tính
toán và đem lại hiệu suất cao cũng như đem lại cái nhìn tổng quan về dữ liệu
dạng Categorical.
10.1. Code
Hình 10.1. Code matlab thực hiện
13.1. YOLO
- Trình phát hiện một giai đoạn: Xử lý toàn bộ hình ảnh cùng một lúc, xử lý rất nhanh
- Cách tiếp cận dựa trên lưới: Chia hình ảnh thành một lưới và dự đoán các hộp giới
hạn cũng như xác suất đối tượng cho mỗi ô.
- Khả năng thu hồi cao, độ chính xác thấp hơn: Phát hiện nhiều đối tượng nhưng có
thể gặp khó khăn với các chi tiết nhỏ hơn hoặc các đối tượng chồng chéo.
- Tốt cho các ứng dụng thời gian thực như giám sát video hoặc xe tự hành.
13.2. R-CNN
- Trình phát hiện hai giai đoạn: Đầu tiên tạo ra các đề xuất vùng, sau đó phân loại và
Tốc độ
Nhanh nhất Chậm nhất
14.1.1 Code
Hình 14.1. Code python thực hiện Object Detection sử dụng YOLO
14.2.1 Code
Hình 14.3. Code python thực hiện Object Detection sử dụng R-CNN
14.2.2 Kết quả
- PF: Độ chính xác: Điều này đề cập đến tỷ lệ các đối tượng được phát hiện chính xác
(Dương tính thật) so với tất cả các đối tượng được phát hiện, bao gồm cả Dương
tính thật và Dương tính giả. Nói cách khác, nó đo lường mức độ chính xác của mô
• Tích cực thực sự (TP): Một đối tượng được mô hình phát hiện và phân loại chính
xác.
• Dương tính giả (FP): Một đối tượng được mô hình phát hiện nhưng không thực
sự xuất hiện trong hình ảnh ("báo động sai").
• Âm tính thực (TN): Một đối tượng không được mô hình phát hiện và không thực
sự xuất hiện trong hình ảnh (nền được bỏ qua chính xác).
• Âm tính giả (FN): Một đối tượng có trong ảnh nhưng không được mô hình phát
hiện (một đối tượng bị bỏ sót).
- PF và FN là các số liệu quan trọng để đánh giá hiệu suất của mô hình phát hiện đối
tượng vì chúng cung cấp cho chúng ta cái nhìn sâu sắc về điểm mạnh và điểm yếu
của nó. PF cao cho biết mô hình có độ chính xác cao, nghĩa là nó chủ yếu phát hiện
được những gì nó nói. FN thấp cho biết mô hình có khả năng thu hồi tốt, nghĩa là mô
hình không bỏ sót nhiều đối tượng. Tuy nhiên, các số liệu này thường đánh đổi lẫn
nhau. Ví dụ: việc tăng ngưỡng phát hiện để giảm FP cũng có thể tăng FN.