Keras 使用 ResNet 模型进行实时预测

2021-11-03 14:19 更新

ResNet是一个预训练模型。它使用 ImageNet 进行训练。在 ImageNet 上预训练的 ResNet 模型权重。它具有以下语法:

keras.applications.resnet.ResNet50 (
   include_top = True,
   weights = 'imagenet',
   input_tensor = None,
   input_shape = None,
   pooling = None, 
   classes = 1000
)
  • include_top 指的是网络顶部的全连接层。
  • weights 指的是 ImageNet 上的预训练。
  • input_tensor 指用作模型的图像输入的可选的 Keras 张量。
  • input_shape 指可选的形状元组。此模型的默认输入大小为 224x224
  • clasees 指用于对图像进行分类的可选数量的类。

让我们通过写一个简单的例子来理解模型:

第 1 步:导入模块

加载如下指定的必要模块:

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

第 2 步:选择一个输入

选择一个输入图像,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()

在这里,我们加载了一个图像(banana.jpg)并显示了它。

第 3 步:将图像转换为 NumPy 数组

将输入的 Banana 转换为 NumPy 数组,以便将其传递到模型中以进行预测。

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

第 4 步:模型预测

将输入输入模型以获得预测

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

输出

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

模型就可以正确地将图像预测为 banana。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号