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!