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

TIỂU LUẬN MÔN HỌC TRÍ TUỆ NHÂN TẠO

22 23 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

Tiêu đề Nhận diện biển báo giao thông
Tác giả Nguyễn Văn Mỹ
Người hướng dẫn Nguyễn Tuấn Linh, Giáo viên hướng dẫn
Trường học Trường Đại Học Kỹ Thuật Công Nghiệp Thái Nguyên
Chuyên ngành Trí Tuệ Nhân Tạo
Thể loại Tiểu luận môn học
Năm xuất bản 2022
Thành phố Thái Nguyên
Định dạng
Số trang 22
Dung lượng 555,79 KB

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

Nội dung

Nhận dạng biển báo là một công nghệ được ứng dụng rộng rãi trong đời sống hàngngày của con người như các hệ thống giám sát, quản lý vào ra, tìm kiếm tên biển báo,… có rất nhiều phương ph

Trang 1

TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP THÁI NGUYÊN

KHOA ĐIỆN TỬ

BỘ MÔN: TIN HỌC CÔNG NGHIỆP

TIỂU LUẬN

MÔN HỌC

TRÍ TUỆ NHÂN TẠO

LỚP: K54KMT.01

THÁI NGUYÊN -2022

Trang 2

TRƯỜNG ĐHKTCN CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM

TIỂU LUẬNMÔN HỌC: TRÍ TUỆ NHÂN TẠO

BỘ MÔN : TIN HỌC CÔNG NGHIỆP

Sinh viên: NGUYỄN VĂN MỸ

Lớp: K54KMT.01……… Ngành: Kỹ thuật máy tính Giáo viên hướng dẫn: NGUYỄN TUẤN LINH

Ngày giao đề: 01/05/2022……… Ngày hoàn thành: 13/06/2022 Tên đề tài: Nhận diện biển báo giao thông

GIÁO VIÊN HƯỚNG DẪN

(Ký và ghi rõ họ tên)

Trang 3

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

Thái Nguyên, ngày , tháng…, năm…

GIÁO VIÊN HƯỚNG DẪN

(Ký và ghi rõ họ tên)

Trang 4

MỤC LỤC

I GIỚI THIỆU ĐỀ TÀI 6

1 Mô tả yêu cầu bài toán: 6

2 Dữ liệu sử dụng để huấn luyện mô hình: 6

3 Thuật toán sử dụng: 7

II PHÂN TÍCH VÀ TIỀN XỬ LÝ DỮ LIỆU 8

1 Đọc dữ liệu từ thư mục GTSRB: 8

III THUẬT TOÁN 10

1 Thuật toán CNN: 10

IV CÀI ĐẶT VÀ KIỂM THỬ 12

1 Các module chương trình: Huấn luyện (train), thẩm định (validation) và kiểm thử (test) 12

2 Cài đặt giao diện chương trình (Winform) : 14

V KẾT LUẬN 20

1. Kết quả đạt được: 20

2. Hướng phát triển: 20

TÀI LIỆU THAM KHẢO 21

Trang 5

LỜI NÓI ĐẦU

Hệ thống biển báo giao thông giữ một vị trí khá quan trọng trong việc điều khiểngiao thông Cùng với CSGT và đèn tín hiệu giao thông, hệ thống biển báo giao thông đãtạo nên tính trật tự,an toàn, giúp các phương tiện tham gia giao thông được lưu thông, đilại tránh ùn tắc và hạn chế tai nạn

Nhận dạng biển báo là một công nghệ được ứng dụng rộng rãi trong đời sống hàngngày của con người như các hệ thống giám sát, quản lý vào ra, tìm kiếm tên biển báo,…

có rất nhiều phương pháp nhận dạng biển báo để nâng cao hiệu suất tuy nhiên dù ít haynhiều phương pháp này đang vấp phải những thử thách về độ sáng, hướng nghiên cứu,

kích thước ảnh, hay ảnh hưởng của tham số môi trường.

Cùng với sự phát triển của xã hội, vấn đề an ninh, bảo mật đang được yêu cầu khắtkhe tại mọi quốc gia trên thế giới Các hệ thống nhận dạng con người, đồ vật,… được rađời và phát triển với độ tin cậy ngày càng cao Với cách tiếp cận đối tượng nhận dạngtheo phương pháp này, chúng ta có thể thu thập được nhiều thông tin từ đối tượng hơn

