1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo homework môn Thị giác máy

58 188 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo cáo homework môn Thị giác máy
Tác giả Trần Gia Bảo, Dương Đình Minh, Mai Anh Tuấn, Nguyễn Trương Gia Huy, Huỳnh Ngọc Nguyên Thư
Người hướng dẫn TS. Phạm Việt Cường
Trường học Điện – Điện Tử, Trường Đại Học Bách Khoa, Đại Học Quốc Gia Thành Phố Hồ Chí Minh
Chuyên ngành Thị giác máy
Thể loại Báo cáo homework
Năm xuất bản 2023
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 58
Dung lượng 3,89 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • 1. HOMEWORK 1 (4)
    • 1.1 Point Processing - Power Law (4)
    • 1.2 Image Enhancement Histogram Equalization (5)
    • 1.3 Spatial Domain Filtering (10)
    • 1.4 Morphological Image Processing (12)
    • 1.5 Image Segmentation (23)
    • 1.6 Viola - Jones Algorithm (27)
  • 2. HOMEWORK 2 (28)
    • 1.1 Viết quy luật chuỗi bằng đạo hàm riêng 𝛛𝐄/𝛛𝐰𝐱 (28)
    • 1.2 Kiểm tra đạo hàm với số cụ thể (29)
    • 1.3 Kiểm chứng số mô phỏng qua công thức đạo hàm (33)
  • 3. HOMEWORK 3 (37)
    • 1.2 Why is stochastic gradient descent better than batch gradient descent at avoiding local minimu (38)
    • 1.3 Why is mini batch gradient descent the best among the three? (41)
  • 4. HOMEWORK 4 (42)
    • 1.1 Why local connectivity? (42)
    • 1.2 Why shared weights? (43)
  • 5. HOMEWORK 5 (44)
    • 1.1 Top 1 Error using Alexnet in Matlab (44)
    • 1.2 Top 5 Error using Alexnet in Matlab (48)
  • 6. HOMEWORK 6 (55)
    • 1.1 Các bước thực hiện (55)
    • 1.2 Kết quả Training (58)

Nội dung

Báo cáo homework môn Thị giác máy Báo cáo homework môn Thị giác máy Báo cáo homework môn Thị giác máy Báo cáo homework môn Thị giác máy Báo cáo homework môn Thị giác máy Báo cáo homework môn Thị giác máy Báo cáo homework môn Thị giác máy Báo cáo homework môn Thị giác máy

HOMEWORK 1

Point Processing - Power Law

Đoạn code: x = imread('C:\chelsea.jpg'); x = rgb2gray(x); x = im2double(x);

[m,n] = size(x); gamma = 0.4; c = 1; for i=1:m for j=1:n ex(i,j) = c*(x(i,j)^gamma); end end figure; imshow(x); title('original'); figure; imshow(ex); title('power law');

Image Enhancement Histogram Equalization

This article demonstrates how to analyze image histograms using MATLAB It includes code snippets that load and display different images—dark, bright, high contrast, and low contrast—and generate their corresponding histograms to visualize pixel intensity distributions Using histograms provides valuable insights into image brightness and contrast levels, essential for image processing and enhancement The approach showcases how to compare and interpret various image characteristics through histogram analysis, aiding in optimizing image quality for various applications.

− Dark image: histogram bị lệch về phía bên trái

− Bright image: histogram bị lệch về phía bên tay phải

− High contrast image: sử dụng toàn bộ dãy thông tin, histogram phân bố trải dài

− Low contrast image: không sử dụng toàn bộ dãy thông tin, histogram chỉ tập trung 1 khoảng nhỏ

A histogram provides a comprehensive visual summary of an image’s tonal distribution Histogram equalization enhances image contrast by redistributing intensity values, which can be implemented using simple code For example, reading a dark image with `imread()` followed by applying `histeq()` improves visibility, as shown in side-by-side comparisons with `imshow()` Displaying the original and contrast-enhanced images along with their histograms using `histogram()` offers clear insights into the effect of histogram equalization on image brightness and contrast.

Kết quả: Ảnh gốc Ảnh sau khi dùng Histogram Equalization

Histogram của ảnh gốc Histogram của ảnh dùng Equalization

Khi sử dụng kỹ thuật Histogram Equalization, ta có thể tạo ra những hình ảnh mới với histogram phân bố đều, giúp nâng cao độ tương phản của ảnh so với ảnh gốc Trong khi đó, kỹ thuật Histogram Matching cho phép điều chỉnh histogram của ảnh đầu vào thành phù hợp với histogram của một hình mẫu mong muốn, qua đó kiểm soát chính xác hơn về độ sáng và độ tương phản của ảnh Đây là những phương pháp quan trọng trong xử lý ảnh nhằm cải thiện chất lượng trực quan và phù hợp với mục đích sử dụng.

B = imhistmatch(A,Ref); imshow(A) title('Orginal Image') imshow(Ref) title('Reference Grayscale Image') imshow(B)

6 title('Histogram Matched') H1=histogram(A); title('Histogram of Orginal Image') H2=histogram(Ref); title('Histogram of Reference Grayscale Image') H3=histogram(B); title('Histogram of Histogram Matched')

Trong một số trường hợp, chúng ta không thể biến histogram của ảnh cũ thành ảnh mới có phân bố đều Khi đó, phương pháp Histogram Matching được sử dụng để điều chỉnh histogram của ảnh cũ sao cho phù hợp với histogram mong muốn Phương pháp này giúp chuyển đổi hình dạng của histogram để tạo ra ảnh mới có độ phân bố màu sắc tương tự như ý muốn, nâng cao chất lượng và độ chính xác của quá trình xử lý ảnh.

Spatial Domain Filtering

I = imread('concordorthophoto.png'); figure, imshow(I)

J = imnoise(I,'salt & pepper',0.04);%them nhieu muoi tieu vao anh I

K = medfilt2(J); imshow(J); figure imshow(K); figure

Kết quả: Ảnh gốc Ảnh thêm nhiễu muối tiêu x10 4

8 Ảnh sau khi dùng Median Filter

Median Filter rất hữu hiệu trong việc khử nhiễu muối tiêu b) Order - Statistic Filter Đoạn code:

A = imread('snowflakes.png'); figure imshow(A)

Kết quả: Ảnh gốc Ảnh sau khi dùng Order – Statistic Filter

Thông số order của bộ lọc được xác định dựa trên kích thước của miền (domain) Trong ví dụ với miền kích thước 3x3, nếu dùng Median filter thì order bằng 5, Minimum filter thì order bằng 1, và Maximum filter thì order bằng 9 Khi miền là 5x5, các giá trị tương ứng là 13 cho Median filter, 1 cho Minimum filter, và 25 cho Maximum filter Điều này giúp lựa chọn bộ lọc phù hợp dựa trên kích thước miền và yêu cầu xử lý ảnh.

Morphological Image Processing

a) Erosion và Dilation Đoạn code 1: clear close all clc

Ip = padarray(I,[1 1]);%zero pading, them vien 0 ben ngoai

SE = [0 1 1];%phan tu cau truc

IE = imerode(Ip,SE); figure; imshow(Ip,'InitialMagnification','fit')%doc anh figure; imshow(IE,'InitialMagnification','fit')

Ma trận I là ta khởi tạo như một ảnh xám đầu vào với các giá trị nhị phân (1

- trắng, 0 - đen) Để áp kernel lên ảnh và erosion thì ta phải thêm viền 0 bên ngoài bức ảnh đầu vào bằng lệnh padarray như trên

SE là phần tử cấu trúc (kernel) trong xử lý ảnh, thường là ma trận 2x2 gồm hai số 1 theo lý thuyết Tuy nhiên, để xác định đúng vị trí tâm của kernel, ta cần điều chỉnh sao cho phần tử số 1 bên trái chính là tâm kernel Do đó, chúng ta đưa SE về dạng phù hợp để đảm bảo quá trình xử lý chính xác và thuận tiện hơn trong các bài toán về xử lý ảnh và nhận dạng mẫu.

Lệnh imerode giúp ta bào mòn phần trắng của bức ảnh Ip bằng kernel SE

Hình ảnh của 𝐼 𝑝 Hình ảnh của 𝐼 𝑒

11 Đoạn code 2: clear close all clc

This code performs image erosion using a specified structuring element, resulting in two different processed images The variable 'Ie' is the eroded version of the original image 'I', while 'Iep' is the erosion of another image, 'Ip' The subsequent figures display these images with an 'InitialMagnification' set to 'fit' for optimal viewing In summary, this code demonstrates how morphological erosion can be applied to different images, producing processed outputs that highlight structural features essential for image analysis.

Hình ảnh của I Hình ảnh của Ie

Hình ảnh của Ip Hình ảnh của Iep Đoạn code 3: close all; clear; clc

