Spaces:
Sleeping
Sleeping
Update README.md
Browse files
README.md
CHANGED
|
@@ -1,13 +1,94 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Clasificador de Frutas con CNN (Keras/TensorFlow)
|
| 2 |
+
|
| 3 |
+
Este repositorio contiene un clasificador de frutas basado en una red neuronal convolucional (CNN) entrenada desde cero utilizando Keras/TensorFlow. El modelo ha sido entrenado con un conjunto de datos de im谩genes de frutas (manzanas, naranjas, pl谩tanos, etc.) y est谩 disponible p煤blicamente en Hugging Face Model Hub.
|
| 4 |
+
|
| 5 |
+
## Descripci贸n del Proyecto
|
| 6 |
+
|
| 7 |
+
El objetivo de este proyecto es crear un modelo de aprendizaje autom谩tico capaz de clasificar im谩genes de frutas en diferentes categor铆as, utilizando t茅cnicas de procesamiento de im谩genes y redes neuronales convolucionales (CNN). El modelo fue entrenado con un conjunto de im谩genes de frutas y se almacen贸 en Hugging Face para su acceso y uso posterior.
|
| 8 |
+
|
| 9 |
+
## Pasos del Proyecto
|
| 10 |
+
|
| 11 |
+
### 1. Recolecci贸n y Preparaci贸n del Dataset
|
| 12 |
+
|
| 13 |
+
#### **Dataset:**
|
| 14 |
+
El conjunto de datos utilizado en este proyecto fue generado manualmente. El dataset consiste en im谩genes de frutas (manzanas, naranjas y pl谩tanos), con una cantidad limitada de im谩genes (aproximadamente 8-9 im谩genes por fruta para entrenamiento y 3 im谩genes por fruta para validaci贸n). Las im谩genes fueron recortadas y redimensionadas para ser de tama帽o 150x150 p铆xeles.
|
| 15 |
+
|
| 16 |
+
#### **Estructura del Dataset:**
|
| 17 |
+
Las im谩genes se organizaron en dos carpetas principales:
|
| 18 |
+
- **training**: Contiene las im谩genes de entrenamiento organizadas por categor铆as (manzanas, naranjas, pl谩tanos).
|
| 19 |
+
- **validation**: Contiene las im谩genes de validaci贸n organizadas de manera similar.
|
| 20 |
+
|
| 21 |
+
El dataset fue subido a Hugging Face Datasets para facilitar su acceso y compartirlo p煤blicamente.
|
| 22 |
+
|
| 23 |
+
### 2. Creaci贸n del Modelo
|
| 24 |
+
|
| 25 |
+
Se utiliz贸 una red neuronal convolucional (CNN) para la clasificaci贸n de las im谩genes. La arquitectura del modelo es simple, pero eficiente, y est谩 dise帽ada para tareas de clasificaci贸n de im谩genes.
|
| 26 |
+
|
| 27 |
+
#### **Arquitectura del Modelo:**
|
| 28 |
+
El modelo consta de varias capas convolucionales y de agrupamiento (pooling) para extraer caracter铆sticas de las im谩genes. A continuaci贸n se muestra la arquitectura:
|
| 29 |
+
|
| 30 |
+
- **Capa 1:** Convoluci贸n 2D (32 filtros, tama帽o 3x3), seguida de MaxPooling 2D.
|
| 31 |
+
- **Capa 2:** Convoluci贸n 2D (64 filtros, tama帽o 3x3), seguida de MaxPooling 2D.
|
| 32 |
+
- **Capa 3:** Convoluci贸n 2D (128 filtros, tama帽o 3x3), seguida de MaxPooling 2D.
|
| 33 |
+
- **Capa 4:** Convoluci贸n 2D (256 filtros, tama帽o 3x3), seguida de MaxPooling 2D.
|
| 34 |
+
- **Capa de Aplanado (Flatten):** Convierte las salidas 2D en un vector 1D.
|
| 35 |
+
- **Capa Densa:** Capa densa de 256 neuronas con activaci贸n ReLU.
|
| 36 |
+
- **Capa de Salida:** Capa densa con tantas neuronas como clases de frutas (3 clases en este caso: manzana, naranja, pl谩tano), usando activaci贸n softmax.
|
| 37 |
+
|
| 38 |
+
#### **Compilaci贸n del Modelo:**
|
| 39 |
+
El modelo fue compilado utilizando el optimizador **SGD** (Stochastic Gradient Descent) con una tasa de aprendizaje de 0.003 y momentum de 0.9. La funci贸n de p茅rdida utilizada es **categorical_crossentropy**, adecuada para tareas de clasificaci贸n multiclase.
|
| 40 |
+
|
| 41 |
+
#### **Regularizaci贸n:**
|
| 42 |
+
Se utiliz贸 **Dropout** en la capa densa para reducir el riesgo de sobreajuste (overfitting) durante el entrenamiento.
|
| 43 |
+
|
| 44 |
+
### 3. Entrenamiento del Modelo
|
| 45 |
+
|
| 46 |
+
El modelo fue entrenado durante 100 茅pocas con un tama帽o de batch de 8 im谩genes. Se aplic贸 un proceso de **data augmentation** (aumento de datos) durante el entrenamiento, lo cual permite mejorar la generalizaci贸n del modelo al generar variaciones en las im谩genes de entrenamiento (rotaciones, cambios de brillo, desplazamientos, etc.).
|
| 47 |
+
|
| 48 |
+
Durante el proceso de entrenamiento, se utiliz贸 la t茅cnica de **early stopping** para evitar el sobreajuste, deteniendo el entrenamiento si la p茅rdida de validaci贸n no mejoraba durante 7 茅pocas consecutivas.
|
| 49 |
+
|
| 50 |
+
### 4. Guardado y Carga del Modelo
|
| 51 |
+
|
| 52 |
+
Una vez entrenado, el modelo se guard贸 como un archivo `.h5` para ser utilizado posteriormente. Adem谩s, el modelo fue cargado a Hugging Face Model Hub para compartirlo con la comunidad.
|
| 53 |
+
|
| 54 |
+
#### **Archivo Guardado:**
|
| 55 |
+
El modelo se guard贸 como `modelo_frutas_transfer.keras` en el repositorio de Hugging Face.
|
| 56 |
+
|
| 57 |
+
### 5. Creaci贸n de la Demo en Hugging Face Spaces
|
| 58 |
+
|
| 59 |
+
Para crear una interfaz p煤blica para interactuar con el modelo, se utiliz贸 **Gradio**. Gradio es una biblioteca de Python que permite crear interfaces de usuario interactivas con facilidad.
|
| 60 |
+
|
| 61 |
+
#### **Interfaz Gradio:**
|
| 62 |
+
La demo permite cargar una imagen de fruta y el modelo devuelve la clasificaci贸n de la fruta (manzana, naranja o pl谩tano). La interfaz se implement贸 de la siguiente manera:
|
| 63 |
+
|
| 64 |
+
```python
|
| 65 |
+
import gradio as gr
|
| 66 |
+
import tensorflow as tf
|
| 67 |
+
from tensorflow.keras.models import load_model
|
| 68 |
+
from tensorflow.keras.preprocessing import image
|
| 69 |
+
import numpy as np
|
| 70 |
+
|
| 71 |
+
# Cargar el modelo
|
| 72 |
+
model = load_model('https://huggingface.co/imanolcb/basicFruitClassifier/resolve/main/modelo_frutas_transfer.keras')
|
| 73 |
+
|
| 74 |
+
# Funci贸n para la predicci贸n
|
| 75 |
+
def predict(img):
|
| 76 |
+
img = image.load_img(img, target_size=(150, 150))
|
| 77 |
+
img_array = image.img_to_array(img) / 255.0 # Normalizaci贸n
|
| 78 |
+
img_array = np.expand_dims(img_array, axis=0) # Cambiar la forma para predicci贸n
|
| 79 |
+
prediction = model.predict(img_array)
|
| 80 |
+
class_names = ['manzana', 'naranja', 'platano'] # Modificar con tus clases
|
| 81 |
+
predicted_class = class_names[np.argmax(prediction)]
|
| 82 |
+
return predicted_class
|
| 83 |
+
|
| 84 |
+
# Interfaz de Gradio
|
| 85 |
+
iface = gr.Interface(fn=predict,
|
| 86 |
+
inputs=gr.Image(type="filepath"),
|
| 87 |
+
outputs=gr.Text(),
|
| 88 |
+
live=True,
|
| 89 |
+
title="Clasificador de Frutas",
|
| 90 |
+
description="Cargar una imagen de fruta para clasificarla.")
|
| 91 |
+
|
| 92 |
+
# Iniciar la interfaz
|
| 93 |
+
iface.launch()
|
| 94 |
+
|