mà không cần tác động nhiều đến đối tượng cũng vẫn đảm bảo tính chính xác, an toàn,thuận tiện

Do vậy em đã quyết định lựa chọn đề tài “ Nhận diện biển báo giao thông “.

Em xin chân thành cảm ơn thầy Nguyễn Tuấn Linh đã giúp đỡ, hướng dẫn em

hoàn thành đề tài này

Trang 6

I GIỚI THIỆU ĐỀ TÀI

1 Mô tả yêu cầu bài toán:

- Đầu vào là 1 ảnh chụp được từ biển báo giao thông và đầu ra là tên tươngứng của biển báo

- Số lượng biển báo giao thông là cố định và đây là bài toán phân biệt nênchúng ta sẽ coi đây là bài toán phân loại ảnh, với số lớp cần phân loại chính

là số lượng loại biển báo giao thông cần xác định

- Hình ảnh các biển báo rất khác nhau và có thể dễ dàng phân biệt bằng mắtthường nên dữ liệu phân lớp khá đơn giản và ít sự nhập nhằng

- Chúng ta sẽ cần một mô hình deep learning đơn giản là có thể xử lý đượcviệc này

2 Dữ liệu sử dụng để huấn luyện mô hình:

- Bộ dữ liệu sử dụng của bài: dữ liệu gồm các biển báo đã được đánh nhãn

và lưu các thông tin trong file csv Đây là bộ dữ liệu biển báo giao thôngcủa Đức, gồm 42 loại biển báo khác nhau

traffic-sign

Trang 7

https://www.kaggle.com/datasets/meowmeowmeowmeowmeow/gtsrb-german-3 Thuật toán sử dụng:

- Lựa chọn thuật toán “Mạng nơron tích chập - Convolutional Neural

Network – CNN”

- Giới thiệu sơ bộ về CNN:

 Một họ các mạng nơ-ron ưu việt được thiết kế chính xác cho mục đích trên Các kiến trúc dựa trên CNN hiện nay xuất hiện trong mọi ngóc ngách của lĩnh vực thị giác máy tính, và đã trở thành kiến trúc chủ đạo mà hiếm ai ngày nay phát triển các ứng dụng thương mại hay tham gia một cuộc thi nào đó liên quan tới nhận dạng ảnh, phát hiện đối tượng, hay phân vùng theo ngữ cảnh mà không xây nền móng dựa trên phương pháp này.

 Ràng buộc Perceptron Đa tầng :

Trang 8

- Cách chọn tham số cho CNN:

 Số các convolution layer: càng nhiều các convolution layer thìperformance càng được cải thiện Sau khoảng 3 hoặc 4 layer, cáctác động được giảm một cách đáng kể

 Filter size: thường filter theo size 5×5 hoặc 3×3

 Pooling size: thường là 2×2 hoặc 4×4 cho ảnh đầu vào lớn

 Cách cuối cùng là thực hiện nhiều lần việc train test để chọn rađược param tốt nhất

II PHÂN TÍCH VÀ TIỀN XỬ LÝ DỮ LIỆU

1 Đọc dữ liệu từ thư mục GTSRB:

- Thư mục train có chưa 43 thư mục con mỗi thư mục đại diện cho một lớpkhác nhau được đánh số thứ tự từ 0 đến 42 sử dụng module OS ta sẽ lặp lạitrên tất cả các lớp để kết nối các hình ảnh với nhãn tương ứng của chúng

- Thư viện PIL được sử dụng để chuyển hình ảnh thành một mảng

from sklearn model_selection import train_test_split

from keras utils import to_categorical

from keras models import Sequential, load_model

Trang 9

from keras layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout

data = []

labels = []

classes = 43

cur_path = os getcwd ()

#Retrieving the images and their labels

for in range ( classes ):

path = os path join ( cur_path , 'train' , str ( ))

images = os listdir ( path )

for in images :

try:

image = Image open ( path + ' \\ ' + a

image = image resize (( 30 , 30 ))

image = np array ( image )

#sim = Image.fromarray(image)

data append ( image )

labels append ( )

except:

print ( "Error loading image" )

#Converting lists into numpy arrays

data = np array ( data )

labels = np array ( labels )

 Sau đó ta sẽ lưu tất cả các hình ảnh và nhãn của chúng vào listsdata và labels

 Chúng ta cần chuyển các lists thành các numpy array để làm đầuvào cho model

 Kích thước của dữ liệu là (39209, 30, 30, 3), có nghĩa là có

39209 hình ảnh, mỗi ảnh có kích thước 30x30 pixel, số 3 ở cuốithể hiện dữ liệu là hình ảnh màu (giá trị RGB)

 Sử dụng phương thức train_test_split () của sklearn để phân chia

bộ dữ liệu thành train set và test set

 Sử dụng phương thức to_categorical của keras.utils để xử lý cácnhãn của y_train và y_test bằng one-hot encoding

Trang 10

III THUẬT TOÁN

1 Thuật toán CNN:

- Để phân loại các hình ảnh thành các danh mục tương ứng, chúng ta sẽ xây

dựng mô hình CNN (Convolutional Neural Network) CNN là mô hình tốtnhất cho mục đích phân loại hình ảnh

- Kiến trúc mô hình CNN của chúng ta như sau:

 2 Conv2D layer (filter=32, kernel_size=(5,5), activation=”relu”)

 MaxPool2D layer ( pool_size=(2,2))

 Dropout layer (rate=0.25)

 2 Conv2D layer (filter=64, kernel_size=(3,3), activation=”relu”)

 MaxPool2D layer ( pool_size=(2,2))

Trang 11

 Dropout layer (rate=0.25)

 Flatten layer to squeeze the layers into 1 dimension

 Dense Fully connected layer (256 nodes, activation=”relu”)

 Dropout layer (rate=0.5)

 Dense layer (43 nodes, activation=”softmax”)

- Model này cần chú ý:

 Model có input size là 64x64x3, nghĩa là các ảnh đầu vào đều phải resize về 64×64

 Model có output = 43 – là số class biển báo ta có

 Model có sử dụng Dropout để tránh Overfit

- Kiến trúc mạng CNN:

 Lớp ngõ vào: lưu dữ liệu ảnh đầu vào

 Lớp tích chập : thực hiện tích chập từ lớp trước với số lượng các

bộ lọc tạo ra các ngõ ra

 Lớp gộp : tác dụng làm giảm số lượng phần tử trong feature app

 Lớp kết nối đầy đủ : lớp cuối cùng trong mạng CNN và nó có kiến trúc giống như mạng nơ ron truyền thống

Trang 12

IV CÀI ĐẶT VÀ KIỂM THỬ

1 Các module chương trình: Huấn luyện (train), thẩm định (validation) và kiểm thử (test).

- Sau khi xây dựng kiến trúc mô hình, chúng ta sẽ huấn luyện mô hình bằngcách sử dụng model.fit () Chúng ta hãy thử với batch size là 32 và 64 nhậnthấy mô hình hoạt động tốt hơn với batch size là 64 và sau 15 epochs độchính xác đã được ổn định

Trang 13

- Mô hình của chúng ta đã đạt đến độ chính xác ~ 95% trên tập training set.

Sử dụng matplotlib để vẽ biểu đồ tương quan giữa độ chính xác và sự mấtmát

#vẽ đồ thị về độ chính xác

plt figure ( )

plt plot ( history history[ 'accuracy' ], label = 'training accuracy' )

plt plot ( history history[ 'val_accuracy' ], label = 'val accuracy' )

plt plot ( history history[ 'loss' ], label = 'training loss' )

plt plot ( history history[ 'val_loss' ], label = 'val loss' )

Trang 14

- Kiểm tra mô hình với test set:

Tập dữ liệu của chúng ta có chứa 1 thư mục test và 1 file test.csv Chúng tacần phải trích xuất hình ảnh và nhãn tương ứng bằng cách sử dụng pandas.Sau đó, để dự đoán mô hình, chúng ta phải thay đổi kích thước hình ảnhthành 30 × 30 pixel và tạo một mảng numpy chứa tất cả dữ liệu hình ảnh

Sử dụng precision_score của sklearn.metrics để dự đoán các nhãn của bộtest Có thể thấy ta đã đạt được độ chính xác là 95% trong mô hình này

#testing accuracy on test dataset

from sklearn.metrics import accuracy_score

Trang 15

y_test = pd.read_csv( 'Test.csv' )

labels = y_test[ "ClassId" ].values

imgs = y_test[ "Path" ].values

data = []

for img in imgs:

image = Image open (img)

image = image.resize(( 30 , 30 ))

data.append(np.array(image))

X_test = np.array(data)

pred = model.predict_classes(X_test)

#Accuracy with the test data

from sklearn.metrics import accuracy_score

print (accuracy_score(labels, pred))

2 Cài đặt giao diện chương trình (Winform) :

- Xây dựng giao diện người dùng bằng Tkinter Tkinter là một bộ công cụGUI trong thư viện python tiêu chuẩn Tạo một tệp mới là gui.py trongcùng thư mục của project

- CODE:

from tkinter import filedialog

from tkinter import *

from PIL import ImageTk , Image

import keras

# load the trained model to classify sign

from keras models import load_model

from sklearn model_selection import train_test_split

model = load_model ( 'E:/AI/VanMy/traffic_classifier_VM.h5' )

#dictionary to label all traffic signs class.

classes = { 0 : 'Speed limit (20km/h)' ,

1 : 'Speed limit (30km/h)' ,

2 : 'Speed limit (50km/h)' ,

3 : 'Speed limit (60km/h)' ,

4 : 'Speed limit (70km/h)' ,

Trang 16

10 : 'No passing for vehicles over 3.5 metric tons' ,

11 : 'Right-of-way at the next intersection' ,

19 : 'Dangerous curve to the left' ,

20 : 'Dangerous curve to the right' ,

31 : 'Wild animals crossing' ,

32 : 'End of all speed and passing limits' ,

33 : 'Turn right ahead' ,

34 : 'Turn left ahead' ,

35 : 'Ahead only' ,

36 : 'Go straight or right' ,

37 : 'Go straight or left' ,

top title ( 'Nhận diện biển báo giao thông' )

top configure ( background = '#CCCCFF' )

label = Label ( top , background = '#CCCCFF' , font =( 'arial' , 15 , 'bold' ))

sign_image = Label ( top )

def classify ( file_path ):

Trang 17

global label_packed

image = Image open ( file_path )

image = image resize (( 30 , 30 ))

image = np expand_dims ( image , axis = )

image = np array ( image )

pred = model predict( image )[ 0

pred = np argmax ( pred )

sign = classes [ pred ]

print ( sign )

label configure ( foreground = '#011638' , text = sign )

def show_classify_button ( file_path ):

classify_b = Button ( top , text = "NHẬN DIỆN" , command = lambda :

classify ( file_path ), padx = 10 , pady = )

classify_b configure ( background = '#364156' ,

foreground = 'white' , font =( 'arial' , 10 , 'bold' ))

classify_b place ( relx = 0.79 , rely = 0.46 )

def upload_image ():

try:

file_path = filedialog askopenfilename ()

uploaded = Image open ( file_path )

uploaded thumbnail ((( top winfo_width ()/ 2.25 ),

( top winfo_height ()/ 2.25 )))

im = ImageTk PhotoImage ( uploaded )

sign_image configure ( image = im )

upload pack ( side = BOTTOM , pady = 50 )

sign_image pack ( side = BOTTOM , expand = True )

label pack ( side = BOTTOM , expand = True )

heading = Label ( top , text = "NHẬN DIỆN BIỂN BÁO GIAO THÔNG" , pady = 20 ,

font =( 'arial' , 20 , 'bold' ))

heading configure ( background = '#CCCCFF' , foreground = '#364156' )

heading pack ()

top mainloop ()

- Trong đoạn code này, trước tiên ta phải import mô hình đã được training từtrước là "traffic_classifier.h5" Và sau đó, xây dựng GUI để upload hình

Trang 18

ảnh và một nút để gọi hàm classify() Hàm classify() chuyển đổi hình ảnhthành kích thước (1, 30, 30, 3) Sau đó, chúng ta dự đoán các lớp,model.predict_classes(image) trả về cho chúng ta một số trong khoảng (0-42) đại diện cho lớp mà nó thuộc về.

- Output:

Trang 21

- Cải thiện độ chính xác cao hơn.

- Nhận diện được thêm các biển báo khác trong nước cũng như nước ngoài

- Cải thiện giao diện chỉn chu hơn

Trang 22

TÀI LIỆU THAM KHẢO

german-traffic-sign

https://www.kaggle.com/datasets/meowmeowmeowmeowmeow/gtsrb-https://tek4.vn/nhan-dien-bien-bao-giao-thong-bang-cnn-keras

Ngày đăng: 07/09/2022, 14:23

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w