Reconocimiento de Enfermedades del Maíz
por rmorales1501 @rmorales1501
- 62
- 0
- 0
Introducción
# 🌽 Clasificador de Enfermedades en Hojas de Maíz usando IA
En la agricultura moderna, la detección temprana de enfermedades en cultivos es crucial. Este proyecto clasifica 4 estados en hojas de maíz: Sano, Roya Común, Tizón y Mancha Gris.

Materiales
Machine Learning TensorFlow 2.x, Keras Construcción y entrenamiento del modelo EfficientNetB0.
Procesamiento de Imágenes OpenCV, PIL (Pillow) Preprocesamiento de imágenes (redimensionar, normalizar, aumentación de datos).
Análisis de Datos NumPy, Pandas, Matplotlib, Seaborn Visualización de resultados y análisis exploratorio (EDA).
Gestión de Datos Kaggle API, Roboflow (opcional) Descarga y organización dataset
Paso 1: Descarga del Dataset
Obtener dataset "Corn or Maize Leaf Disease Dataset" directamente desde Kaggle en el entorno local

Paso 2: Generación de datos
e utiliza ImageDataGenerator para aplicar aumentos de datos y normalización específica para EfficientNet (preprocess_input). Esto mejora la capacidad del modelo para generalizar. Las transformaciones incluyen:
• Rotación (hasta 20°)
• Desplazamiento horizontal (15%)
• Zoom aleatorio (70% a 130%)
• Cizallamiento (shear)
• División del 20% para validación (validation_split=0.2)
Luego, se crean dos generadores:
• data_gen_entrenamiento: usa el 80% de las imágenes para entrenamiento.
• data_gen_pruebas: usa el 20% restante para validación.
Ambos cargan imágenes desde el directorio "Maiz", las redimensionan a 224x224 y las mezclan para evitar sesgos.

Paso 3: Construcción y ajuste del modelo con EfficientNetB0
1. Modelo base: EfficientNetB0
• Se utiliza EfficientNetB0 preentrenado con pesos de ImageNet, sin incluir las capas superiores (include_top=False).
• Se deja entrenable solo las últimas 15 capas, permitiendo una ajuste fino parcial (fine-tuning) mientras se conservan los aprendizajes previos.
2. Capas personalizadas
• Se agregan capas para especializar el modelo en la nueva tarea:
• Conv2D con 64 filtros para extraer nuevas características.
• MaxPooling2D para reducir dimensionalidad.
• GlobalAveragePooling2D para reducir la salida a 1D.
• Dense con 128 unidades y Dropout para evitar sobreajuste.
• Capa final Dense con 4 salidas y activación softmax para clasificación multiclase.
3. Compilación
• Se compila el modelo con Adam y una tasa de aprendizaje baja (1e-5) para ajustar finamente sin destruir los pesos preentrenados.
• Se usa categorical_crossentropy como función de pérdida y accuracy como métrica de evaluación.

Paso 4: Entrenamiento del Modelo
e entrenó el modelo durante un máximo de 50 épocas usando los datos previamente generados. Se implementó EarlyStopping para detener el entrenamiento si no mejoraba la precisión en validación (val_accuracy) durante 5 épocas seguidas. Además, se restauraron los pesos del mejor modelo automáticamente (restore_best_weights=True).
Resultados Destacados
• En la época 1, el modelo partió con una baja precisión de entrenamiento (36.8%) pero con una validación prometedora (72.1%).
• A partir de la época 5, el modelo superó el 89% de precisión en validación.
• Para la época 12, alcanzó una precisión de validación de 93.18% con una pérdida (val_loss) de 0.2109.
• Continuó mejorando hasta la época 21, logrando:
• Precisión de entrenamiento: 92.29%
• Precisión de validación: 93.90%
• Pérdida de validación: 0.1724
Esto demuestra un entrenamiento exitoso y sin sobreajuste aparente, gracias al uso de transferencia de aprendizaje, aumento de datos y ajuste fino de capas.

Paso 6: Predicción de enfermedades en nuevas imágenes
Se creó una función llamada predecir_enfermedad(ruta_imagen) que permite clasificar imágenes individuales usando el modelo entrenado:
1. Carga y redimensionamiento: la imagen se ajusta al tamaño esperado por el modelo (224x224).
2. Preprocesamiento: se convierte la imagen a arreglo numérico y se aplica preprocess_input, necesario para EfficientNet.
3. Predicción: se usa el modelo para obtener las probabilidades de cada clase.
4. Interpretación: se selecciona la clase con mayor probabilidad y se calcula el porcentaje de confianza.
5. Visualización: se muestra la imagen original con matplotlib para validar visualmente la predicción.
Esta función permite evaluar el modelo en casos reales y comprobar su utilidad práctica en la detección de enfermedades del maíz.

0 comentarios
Entra o únete Gratis para comentar