Predicción en tiempo real usando el modelo ResNet
ResNet es un modelo previamente entrenado. Está entrenado usando ImageNet . Pesos de modelo ResNet previamente entrenados en ImageNet . Tiene la siguiente sintaxis:
keras.applications.resnet.ResNet50 (
include_top = True,
weights = 'imagenet',
input_tensor = None,
input_shape = None,
pooling = None,
classes = 1000
)
Aquí,
include_top se refiere a la capa completamente conectada en la parte superior de la red.
weights consulte la formación previa en ImageNet.
input_tensor hace referencia al tensor de Keras opcional para usar como entrada de imagen para el modelo.
input_shapese refiere a la tupla de forma opcional. El tamaño de entrada predeterminado para este modelo es 224x224.
classes consulte el número opcional de clases para clasificar imágenes.
Entendamos el modelo escribiendo un ejemplo simple:
Paso 1: importar los módulos
Carguemos los módulos necesarios como se especifica a continuación:
>>> 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
Paso 2: seleccione una entrada
Elijamos una imagen de entrada, Lotus como se especifica a continuación -
>>> 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()
Aquí, hemos cargado una imagen. (banana.jpg) y lo mostró.
Paso 3: convierte imágenes en una matriz NumPy
Convirtamos nuestra entrada, Banana en la matriz NumPy, de modo que se pueda pasar al modelo con fines de predicció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)
>>>
Paso 4: predicción del modelo
Introduzcamos nuestra información en el modelo para obtener las predicciones.
>>> 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)
Salida
[
[
('n07753592', 'banana', 0.99229723),
('n03532672', 'hook', 0.0014551596),
('n03970156', 'plunger', 0.0010738898),
('n07753113', 'fig', 0.0009359837) ,
('n03109150', 'corkscrew', 0.00028538404)
]
]
Aquí, el modelo predijo correctamente las imágenes como banana.