I = imread('coins.png'); figure; imshow(I)%anh goc

BW = imbinarize(I); figure; imshow(BW)

BW1 = imdilate(BW,SE); figure; imshow(BW1) SE1 = strel('disk',15);

BW2 = imerode(BW1,SE1); figure; imshow(BW2) SE2 = strel('disk',9);

BW3 = imdilate(BW2,SE2); figure; imshow(BW3) BWfill = imfill(BW,'holes'); figure; imshow(BWfill)

Lệnh imbinarize giúp ta chuyển ảnh màu sang ảnh xám

Câu lệnh SE = strel('disk',5) tạo ra một kernel hình tròn với bán kính là

Lệnh imdilate giúp ta bồi đắp bức ảnh bằng kernel tương ứng

Hình ảnh của I Hình ảnh của BW

Hình ảnh của BW1 Hình ảnh của BW2

Dilation và erosion trong xử lý ảnh được thực hiện bằng các kernel có kích thước khác nhau nhằm mục đích tách rời các đối tượng dính nhau một cách hiệu quả Tuy nhiên, phương pháp này yêu cầu thực hiện nhiều lần dilation và erosion cùng với việc điều chỉnh kích thước kernel phù hợp, dẫn đến tốn nhiều thời gian và công sức Chính vì vậy, trong đoạn mã đã được tối ưu hóa, chúng tôi đã sử dụng các lệnh xử lý nhanh hơn để giảm thiểu thời gian và nâng cao hiệu quả của quá trình xử lý ảnh.

BWfill = imfill(BW,'holes'); figure; imshow(BWfill)

Khi thực hiện erosion rồi dilation lại bức ảnh, vật thể cuối cùng thu được chỉ gần giống với vật thể ban đầu chứ không thể hoàn toàn khôi phục như ban đầu Quá trình mở rộng (Opening) trong xử lý ảnh giúp loại bỏ nhiễu và các chi tiết nhỏ không mong muốn, cải thiện chất lượng hình ảnh Đoạn mã mở rộng (Opening) thường được sử dụng để làm rõ các đặc trưng chính của vật thể trong ảnh, giúp nâng cao hiệu quả xử lý ảnh và tăng khả năng phân tích.

% Program for Gray-scale Opening

% Opening to estimate background background = imopen(I,SE);

% Display subplot(2,2,1), imshow(I), title('Original Image'); subplot(2,2,2), imshow(background), title('Opened Image'); subplot(2,2,3), imshow(I2), title('Subtraction of Background'); subplot(2,2,4), imshow(I3), title('Final Image');

Hình ảnh của Opening Đoạn code Closing:

% Program for Gray-scale Closing

% Opening to estimate background background = imclose(I,SE);

% Display subplot(2,2,1), imshow(I), title('Original Image'); subplot(2,2,2), imshow(background), title('Closed Image'); subplot(2,2,3), imshow(I2), title('Subtraction of Background'); subplot(2,2,4), imshow(I3), title('Final Image');

SE là lệnh dùng để tạo kernel hình đĩa với bán kính 15, giúp xử lý ảnh hiệu quả Tham số thứ hai là số lượng phần tử kernel là 6, yêu cầu là số chẵn để đảm bảo tính chính xác trong quá trình xử lý Kernel dạng đĩa này thường được sử dụng trong các kỹ thuật tăng cường và làm mờ ảnh, phù hợp cho các tác vụ yêu cầu lọc khu vực trung tâm Việc chọn bán kính và số phần tử phù hợp sẽ ảnh hưởng đến kết quả cuối cùng của quá trình xử lý ảnh.

− imopen(I,SE): Thực hiện erosion trước, sau đó là dilation với kernel SE đã cho trước

− imclose(I,SE): Thực hiện dilation trước, sau đó là erosion với kernel SE đã cho trước

Hàm imsubtract(I, background) thực hiện phép trừ từng phần tử trong ảnh nền (background) khỏi ảnh gốc (I), giúp loại bỏ phần nền ra khỏi ảnh ban đầu Kết quả của hàm này là phần hiệu, tức là phần còn lại sau khi trừ, góp phần nâng cao chất lượng xử lý ảnh và phân đoạn đối tượng Đây là bước quan trọng trong các ứng dụng xử lý ảnh để làm nổi bật đối tượng chính và loại bỏ nhiễu nền không mong muốn.

− imadjust(I2): với mục đích cải thiện độ tương phản, ánh xạ c) Xác định tâm và số lượng Đoạn code: close all; clear; clc;

This MATLAB script loads and displays an image of coins using imread and imshow functions It employs the imfindcircles function to detect bright circular objects within a specified radius range, identifying the coin centers and radii Visual markers, including red circles and plus signs, are overlaid on the image to highlight detected coins Additionally, a dynamic annotation displays the total number of coins detected, enhancing interpretability This approach provides an effective method for counting coins in an image, combining image processing techniques with visual annotations for clarity.

% Program for Gray-Scale Erosion anh Dilation with flat structuring element

% Defining flat structuring element se = strel('square',3);

% Gray scale image dilation A1 = imdilate(A,se);

% Gray scale image erosion A2 = imerode(A,se);

% Dislay on Images subplot(2,2,1), imshow(A), title('Original Image'); subplot(2,2,2), imshow(A1), title('Dilated Image'); subplot(2,2,3), imshow(A2), title('Eroded Image'); subplot(2,2,4), imshow(M), title('Gradient Image');

Câu lệnh se = strel('square',3) nghĩa là tạo ra một kernel hình vuông có chiều rộng là 3 pixel để tiến hành quá trình dilation hay erosion.

Image Segmentation

a) Otsu method và Adaptive threshold Đoạn code:

I = imread('printedtext.png'); figure; imshow(I);

%Otsu method T1 = graythresh(I); BW1 = imbinarize(I,T1); figure; imshow(BW1)

%Adaptive thresholding T2 = adaptthresh(I,0.4,'ForegroundPolarity','dark'); BW2 = imbinarize(I,T2); figure; imshow(BW2);

Hình ảnh của Otsu method

Hình ảnh của Adaptive threshold

Phương pháp Otsu không sử dụng ngưỡng cố định mà dựa trên phân bố mức xám của các pixel để tính toán ngưỡng tối ưu phù hợp, giúp nâng cao hiệu quả phân đoạn ảnh Tuy nhiên, mặc dù được đánh giá cao về khả năng tối ưu, phương pháp này vẫn còn hạn chế trong việc khôi phục hình ảnh một cách hoàn hảo.

Adaptive Thresholding là phương pháp tính giá trị trung bình của các điểm xung quanh mỗi pixel rồi trừ đi một hằng số để xác định ngưỡng phân loại, giúp phục hồi hình ảnh rõ ràng hơn so với phương pháp Otsu Phương pháp này không sử dụng ngưỡng cố định, nhờ đó đạt hiệu quả phân đoạn tốt hơn trong nhiều trường hợp Đoạn mã minh họa (Code 1) bắt đầu bằng lệnh clear; close all; clc để chuẩn bị môi trường xử lý ảnh và thực hiện các thao tác xử lý hình ảnh hiệu quả.

I = imread('coins.png'); figure; imshow(I)

%Otsu method T1 = graythresh(I); BW1 = imbinarize(I,T1); figure; imshow(BW1)

Hình ảnh của I Hình ảnh của BW1

23 Đoạn code 2: clear; close all; clc

I = imread('coins.png'); figure; imshow(I)

BW2 = imbinarize(I,T2); figure; imshow(BW2) figure; imshow(T2)

Hình ảnh của I Hình ảnh của BW2

Từ những kết quả trên, ta thấy phương pháp Adaptive threshold tốt hơn rất nhiều so với phương pháp Otsu trong việc segmentation ảnh

Viola - Jones Algorithm

% The cascade object detector uses the Viola-Jones Algorithm

% To detect people's faces FaceDetect = vision.CascadeObjectDetector;

I = imread('C:\chelsea.jpg'); figure; imshow(I); title('Original Image');

BB = step(FaceDetect,I); figure; imshow(I); hold on for i = 1:size(BB,1) rectangle('Position',BB(i,:),'LineWidth',5,'LineStyle','- ','EdgeColor','b'); end title('Face Detection'); hold off;

Hình ảnh của Viola – Jones

Sử dụng vòng lặp để duyệt qua toàn bộ hình ảnh nhằm tạo các cửa sổ có màu sắc đường viền (EdgeColor), kiểu đường viền (LineStyle), và kích thước (LineWidth) phù hợp để nhận diện khuôn mặt Việc này giúp tăng độ chính xác trong quá trình xác định và phân tích khuôn mặt trên ảnh Công nghệ xử lý hình ảnh này tối ưu hóa khả năng phát hiện khuôn mặt, hỗ trợ các ứng dụng như an ninh, nhận diện tự động và phân tích hình ảnh Áp dụng các tham số về viền cùng với vòng lặp giúp đảm bảo quá trình nhận diện diễn ra chính xác, nhanh chóng và hiệu quả.

