Ejemplo de clasificación de imágenes con Keras

| Última modificación: 24 de octubre de 2024 | Tiempo de Lectura: 4 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Un ejemplo de clasificación de imágenes con Keras te ayuda a visualizar cómo se desarrolla este tipo de método durante el análisis de redes neuronales convolucionales avanzadas dentro del Deep Learning.

Por ello, si como data scientist quieres tener conocimientos de las mejores alternativas para dar solución a tu procesamiento de los macrodatos, ¡este artículo es ideal para ti!

A continuación, te compartimos un ejemplo práctico que funciona para que conozcas más en profundidad cómo podrías aplicarlo a tu volumen de datos. Así, en este post, te explicamos por medio de un ejemplo de clasificación de imágenes con Keras cómo se comportan las redes convolucionales avanzadas.

Ejemplo de clasificación de imágenes con Keras

Para este ejemplo de clasificación de imágenes con Keras vamos a trabajar con VGG, ResNet, Inception y Xception, de manera que comprendas cómo y para qué se emplean cada una de estas estrategias en el procesamiento de redes neuronales convolucionales.

A continuación, el ejemplo de clasificación de imágenes con Keras:

// keras imagenet // keras xception
%tensorflow_version 2.x
import tensorflow as tf
print(tf.__version__)

2.8.0

// clasificacion de imagenes python
!pip install imageio

Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Requirement already satisfied: imageio in /usr/local/lib/python3.7/dist-packages (2.4.1)
Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from imageio) (1.21.6)
Requirement already satisfied: pillow in /usr/local/lib/python3.7/dist-packages (from imageio) (7.1.2)

# importamos los paquetes necesarios para el ejemplo de clasificación de imágenes con Keras
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.applications import InceptionV3, Xception, VGG16, VGG19
from tensorflow.keras.applications import imagenet_utils
from tensorflow.keras.applications.inception_v3 import preprocess_input
from tensorflow.keras.preprocessing.image import img_to_array
from tensorflow.keras.preprocessing.image import load_img
import numpy as np
import urllib
import cv2
import matplotlib.pyplot as plt
import imageio as io

def predict_image(model_name, image_source):
  
  # definimos un diccionario que mapea el nombre de la red con el modelo importado
  # de Keras
  MODELS = {
    "vgg16": VGG16,
    "vgg19": VGG19,
    "inception": InceptionV3,
    "xception": Xception, # TensorFlow solo!
    "resnet": ResNet50
  }

  # establecemos el tamaño de entrada y la función de preprocesamiento de imagen
  # recordad que nosotros por ejemplo hacíamos una normalización, pues en Keras
  # están definidas las funciones de preprocesamiento de cada red, por lo que no
  # tenemos que preocuparnos de nada
  input_shape = (224, 224)
  preprocess = imagenet_utils.preprocess_input

  # si usamos InceptionV3 o Xception, necesitamos establecer un tamaño diferente
  # de imagen de entrada (299x299) y usar una función de preprocesamiento diferente
  if model_name in ("inception", "xception"):
    input_shape = (299, 299)
    preprocess = preprocess_input
print("[INFO] loading {}...".format(model_name))
  Network = MODELS[model_name]
  model = Network(weights="imagenet") # cargamos la red con los pesos ya entrenados con el ImageNet
  # la primera vez que lo ejecutemos Keras se descargará los pesos, que son 500MB 
  # si usamos la VGG o unos 100 en los otros casos, así que es posible que tarde

  # cargamos la imagen y nos aseguramos de que el tamaño es el adecuado
  print("[INFO] loading and pre-processing image...")
  if type(image_source) == str:
    image = load_img(image_source, target_size=input_shape)
    image = np.resize(image, (input_shape[0], input_shape[1], 3))
    image = img_to_array(image)
  else:
    image = np.resize(image_source, (input_shape[0], input_shape[1], 3))
    image = img_to_array(image)

  # nuestra imagen se representa como un array de tamaño:
  # (inputShape[0], inputShape[1], 3) 
  # y necesitamos: (1, inputShape[0], inputShape[1], 3)
  # así que expandimos las dimensiones
  image = np.expand_dims(image, axis=0)

  # preprocesamos la imagen
  image = preprocess(image)

  # predecimos la clase de nuestra imagen
  print("[INFO] classifying image with '{}'...".format(model_name))
  preds = model.predict(image)
  P = imagenet_utils.decode_predictions(preds)

  # mostramos las predicciones rank-5 y su probabilidad
  for (i, (imagenetID, label, prob)) in enumerate(P[0]):
    print("{}. {}: {:.2f}%".format(i + 1, label, prob * 100))

  img = io.imread(image_source)
  (imagenetID, label, prob) = P[0][0]
  cv2.putText(img, "Label: {}, {:.2f}%".format(label, prob * 100), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)
  plt.imshow(img)
  plt.axis('off')
  
  return model
# download images
!wget https://image.ibb.co/cuw6pd/soccer_ball.jpg
!wget https://image.ibb.co/hdoVFJ/bmw.png
!wget https://image.ibb.co/h0B6pd/boat.png
!wget https://image.ibb.co/eCyVFJ/clint_eastwood.jpg
!ls -la *.*
model = predict_image('resnet', 'soccer_ball.jpg')
model.summary()
Total params: 25,636,712
Trainable params: 25,583,592
Non-trainable params: 53,120
model = predict_image('vgg16', 'bmw.png')
model.summary()

Ahora bien, a pesar de que te hemos compartimos el ejemplo de clasificación de imágenes con Keras que ha derivado en dos procesos, este es un conocimiento muy amplio que requiere de una práctica constante, ¡así que a ensayar!

Con este ejemplo de clasificación de imágenes con Keras por medio de VGG, ResNet, Inception y Xception has podido ampliar tu conocimiento en este proceso, no obstante, ¡todavía falta mucho más por aprender al respecto!

Para continuar con tu formación, te recomendamos nuestro Bootcamp Full Stack Big Data, Inteligencia Artificial & Machine Learning, puesto que esta formación intensiva te acercará a muchos más sistemas, lenguajes y herramientas que trabajan con los macrodatos, de forma que te convertirás en un data scientist experto al saber escoger las mejores alternativas para un procesamiento de datos. 

En efecto, KeepCoding se reconoce por formar profesionales curiosos, cuestionadores, amantes del trabajo eficaz y buscadores incansables de la autosuperación y del desafío intelectual. ¡Apúntate!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado