1. Home
  2. Python
  3. Nhận Diện Chó Mèo Python – Tensorflow – Neural Network – Deep Learning
Nguyễn Tuấn 2 năm trước

Nhận Diện Chó Mèo Python – Tensorflow – Neural Network – Deep Learning

Trong bài này mình muốn chia sẻ cho các bạn cách để nhận diện chó mèo python sử dụng TENSORFLOW – MẠNG NƠ RON – DEEP LEARNING.

Một số yêu cầu khi code: Tensorflow 2, Python 3 và tải các thư viện bổ sung, tìm hiểu mạng CNN cho ảnh.

Đầu tiên chúng ta cần import một số thư viện cần dùng như sau:

Nhận Diện Chó Mèo Python
Nhận Diện Chó Mèo Python

Định dạng lại ảnh cho đầu vào:

code python dịnh dạng ảnh
định dạng lại ảnh

Tiếp đến là import data train và tạo mảng chứa các labels:

import data train in python
import data train in python

Xong mình sẽ định danh các mục và tên:

Neural Network
Neural Network

Tiếp đến sẽ khởi tạo mạng nơ ron và các lớp Layer để sử lý dữ liệu:

code nhận diện chó mèo
code nhận diện chó mèo
from keras.callbacks import EarlyStopping, ReduceLROnPlateau
earlystop = EarlyStopping(patience = 10)
learning_rate_reduction = ReduceLROnPlateau(monitor = 'val_accuracy',patience = 2,verbose = 1,factor = 0.5,min_lr = 0.00001)
callbacks = [earlystop,learning_rate_reduction]

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)
total_train=train_df.shape[0]
total_validate=validate_df.shape[0]
batch_size=20

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
)

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
                              )


model.save("Model1.h5")


#from keras.models import load_model
#model = load_model('Model.h5')

test_filenames = os.listdir("./dogs-vs-cats/test1")
test_df = pd.DataFrame({'filename': test_filenames})
nb_samples = test_df.shape[0]

########### fixed
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_dataframe(test_df,"./dogs-vs-cats/test1/",
                                                  target_size=Image_Size,
                                                  batch_size=batch_size, class_mode=None,
                                                  shuffle=False
                                                  )
predict = model.predict_generator(test_generator, steps=np.ceil(nb_samples/batch_size))
###########end - fixed
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': 0 })

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()


results={
    0:'cat',
    1:'dog'
}
from PIL import Image
import numpy as np
im=Image.open("./dogs-vs-cats/test/9.jpg") #fixed 
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])

Chạy chương trình:

  1. Python Module.py –> huấn luyện mạng nơ ron và lưu mô hình pre-trained với tên Model.h5
  2. Chú ý chương trình dạy khá lâu với 10 epochs. Code: model.save(“Model1.h5”)
  3. Python gui.py –> chạy giao diện, dự đoán ảnh (sử dụng mô hình đã train Model.h5) Code: model = load_model(‘Model.h5’)

Để xem nhiều hơn về Python các bạn có thể xem tại đây nhé.

Link Tải Project

Note : Pass giải nén sharecs.net

Cảm ơn các bạn đã ghé thăm. Chúc các bạn thành công!

129 lượt xem | 0 bình luận