HOMEWORK 2

Viết quy luật chuỗi bằng đạo hàm riêng 𝛛𝐄/𝛛𝐰𝐱

Kiểm tra đạo hàm với số cụ thể

Để kiểm tra công thức đạo hàm với giá trị cụ thể, chúng tôi đã chạy mô phỏng mạng neurons sử dụng phần mềm VisualML Các thông số của mạng nơ-ron, như learning rate, đóng vai trò quan trọng trong quá trình đào tạo và tối ưu hóa mô hình Việc kiểm tra đạo hàm giúp xác nhận tính chính xác của công thức đạo hàm trong quá trình học của mạng neural Áp dụng phần mềm VisualML giúp dễ dàng mô phỏng và phân tích các tham số, từ đó đảm bảo kết quả chính xác và phù hợp với lý thuyết.

= 0,1; 2 input với training data mong muốn là:

Mạng neural sau khi chạy qua 2 mẫu với forward propagation ở epoch 1:

Thông số của mạng sau khi lan truyền ngược xong mỗi Example ở epoch1:

Thông số sau khi train được 5 epoch:

Kiểm chứng số mô phỏng qua công thức đạo hàm

(u,i ở đây là các mạng liên quan đến 𝑛𝑒𝑡 𝑢 )

1 + 𝑒 −𝑛𝑒𝑡𝑢 (Hàm kích hoạt sigmod) (𝑛𝑒𝑡 𝑢 = x vì 𝑛𝑒𝑡 𝑢 là đầu vào của hàm 𝑜𝑢𝑡 𝑢 )

2 (𝑡𝑎𝑟𝑔𝑒𝑡 𝑂3 − 𝑜𝑢𝑡 𝑂3 ) 2 (target ở đây là output mà mình mong muốn train được)

Kiểm tra công thức với thông số của kết quả Forward Propagation và Backward Propagation ở epoch1:

2 (𝑡𝑎𝑟𝑔𝑒𝑡 𝑂1 − 𝑜𝑢𝑡 𝑂1 ) 2−1 ∗ (−1) + 0 (vì đạo hàm theo biến 𝑜𝑢𝑡 𝑂1 nên các phần tử khác khi đạo hàm sẽ = 0)

Nếu so sánh với mô phỏng thì khá tương đồng vì 𝑤 16′ của lần lan truyền ngược ở epoch1 là 0,6

Với cách tính tương tự như trên ta có được các thông số như sau:

Nếu so sánh với mô phỏng thì khá tương đồng vì 𝑤 7′ của lần lan truyền ngược ở epoch1 là 0,89

Với cách tính tương tự như trên ta có được các thông số như sau:

Nếu so sánh với mô phỏng thì khá tương đồng vì 𝑤 1′ của lần lan truyền ngược ở epoch1 là 0,73

Sau 1 epoch, các thông số weight chưa có sự thay đổi đáng kể, tuy nhiên sau 5 epoch, các weights 𝑤1, 𝑤7, 𝑤16 đã có sự biến động rõ rệt với giá trị lần lượt là 0,7; 0,87; 0,56 Điều này cho thấy việc huấn luyện qua nhiều epoch giúp cải thiện độ chính xác của hệ thống mà chúng ta hướng tới.

− Công thức đạo hàm chain rule rất chính xác khi sau khi đã qua kiểm chứng bằng số nhưng vẫn có một mức sai số nhất định là MSE = 0,32.

HOMEWORK 3

Why is stochastic gradient descent better than batch gradient descent at avoiding local minimu

Trong batch gradient descent, chúng ta tính toán gradient của cost function trên toàn bộ tập dữ liệu

Sau đó trừ gradient từ giá trị 𝜃 hiện tại rồi nhân với learning rate 𝛼 (sử dụng 𝛼 để giảm tỷ lệ gradient và ngăn chúng overshooting minimum)

𝜃 = 𝜃 − 𝛼 𝛻𝐽(𝑓(𝑥, 𝜃), 𝑦) Nhưng batch gradient descent không phải là một lựa chọn khả thi vì lý do “gặp vấn đề khi vượt qua local minimum”

