Machine Learning para desarrollo móvil-parte 1

Victoria Ubaldo
5 min readOct 13, 2020

En este tutorial revisaremos un caso práctico en usar aprendizaje automático o machine learning (ML) en un aplicativo móvil. El proyecto será “Clasificar imágenes de flores en Android”.

Me base en los codelabs “TensorFlow For Poets” y “Recognize Flowers with TensorFlow Lite on Android” , comentaré aquí las variaciones que hice en algunos pasos , notas o dificultades que encontré y luego pude resolver. Tener bases de Python u otro lenguaje de programación será suficiente para seguir los pasos, lo importa es tener mucha curiosidad! :)

En esta primera parte vamos a crear el modelo.

Introducción a Machine Learning

Como desarrolladores tenemos una forma de resolver problemas, usamos las reglas (if,else) y los datos y luego obtenemos respuestas.

Por ejemplo, si queremos crear un sistema que realice el reconocimiento de actividades de una persona y tenemos las velocidades, tradicionalmente programaríamos así:

Reconocimiento de actividad

En la programación tradicional, las reglas serían “speed< 4” ,la data sería el input que le damos al sistema es decir el “speed” o velocidad y la respuesta sería “Walking” o “Running”.

Programación Tradicional

En machine learning tendremos lo contrario 😮 :

Esquema de Machine Learning

Entonces, el modelo que construiremos obtendrá los datos (imágenes, voz, montos, etc)y obtendremos las predicciones.

Machine Learning es programar con datos :)

Los Datos

Para el codelab usaremos un conjunto de datos (dataset) de flores para ingresarlas al modelo, aproximadamente 3,670 imágenes. Vemos que hay imágenes de rosas, tulipanes, girasoles, etc.

Dataset de imágenes

Para tus propios ejemplos podrías buscar datasets en repositorios públicos como Kaggle, Google AI, UCI ML Repository.

¿Cómo trabaja el modelo?

Lo que hará nuestra aplicación será detectar una imagen y clasificarla en alguno de estos tipos. Entonces , la imagen primero debe ser preprocesada (en un tamaño de 224 x 224) . Además de características como forma, color, sombra, grosor ,etc de la imagen, en la capa oculta o “Hidden layer” estarán el conjunto de características computacionales que el modelo va detectar para clasificar. Este tipo de aprendizaje se llama aprendizaje profundo o deep learning.

Modelo de Clasificación de Imágenes

El output será la probabilidad de que la imagen detectada sea una clase o tipo. Es decir si ingresamos una imagen de una rosa, en el output nos dará en Roses un 98% y en los demás una probabilidad menor.

Y para casos de detección de imagenes, nos ayudará Tensorflow !

Tensorflow es una biblioteca de machine learning creada por Google, es Open Source y muy útil para deep learning. Usaremos su modelo previamente entrenado MobileNet V2, preciso para ejercicios de detección de imágenes.

El codelab nos da acceso a un archivo de Google Colab con código en Python, está todo lo que necesitaremos. Te muestro que es lo que vamos a obtener luego de correr el modelo MobileNet V2 :

El modelo contiene los siguientes parámetros : optimizer, se utiliza para mejorar la velocidad y el rendimiento del modelo; loss ,es un método para evaluar qué tan bien el algoritmo modela los datos (0 es mejor) y la métrica, la medida para la exactitud del modelo.

Parámetros del modelo

Luego de ejecutarlo y re-entrenarlo varias veces, vemos que en promedio sus resultados son : Accuracy 0.87 y Loss 0.4 , son números aceptables para nuestro problema.

Ejecución del modelo

Revisando el resumen, nos enfocamos en la cantidad de parámetros (Param) o características que el modelo ha encontrado (2,257,984) y luego seleccionado ( solo 368,837). En un ojo humano podríamos decir que un girasol es amarillo, tiene tal forma de pétalos y listo. Computacionalmente, existen más de 3mil características para detectar si es un tipo de flor, wow 😮

Resultados del modelo

¿Cómo pasamos el modelo a nuestro proyecto móvil?

Convirtiendo el modelo a TFLite. Guardamos el modelo usando “tf.saved_model.save”, convirtiendo el modelo guardado a un formato compatible con TFLite.

Archivos a copiar a nuestro proyecto móvil

En la siguiente parte veremos la integración de estos archivos en un proyecto Android y revisaremos los resultados en nuevos datasets.

Gracias por llegar hasta aquí :)

Recursos y referencias :

--

--

Victoria Ubaldo

SW Engineer & DS enthusiast. Books, dogs, travel and code. WTM Ambassador Lima.