5 cosas que debes saber antes de personalizar tu primer modelo de aprendizaje automático con MediaPipe Model Maker

MAY 04, 2023
Jen Person Developer Relations Engineer

Si estás leyendo este blog, probablemente, te interese crear un modelo personalizado de aprendizaje automático (ML). Recientemente, pasé por el proceso yo mismo, ya que creé un detector de perros personalizado para acompañar un codelab, Crear una app web de detección de objetos personalizada con MediaPipe. Como cualquier nueva tarea de codificación, el proceso implicó un poco de prueba y error, porque tuve que averiguar qué es lo que estaba haciendo. Para minimizar la parte de los errores de la experiencia de “prueba y error”, me complace compartir cinco conclusiones de mi experiencia de entrenamiento de modelos.


1. Preparar los datos lleva mucho tiempo. Asegúrate de tener tiempo suficiente.

Preparar los datos para el entrenamiento será una tarea diferente según el tipo de modelo que personalices. En general, hay un paso para obtener datos y un paso para anotarlos.

Obtener datos

Encontrar suficientes puntos de datos que representen mejor tu caso de uso puede ser un desafío. Por un lado, debes asegurarte de contar con los derechos para usar cualquier imagen o texto que incluyas en tus datos. Verifica la licencia de tus datos antes del entrenamiento. Una forma de resolverlo es brindar tus propios datos. Tengo cientos de fotos de mis perros, por lo que elegirlas para mi detector de objetos fue muy simple. También puedes buscar conjuntos de datos existentes en Kaggle. Hay muchas opciones allí que cubren una amplia variedad de casos de uso. Si tienes suerte, encontrarás un conjunto de datos que satisfaga tus necesidades e, incluso, es posible que ya tenga anotaciones.

Anotar datos

MediaPipe Model Maker acepta datos donde cada entrada tiene un archivo XML correspondiente que enumera sus anotaciones. Por ejemplo:

Hay varios programas de software que pueden ayudarte con la anotación. Esto es especialmente útil cuando es necesario resaltar determinadas áreas en imágenes. Algunos programas de software están diseñados para permitir la colaboración: una IU intuitiva e instrucciones dirigidas a los anotadores permiten que se pueda solicitar la ayuda de otros. Una opción común de código abierto es Label Studio, que es lo que usé para anotar mis imágenes.

Es esperable que este paso tome mucho tiempo, pero ten en cuenta que, en realidad, tomará más tiempo de lo que se espera.

2. Simplifica tu modelo personalizado.

Si eres como yo, tendrás una idea increíble planeada para tu primer modelo personalizado. Mi perro Ben fue la inspiración de mi primer modelo. Lo rescaté de un refugio local de golden retrievers, pero, cuando le hice una prueba de ADN, ¡resultó que no tiene nada de golden retriever! Mi primera idea fue crear un detector de golden retriever, una solución que pueda decirte si un perro es “golden retriever” o “no golden retriever”. Pensé que podría ser divertido ver cómo el modelo consideraba a Ben, pero rápidamente me di cuenta de que debería contar con muchas más imágenes de perros de las que tenía para poder aplicar el modelo también en otros perros. Y tendría que asegurarme de que pudiera identificar con precisión a los golden retrievers de todos los tonos. Después de invertir horas en este proyecto, me di cuenta de que necesitaba simplificar el proceso. Fue entonces cuando decidí intentar crear una solución solo para mis tres perros. Tenía muchas fotos para elegir, así que seleccioné las que mejor mostraban los detalles de los perros. En este caso, la solución fue mucho más exitosa y una gran prueba de concepto para mi modelo dedicado a los golden retrievers, porque me niego a abandonar esta idea.

Estas son algunas formas de simplificar tu primer modelo personalizado:

  1. Comienza con menos etiquetas. Elige entre 2 y 5 clases para asignarlas a tus datos.
  2. Deje de lado los casos límite. Si cuentas con una formación en ingeniería de software, estás acostumbrado a prestar atención a los casos límite y a abordarlos. En el aprendizaje automático, es posible que introduzcas algunos errores o comportamientos extraños cuando intentes entrenar casos límite. Por ejemplo, no elegí ninguna foto de los perros en la que no se vean sus cabezas. Claro, me gustaría un modelo que pueda detectar a mis perros identificando la parte trasera. Pero no incluí en mi entrenamiento las fotos parciales de los perros y resulta que el modelo igual puede detectarlas.
5things2
La app web es capaz de identificar a ACi en una imagen incluso cuando no se ve la cabeza
  1. Incluye algunos casos límite en tus pruebas y prototipos para ver cómo los maneja el modelo. En caso contrario, no te preocupes por ellos.
  2. Un poco de datos ayuda mucho. Como MediaPipe Model Maker utiliza el aprendizaje de transferencia, necesitas muchos menos datos para el entrenamiento que si estuvieras entrenando un modelo desde cero. Trata de obtener 100 ejemplos para cada clase. Tal vez puedas entrenar con menos de 100 ejemplos, si los datos no tienen muchas iteraciones posibles. Por ejemplo, mi colega entrenó un modelo para detectar dos figuras diferentes de Android. No necesitaba demasiadas fotos porque no hay tantos ángulos para ver las figuras. Es posible que necesites más de 100 ejemplos para comenzar, si es que necesitas más para mostrar las posibles iteraciones de los datos. Por ejemplo, un golden retriever puede tener muchos colores. Es posible que necesites varias docenas de ejemplos de cada color y poder asegurarte de que el modelo pueda identificarlos con precisión, lo que requiere más de 100 ejemplos.

Entonces, cuando se trata de tu primera experiencia entrenamiento de aprendizaje automático, recuerda que la clave es simplificar, simplificar, simplificar.

Simplificar.

Simplificar.

3. Espera que se produzcan varias iteraciones de entrenamiento.

Por mucho que me gustaría decirte con confianza que tu modelo generará los resultados correctos la primera vez que lo entrenes, probablemente no suceda. Si te tomas tu tiempo para elegir muestras de datos y anotaciones, definitivamente mejorará tu tasa de éxito, aunque hay muchos factores que pueden cambiar la forma en que se comporta el modelo. Es posible que debas comenzar con una arquitectura de modelo diferente para alcanzar la precisión deseada. O bien, puedes probar una división diferente de los datos de entrenamiento y validación. Tal vez debas agregar más muestras a tu conjunto de datos. Por suerte, el aprendizaje de transferencia con MediaPipe Model Maker suele tomar varios minutos, por lo que puedes cambiar las nuevas iteraciones con bastante rapidez.

4. Crea un prototipo fuera de tu app.

Cuando termines de entrenar un modelo, es probable que sientas mucha emoción y ansiedad por agregarlo a tu app. Sin embargo, te recomiendo que primero pruebes tu modelo en MediaPipe Studio por las siguientes razones:

  1. Cada vez que realices un cambio en tu app, es probable que tengas que esperar a que se complete algún paso de compilación y/o creación. Incluso con una recarga en caliente, puede haber un tiempo de espera. Entonces, si decides modificar una opción de configuración, como el umbral de puntuación, te tocará esperar con cada ajuste que hagas y ese tiempo puede incrementarse. No vale la pena esperar a que se desarrolle una app completa cuando solo intentas probar un componente. Con MediaPipe Studio, puedes probar opciones y ver resultados con una latencia muy baja.
  2. Si no obtienes los resultados esperados, es difícil determinar con certeza si el problema está relacionado con tu modelo, la configuración de tareas o la app.

Con MediaPipe Studio, pude probar rápidamente diferentes umbrales de puntuación en varias imágenes para determinar qué umbral debía usar en mi aplicación. También eliminé mi propia app web como factor en este rendimiento.

5things3

5. Realiza cambios incrementales.

Después de obtener datos de calidad, simplificar tu caso de uso, entrenar el modelo y crear prototipos, es posible que debas repetir el ciclo para obtener el resultado correcto. Cuando eso suceda, elige solo una parte del proceso que desees cambiar y haz un pequeño cambio. En mi caso, había muchas fotos de mis perros que se tomaron en el mismo sofá azul. Si el modelo comenzó a incorporar este sofá, ya que suele estar comprendido dentro del cuadro delimitador, podría afectar la forma en que categorizó las imágenes en las que los perros no están en el sofá. En vez de descartar todas las fotos en las que se ve el sofá, eliminé solo un par y agregué aproximadamente 10 más de cada perro donde no están en el sofá. De esta manera, mejoraron mucho mis resultados. Si intentas hacer un gran cambio de inmediato, es posible que termines generando nuevos problemas, en lugar de resolverlos.

¡Anímate y monetiza!

Con estos consejos en mente, ¡es hora de que personalices tu propia solución de aprendizaje automático! Puedes personalizar tu modelo de clasificación de imágenes, reconocimiento de gestos, clasificación de texto o detección de objetos para usarlo en las tareas de MediaPipe.

Si deseas compartir algo de lo que aprendiste durante el entrenamiento de tu primer modelo, publica los detalles en LinkedIn junto con un enlace a esta publicación del blog y, luego, etiquétame. ¡Tengo muchas ganas de ver lo que aprendes y creas!