imanolcb commited on
Commit
955474c
verified
1 Parent(s): a77c1c4

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +94 -13
README.md CHANGED
@@ -1,13 +1,94 @@
1
- ---
2
- title: FruitClassifier
3
- emoji: 馃殌
4
- colorFrom: gray
5
- colorTo: yellow
6
- sdk: gradio
7
- sdk_version: 5.27.1
8
- app_file: app.py
9
- pinned: false
10
- short_description: Fruits clasiffier
11
- ---
12
-
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+