Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Identificando objetos con MobileNetV2

# ============================================
# Clasificación de imágenes con MobileNetV2
# ============================================

# Importar las librerías necesarias
import numpy as np
import matplotlib.pyplot as plt

from google.colab import files
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
from tensorflow.keras.applications.mobilenet_v2 import decode_predictions
from tensorflow.keras.preprocessing import image

# ============================================
# 1. Cargar el modelo preentrenado
# ============================================

modelo = MobileNetV2(weights="imagenet")

print("Modelo MobileNetV2 cargado correctamente.")

# ============================================
# 2. Subir una imagen
# ============================================

archivos_subidos = files.upload()

nombre_imagen = next(iter(archivos_subidos))

print("Imagen seleccionada:", nombre_imagen)

# ============================================
# 3. Cargar y visualizar la imagen
# ============================================

imagen_original = image.load_img(nombre_imagen)

plt.figure(figsize=(6, 6))
plt.imshow(imagen_original)
plt.axis("off")
plt.title("Imagen cargada")
plt.show()

# ============================================
# 4. Preprocesar la imagen
# ============================================

# MobileNetV2 espera imágenes de 224 x 224 píxeles
imagen_redimensionada = image.load_img(
    nombre_imagen,
    target_size=(224, 224)
)

# Convertir la imagen en un arreglo numérico
imagen_array = image.img_to_array(imagen_redimensionada)

# Agregar una dimensión para representar el lote
imagen_array = np.expand_dims(imagen_array, axis=0)

# Aplicar el preprocesamiento requerido por MobileNetV2
imagen_procesada = preprocess_input(imagen_array)

# ============================================
# 5. Realizar la predicción
# ============================================

predicciones = modelo.predict(imagen_procesada)

# Obtener las tres clases más probables
resultados = decode_predictions(
    predicciones,
    top=3
)[0]

# ============================================
# 6. Mostrar los resultados
# ============================================

print("\nClases identificadas:")

for codigo, clase, probabilidad in resultados:
    porcentaje = probabilidad * 100
    print(f"{clase}: {porcentaje:.2f}%")

# Mostrar la clase principal
clase_principal = resultados[0][1]
probabilidad_principal = resultados[0][2] * 100

print(
    f"\nEl objeto identificado principalmente es: "
    f"{clase_principal}, con una probabilidad de "
    f"{probabilidad_principal:.2f}%."
)

Primero, se carga el modelo MobileNetV2 utilizando los pesos aprendidos con el conjunto de datos ImageNet. Luego, el usuario puede subir una imagen desde su computador.

La imagen se redimensiona a 224 × 224 píxeles, ya que ese es el tamaño esperado por el modelo. Después, se transforma en un arreglo numérico, se agrega la dimensión correspondiente al lote de imágenes y se aplica la función de preprocesamiento de MobileNetV2.

Finalmente, el modelo realiza la predicción y muestra las tres clases con mayor probabilidad, indicando también el porcentaje de confianza para cada una.

Conclusión

En esta actividad utilicé el modelo preentrenado MobileNetV2 para clasificar una imagen. Para hacerlo, fue necesario adaptar la imagen al tamaño y formato que espera el modelo. Después del preprocesamiento, MobileNetV2 entregó diferentes resultados con sus respectivos porcentajes de probabilidad. Esta experiencia demuestra que los modelos preentrenados permiten realizar tareas de clasificación de imágenes sin tener que entrenar una red neuronal desde cero.

1 respuesta

Hola Gino, espero que estés bien

¡Espero que estés disfrutando del curso! Veo que has seguido correctamente los pasos para utilizar el modelo MobileNetV2 para clasificar imágenes. Parece que has entendido bien el proceso de carga del modelo, preprocesamiento de la imagen y obtención de predicciones.

Si tienes alguna dificultad o pregunta específica sobre alguna parte del código o el proceso, por favor, házmelo saber. Por ejemplo, si estás enfrentando algún error al cargar la imagen o al realizar la predicción, podemos revisar juntos esos pasos.

Recuerda que al utilizar modelos preentrenados como MobileNetV2, es importante asegurarse de que las imágenes estén correctamente preprocesadas, como lo has hecho al redimensionarlas a 224x224 píxeles y aplicar la función preprocess_input.

Espero que esta experiencia te esté ayudando a comprender mejor cómo funcionan las redes neuronales y los modelos preentrenados. ¡Es un gran paso hacia el dominio del aprendizaje automático!

Espero haber ayudado y buenos estudios!