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

Báo cáo Homework Thị giác máy Đại học Bách Khoa ĐHQG TPHCM

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 (3.94 MB, 67 trang )

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA

THỊ GIÁC MÁY TÍNH
TỔNG HỢP HOMEWORK MƠN THỊ GIÁC MÁY TÍNH

NHÓM 5_L01
Giảng viên hướng dẫn: Phạm Việt Cường

Sinh viên thực hiện Mã số sinh viên Điểm số
Lê Hữu Hoàn 1910190
1912733
Nguyễn Vĩnh Bình 1910271
Nguyễn Đức Khoa 1914940
1633685
Bùi Xuân Sơn
Hồ Hồng Thuận

Thành phố Hồ Chí Minh – 2023

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

MỤC LỤC

I. TỔNG HỢP HOMEWORK NHÓM 5........................................................................................2
1. Homework 0: Image Processing..........................................................................................2
2. Homework 1 :Viola Jones: training..................................................................................16
3. Homework 2 : Partial derivative with chain rule. Check your results with numerical
derivative........................................................................................................................................ 20
4. Homework 3........................................................................................................................21
5. Homework 4:Write a program implementing gradient descent method. Consider at


least two non-convex two-variable functions f(x,y), multiple initial points and various
learning rates.................................................................................................................................24
6. Homework 5:Why local connectivity & shared weights?................................................29
7. Homework 6:How many parameters (weights and biases) are there in AlexNet?.........31
8. Homework 7:Compute top-1 & top-5 error rates for AlexNet and two other models.
Use at least 5 classes with minimum 20 images per class............................................................33
Thực hiện training mơ hình, ta được kết quả như bên dưới (xem file code đính kèm)....................33
9. Homework 8:Evaluate the performance of AlexNet using images with various aspect
ratios.34
10. Homework 9:AlexNet transfer learning, at least 5 classes with minimum 20 images per
class. 36
11. Homework 10:For classification problems, why we use one-hot encoding instead of one
output (e.g. encoding 4 classes as 1, 2, 3, 4) or binary encoding (e.g encoding 4 classes as 00,
01, 10, 11)?.....................................................................................................................................43
12. Homework 11:Write a program implementing feature nomalization............................43
13. Homework 12:Cascade object detection: use pretrained model and evaluate error.....46
14. Homework 13:How to obtain Precision - Recal curve?...................................................48
15. Homework 14:Evaluate object detector YOLO/R-CNN/SSD.........................................51
16. Homework 15:Train object detection YOLO/R-CNN/SSD.............................................56
17. Homework 16:How to handle multiple detections...........................................................59
18. Homework 17:What are PF, FN for object detection problem?.....................................60

II. TÀI LIỆU THAM KHẢO......................................................................................................64

1

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

I. TỔNG HỢP HOMEWORK NHÓM 5
1. Homework 0: Image Processing


1. Image Enhancement Histogram Equalization

p(rk): có thể hiểu đây là phân trăm số pixels có giá trị màu là rkf

nk: số pixels có giá trị màu là rk

n : tổng số pixels trong bức ảnh
Các hàm sử dụng :

a. HÀM IMHIST: imhist(I) % tạo histogram
Hiển thị một biểu đồ của hình ảnh thang độ xám, theo mặc định, biểu đồ sẽ có 256
mức sáng (trắng đen).

CODE:

%% SỬ DỤNG HÀM IMHIST
I=imread('pout.tif');% đọc anh về'
figure Name 1
subplot(2,2,1)
imshow(I) % show anh

2

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

subplot(2,2,2)
imhist(I) % tạo histogram
load mristack;
subplot(2,2,3)


imhist(mristack)

b. HÀM histeq: J=histeq(K); % tạo ảnh đã cân bằng tăng độ tương phản

Tăng cường độ tương phản của hình ảnh cường độ bằng cách sử dụng cân bằng

biểu đồ. Có nghĩa ta hàm này sẽ dải đều histogram của tấm ảnh ra đều trên dải màu

3

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

CODE:

%% SỬ DỤNG HÀM histeq
K=imread('tire.tif');

figure Name 2
subplot(2,2,1)

imshow(K)

subplot(2,2,2) tương phan
J=histeq(K);% tạo anh đã cân bằng tăng độ chuân
%J = histeq(I,hgram)% dựng theo histogram
imshowpair(K,J,'montage')
axis off % bo trục
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
enhanced = histeq(mristack);

figure name 3
subplot(1,2,1)
imshow(mristack(:,:,1))
title('Slice of Original Image')

subplot(1,2,2)
imshow(enhanced(:,:,1))
title('Slice of Enhanced Image')

c. HÀM imhistmatch: imhistmatch(A,Ref);

4

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

