1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập

16 17 0

Đ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

Định dạng
Số trang 16
Dung lượng 693,07 KB

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

Nội dung

Trong bài này tôi thiết kế hệ thông nhận diện số đếm bằng tay từ 1 đến 10 trong bảng thủ ngữ sau: Hình 1 – Bảng số đếm bằng tay Mô hình Máy Học Tập: Xây dựng mô hình học sâu sử dụng mạ

Trang 1

TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT

BỘ MÔN TRÍ TUỆ NHÂN TẠO

-*** -

BÀI TẬP LỚN

MÔN TRÍ TUỆ NHÂN TẠO – 7080122-02

Đề tài:

XÂY DỰNG MÔ HÌNH MÁY HỌC TẬP Cán bộ giảng dạy Sinh viên thực hiện

GV Trần Trường Giang Nguyễn Đức Nam-1921050411

HÀ NỘI-2022

Trang 2

<ND1>: Mô tả về dự án

Mục đích: Xây dựng một hệ thống nhận dạng bàn tay để đoán ra

các ký tự mà người khuyết tật muốn nói trong thời gian thực Trong bài này tôi thiết kế hệ thông nhận diện số đếm bằng tay từ

1 đến 10 trong bảng thủ ngữ sau:

Hình 1 – Bảng số đếm bằng tay

Mô hình Máy Học Tập: Xây dựng mô hình học sâu sử dụng mạng

nơ-ron tổ hợp tích chập – Convolution Neural Network

Môi trường dự án: Python virtual environment - Môi trường lập trình ảo

Python

Ngôn ngữ: Python

Bộ thư viện: Tensorflow, Keras

IDE: Visual Studio Code

Tạo môi trường lập trình ảo: Tại terminal cho thư mục chưa project thực

hiện câu lệnh “py –m venv venv” để tạo môi trường lập trình ảo “venv” cho ngôn ngữ Python phiên bản hiện dùng Các thư viện sử dụng liên quan đều được cài trong môi trường này

Trang 3

Hình 2 – Môi trường lập trình ảo Python

<ND2>: Mô tả về quá trình tạo dữ liệu huấn luyện

Viết file “gesture_data.py” với mục đích tạo dữ liệu huấn luyện như sau:

Tạo thư mục “data” chứa thư mục “train” và “test”: Thực hiện

kiểm tra xem đã tồn tại thưc mục “data” hay chưa, nếu đã tồn tại in ra màn hình thông báo “The directory containing the data already exists” Nếu chưa tồn tại, tiến hành tạo thư mục “data”, bên trong tạo 2 thư mục con “train” và “test” Bên trong mỗi thư mục con tạo 10 thư mục chứa ảnh cho huấn luyện mô hình Kết quả thu được như hình dưới

Trang 4

Hình 3 – Tạo các thư mục chứa dữ liệu huấn luyện

Trang 5

Hình 4 – Thư mục chưa dữ liệu huấn luyện Thu thập hình ảnh ký hiệu tay của từng số đếm (từ 1 đến 10) bằng camera máy tính, lưu hình ảnh thu được vào thư mục cùng tên tương ứng: Thiết kế vòng lặp thu thập dữ liệu cho tập [“train”, “test”], với mỗi tập thực hiện vòng lặp thu thập dữ liệu cho từng folder từ 1 đến 10 của mỗi tập Thu thập 300 ảnh với mỗi ký hiệu đối với tập “train” và 100 ảnh đối với tập “test”

Hình 5 – Vòng lặp thu thập dữ liệu Đầu tiên cần xác định nền (back ground) của ảnh, qua đó giúp máy tính nhận dạng được hình ảnh tay khi đưa vào Xác định nền của ảnh

trong 60 frame đầu tiên Việc xác định nền chỉ cần làm 1 lần duy nhất

trong vòng lặp lấy ảnh cho số 1 của tập “train” Đối với các lần tiếp theo

sẽ lấy 60 frame đó là thời gian nghỉ để chuẩn bị cho việc thu thập số tiếp theo

Trang 6

Hình 6 – Giao diện nhận dạng nền Việc xác nhận nền là cơ sở để thu thập ảnh, giúp máy tính tính toán được hình ảnh thu được với mỗi frame khi đưa tay vào nhận diện Cần giữ máy ảnh cố định trong suốt quá trình thu thập dữ liệu

File “gesture_data.py” được thiết kế thu thập toàn bộ dữ liệu

“train”, “test” cho 10 số trong một lần chạy duy nhất, có 1 khoảng nghỉ

60 frame cho mỗi chuyển đổi giữa các số để người thực hiện có thời gian định hình ký hiệu tay

Trang 7

Hình 7 – Thu thập dữ liệu Trong quá trình thu thập dữ liệu cần điều kiện đủ sáng, hình ảnh thu được sẽ sắc nét hơn

<ND3>: Mô tả quá trình huấn luyện

Viết file “gesture_training.py” với mục đích huấn luyện mô hình

như sau:

Hình ảnh đưa vào huấn luyện được resize về kích thước 64x64, chia mỗi bath gồm 10 ảnh

Mô hình học sâu mạng nơ-ron tổ hợp tích chập được xây dựng như sau:

Trang 8

Hình 8 – Xây dựng kiến trúc mô hình học sâu

Trang 9

Hình 9 – Kiến trúc mô hình học sâu

Do việc thu thập lại data không được tối ưu, nên sử dụng model cũng không đạt được Accyracy cao, vậy nên em đã viết lại kiến trúc mô hình học sâu như trên Mô hình được xây dựng theo ý tưởng của mô hình VGG16, 2 lớp Conv2D + 1 lớp Pooling Do hạn chế cấu hình máy

Trang 10

tính còn yếu, không đáp ứng đủ nhu cầu training model với lượng layer

cao và các kỹ thuật khác như áp dụng Batch Normalization, Skip

Connection,

Huấn luyện mô hình trong khoảng 10 phút đạt kết quả như sau:

Hình 10 – Đồ thị hàm loss và hàm accuracy

Trang 11

Hình 11 – Confusion matrix

Hình 12 – Quá trình huấn luyện Trong quá trình huấn luyện mô hình, thông số quan trọng nhất cần

quan sát là loss, val_loss, accuracy, val_accuracy và lr Learning rate sẽ

thay đổi nhằm mục đích mô hình học tốt nhất có thể

Từ hình 12 cho thấy việc ánh xạ của mô hình từ X sang y đã được

Trang 12

thực hiện tốt, nói cách khác model đã có thể hiểu được các ký hiệu tay

có trong tập “train” ứng với con số này đang được thể hiện Tuy nhiên val_accuracy hay chính là Accuracy của tập “test” chưa được cao Điều này sẽ tiếp tục được thảo luận trong phần tiếp theo

<ND4>: Mô tả quá trình chạy mô hình đã được huấn luyện (chạy chương trình nào, mô hình đã được huấn luyện được lưu vào tệp tin có tên là gì)

Viết file “gesture_model.py” với mục đích sử dụng mô hình đã được huấn

luyện vào sử dụng thực tế như sau:

Mô hình đã được huấn luyện được lưu vào tệp tin có tên là

“BTL_CNN_model.h5”

<ND5>: Viết những nhận xét của riêng bạn về quá trình huấn luyện mô hình Máy Học Tập (viết nếu bạn huấn luyện được mô hình, ngược lại không cần viết)

Để mô hình hoạt động tốt việc tạo dữ liệu là vô cùng quan trọng

Dữ liệu có đúng, chính xác, đa dạng thì mô hình mới có thể học tập và thực hành chính xác được

Trong quá trình huấn luyện mô hình, giới hạn phần cứng ảnh

hưởng nhiều đến việc viết mô hình học sâu, cần sử dụng GPU với dung lượng bộ nhớ cao giúp chạy được mô hình lớn, tốc độ cao, cải thiện

được kết quả bài toán

Nhìn chung mô hình được huấn luyện đã nhận diện được ký hiệu tay cho các con số, tuy nhiên mô hình dễ nhận diện nhầm các số khi đưa tay không đúng góc nhìn của camera Điều này lý giải do lượng dữ liệu đưa vào học chưa được tường minh, cử chỉ tay khi tạo dữ liệu chưa được dứt khoát, dễ gây hiểu nhầm, đồng thời dữ liệu chưa được phái sinh như lật, xoay, thu phóng kích thước để là đa dạng dữ liệu

Dựa vào các hình 10 11 và 12 có thể nhận thấy mô hình học tập chưa tốt Biện minh cho kết quả này có các lý do như sau:

- Dữ liệu chuẩn bị chưa tốt, số lượng ít, chưa đa dạng

- Mô hình học tập thiết kế đơn giản, số lượng tham số, lớp chưa đảm bảo, chưa áp dụng các kỹ thuật tiên tiến

<ND6>: Tìm hiểu về mạng nơ-ron tích chập

Mô hình đã được huấn luyện theo dữ liệu tự thu thập và mô hình tự

Trang 13

thiết kế

<ND7>: Trực quan hóa sơ đồ mạng nơ-ron tổ hợp tích chập

Hình 13 – Xây dựng kiến trúc mạng nơ-ron tổ hợp tích chập

Hình 14 – Sơ đồ mạng nơ-ron tổ hợp tích chập Filers = [32, 64] thể hiện ở lớp Conv2D đầu tiên xuất hiện có filter = 32, lần tiếp theo xuất hiện có filter = 64 Tương tự với các

ký hiệu khác

Tham số:

kernel_size(3, 3) – là kích thước của kernel hình vuông 3 x3

trong phép toán tích chập ảnh Kernel trượt lần lượt theo bước nhảy strides từ trái qua phải, từ trên xuống dưới và thực hiện phép tích chập với ảnh như hình 14 Việc lấy size của kernel thích hợp với mục tiêu của lớp và bài toán Tuy nhiên kích thức của kernel phải là

số lẻ để kernel có tâm, việc tích toán tránh phát sinh các vấn đề khác

Trang 14

Hình 15 – Phép tích chập của lớp Conv2D

activation=’relu’ – là 1 hàm kích hoạt f(x) =max(0, x) Có

nhiều hàm kích hoạt khác nhau, mỗi hàm có một ưu điểm nhược điểm riêng Từ lâu ta đã biết các hàm như Sigmoid, Sofmax, Tanh… Hàm ReLU gần đây được sử dụng phổ biến khi huấn luyện các mạng nơ-ron ReLU đơn giản lọc các giá trị < 0 Nhìn vào công thức chúng

ta dễ dàng hiểu được cách hoạt động của nó Một số ưu điểm khá vượt trội của nó so với sigmoid và tanh:

(+) Tốc độ hội tụ nhanh hơn hẳn ReLU có tốc độ hội tụ nhanh gấp 6 lần Tanh Điều này có thể do ReLU không bị bão hoà ở 2 đầu như Sigmoid và Tanh

(+) Tính toán nhanh hơn Tanh và Sigmoid sử dụng hàm exp

và công thức phức tạp hơn ReLU rất nhiều do vậy sẽ tốn nhiều chi phí hơn để tính toán

(-) Tuy nhiên ReLU cũng có một nhược điểm: Với các node

có giá trị nhỏ hơn 0, qua ReLU activation sẽ thành 0, hiện tượng đấy gọi là “Dying ReLU“ Nếu các node bị chuyển thành 0 thì sẽ không

có ý nghĩa với bước linear activation ở lớp tiếp theo và các hệ số tương ứng từ node đấy cũng không được cập nhật với gradient descent Từ đó Leaky ReLU ra đời

(-) Khi learning rate lớn, các trọng số (weights) có thể thay đổi theo cách làm tất cả nơ-ron dừng việc cập nhật

Trang 15

Hình 16 – Đồ thị hàm ReLU

pool_size(2, 2) – là kích thước của kernel hình vuông cạnh 2x2

khi thược hiện phép pooling Khi kernel di chuyển theo stride sẽ lấy toàn bộ các giá trị nằm trong phạm phi kích thước của nó và thực hiện phép pooling tương ứng (max, min, aveg) Như hình dưới là pooling_size(2,2)