Vì chúng ta tính toán gradient của toàn bộ tập dữ liệu huấn luyện, gradient sẽ hướng dẫn chúng ta đến điểm cực tiểu gần nhất Trong các bài toán convex, điều này không gặp vấn đề vì chỉ có một điểm cực tiểu duy nhất Tuy nhiên, nếu hàm mục tiêu có nhiều cực tiểu khác nhau, quá trình tối ưu hóa có thể gặp khó khăn trong việc tìm ra điểm cực tiểu toàn cục chính xác.

Batch gradient descent có thể bị mắc kẹt tại các điểm cực tiểu cục bộ gần nhất mà không đạt được Minimum toàn cục, gây ảnh hưởng lớn đến hiệu quả tối ưu hóa Trong khi đó, stochastic gradient descent (SGD) có khả năng vượt qua các local minimum nhờ vào tính chất ngẫu nhiên của nó, giúp tối ưu hóa mô hình hiệu quả hơn Do đó, SGD được coi là phương pháp phù hợp hơn để tránh mắc kẹt tại các điểm tối ưu cục bộ và đạt được kết quả tốt hơn trong quá trình huấn luyện mô hình.

Stochastic gradient descent (SGD) updates model parameters by calculating the gradient on individual data samples rather than the entire batch Instead of using the full data vectors x and y, a random example (xₖ, yₖ) is selected, its gradient is computed, and the model is updated accordingly This approach enables more efficient and scalable training, especially with large datasets.

Việc lựa chọn ngẫu nhiên một ví dụ huấn luyện tạo nên tính ngẫu nhiên trong quá trình đào tạo mô hình Các ví dụ riêng lẻ có thể gây ra các gradient khác nhau, dẫn đến việc mất mát (loss) đôi khi tăng tạm thời Do đó, biểu đồ học tập thường hiển thị sự dao động lớn hơn trong giá trị loss qua các vòng lặp, phản ánh tính ngẫu nhiên của quá trình huấn luyện.

Các dao động trong các giá trị gradient sẽ giúp stochastic gradient descent thoát ra khỏi local minimum

Batch gradient descent tính toán gradient dựa trên toàn bộ tập dữ liệu, dẫn đến hướng đi thẳng xuống mặt phẳng giảm tối đa nhưng dễ bị mắc kẹt tại các local minimum Trong khi đó, stochastic gradient descent sử dụng ngẫu nhiên các example để tính gradient, tạo ra dao động giúp thuật toán thoát khỏi các local minimum và tìm đến global minimum một cách hiệu quả hơn.

Stochastic Gradient Descent (SGD) giải quyết vấn đề hiệu quả tính toán thấp và mắc kẹt tại các cực tiểu cục bộ của Gradient Descent theo batch, bằng cách tính toán gradient trên các mẫu đơn lẻ Điều này giúp quá trình tối ưu hóa trở nên linh hoạt hơn, nhanh chóng hơn và tránh bị kẹt tại các điểm cực tiểu không mong muốn trong quá trình huấn luyện mô hình Nhờ vào khả năng xử lý từng mẫu riêng lẻ, SGD trở thành phương pháp phổ biến để nâng cao hiệu quả đào tạo trong các thuật toán máy học và trí tuệ nhân tạo.

Stochastic gradient descent (SGD) gặp khó khăn trong việc hội tụ chính xác về mức tối thiểu do tính ngẫu nhiên và các dao động trong quá trình tối ưu hóa Tuy nhiên, nhờ đặc điểm này, nó có khả năng vượt qua các địa phương tối thiểu hiệu quả hơn so với các thuật toán tối ưu khác.

Why is mini batch gradient descent the best among the three?

Toán học đằng sau phương pháp mini batch gradient descent tập trung vào gradient "thực" của hàm chi phí, được hiểu là kỳ vọng của gradient \( g \) trên phân phối dữ liệu thực \( p_{data} \) Gradient thực tế \( \hat{g} \) được tính dựa trên một batch các ví dụ và luôn xấp xỉ với gradient thực của phân phối dữ liệu thực nghiệm \( \hat{p}_{data} \) Điều này giúp nâng cao hiệu quả của quá trình tối ưu hoá trong đào tạo mô hình học máy.

Mini batch gradient descent hoạt động tốt nhất vì:

Mini batch giúp giải quyết các vấn đề học máy phức tạp bằng cách giảm nhu cầu tính toán so với xử lý full batch lớn, nhờ vào kích thước batch nhỏ hơn Điều này làm cho quá trình huấn luyện mô hình trở nên dễ dàng hơn và hiệu quả hơn trong việc xử lý các dữ liệu khó hiểu hoặc kỹ thuật phức tạp Việc sử dụng mini batch không chỉ tối ưu hóa hiệu suất mà còn giúp giảm thiểu các vấn đề về bộ nhớ, từ đó nâng cao hiệu quả trong quá trình đào tạo mô hình học máy.

Việc giảm kích thước batch không nhất thiết làm giảm độ chính xác của gradient Trong quá trình huấn luyện, nhiều ví dụ trong batch có thể chứa nhiễu, outlier hoặc bias, khiến gradient trở nên không chính xác Sampling ngẫu nhiên trong mini batch giúp phản ánh phân phối dữ liệu thực tế tốt hơn so với full batch Ngoài ra, nhiều lần cập nhật gradient từ các mini batch có thể cung cấp ước lượng tốt hơn cho gradient trung bình của toàn bộ dữ liệu Do đó, về mặt tổng thể, kết quả trung bình của một epoch từ mini batch thường có thể tốt hơn so với tính gradient từ full batch.

Với batch gradient descent, có khả năng không đạt được cực tiểu toàn cục khi hàm chi phí có nhiều điểm cực tiểu cục bộ Phương pháp mini-batch vượt trội hơn vì giúp thoát khỏi các điểm cực tiểu cục bộ nhờ đặc tính dao động của nó, kết quả từ stochastic gradient descent, tạo điều kiện để gradient hướng tới cực tiểu toàn cục.

Sử dụng stochastic gradient, ta có thể bắt đầu với learning rate cao và giảm dần theo thời gian để tránh bị mắc kẹt ở local minimum Tuy nhiên, giảm learning rate quá nhanh có thể gây khó khăn trong việc tìm kiếm global minimum, trong khi giảm quá chậm có thể khiến quá trình huấn luyện bị dao động mạnh và kéo dài không cần thiết Phương pháp mini-batch giúp quá trình đào tạo gần hơn với global minimum hơn so với stochastic gradient vì nó giảm thiểu dao động zig zag mạnh, từ đó cải thiện độ chính xác của mô hình.

Bên cạnh đó nó có lợi cho việc vectorization so với stochastic gradient descent.

HOMEWORK 4

Why local connectivity?

Local connectivity (kết nối cục bộ) rất quan trọng trong học máy và thị giác máy tính, khi mỗi nơ-ron trong lớp chập chỉ liên kết với một số nơ-ron trong vùng nhỏ của lớp trước để học các đặc trưng cục bộ Khái niệm này bắt nguồn từ cấu trúc vỏ não thị giác của động vật, nơi các tế bào thần kinh phát hiện đặc điểm trong một vùng nhỏ nhằm tối ưu hóa khả năng nhận biết Trong xử lý hình ảnh, các pixel gần nhau có mối liên hệ mạnh mẽ hơn so với những pixel xa, giúp xác định các đặc trưng quan trọng và nâng cao hiệu quả phân lớp Phương pháp kết nối cục bộ giúp các đặc trưng đã học phản hồi mạnh mẽ hơn với mẫu đầu vào, đồng thời giảm số lượng tham số cần thiết, tăng tốc độ huấn luyện và cải thiện độ chính xác trong nhận dạng hình ảnh.

Why shared weights?

Trong các lớp tích chập của mạng CNN, tính năng chia sẻ trọng số giúp phát hiện đặc trưng cục bộ trong toàn bộ hình ảnh một cách hiệu quả Khi biết cách nhận diện một đặc trưng trong một vùng của hình ảnh, chúng ta có thể áp dụng cùng một trọng số để phát hiện đặc trưng đó ở các vùng khác, giảm thiểu số lượng tham số cần thiết Ví dụ, với bộ lọc tích chập 3x3, thay vì sử dụng 12 thông số cho các vùng khác nhau, chia sẻ trọng số chỉ cần 3 tham số cho tất cả các vị trí, giúp tối ưu hóa hiệu suất và giảm đáng kể độ phức tạp của mô hình CNN.

HOMEWORK 5

Top 1 Error using Alexnet in Matlab

% Specify the folder path containing the images folderPath = '/MATLAB Drive/Alexnet/Bulbul'; % Replace with the actual folder path

% Get a list of image files in the folder imageFiles = dir(fullfile(folderPath, '*.jpg'));

% Load the AlexNet model net = alexnet;

% Loop through each input image for i = 1:numel(imageFiles) % Load the image to be classified img = imread(fullfile(folderPath, imageFiles(i).name));

% Preprocess the image for AlexNet input img = imresize(img, [227, 227]); % Resize the image to 227x227 pixels

% Perform classification using AlexNet [predictedLabel, scores] = classify(net, img);

% Create a subplot for the current image subplot(4, 5, i) image(img) axis off %title(['Image ', num2str(i)], 'FontSize', 6) % Set the FontSize property to 8 for the title

% Display the top predicted class with its probability [topScore, topIndice] = max(scores); topClasses = categorical(net.Layers(end).ClassNames(topIndice)); predictedProbability = topScore;

% Calculate text position textPosX = 0; textPosY = size(img, 1); text(textPosX, textPosY, predictionStr, 'Color', 'black', 'FontSize',

% Adjust the layout of the subplots sgtitle('Bulbul Classification Results') saveas(gcf, 'Bulbul Classification Results.png'); % Replace 'example_figure.png' with the desired file name and file format

Top 5 Error using Alexnet in Matlab

% Specify the folder path containing the images folderPath = '/MATLAB Drive/Alexnet/Daisy'; % Replace with the actual folder path

% Get a list of image files in the folder imageFiles = dir(fullfile(folderPath, '*.jpg'));

% Load the AlexNet model net = alexnet;

% Loop through each input image for i = 1:numel(imageFiles)

% Load the image to be classified img = imread(fullfile(folderPath, imageFiles(i).name));

% Preprocess the image for AlexNet input img = imresize(img, [227, 227]); % Resize the image to 227x227 pixels

% Perform classification using AlexNet [predictedLabel, scores] = classify(net, img);

% Get the top 5 predicted classes and their probabilities [topScores, topIndices] = sort(scores, 'descend'); topClasses = categorical(net.Layers(end).ClassNames(topIndices(1:5))); result = (i-1) / 5;

% Get integer part value of division integerPart = floor(result);

% Create a subplot for the current image

46 subplot(8, 5, i+integerPart*5) image(img) axis off

% Display the top 5 predicted classes with their probabilities predictionStr = ' '; for j = 1:numel(topClasses) predictedClass = char(topClasses(j)); predictedProbability = topScores(j); predictionStr = [predictionStr, sprintf('\n%s: %.4f', predictedClass, predictedProbability)]; end

% Calculate text position textPosX = 0; textPosY = size(img, 1); text(textPosX, textPosY, predictionStr, 'Color', 'black', 'FontSize', 4, 'VerticalAlignment', 'top') end

% Adjust the layout of the subplots sgtitle('Top 5 Predicted Classes') saveas(gcf, 'Daisy Top-5 Classification Results.png'); % Replace 'example_figure.png' with the desired file name and file forma

HOMEWORK 6

Các bước thực hiện

− Tạo ImageDatastore in workspace để input các hình ảnh dùng cho training Đoạn code:

% Define the path to the folder containing your image data image_folder = '/MATLAB Drive/Tranfer Learning';

% Create ImageDatastore imds = imageDatastore(image_folder, 'IncludeSubfolders', true, 'LabelSource', 'foldernames');

− Chọn Apps từ thanh Menu → Deep Network Designer → Alexnet

(Sau khi đã chọn Alexnet)

− Kéo các hàm fullyConnectedLayer từ Layer library để thay các hàm FC6, FC7, FC8 có sẵn của alexnet:

In FC6_NEW and FC7_NEW, set the OutputSize to 4096 and enable auto InputSize to allow direct input of images without resizing, matching AlexNet's output size For FC8_NEW, configure the OutputSize to 5 to correspond with the five classification categories This setup ensures seamless image input and accurate class predictions in your neural network.

− Thay hàm classoutput mới từ Layer library: để các classes ngõ ra được set về auto (hàm output cũ là 1000 classes của alexnet)

− Sang tab Data để Import data: Có thể tùy chỉnh các thông số AUGMENTATION OPTIONS và chia source ảnh thành training và validation

− Sang tab Training: chọn Training Options để thiết lập các thông số dùng cho Training

− Có thể tùy chỉnh các parameter như weight và bias trong FC6_NEW, FC7_NEW, FC8_NEW để phù hợp với mô hình

− Sau khi thiết lập xong chọn Train để bắt đầu training.

Ngày đăng: 09/08/2023, 18:48

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w