TIỂU LUẬN môn học TRÍ TUỆ NHÂN tạo đề tài nhận diện biển báo giao thông

24 15 0
TIỂU LUẬN môn học TRÍ TUỆ NHÂN tạo đề tài nhận diện biển báo giao thông

Đ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

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 SINH VIÊN: NGUYỄN VĂN MỸ LỚP: K54KMT.01 GIÁO VIÊN HƯỚNG DẪN: NGUYỄN TUẤN LINH THÁI NGUYÊN -2022 TRƯỜNG ĐHK KHOA ĐIỆN TỬ TIỂU LUẬN MƠ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ý ghi rõ họ tên) 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ý ghi rõ họ tên) MỤC LỤC I GIỚI THIỆU ĐỀ TÀI Mô tả yêu cầu toán: Dữ liệu sử dụng để huấn luyện mơ hình: Thuật toán sử dụng: II III IV PHÂN TÍCH VÀ TIỀN XỬ LÝ DỮ LIỆU Đọc liệu từ thư mục GTSRB: THUẬT TOÁN 10 Thuật toán CNN: 10 CÀI ĐẶT VÀ KIỂM THỬ 12 Các module chương trình: Huấn luyện (train), thẩm định (validation) kiểm thử (test) 12 V Cài đặt giao diện chương trình (Winform) : 14 KẾT LUẬN 20 Kết đạt được: 20 Hướng phát triển: 20 TÀI LIỆU THAM KHẢO 21 LỜI NĨI ĐẦU Hệ thống biển báo giao thơng giữ vị trí quan trọng việc điều khiển giao thơng Cùng với CSGT đè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 tồn, giúp phương tiện tham gia giao thông lưu thông, lại tránh ùn tắc hạn chế tai nạn Nhận dạng biển báo công nghệ ứng dụng rộng rãi đời sống hàng ngày người hệ thống giám sát, quản lý vào ra, tìm kiếm tên biển báo,… có nhiều phương pháp nhận dạng biển báo để nâng cao hiệu suất nhiên dù hay nhiều phương pháp vấp phải thử thách độ sáng, hướng nghiên cứu, kích thước ảnh, hay ảnh hưởng tham số môi trường Cùng với phát triển xã hội, vấn đề an ninh, bảo mật yêu cầu khắt khe quốc gia giới Các hệ thống nhận dạng người, đồ vật,… đời phát triển với độ tin cậy ngày cao Với cách tiếp cận đối tượng nhận dạng theo phương pháp này, thu thập nhiều thơng tin từ đối tượng mà không cần tác động nhiều đến đối tượng đảm bảo tính xác, an tồn, thuận tiện Do em đị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 I GIỚI THIỆU ĐỀ TÀI Mô tả yêu cầu toán: - Đầu vào ảnh chụp từ biển báo giao thông đầu tên tương ứng biển báo - Số lượng biển báo giao thông cố định toán phân biệt nên coi toán phân loại ảnh, với số lớp cần phân loại số lượng loại biển báo giao thơng cần xác định - Hình ảnh biển báo khác dễ dàng phân biệt mắt thường nên liệu phân lớp đơn giản nhập nhằng - Chúng ta cần mơ hình deep learning đơn giản xử lý việc Dữ liệu sử dụng để huấn luyện mơ hình: - Bộ liệu sử dụng bài: liệu gồm biển báo đánh nhãn lưu thông tin file csv Đây liệu biển báo giao thông Đức, gồm 42 loại biển báo khác https://www.kaggle.com/datasets/meowmeowmeowmeowmeow/gtsrb-germantraffic-sign 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ơ CNN:  Một họ mạng nơ-ron ưu việt thiết kế xác cho mục đích Các kiến trúc dựa CNN xuất ngóc ngách lĩnh vực thị giác máy tính, trở thành kiến trúc chủ đạo mà ngày phát triển ứng dụng thương mại hay tham gia thi liên quan tới nhận dạng ảnh, phát đối tượng, hay phân vùng theo ngữ cảnh mà khơng xây móng dựa phương pháp  Ràng buộc Perceptron Đa tầng : - Cách chọn tham số cho CNN:  Số convolution layer: nhiều convolution layer performance cải thiện Sau khoảng layer, tác động giảm cách đáng kể  Filter size: thường filter theo size 5×5 3×3  Pooling size: thường 2×2 4×4 cho ảnh đầu vào lớn  Cách cuối thực nhiều lần việc train test để chọn param tốt II PHÂN TÍCH VÀ TIỀN XỬ LÝ DỮ LIỆU Đọc liệu từ thư mục GTSRB: - Thư mục train có chưa 43 thư mục thư mục đại diện cho lớp khác đánh số thứ tự từ đến 42 sử dụng module OS ta lặp lại tất lớp để kết nối hình ảnh với nhãn tương ứng chúng - Thư viện PIL sử dụng để chuyển hình ảnh thành mảng import numpy as np import pandas as pd import matplotlib.pyplot as plt import cv2 import tensorflow as tf from PIL import Image import os from sklearn.model_selection import train_test_split from keras.utils import to_categorical from keras.models import Sequential, load_model from keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout data = [] labels = [] classes = 43 cur_path = os.getcwd() #Retrieving the images and their labels for i in range(classes): path = os.path.join(cur_path,'train',str(i)) images = os.listdir(path) for a 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(i) except: print("Error loading image") #Converting lists into numpy arrays data = np.array(data) labels = np.array(labels)  Sau ta lưu tất hình ảnh nhãn chúng vào lists data labels  Chúng ta cần chuyển lists thành numpy array để làm đầu vào cho model  Kích thước liệu (39209, 30, 30, 3), có nghĩa có 39209 hình ảnh, ảnh có kích thước 30x30 pixel, số cuối thể liệu hình ảnh màu (giá trị RGB)  Sử dụng phương thức train_test_split () sklearn để phân chia liệu thành train set test set  Sử dụng phương thức to_categorical keras.utils để xử lý nhãn y_train y_test one-hot encoding III THUẬT TỐN Thuật tốn CNN: - Để phân loại hình ảnh thành danh mục tương ứng, xây dựng mơ hình CNN (Convolutional Neural Network) CNN mơ hình tốt cho mục đích phân loại hình ảnh - Kiến trúc mơ hình CNN sau:  Conv2D layer (filter=32, kernel_size=(5,5), activation=”relu”)  MaxPool2D layer ( pool_size=(2,2))  Dropout layer (rate=0.25)  Conv2D layer (filter=64, kernel_size=(3,3), activation=”relu”)  MaxPool2D layer ( pool_size=(2,2))      Dropout layer (rate=0.25) Flatten layer to squeeze the layers into dimension Dense Fully connected layer (256 nodes, activation=”relu”) Dropout layer (rate=0.5) Dense layer (43 nodes, activation=”softmax”) -Model cần ý:  Model có input size 64x64x3, nghĩa ảnh đầu vào phải resize 64×64  Model có output = 43 – 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 liệu ảnh đầu vào  Lớp tích chập : thực tích chập từ lớp trước với số lượng lọc tạo ngõ  Lớp gộp : tác dụng làm giảm số lượng phần tử feature app  Lớp kết nối đầy đủ : lớp cuối mạng CNN có kiến trúc giống mạng nơ ron truyền thống IV CÀI ĐẶT VÀ KIỂM THỬ Các module chương trình: Huấn luyện (train), thẩm định (validation) kiểm thử (test) - Sau xây dựng kiến trúc mơ hình, huấn luyện mơ hình cách sử dụng model.fit () Chúng ta thử với batch size 32 64 nhận thấy mơ hình hoạt động tốt với batch size 64 sau 15 epochs độ xác ổn định - Mơ hình đạt đến độ xác ~ 95% tập training set Sử dụng matplotlib để vẽ biểu đồ tương quan độ xác mát #vẽ đồ thị độ xác plt.figure(0) plt.plot(history.history['accuracy'], label='training accuracy') plt.plot(history.history['val_accuracy'], label='val accuracy') plt.title('Accuracy') plt.xlabel('epochs') plt.ylabel('accuracy') plt.legend() plt.show() plt.figure(1) plt.plot(history.history['loss'], label='training loss') plt.plot(history.history['val_loss'], label='val loss') plt.title('Loss') plt.xlabel('epochs') plt.ylabel('loss') plt.legend() plt.show() - Kiểm tra mơ hình với test set: Tập liệu có chứa thư mục test file test.csv Chúng ta cần phải trích xuất hình ảnh nhãn tương ứng cách sử dụng pandas Sau đó, để dự đốn mơ hình, phải thay đổi kích thước hình ảnh thành 30 × 30 pixel tạo mảng numpy chứa tất liệu hình ảnh Sử dụng precision_score sklearn.metrics để dự đốn nhãn test Có thể thấy ta đạt độ xác 95% mơ hình #testing accuracy on test dataset from sklearn.metrics import accuracy_score 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)) Cài đặt giao diện chương trình (Winform) : - Xây dựng giao diện người dùng Tkinter Tkinter công cụ GUI thư viện python tiêu chuẩn Tạo tệp gui.py thư mục 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 import numpy as np import pandas as pd import matplotlib.pyplot as plt import tensorflow as tf from PIL import Image import os 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)', 5: 'Speed limit (80km/h)', 6: 'End of speed limit (80km/h)', 7: 'Speed limit (100km/h)', 8: 'Speed limit (120km/h)', 9: 'No passing', 10: 'No passing for vehicles over 3.5 metric tons', 11: 'Right-of-way at the next intersection', 12: 'Priority road', 13: 'Yield', 14: 'Stop', 15: 'No vehicles', 16: 'Vehicles over 3.5 metric tons prohibited', 17: 'No entry', 18: 'General caution', 19: 'Dangerous curve to the left', 20: 'Dangerous curve to the right', 21: 'Double curve', 22: 'Bumpy road', 23: 'Slippery road', 24: 'Road narrows on the right', 25: 'Road work', 26: 'Traffic signals', 27: 'Pedestrians', 28: 'Children crossing', 29: 'Bicycles crossing', 30: 'Beware of ice/snow', 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', 38: 'Keep right', 39: 'Keep left', 40: 'Roundabout mandatory', 41: 'End of no passing', 42: 'End of no passing by vehicles over 3.5 metric tons'} #initialise GUI top = Tk() top.geometry('800x600') 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): global label_packed image = Image.open(file_path) image = image.resize((30, 30)) image = np.expand_dims(image, axis=0) 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=5) 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) sign_image.image = im label.configure(text='') show_classify_button(file_path) except: pass upload=Button(top, text="TẢI ẢNH LÊN", command=upload_image, padx=10,pady=5) upload.configure(background='#364156', foreground='white',font=('arial', 10, )) 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 training từ trước "traffic_classifier.h5" Và sau đó, xây dựng GUI để upload hình ảnh nút để gọi hàm classify() Hàm classify() chuyển đổi hình ảnh thành kích thước (1, 30, 30, 3) Sau đó, dự đốn lớp, model.predict_classes(image) trả cho số khoảng (042) đại diện cho lớp mà thuộc - Output: V KẾT LUẬN Kết đạt được: - Với project em học cách xây dựng mơ hình nhận diện biển báo giao thơng với độ xác 95% Hướng phát triển: - Cải thiện độ xác cao - Nhận diện thêm biển báo khác nước nước - Cải thiện giao diện chu TÀI LIỆU THAM KHẢO https://www.kaggle.com/datasets/meowmeowmeowmeowmeow/gtsrbgerman-traffic-sign https://tek4.vn/nhan-dien-bien-bao-giao-thong-bang-cnn-keras ... đỡ, hướng dẫn em hoàn thành đề tài I GIỚI THIỆU ĐỀ TÀI Mơ tả u cầu tốn: - Đầu vào ảnh chụp từ biển báo giao thông đầu tên tương ứng biển báo - Số lượng biển báo giao thơng cố định tốn phân biệt... biển báo giao thơng giữ vị trí quan trọng việc điều khiển giao thông Cùng với CSGT đè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 tồn, giúp phương tiện tham gia giao. .. 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ý ghi rõ họ tên) NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG

Ngày đăng: 16/12/2022, 03:21

Tài liệu cùng người dùng

Tài liệu liên quan