Hàm imhistmatch sẽ điều chỉnh phân bố dải histogram theo một hệ quy chiếu, theo
câu lệnh này thì hình A sẽ được phân bố mức ảnh theo hình Ref

CODE:

%% SỬ DỤNG HÀM imhistmatch
A = imread('concordaerial.png');
Ref = imread('concordorthophoto.png');
B = imhistmatch(A,Ref);
figure name 4
subplot(2,3,1)
imshow(A)
title('RGB Image with Color Cast')

subplot(2,3,2)

imshow(Ref)
title('Reference Grayscale Image')

subplot(2,3,3)
imshow(B)
title('Histogram Matched RGB Image')
L = imread('office_4.jpg');
ref = imread('office_2.jpg');

subplot(2,3,4)
montage({L,ref})
title('Input Image (Left) vs Reference Image (Right)');
J = imhistmatch(L,ref,'method','polynomial');
K = imhistmatch(L,ref,'method','uniform');

subplot(2,3,6)
montage({J,K})
title('Histogram-Matched Image Using Polynomial Method (Left) vs Uniform
Method (Right)');

2. Sử dụng hàm cơ bản để điều chỉnh gray level
Ta sử dụng các hàm cơ bản để thay đổi gray level
Có 3 loại thường được sử dụng là :

5

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

 Linear
o Negative/Identity


 Logarithmic
o Log/Inverse log

 Power law
o n th power/nth root

các hàm sử dụng:
 log(r);
 s=r.^;

a. Hàm log:
Khi sử dụng hàm log để điều chỉnh dải histogram của ảnh thì phần tối của ảnh

sẽ tăng mức sáng lớn hơn so với phân sáng của ảnh

CODE:

%% SỬ DỤNG HÀM cơ ban log
M=imread('tire.tif');

6

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

r=imhist(M);
s=log(r);
N=histeq(M,s);
figure name 5
montage({M,N})

title('Input Image (Left) vs Reference Image (Right)');

b. Hàm mũ: hàm mũ sẽ ngược lại với hàm log

CODE:

%% SỬ DỤNG HÀM cơ ban mũ
O=imread('tire.tif');
r=imhist(O);
s=r.^1.5;
P=histeq(O,s);
figure name 6
montage({O,P})
title('Input Image (Left) vs Reference Image (Right)');

3. Spatial Domain Filtering
Có nhiều dạng filter và nó có những chức năng khác nhau. Chức năng chính của
filter giúp làm mờ hoặc làm sắc nét ảnh, lọc nhiễu

Các hàm sử dụng
a. Filter trung bình (ơ trung tâm trong Kenel sẽ được tính trung bình bởi tất
cả các ô xung quanh)

7

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

CODE:

%% filter trung bình

A=imread('cameraman.tif');
B=imboxfilt(A);
C=imboxfilt(A,11);
figure name filter_trung_binh
subplot(2,1,1)
imshowpair(A,B,'montage')
title('mặc định')
subplot(2,1,2)
imshowpair(A,C,'montage')
title('matrix mask 11x11')

b. (TRUNG BÌNH CĨ TRỌNG SỐ) gaussian filte (trọng số nhân thêm vào
giá trị các ô được chỉ định)

8

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

CODE: filter
bằng 0.5
%% (TRUNG BÌNH CĨ TRỌNG SỐ\) gaussian
D=imread('cameraman.tif');

E=imgaussfilt(D); % mặc định sigma
F=imgaussfilt(D,2);

figure name gaussian_filter
subplot(2,1,1)

imshowpair(D,E,'montage')

title('mặc định')

subplot(2,1,2)
imshowpair(D,F,'montage')
title('sigma = 2')

c. medium filter (trung vị)
Hình này filter trung vị đang giúp loại bỏ đi nhiễu. Ta thấy tra trận lớn hơn sẽ

làm mờ ảnh đi nhiều hơn

9

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

CODE:

%% medium filter (trung vị)
G = imread('eight.tif');
H = imnoise(G,'salt & pepper',0.02);% làm nhiềau muố\i tiều
I = medfilt2(H);
K = medfilt2(H,[4 4]);
figure name medium_filter
subplot(2,1,1)
imshowpair(H,I,'montage')
title('mặc định')
subplot(2,1,2)
imshowpair(H,K,'montage')
title('matrix medium 4x4')


d. Order filter (là tổng quan của medium filter)

10

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

CODE:

%% order filter (là tống quan cua medium filter)

A = imread('snowflakes.png');
B = ordfilt2(A,25,true(5));
C = ordfilt2(A,1,[0 1 0; 1 0 1; 0 1 0]);% matrix mask tự chọn
figure name order_filter
subplot(2,1,1)
imshowpair(A,B,'montage')
title('matrix 5x5 kiều max')

subplot(2,1,2)
imshowpair(A,C,'montage')
title('mask tự chọn')

4. Morphological Image Processing
Làm đầy các nét đứt, tách ảnh (phục chế ảnh)

Các hàm sử dụng:
a. J = imerode(I,SE) ; % SE =[0,1,1] erosion

Ảnh gốc sau khi được viền thì sẽ có một viền đen xung quanh hình, điều này
nhằm mục đích cho Kenel có thể nhận ra được mép của hình bên trong. Và ta thấy

được kết quả khi có viền và khơng viền. Ảnh có viền cho ra kết quả trính xác cịn ảnh
khơng viền thì ra kết quả sai.

11

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

CODE:

I= [ 0 0 0 0 0 0
1 1 1 1 1 1
0 0 1 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0];

Ip=padarray(I,[1 1]);% tạo viề'n cho anh
SE= [0 1 1];
Ie=imerode(I,SE);
Iep=imerode(Ip,SE);
figure;
subplot(2,2,1)
imshow(I,'InitialMagnification','fit')
title('anh gố\c')
subplot(2,2,2)
imshow(Ip,'InitialMagnification','fit')
title('anh viề'n')
subplot(2,2,3)
imshow(Ie,'InitialMagnification','fit')
title('anh gố\c erosion với SE')
subplot(2,2,4)

imshow(Iep,'InitialMagnification','fit')
title('anh đã viề'n erosion với SE')

b. J = imdilate(I,SE) dilation

CODE:

I=imread('coins.png');
BW=imbinarize(I); % chuyền thành anh nhị phân

12

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

SE= strel('disk',5); % định nghĩa phâ'n tư câ\u trúc kernel
BW1=imdilate(BW,SE);

SE= strel('disk',15); BW2=imerode(BW1,SE);

SE= strel('disk',9); BW3=imdilate(BW2,SE);
imfill(BW3,'holes'); % làm đâ'y khoang trố\ng bền trong hình

figure
subplot(2,2,1)
imshow(I,'InitialMagnification','fit');
title('anh gố\c')

subplot(2,2,2)
imshow(BW1,'InitialMagnification','fit')
title('anh chỉnh SE 5')


subplot(2,2,3)
imshow(BW2,'InitialMagnification','fit')
title('anh chỉnh SE 15')

subplot(2,2,4)
imshow(BW3,'InitialMagnification','fit')
title('anh chỉnh SE 9')

% BW2 = bwareaopen(BW, 50); xóa phâ'n tư có ít hơn 50 pixel

coins = bwconncomp(BW3);
disp('số\coins');
disp(coins);

5. Image Segmentation
Các hàm sử dụng:

 Otsu method
 Adaptive threshold

Khác nhau chủ yếu của 2 cách lấy ngưỡng này là Otsu method lấy ngưỡng trên
tồn cục cịn Adaptive threshold thì lấy ngưỡng trên từng vùng nhỏ hơn.

13

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

CODE:


I=imread('printedtext.png');

%Otsu method
level = graythresh(I); % chuân hoá ngưỡng xám cua anh I
BW1 = imbinarize(I,level); % chuyền thành nhị phân theo level(giá trị
pixel> level->tră\ng, <level-> đen)

%Adaptive threshold
T= adaptthresh(I,0.4,'ForegroundPolarity','dark'); % Sư dụng Adaptthresh đề
xác định ngưỡng sư dụng.
BW2 = imbinarize(I,T);% Chuyền đối hình anh thành hình anh nhị phân, chỉ
định giá trị ngưỡng theo T.

subplot(2,2,1)
imshow(I,'InitialMagnification','fit')
title('anh gố\c')

subplot(2,2,2)
imshow(BW1)
title('anh sư dụng pp Otsu method')

subplot(2,2,3)
imshow(BW2)
title('anh sư dụng pp adaptthresh (anh nhị phân)')

subplot(2,2,4)
imshow(T)
title('ngưỡng lâ\y threshold cho từng vị trí pixel')

6. Point, Line and Edge Detection

Các hàm sử dụng :

 edge(I,'canny') : dùng để xác định các đường line

14

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

 [H,,] = hough(BW): ý tưởng của hough là chuyển đổi các điểm trên ảnh
sang không gian tọa độ khác, để có thể biểu diễn đường thẳng một cách
đơn giản hơn. Trong không gian tọa độ mới, mỗi điểm được biểu diễn
dưới dạng một đường thẳng, và mỗi đường thẳng được biểu diễn bởi hai
tham số (rho và theta).

Biến là khoảng cách từ gốc tọa độ đến đường thẳng dọc theo một vectơ vng
góc với đường thẳng. là góc của hình chiếu vng góc từ gốc tọa độ đến đường thẳng
được đo bằng độ theo chiều kim đồng hồ từ trục x dương. Phạm vi của theta là –90° ≤
θ < 90°. Góc của đường thẳng là θ + 90°, cũng được đo theo chiều kim đồng hồ đối
với trục x dương.

ρ = x*cos(θ) + y*s) + y*sin(θ) + y*s)

CODE:

RGB = imread('gantrycrane.png');
I = im2gray(RGB);
BW = edge(I,'canny');% pp canny
[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-90:0.5:89);
figure


15

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

subplot(2,2,1);
imshow(RGB);
title('anh gố\c');

subplot(2,2,2)
imshow(BW);
title('các cạnh tìm đươc sau khi sư dụng edge')

subplot(2,2,3:4);
imshow(imadjust(rescale(H)),'XData',T,'YData',R,'InitialMagnification','fit
');
title('Hough transform cua anh gố\c');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(gca,cool);

2. Homework 1 :Viola Jones: training
 Tóm tắt thuật tốn Viola Jones:

Thuật toán Viola Jones được sử dụng trong phát hiện khn mặt (face detection).
Thuật tốn này sử dụng các đặc trưng Haar (Haar-like features) với các kích thước, vị
trí, loại khác nhau. Có tổng cộng 4 loại đặc trưng sau:

Theo lý thuyết sẽ có tồn tại 160K features có thể có. Tuy nhiên, một số loại features sẽ
khơng có nhiều ý nghĩa trong bài tốn phát hiện khn mặt do đó chúng ta sẽ áp dụng
điều kiện cho nó, tạo thành các bộ lọc yếu (Weak Classifiers):


Trong đó hj(x) là giá trị ngõ ra của bộ lọc, pj là trọng số của biểu thức và dấu của biểu
thức, fj(x) là đặc trưng (sự khác biệt giữa giá trị pixel trong ảnh gốc giữa vùng trắng và
đen), theta j là ngưỡng xét đến.

16

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

Sau đó dựa vào sự khác biệt giữa tổng giá trị của vùng pixel của màu trắng và vùng
pixel màu đen thông qua thuật tốn AdaBoost để huấn luyện mơ hình.

Chúng ta sử dụng nhiều bộ lọc yếu (weak classifiters) để tạo thành một bộ lọc mạnh để
tăng độ chính xác của thuật toán.

Tuy nhiên, việc sử dụng tất cả các dữ liệu đang có như vậy sẽ có tốc độ tính tốn lâu.
Do đó người ta sử dụng cấu trúc dạng tầng (Haar Cascade) để có thể loại bớt các chi
tiết không cần thiệt ở các tầng trước, tăng tốc độ tính tốn của mơ hình. Các tầng đầu
tiên sẽ làm tỉ số False Negative giảm (Nghĩa là tiêu chí Positive dễ dàng nên dễ lọt
qua, làm tăng False Positive ) để đảm bảo rằng khơng bỏ sót hình ảnh có chưa object
thật. Các tầng sau tỉ số False Postive được giảm dần

Ngồi ra, người ta cịn sử dụng khái niệm ảnh tích phân để có thể tái sử dụng lại các
thơng số tính tốn, giảm số lượng phép tính.

 Huấn luyện mơ hình sử dụng Viola Jones:

17

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG


+ Lấy mẫu dữ liệu:
- Dữ liệu positive: Sử dụng công cụ Image Labeler

Dữ liệu được huấn luyện là hình ảnh biển số xe được thu thập từ bãi giữ xe. Số lượng
được lấy và label là 270 ảnh

- Dữ liệu negative:
Chứa những ảnh khơng có chứa bảng số xe. Số lượng 70 ảnh.

18

THỊ GIÁC MÁY TÍNH GVHD: PHẠM VIỆT CƯỜNG

 Code:

positiveInstances = LicensePlate(:,1:2);
negativeFolder=fullfile(matlabroot,'toolbox','vision','vis
iondata','nonStopSigns');
negativeImages = imageDatastore(negativeFolder);
trainCascadeObjectDetector('LicensePlate.xml',positiveInst
ances,negativeFolder,'FalseAlarmRate',0.5,'NumCascadeStage
s',20);

+ Kết quả huấn luyện:

Training stage 12 of 20

[........................................................................]


Used 246 positive and 148 negative samples

Time to train stage 12: 50 seconds

Training stage 13 of 20

[........................................................................]

Used 246 positive and 59 negative samples

Time to train stage 13: 51 seconds
+ Kiểm tra dữ liệu:

Detector=vision.CascadeObjectDetector('LicensePlate.xml
;
img = imread('0519_04671_b.jpg');
bbox = step(detector,img);
detectedImg=insertObjectAnnotation(img,'rectangle',bbox
,'LicensePlate');
figure; imshow(detectedImg);

19


×