5. Cấu trúc của luận văn:
4.1 Kết quả đạt đƣợc:
Tổng hợp đƣợc các kiến thức, nắm vững các kỹ thuật cơ bản của Deep Learning, có thể xây dựng đƣợc mô hình h c máy bằng kỹ thuật này cho bộ dữ liệu khác.
- Cài đ t chƣơng trình bằng Python, ứng dụng mô hình Deep Learning trong phân loại và nhận dạng ảnh màu.
- Ý nghĩa khoa h c và ứng dụng thực tiễn của đề tài: Nghiên cứu các thuật toán trong Deep Learning và xây dựng mô hình h c máy để phân loại và nhận dạng ảnh.
4.2 Ƣu và nhƣợc điểm của phƣơng pháp
Với kiến trúc mạng CNN đề xuất ở bài toán phân loại ảnh chỉ phù hợp cho bộ dataset CIFAR-10 nhƣng chƣa chắc có thích hợp cho bộ dataset khác. Bởi thế luôn có ƣu điểm và nhƣợc điểm của mỗi phƣơng pháp.
Ƣu điểm: Tìm kiếm ảnh dựa trên phân lớp của ảnh giảm thiểu số ảnh phải so sánh tƣơng đồng.
Nhƣợc điểm: Mô hình CNNs càng phức tạp thì h c càng lâu.
4.3. Hƣớng phát triển
Trong quá trình thực hiện đề tài, do hạn chế về m t trình độ và thời gian thực hiện luận văn có hạn nên luận văn này vẫn còn nhiều điều chƣa làm hết. Vì thế, cần phải cải thiện để có thể phát triển tiếp sau này. Theo tôi những vấn đề còn sót lại và cần phải cải thiện bao gồm:
Tìm cách tăng độ chính xác tƣơng đồng cho mô hình.
Phát triển cho bộ dataset có kích thƣớc lớn có nhiều nhãn dán hơn. Tìm kiếm nhiều đối tƣợng trong ảnh
DANH MỤC TÀI LIỆU THAM KHẢO
[1] TS. Lê Xuân Vinh – Đại h c Quy Nhơn - Giáo trình Machine Learning, 2019 [2] Vũ Hữu Tiệp. (2017). Machine Learning cơ bản.
http://machinelearningcoban.com/general/2017/02/06/featureengineering/ [3] Nguyễn Thanh Tuấn, “Sách Deep Learning cơ bản“,
https://drive.google.com/file/d/1lNjzISABdoc7SRq8tg- xkCRRZRABPCKi/view, 2019
[4] Z. Lai, H. F. Deng, Medical Image Classification Based on Deep Features Extracted by Deep Model and Statistic Feature Fusion with Multilayer Perceptron, Comput Intell Neurosci, 2018;
[5] Hai Wang, Yingfeng Cai, Long Chen, A Vehicle Detection Algorithm Based on Deep Belief Network , The Scientific World Journa, 2014; [6] https://www.coursera.org/specializations/deep-learning;
[7] Liangji Zhou, Qingwu Li, Guanying Huo, Yan Zhou, Image Classification Using Biomimetic Pattern Recognition with Convolutional Neural Networks Features, Computational Intelligence and Neuroscience, 2017
[8] Yu Sun, Yuan Liu, Guan Wang, Haiyan Zhang, Deep Learning for Plant Identification in Natural Environment, Computational Intelligence and Neuroscience, 2017;
[9] Hai Wang, Yingfeng Cai, Long Chen, A Vehicle Detection Algorithm Based on Deep Belief Network, Hindawi Publishing Corporatione
The Scientific World Journal, 2014
and Its Application in Handwritten Digit Classification, Hindawi Publishing Corporation Computational Intelligence and Neuroscience , 2016
[11] Srdjan Sladojevic, Marko Arsenovic, Andras Anderla, Dubravko Culibrk, Darko Stefanovic, Deep Neural Networks Based
Recognition of
Plant Diseases by Leaf Image Classification, Hindawi Publishing
Corporation Computational Intelligence and Neuroscience , 2016
[12] Wei Hu, Yangyu Huang, Li Wei, Fan Zhang, Hengchao Li, Deep Convolutional Neural Networks for Hyperspectral Image Classification, Hindawi Publishing Corporation Journal of Sensors,
2015
[13] Kumar, "Achieving 90% accuracy in Object Recognition Task on CIFAR10 Dataset with Keras: Convolutional Neural Networks,"
[Online]. Available:
https://appliedmachinelearning.blog/2018/03/24/achieving-90- accuracy-in-object-recognition-task-on-cifar-10-dataset-with-keras- convolutional-neural-networks/, 2018.
[14] Ling Zhang ; Bo Zhang, A geometrical representation of McCulloch- Pitts neural model and its applications, IEEE Transactions on Neural Networks, 1999
[15] lJiuYangabLidanWangabYanWangabTengtengGuoab , A novel memristive Hopfield neural network with application in associative memory, Neurocomputing, 2017
[16] Andrej Karpathy. (n.d.). CS231n Convolutional Neural Networks for Visual Recognition - Visualizing what ConvNets learn.
http://cs231n.github.io/understanding-cnn/ [17] http://bis.net.vn/forums/p/482/898.aspx
[18] https://www.oreilly.com/library/view/deeplearning/9781491924570 /assets/dpln_0408.png
PHỤ LỤC
Mã nguồn thuật toán trừ nền trong chƣơng trình: from google.colab import drive
drive.mount('gdrive')
%cd /content/gdrive/My Drive/Colab Notebooks from __future__ import print_function
import keras
from keras.datasets import cifar10
from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten from keras.layers import Conv2D, MaxPooling2D
import os
import matplotlib.pyplot as plt
from tensorflow.keras import datasets, layers, models batch_size = 32
num_classes = 10 epochs = 10
data_augmentation = True num_predictions = 20
# The data, split between train and test sets:
print('x_train shape:', x_train.shape) print(x_train.shape[0], 'train samples') print(x_test.shape[0], 'test samples')
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', ' ship', 'truck'] plt.figure(figsize=(10, 10)) for i in range(25): plt.subplot(5, 5, i + 1) plt.xticks([]) plt.yticks([]) plt.grid(False) plt.imshow(x_train[i], cmap=plt.cm.binary) plt.xlabel(class_names[y_train[i][0]]) plt.show()
# Convert class vectors to binary class matrices.
y_train = keras.utils.to_categorical(y_train, num_classes) y_test = keras.utils.to_categorical(y_test, num_classes) def cnn_model():
model = Sequential()
model.add(Conv2D(32, (3,3),activation = 'relu',padding='same', input_shap e=(32, 32, 3)))
model.add(Conv2D(32, (3,3),activation = 'relu')) model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu', padding='same')) model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.1))
model.add(Conv2D(128, (3, 3), activation='relu', padding='same')) model.add(Conv2D(128, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.1)) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.1)) model.add(Dense(10, activation='softmax')) model.summary() return model model=cnn_model()
opt = keras.optimizers.RMSprop(learning_rate=0.0001, decay=1e-6)
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accu racy'])
x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255
x_test /= 255
batch_size=128, epochs=100, validation_data=(x_test, y_test), verbose=1) model_json = model.to_json() print(model_json)
with open('model.json', 'w') as json_file: json_file.write(model_json)
model.save_weights('model.h5') # Score trained model.
scores = model.evaluate(x_test, y_test, verbose=0) print (scores)
print('Test loss:', scores[0])
print('Test accuracy:', scores[1]*100) model.save("ngan_model")
plt.plot(model_detail.history['accuracy'], label='accuracy')
plt.plot(model_detail.history['val_accuracy'], label = 'val_accuracy') plt.xlabel('Epoch')
plt.ylabel('Accuracy') plt.ylim([0.5, 1])
plt.legend(loc='lower right')
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2) print(test_acc)
## 10. Thử lại 1 ảnh model_json = model.to_json() print(model_json) plt.imshow(x_test[9999]) plt.show() img = x_test[9999].reshape(1, 32, 32, 3) # prepare pixel data
img = img.astype('float32')
result = model.predict_classes(img) print(result)
# print('Giá trị dự báo: ', np.argmax(y_predict)) # test ảnh
from keras.preprocessing.image import save_img for i in range(10):
save_img("test1/{0}.png".format(str(i)), x_test[i]) from keras.preprocessing.image import load_img from keras.preprocessing.image import img_to_array from keras.models import load_model
import matplotlib.pyplot as plt # load and prepare the image def load_image(filename): # load the image
plt.imshow(img) plt.show()
# convert to array
img = img_to_array(img)
# reshape into a single sample with 3 channels img = img.reshape(1, 32, 32, 3)
# prepare pixel data
img = img.astype('float32') # img = img / 255.0
return img
# load an image and predict the class def run_example(filename):
# load the image
img = load_image(filename) # predict the class
result = model.predict_classes(img) print(class_names[result[0]])
# entry point, run the example run_example('test1/0.png') from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir("test1/") if isfile(join("test1/", f))] print(onlyfiles)
for ii in onlyfiles:
run_example('test1/'+ii) from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir("test/") if isfile(join("test/", f))] print(onlyfiles)
for ii in onlyfiles: