Dự đoán thời gian thực sử dụng mô hình ResNet

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
)

Đây,

  • include_top đề cập đến lớp được kết nối đầy đủ ở đầu mạng.

  • weights tham khảo khóa đào tạo trước 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 tham khảo số lớp tùy chọn để phân loại hình ảnh.

Hãy để chúng tôi hiểu mô hình bằng cách viết một ví dụ đơn giản -

Bước 1: Nhập các mô-đun

Hãy để chúng tôi tải các mô-đun cần thiết như được chỉ định bên dưới -

>>> 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: Chọn đầu vào

Hãy để chúng tôi chọn một hình ảnh đầu vào, Lotus như được chỉ định bên dưới -

>>> 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, chúng tôi đã tải một hình ảnh (banana.jpg) và hiển thị nó.

Bước 3: Chuyển đổi hình ảnh thành mảng NumPy

Hãy để chúng tôi chuyển đổi đầu vào của mình, Banana vào mảng NumPy, để nó có thể được 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

Hãy để chúng tôi cung cấp thông tin đầu vào của mình 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)

Đầu ra

[
   [
      ('n07753592', 'banana', 0.99229723), 
      ('n03532672', 'hook', 0.0014551596), 
      ('n03970156', 'plunger', 0.0010738898), 
      ('n07753113', 'fig', 0.0009359837) , 
      ('n03109150', 'corkscrew', 0.00028538404)
   ]
]

Ở đây, người mẫu đã dự đoán hình ảnh là quả chuối một cách chính xác.