Hình 17 - Pooling

strides=2 – là bước nhảy của kernel như hình 16 Kernel di

chuyển qua 2 pixel 1 lần nhảy từ trái qua phải xong từ trên xuống dưới

Sequential() của Keras – là mô hình tuần tự là đơn giản nhất

Trang 16

cho thiết kết model học sâu Nó được gọi là “sequential” vì nó liên quan đến 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

Theo hình 13 là một mô hình tuần tự Mô hình tuần tự rất dễ

sử dụng vì có thể tiếp tục gọi model.add() cho đến khi đã thêm tất

tham khảo qua trang về API chính thức của Keras

Để thiết kết một mô hình Sequential() của Keras cần khai báo tên của model, sau đó input , các lớp layer và sau cùng là output Người dùng có thể tùy biết thiết kế model theo ý thích, miễn sao đảm bảo được shape của model, kích thước input phải đủ lớn để có thể tăng chiều sâu theo tham số strides sử dụng Cần xác định mục đích bài toán để lựa chọn activation hợp lý tại output

Sau đây là một số API phổ biến được sử dụng trong mô hình Sequential của Keras

Convolution layers:,

Conv1D layer, Conv2D layer, Conv3D layer

DepthwiseConv2D layer

Conv3DTranspose layer

Optimizers: SGD, RMSprop, Adam, Adadelta, Adagrad, Adamax,

Nadam, Ftrl

Losses: Probabilistic losses, Regression losses, Hinge losses for

"maximum-margin" classification

Và nhiều API khác nữa, cần đọc và tuân thủ các cú pháp của Keras đưa ra (https://keras.io/api/)

Ngày đăng: 12/07/2022, 06:20

HÌNH ẢNH LIÊN QUAN

XÂY DỰNG MƠ HÌNH MÁY HỌC TẬP         Cán bộ giảng dạy                           Sinh viên thực hiện  - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
n bộ giảng dạy Sinh viên thực hiện (Trang 1)
Hình 1– Bảng số đếm bằng tay - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
Hình 1 – Bảng số đếm bằng tay (Trang 2)
Hình 2– Mơi trường lập trình ảo Python - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
Hình 2 – Mơi trường lập trình ảo Python (Trang 3)
Hình 3– Tạo các thư mục chứa dữ liệu huấn luyện - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
Hình 3 – Tạo các thư mục chứa dữ liệu huấn luyện (Trang 4)
Hình 4– Thư mục chưa dữ liệu huấn luyện - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
Hình 4 – Thư mục chưa dữ liệu huấn luyện (Trang 5)
Hình 6– Giao diện nhận dạng nền - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
Hình 6 – Giao diện nhận dạng nền (Trang 6)
Hình 7– Thu thập dữ liệu - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
Hình 7 – Thu thập dữ liệu (Trang 7)
Hình 8– Xây dựng kiến trúc mơ hình học sâu - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
Hình 8 – Xây dựng kiến trúc mơ hình học sâu (Trang 8)
Huấn luyện mơ hình trong khoảng 10 phút đạt kết quả như sau: - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
u ấn luyện mơ hình trong khoảng 10 phút đạt kết quả như sau: (Trang 10)
Hình 11 – Confusion matrix - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
Hình 11 – Confusion matrix (Trang 11)
Hình 13 – Xây dựng kiến trúc mạng nơ-ron tổ hợp tích chập - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
Hình 13 – Xây dựng kiến trúc mạng nơ-ron tổ hợp tích chập (Trang 13)
Hình 16 – Đồ thị hàm ReLU - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
Hình 16 – Đồ thị hàm ReLU (Trang 15)
pool_size(2, 2) – là kích thước của kernel hình vng cạnh 2x2 - BÀI tập lớn môn TRÍ TUỆ NHÂN tạo – 7080122 02 đề tài xây DỰNG mô HÌNH máy học tập
pool _size(2, 2) – là kích thước của kernel hình vng cạnh 2x2 (Trang 15)

TỪ KHÓA LIÊN QUAN

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

w