BTL Trí Tuệ Nhân Tạo Phân Biệt Chó Mèo

45 321 0
BTL Trí Tuệ Nhân Tạo  Phân Biệt Chó Mèo

Đ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

BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI BÁO CÁO THÍ NGHIỆMTHỰC NGHIỆM HỌC PHẦN TRÍ TUỆ NHÂN TẠO ĐỀ TÀI ỨNG DỤNG THUẬT TOÁN CNN VÀ KERAS VÀO PHÂN BIỆT CHÓ VÀ MÈO Tìm hiểu về thuật toán CNN và Keras

BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI BÁO CÁO THÍ NGHIỆM/THỰC NGHIỆM HỌC PHẦN: TRÍ TUỆ NHÂN TẠO ĐỀ TÀI: ỨNG DỤNG THUẬT TOÁN CNN VÀ KERAS VÀO PHÂN BIỆT CHÓ VÀ MÈO Sinh viên thực hiện: Dương Trung Kiên 2020604160 Đỗ Thành Đạt 202060384 Lớp: 20221IT6043012 Nhóm:24 Người hướng dẫn: Th.S Nguyễn Lan An Hà Nội, 12/2022 Mục Lục LỜI MỞ ĐẦU Chương I Tìm hiểu thuật tốn CNN Giới Thiệu mạng CNN 2 Những lớp mạng CNN 3 Kiến trúc mạng CNN Cách lựa chọn tham số mạng CNN .7 Chương Tìm hiểu thư viện lớn TensorFlow .8 Lịch sử đời TensorFlow Ví dụ TensorFlow đơn giản 14 Các option tải liệu vào TensorFlow .16 Chương Tìm hiểu thư viện Keras 19 Giới thiệu thư viện Keras .19 MNIST Dataset 23 Ứng dụng việc phân loại ảnh 30 Chương Ứng dụng nhận diện chó mèo 30 Giới thiệu dự án 30 Bộ liệu Asirra (Chó Mèo) 31 Các bước xây dựng ứng dụng .31 GUI phân loại chó mèo .39 Bản tóm tắt 41 Tài Liệu Tham Khảo 41 LỜI MỞ ĐẦU Hiện nay, việc ứng dụng trí tuệ nhân tạo vào nhận diện vật quanh ta phổ biến phát triển, đặc biệt thứ thân thuộc, gần gũi với sống người Chính lý mà chúng em định lựa chọn phát triển phần mềm nhận diên cho mèo nâng cấp lên nhận diên nhiều động vật đồ vật khác để làm để tài cho tập lớn mơn trí tuệ nhân tạo Đây tài liệu dùng để nhận diện chó mèo dựa hình ảnh cung cấp Trong game có sử dụng thuật tốn CNN KERAS Tài liệu giúp ta có nhìn tổng qt việc áp dụng thuật toán vào phần mềm phân biệt chó mèo thơng qua hình ảnh cung cấp sẵn Em xin chân thành cảm ơn cô giáo Ths Nguyễn Lan Anh trang bị cho em kiến thức cần thiết qua mơn “Trí tuệ nhân tạo” để hồn thành dự án Tuy nhiên thời gian với trình độ hiểu biết cịn hạn hẹp nên khó tránh khỏi thiếu sót Rất mong nhận đóng góp quý thầy bạn để dự án hồn thiện Xin chân thành cảm ơn! CHƯƠNG 1: Tìm hiểu thuật toán CNN? Giới thiệu mạng CNN CNN từ viết tắt cụm Convolutional Neural Network mạng nơ ron tích chập Đây mơ hình vơ tiên tiến áp dụng nhiều lĩnh vực học sâu Deep learning Mạng CNN cho phép người dùng xây dựng hệ thống phân loại dự đốn với độ xác cực cao Hiện nay, mạng CNN ứng dụng nhiều xử lý ảnh, cụ thể nhận diện đối tượng ảnh Mạng CNN gì? * Convolutional CNN Đây “cửa sổ” sử dụng trượt ma trận nhằm lấy thơng tin xác cần thiết mà chọn đặc trưng (feature) Convolution hay nhân tích chập cách mà lớp Convolutional nhân phần tử ma trận Sliding Window hay kernel dạng ma trận có kích thước nhỏ, sử dụng nhân tích chập với ma trận hình ảnh * Feature CNN Feature đặc trưng, mạng CNN sẽ so sánh dựa vào từng mảnh mảnh gọi feature Thay phải tiến hành khớp ảnh lại với mạng CNN sẽ xác định tương đồng thơng qua tìm kiếm thơ đặc trưng khớp với bằng hai hình ảnh tốt Một feature mộ hình ảnh dạng mini (những mảng chiều nhỏ) Những feature tương ứng với khía cạnh hình ảnh chúng khớp lại với Những lớp bản của mạng CNN gì? Mạng CNN bảo gồm lớp sau: * Convolutional layer Lớp phần quan trọng tồn mạng CNN, có nhiệm vụ thực thi tính tốn Các yếu tố quan trọng lớp Convolutional là: padding, stride, feature map filter map • Mạng CNN sử dụng filter để áp dụng vào vùng ma trận hình ảnh Các filter map ma trận chiều, bên tham số chúng gọi parameters tride tức bạn dịch chuyển filter map theo từng pixel dựa vào giá trị từ trái qua phải • Padding: Thường, giá trị viền xung quanh ma trận hình ảnh sẽ gán giá trị để tiến hành nhân tích chập mà khơng làm giảm kích thước ma trận ảnh ban đầu • Feature map: Biểu diễn kết sau lần feature map quét qua ma trận ảnh đầu vào Sau lần quét lớp Convolutional sẽ tiến hành tính tốn Convolutional layer * Relu Layer Lớp ReLU hàm kích hoạt mạng CNN, gọi activation function Nó có tác dụng mơ nơ ron có tỷ lệ truyền xung qua axon Các hàm activation khác Leaky, Sigmoid, Leaky, Maxout, nhiên nay, hàm ReLU sử dụng phổ biến thông dụng Hàm sử dụng cho yêu cầu huấn luyện mạng nơ ron với ưu điểm bật điển hình hỗ trợ tính tốn nhanh Trong q trình dùng hàm ReLU, bạn cần ý đến việc tùy chỉnh learning rate dead unit Những lớp ReLU dùng sau filter map tính áp dụng ReLU lên giá trị filter map Pooling layer Khi ma trận ảnh đầu vào có kích thước q lớn, lớp Pooling layer sẽ đặt vào lớp Convolutional để làm giảm parameters Hiện, hai loại lớp Pooling sử dụng phổ biến Max pooling Average Pooling Layer * Fully connected layer Đây lớp có nhiệm vụ đưa kết sau hai lớp Convolutional Pooling đả nhận ảnh truyền Khi này, ta sẽ thu model đọc thơng tin ảnh Để liên kế chúng cho nhiều đầu ta sẽ sử dụng Fully connected layer Ngồi ra, lớp có liệu hình ảnh lớp sẽ chuyển chúng thành much chưa phân chia chất lượng để tìm ảnh có chất lượng cao Kiến trúc của mạng CNN gì? Mạng CNN gì? Đó tập hợp Convolutional layer xếp chồng lên nhau, đồng thời mạng sử dụng hàm ReLU Tanh để kích hoạt trọng số node Các lớp sau qua hàm activation sẽ có trọng số node tạo thông tin trừu tượng đến với lớp mạng Mạng CNN có tính kết hợp cà tính bất biến Tức là, đối tượng mà sử dụng chiếu theo góc độ khác sẽ có ảnh hưởng đến độ xác Với dịch chuyển, co giãn hay quay ma trận ảnh lớp Pooling sẽ dùng để hỗ trợ làm bất biến tính chất Chính mà mạng CNN sẽ đưa kết có độ xác tương ứng với từng mơ hình Trong đó, lớp Pooling sẽ có khả tạo tính bất biến với phép dịch chuyển, co giãn quay Cịn tính kết hợp cục sẽ cho thấy cấp độ biểu diễn, liệu từ thấp đến cao với mức trừu twuongj thông qua Convolution từ filter Mạng CNN có lớp liên kết dựa vào chế Convolution Các lớp sẽ kết từ lớp trước đó, mà bạn sẽ có liên kết cục phù hợp Trong trình huấn luyện mạng, CNN sẽ tự học hỏi giá trị thông qua filter layer dựa theo cách thức mà bạn thực Cấu trúc mơ hình mạng CNN thường bao gồm phần bao gồm: • Trường cục bộ/ Local receptive field: Lớp sử dụng để tách lọc liệu, thơng tin hình ảnh để từ lựa chọn vùng có giá trị sử dụng hiệu cao • Trọng số chia sẻ/ Shared weights and bias: Lớp hỗ trợ làm giảm tham số đến mức tối thiểu mạng CNN Trong từng lớp convolution sẽ chứa feature map riêng từng feature sẽ có khả phát vài feature hình ảnh • Lớp tổng hợp/ Pooling layer: Đây lớp cuối sử dụng để làm đơn giản thơng tin output Tức là, sau tính tốn xong quét qua layer mạng pooling layer sẽ dùng để lược bỏ thông tin khơng hữu ích Từ cho kết theo kỳ vọng người dùng Mạng CNN được sử dụng phổ biến Cách lựa chọn tham số cho mạng CNN Để chọn tham số phù hợp cho mạng CNN bạn cần ý đến yếu tố như: filter size, số convolution, pooling size việc train – test • Lớp Convolution: Số lượng lớp nhiều sẽ giúp cải thiện hoạt động chương trình Sử dụng lớp với số lượng lớn khả hạn chế tác động tốt Thông thường, chỉ sau khoảng đến lớp bạn sẽ đạt kết kỳ vọng • Filter size: Kích thước thường chọn ma trận 3ì3 hoc ma trn 5ì5 ã Pooling size: Vi nhng hình ảnh thơng thường, bạn nên chọn ma trận pooling kích thước 2×2 Với ảnh kích thước lớn nờn chn ma trn kớch thc 3ì3 ã Train test: Cần thực train – test nhiều lần parameter tốt 10 Hy vọng rằng chia sẻ trên, bạn sẽ hiểu CNN cấu trúc mạng Để từ áp dụng trình học làm việc với Machine Learning, Deep Learning nói riêng Trí tuệ nhân tạo nói chung CHƯƠNG 2: Tìm hiểu thư viện lớn TensorFlow Tensorflow – Với bùng nổ lĩnh vực Trí Tuệ Nhân Tạo – A.I thập kỷ vừa qua, machine learning deep learning rõ ràng phát triển theo Và ở thời điểm tại, TensorFlow thư viện mã nguồn mở cho machine learning tiếng giới, phát triển bởi nhà nghiên cứu từ Google Việc hỗ trợ mạnh mẽ phép tốn học để tính tốn machine learning deep learning giúp việc tiếp cận tốn trở nên đơn giản, nhanh chóng tiện lợi nhiều Các hàm dựng sẵn thư viện cho từng toán cho phép TensorFlow xây dựng nhiều neural network Nó cịn cho phép bạn tính tốn song song nhiều máy tính khác nhau, chí nhiều CPU, GPU máy hay tạo dataflow graph – đồ thị luồng liệu để dựng nên model Nếu bạn muốn chọn đường nghiệp lĩnh vực A.I này, nắm rõ điều TensorFlow thực quan trọng Được viết bằng C++ thao tác interface bằng Python nên phần performance TensorFlow cực kỳ tốt Đối tượng sử dụng đa dạng khơng kém: từ nhà nghiên cứu, nhà khoa học liệu dĩ nhiên khơng thể thiếu lập trình viên Lịch sử đời TensorFlow Vài năm trước, phải xử lý lượng liệu khổng lồ, deep learning bắt đầu cho thấy hiệu vượt trội so với tất thuật toán machine learning khác Google sớm nhận tiềm nghĩ rằng họ nên sử dụng deep neural network để cải thiện dịch vụ mình, có: – Gmail – Hình ảnh – Google search engine 31 Mong muốn a_6a6 gần cịn giá trị a khác gần nghĩa model dự đoán ảnh đầu vào ảnh số Ta định nghĩa loss function: \displaystyle L = -\sum_{i=1}^{10} y_i * log(\hat{y_i})L=−i=1∑10yi∗log(yi^) Thử đánh giá hàm L Giả sử ảnh số \displaystyle L = - log( \hat{y_6})L=−log(y6^) 32 Nhận xét: • Hàm L giảm dần từ đến • Khi model dự đoán \hat{y_6}y6^ gần 1, tức giá trị dự đốn gần với giá trị thật y_6y6 L nhỏ, xấp xỉ • Khi model dự đốn \hat{y_6}y6^ gần 0, tức giá trị dự đoán ngược lại giá trị thật y_6y6 L lớn => Hàm L nhỏ giá trị model dự đoán gần với giá trị thật lớn model dự đoán sai, hay nói cách khác L nhỏ model dự đoán gần với giá trị thật => Bài toán tìm model trở thành tìm giá trị nhỏ L Hàm loss function định nghĩa keras gọi “categorical_crossentropy“ 33 Ứng dụng của việc phân loại ảnh • Chuẩn đốn ảnh X-ray bệnh nhân có bị ung thư hay khơng • Phân loại, nhận diện chữ, số viết tay => tự động đọc biển số xe, văn • Phân loại biển báo giao thông => hỗ trợ cho tơ tự lái • … Mọi người luyện tập tự xây dựng model cho CIFAR10 dataset bao gồm 50,000 training set 10.000 test set ảnh màu kích thước 32×32 cho 10 thể loại khác (máy bay, tơ, thuyền, chim, chó, mèo, ngựa,…) # Load liệu cifar10 from keras.datasets import cifar10 (x_train, y_train), (x_test, y_test) = cifar10.load_data() Chương 4: Ứng dụng nhận diện chó mèo 1.Giới thiệu ứng dụng Phân loại Cats vs Dogs dự án Deep Learning dành cho người bắt đầu Nếu muốn bắt đầu Hành trình học sâu với Python Keras, bạn phải làm việc với dự án Trong dự án Keras này, sẽ khám phá cách xây dựng đào tạo mạng nơ-ron tích chập để phân loại hình ảnh Mèo Chó 34 Nó cung cấp hàm số cần thiết với cú pháp đơn giản để phân loại , nhận diện vật thông qua ảnh 2.Bộ dữ liệu Asirra(Chó Mèo) Bộ liệu Asirra (nhận dạng hình ảnh lồi động vật để hạn chế quyền truy cập) giới thiệu vào năm 2013 cho thi máy học Bộ liệu bao gồm 25.000 hình ảnh với số lượng nhãn cho chó mèo bằng Bộ dữ liệu: https://www.kaggle.com/c/dogs-vs-cats/data 3.Các bước xây dựng ứng dụng Import the libraries: import numpy as np import pandas as pd 35 from keras.preprocessing.image import ImageDataGenerator,load_img from keras.utils import to_categorical from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import random import os Define image properties: Image_Width=128 Image_Height=128 Image_Size=(Image_Width,Image_Height) Image_Channels=3 Prepare dataset for training model: filenames=os.listdir("./dogs-vs-cats/train") categories=[] for f_name in filenames: category=f_name.split('.')[0] if category=='dog': categories.append(1) else: categories.append(0) df=pd.DataFrame({ 'filename':filenames, 'category':categories }) Create the neural net model: from keras.models import Sequential from keras.layers import Conv2D,MaxPooling2D,\ Dropout,Flatten,Dense,Activation,\ BatchNormalization model=Sequential() model.add(Conv2D(32, (3,3),activation='relu',input_shape=(Image_Width,Image_Height,Image_Channels) )) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2))) 36 model.add(Dropout(0.25)) model.add(Conv2D(64,(3,3),activation='relu')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Conv2D(128,(3,3),activation='relu')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512,activation='relu')) model.add(BatchNormalization()) model.add(Dropout(0.5)) model.add(Dense(2,activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='rmsprop',metrics=['accuracy']) Analyzing model: model.summary() 37 Define callbacks and learning rate: from keras.callbacks import EarlyStopping, ReduceLROnPlateau earlystop = EarlyStopping(patience = 10) learning_rate_reduction = ReduceLROnPlateau(monitor = 'val_acc',patience = 2,verbose = 1,factor = 0.5,min_lr = 0.00001) callbacks = [earlystop,learning_rate_reduction] Manage data: df["category"] = df["category"].replace({0:'cat',1:'dog'}) train_df,validate_df = train_test_split(df,test_size=0.20, random_state=42) train_df = train_df.reset_index(drop=True) validate_df = validate_df.reset_index(drop=True) 38 total_train=train_df.shape[0] total_validate=validate_df.shape[0] batch_size=15 Training and validation data generator: train_datagen = ImageDataGenerator(rotation_range=15, rescale=1./255, shear_range=0.1, zoom_range=0.2, horizontal_flip=True, width_shift_range=0.1, height_shift_range=0.1 ) train_generator = train_datagen.flow_from_dataframe(train_df, "./dogs-vs-cats/train/",x_col='filename',y_col='category', target_size=Image_Size, class_mode='categorical', batch_size=batch_size) validation_datagen = ImageDataGenerator(rescale=1./255) validation_generator = validation_datagen.flow_from_dataframe( validate_df, "./dogs-vs-cats/train/", x_col='filename', y_col='category', target_size=Image_Size, class_mode='categorical', batch_size=batch_size ) test_datagen = ImageDataGenerator(rotation_range=15, rescale=1./255, shear_range=0.1, zoom_range=0.2, horizontal_flip=True, width_shift_range=0.1, height_shift_range=0.1) test_generator = train_datagen.flow_from_dataframe(train_df, "./dogs-vs-cats/test/",x_col='filename',y_col='category', target_size=Image_Size, class_mode='categorical', 39 batch_size=batch_size) Model Training: epochs=10 history = model.fit_generator( train_generator, epochs=epochs, validation_data=validation_generator, validation_steps=total_validate//batch_size, steps_per_epoch=total_train//batch_size, callbacks=callbacks ) 10 Save the model: model.save("model1_catsVSdogs_10epoch.h5") 11 Test data preparation: test_filenames = os.listdir("./dogs-vs-cats/test1") test_df = pd.DataFrame({ 40 'filename': test_filenames }) nb_samples = test_df.shape[0] 12 Make categorical prediction: predict = model.predict_generator(test_generator, steps=np.ceil(nb_samples/batch_size)) 13 Convert labels to categories: test_df['category'] = np.argmax(predict, axis=-1) label_map = dict((v,k) for k,v in train_generator.class_indices.items()) test_df['category'] = test_df['category'].replace(label_map) test_df['category'] = test_df['category'].replace({ 'dog': 1, 'cat': }) 14 Visualize the prediction results: sample_test = test_df.head(18) sample_test.head() plt.figure(figsize=(12, 24)) for index, row in sample_test.iterrows(): filename = row['filename'] category = row['category'] img = load_img("./dogs-vs-cats/test1/"+filename, target_size=Image_Size) plt.subplot(6, 3, index+1) plt.imshow(img) plt.xlabel(filename + '(' + "{}".format(category) + ')' ) plt.tight_layout() plt.show() 41 15 Test your model performance on custom data: results={ 0:'cat', 1:'dog' } from PIL import Image import numpy as np im=Image.open(" image_path_TO_custom_image") im=im.resize(Image_Size) im=np.expand_dims(im,axis=0) im=np.array(im) im=im/255 pred=model.predict_classes([im])[0] print(pred,results[pred]) 42 GUI Phân loại Mèo VS Chó: Chúng tơi khơng muốn chạy phương thức predict_classes muốn kiểm tra mơ hình Đó lý cần giao diện đồ họa Ở sẽ xây dựng GUI bằng Tkinter python Để cài đặt Tkinter: sudo apt-get cài đặt python3-tk Bây tạo thư mục mới, chép mô hình bạn (“model1_catsVSdogs_10epoch.h5”) vào thư mục * Tạo tệp gui.py dán mã bên dưới: nhập tkinter dạng tk từ tkinter nhập filedialog từ nhập tkinter * từ PIL nhập ImageTk, Hình ảnh nhập numpy từ máy ảnh mơ hình nhập load_model mơ hình = load_model ( 'model1_catsVSdogs_10epoch.h5' ) #dictionary để gắn nhãn cho tất loại biển báo giao thông lớp = { : 'nó mèo' , : 'nó chó' , } #khởi tạo GUI đầu = tk Tk () đứng đầu hình học ( '800x600' ) đứng đầu tiêu đề ( 'Phân loại CatsVSDogs' ) đứng đầu định cấu hình ( background= '#CDCCD' ) nhãn= Nhãn ( top,background= '#CDCCDD' , font= ( 'arial' , 15 , 'bold' )) sign_image = Nhãn ( ) phân loại def ( file_path ) : nhãn tồn cầu_packed hình ảnh = Hình ảnh mở ( file_path ) hình ảnh = hình ảnh thay đổi kích thước (( 128 , 128 )) hình ảnh = numpy expand_dims ( hình ảnh, trục= ) hình ảnh = numpy mảng ( hình ảnh ) 43 hình ảnh = hình ảnh/ 255 dự đốn = mơ hình dự đốn_classes ([ hình ảnh ])[ ] dấu = lớp [ pred ] in ( dấu ) nhãn mác định cấu hình ( foreground= '#011638' , text=sign ) def show_classify_button ( file_path ) : class_b= Button ( top,text= "Classify Image" , command=lambda: phân loại ( file_path ) , padx = 10 , pady = ) phân loại_b cấu hình ( background= '#364156' , foreground= 'white' , phông chữ = ( 'arial' , 10 , 'đậm' )) phân loại_b địa điểm ( relx= 0,79 , rely= 0,46 ) def upload_image () : thử : file_path=filedialog askopenfilename () tải lên=Hình ảnh mở ( file_path ) tải lên hình thu nhỏ ((( top winfo_width () / 2.25 ) , ( top winfo_height () / 2.25 ))) im=Hình ảnhTk Ảnh Ảnh ( tải lên ) sign_image định cấu hình ( image=im ) sign_image hình ảnh = tơi nhãn mác định cấu hình ( văn = '' ) show_classify_button ( file_path ) ngoại trừ : qua upload= Button ( top,text= "Upload an image" ,command=upload_image,padx= 10 ,pady= ) tải lên cấu hình ( background= '#364156' , foreground= 'white' , font= ( 'arial' , 10 , 'bold' )) tải lên gói ( bên=ĐÁY, thóc= 50 ) sign_image gói ( side=BOTTOM, expand= True ) nhãn mác gói ( side=BOTTOM, expand= True ) tiêu đề = Nhãn ( cùng, văn = "Phân loại CatsVSDogs" , pady = 20 , phông chữ = ( 'arial' , 20 , 'đậm' )) phần mở đầu định cấu hình ( background= '#CDCCD' ,foreground= '#364156' ) phần mở đầu gói () đứng đầu vịng lặp () * Lưu tệp chạy cách sử dụng: 44 hướng dẫn python3 py Bản tóm tắt: Dự án Học sâu dành cho người bắt đầu giới thiệu cho bạn cách xây dựng phân loại hình ảnh Dự án lấy liệu The Asirra (catsVSdogs) để huấn luyện thử nghiệm mạng thần kinh Trong dự án này, học được: • • • • • • Cách tạo mạng thần kinh Keras để phân loại hình ảnh Cách chuẩn bị tập liệu để huấn luyện kiểm tra Cách trực quan hóa tập liệu Cách lưu mơ hình Cách kiểm tra hiệu suất mơ hình liệu tùy chỉnh Cách tạo GUI để thực dự án deep learning Tài Liệu Tham Khảo: 1: Tìm hiểu keras : https://nttuan8.com/bai-7-gioi-thieu-keras-va-bai-toan-phanloai-anh/ 45 2: Tìm hiểu CNN : https://aptech.fpt.edu.vn/cnn-la-gi.html 3: Tìm hiều Tensorflow: https://topdev.vn/blog/tensorflow-la-gi/

Ngày đăng: 08/05/2023, 16:38