Crea un modelo personalizado para el clasificador de imágenes

1. Antes de comenzar

En el codelab anterior, creaste una app para iOS y Android que usó un modelo básico de etiquetado de imágenes que reconoce cientos de clases de imágenes. Reconocía la imagen de una flor de forma muy genérica, ya que se observan pétalos, una flor, una planta y un cielo.

Para actualizar la app a fin de que reconozca, por ejemplo, flores, margaritas o rosas, necesitas un modelo personalizado entrenado con muchos ejemplos de cada tipo de flor que deseas reconocer.

Requisitos previos

  • El codelab anterior de esta ruta de aprendizaje.

Qué compilarás y aprenderás

  • Cómo entrenar un modelo personalizado de clasificador de imágenes con TensorFlow Lite Model Maker

Requisitos

  • No se necesita ningún hardware en particular: todo se puede completar con Google Colab en el navegador.

2. Comenzar

Ya se preparó todo el código que debes seguir. Puedes usarlo aquí para ejecutarlo. Si no tienes acceso a Google Colab, puedes clonar el repositorio y usar el notebook llamado CustomImageClassifierModel.ipynb, que se encuentra en el directorio ImageClassificationMobile->colab.

Si tienes muchos ejemplos de flores en particular, es relativamente fácil entrenar un modelo con TensorFlow Lite Model maker para que lo reconozca.

La manera más sencilla de hacerlo es crear un archivo ZIP o .tgz que contenga las imágenes ordenadas en directorios. Por ejemplo, si usas imágenes de margaritas, dientes de león, rosas, girasol y tulipanes, puedes organizarlos en directorios como el siguiente:

4ee12554e75b103f.png

Combínalo y alójalo en un servidor para poder entrenar modelos con él. En este lab, usará una que se preparó para usted.

En este lab, se asumirá que usa Google Colab para entrenar el modelo. Encontrarás colab en colab.research.google.com. Si usas otro entorno, es posible que debas instalar muchas dependencias, no solo TensorFlow.

3. Instala y, luego, importa dependencias

  1. Instala TensorFlow Lite Model Maker. Puedes hacerlo con una instalación de pip. &> /dev/null al final solo suprime el resultado. Model Maker da como resultado muchas cosas que no son relevantes de inmediato. Se suprimió para que puedas enfocarte en la tarea en cuestión.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
  1. A continuación, debes importar las bibliotecas que necesitas usar y asegurarte de que usas TensorFlow 2.x:
# Imports and check that we are using TF2.x
import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Ahora que el entorno está listo, es momento de comenzar a crear el modelo.

4. Descarga y prepara tus datos

Si sus imágenes están organizadas en carpetas, y esas carpetas están comprimidas, si descarga el archivo ZIP y descomprime, automáticamente obtendrá las imágenes etiquetadas según la carpeta en la que se encuentren. Se hará referencia a este directorio como data_path.

data_path = tf.keras.utils.get_file(
      'flower_photos',
      'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
      untar=True)

Esta ruta de datos se puede cargar en un modelo de red neuronal para el entrenamiento con la clase ImageClassifierDataLoader de TensorFlow Lite Model Maker. Simplemente apúntala a la carpeta y listo.

Un elemento importante en los modelos de entrenamiento con aprendizaje automático es no usar todos tus datos para el entrenamiento. Quédese un poco retenido para probar el modelo con datos que no haya visto antes. Esto es fácil de hacer con el método de división del conjunto de datos que regresa de ImageClassifierDataLoader. Si pasas un 0.9, obtendrás el 90% de ellos como datos de entrenamiento y el 10% como datos de prueba:

data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)

Ahora que sus datos están preparados, puede crear un modelo con ellos.

5. Crea el modelo clasificador de imágenes

Model Maker abstrae muchos de los detalles de diseñar la red neuronal para que no tengas que ocuparte del diseño de la red y cosas como convoluciones, densas, relu, planas, funciones de pérdida y optimizadores. En el caso de un modelo predeterminado, simplemente se puede usar una sola línea de código para crear un modelo mediante el entrenamiento de una red neuronal con los datos proporcionados:

model = image_classifier.create(train_data)

Cuando lo ejecutes, verás un resultado similar al siguiente:

Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024
_________________________________________________________________
dropout_2 (Dropout)          (None, 1280)              0
_________________________________________________________________
dense_2 (Dense)              (None, 5)                 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181

Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911

Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133

Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287

Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385

La primera es mostrar la arquitectura del modelo. Lo que hace Model Maker en segundo plano se denomina aprendizaje por transferencia, que utiliza un modelo previamente entrenado como punto de partida y simplemente toma las cosas que ese modelo aprendió sobre cómo se construyen las imágenes y las aplica. para entender estas 5 flores. Puede ver lo siguiente en la primera línea:

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

La clave es la palabra "Hub", que nos indica que este modelo proviene de TensorFlow Hub. De forma predeterminada, TensorFlow Lite Model Maker usa un modelo llamado “MobileNet”, que está diseñado para reconocer 1,000 tipos de imágenes. En este caso, la lógica es que la metodología que usa, al aprender "funciones" para distinguir entre 1,000 clases, se puede reutilizar. Las mismas "características" se pueden mapear a las 5 clases de flores, de modo que no es necesario aprenderlas desde cero.

El modelo pasó por 5 ciclos, en los que un ciclo es un ciclo completo de entrenamiento en el que la red neuronal intenta hacer coincidir las imágenes con sus etiquetas. Cuando pasó 5 ciclos, en 1 minuto, fueron 93.85% precisos en los datos de entrenamiento. Como hay 5 clases, una conjetura aleatoria sería un 20% precisa, por lo que ese es el progreso. (También informa de un número "perdido", por el momento, lo ignorarás de manera segura).

Anteriormente dividiste los datos en datos de entrenamiento y prueba, de modo que puedas obtener un cálculo sobre el rendimiento de la red con datos que no vio antes; un mejor indicador de cómo podría ser el rendimiento en el mundo real si usas model.evaluate en los datos de prueba:

loss, accuracy = model.evaluate(test_data)

El resultado es similar al siguiente:

12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801

Observa la exactitud aquí. Es del 88.01%, por lo que el modelo predeterminado en el mundo real debería tener ese nivel de exactitud. Eso no está mal para el modelo predeterminado con el que se entrenó, aproximadamente, en un minuto. Por supuesto, es probable que hagas muchos ajustes para mejorar el modelo, y eso es un concepto científico en sí mismo.

6. Exporta el modelo

Ahora que el modelo está entrenado, el siguiente paso es exportarlo en el formato .tflite que puede usar una aplicación para dispositivos móviles. El creador de modelos proporciona un método de exportación fácil de usar, solo debes especificar el directorio al que deseas enviar.

Este es el código:

model.export(export_dir='/mm_flowers')

Si ejecutas esto en Google Colab, podrás ver el modelo haciendo clic en el ícono de carpeta a la izquierda de la pantalla:

cc5b9988775633b4.png

Desde aquí, obtendrá una lista del directorio actual. Usa el botón indicado para mover "hacia arriba" un directorio:

51e6ac47c992146.png

En el código que especificaste para exportar a mm_flowers, Ábrelo y verás un archivo llamado "model.tflite". Este es tu modelo entrenado.

57bad87f294fd189.png

Selecciona el archivo y verás una ventana emergente de 3 puntos. Haz clic en estos para obtener un menú contextual, y puedes descargar el modelo desde allí.

aee14ad10c4a8a1a.png

Después de unos momentos, se descargará tu modelo en la carpeta de descargas.

7. Felicitaciones

Ya puede integrarla a su aplicación para dispositivos móviles. Lo hará en el próximo lab.