Bài 18: Dự đoán thời gian thực với mô hình ResNet - Keras cơ bản

Đăng bởi: Admin | Lượt xem: 125 | Chuyên mục: AI


ResNet là một mô hình được đào tạo trước. Nó được đào tạo bằng ImageNet. Trọng số mô hình ResNet được đào tạo trước trên ImageNet. Nó có cú pháp sau:
keras.applications.resnet.ResNet50 (
   include_top = True, 
   weights = 'imagenet', 
   input_tensor = None, 
   input_shape = None, 
   pooling = None, 
   classes = 1000
)
Trong đó :
  • include_top đề cập đến lớp được kết nối đầy đủ ở đầu mạng.
  • weights tham khảo pre-training trên ImageNet.
  • input_tensor đề cập đến tensor Keras tùy chọn để sử dụng làm đầu vào hình ảnh cho mô hình.
  • input_shape đề cập đến bộ hình dạng tùy chọn. Kích thước đầu vào mặc định cho mô hình này là 224x224.
  • classes số lớp tuỳ chọn để phân loại hình ảnh
Để hiểu rõ hơn, ta tiến hành viết cụ thể một mô hình sau đây
Bước 1: import các thư viện cần thiết
>>> import PIL 
>>> from keras.preprocessing.image import load_img 
>>> from keras.preprocessing.image import img_to_array 
>>> from keras.applications.imagenet_utils import decode_predictions 
>>> import matplotlib.pyplot as plt 
>>> import numpy as np 
>>> from keras.applications.resnet50 import ResNet50 
>>> from keras.applications import resnet50
Bước 2: Lựa chọn đầu vào
Đưa ảnh đầu vào, ta chọn Lotus
>>> filename = 'banana.jpg' 
>>> ## load an image in PIL format 
>>> original = load_img(filename, target_size = (224, 224)) 
>>> print('PIL image size',original.size)
PIL image size (224, 224) 
>>> plt.imshow(original) 
<matplotlib.image.AxesImage object at 0x1304756d8> 
>>> plt.show()
Ở đây ta sử dụng hình ảnh banana.jpg và hiển thị nó
Bước 3: Chuyển đổi ảnh sang mảng Numpy :
Chuyển ảnh đầu vào trở thành mảng NumPy và chuyển vào mô hình với mục đích dự đoán
>>> #convert the PIL image to a numpy array 
>>> numpy_image = img_to_array(original) 

>>> plt.imshow(np.uint8(numpy_image)) 
<matplotlib.image.AxesImage object at 0x130475ac8> 

>>> print('numpy array size',numpy_image.shape) 
numpy array size (224, 224, 3) 

>>> # Convert the image / images into batch format 
>>> image_batch = np.expand_dims(numpy_image, axis = 0) 

>>> print('image batch size', image_batch.shape) 
image batch size (1, 224, 224, 3)
>>>
Bước 4: Dự đoán mô hình
Cung cấp thông tin đầu vào vào mô hình để nhận được các dự đoán
>>> prepare the image for the resnet50 model >>> 
>>> processed_image = resnet50.preprocess_input(image_batch.copy()) 

>>> # create resnet model 
>>>resnet_model = resnet50.ResNet50(weights = 'imagenet') 
>>> Downloavding data from https://github.com/fchollet/deep-learning-models/releas
es/download/v0.2/resnet50_weights_tf_dim_ordering_tf_kernels.h5 
102858752/102853048 [==============================] - 33s 0us/step 

>>> # get the predicted probabilities for each class 
>>> predictions = resnet_model.predict(processed_image) 

>>> # convert the probabilities to class labels 
>>> label = decode_predictions(predictions) 
Downloading data from https://storage.googleapis.com/download.tensorflow.org/
data/imagenet_class_index.json 
40960/35363 [==================================] - 0s 0us/step 

>>> print(label)
Output
[
   [
      ('n07753592', 'banana', 0.99229723), 
      ('n03532672', 'hook', 0.0014551596), 
      ('n03970156', 'plunger', 0.0010738898), 
      ('n07753113', 'fig', 0.0009359837) , 
      ('n03109150', 'corkscrew', 0.00028538404)
   ]
]
Bài tiếp theo: Pre-Trained Models >>
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!