En esta última parte de mi serie, compartiré lo que he aprendido para seleccionar un modelo para Clasificación de imágenes y cómo ajustar ese modelo. También mostraré cómo puede aprovechar el modelo para acelerar su proceso de etiquetado y, finalmente, cómo justificar sus esfuerzos generando estadísticas de uso y rendimiento.
En Parte 1Discutí el proceso de etiqueta sus datos de imagen que usa en su proyecto de clasificación de imágenes. Mostré cómo definir imágenes “buenas” y crear subclases. En Parte 2Repasé varios conjuntos de datos, más allá de los conjuntos habituales de prueba de validación de tren, con conjuntos de referencia, más cómo manejar datos sintéticos e imágenes duplicadas. En Parte 3Expliqué cómo aplicar diferentes criterios de evaluación a un modelo capacitado versus un modelo implementado, y utilizando puntos de referencia para determinar cuándo implementar un modelo.
Selección de modelos
Hasta ahora, he centrado mucho tiempo en etiquetar y curar el conjunto de imágenes, y también evaluar el rendimiento del modelo, que es como poner el carro antes que el caballo. No estoy tratando de minimizar lo que se necesita para diseñar una red neuronal masiva: esta es una parte muy importante de la aplicación que está construyendo. En mi caso, pasé unas semanas experimentando con diferentes modelos disponibles antes de resolver uno que se ajuste a la factura.
Una vez que elige una estructura de modelo, generalmente no realiza cambios importantes en ella. Para mí, seis años en la implementación, todavía estoy usando el mismo. Específicamente, elegí el Inception V4 porque tiene un gran tamaño de imagen de entrada y un número adecuado de capas para recoger características sutiles de imagen. También realiza una inferencia lo suficientemente rápido en la CPU, por lo que no necesito ejecutar hardware costoso para servir al modelo.
Su kilometraje puede variar. Pero nuevamente, la conclusión principal es que centrarse en sus datos pagará dividendos en lugar de buscar el mejor modelo.
Sintonia FINA
Compartiré un proceso que encontré que funciona extremadamente bien. Una vez que decidí usar el modelo, inicialicé al azar los pesos y dejé que el modelo entrenara para aproximadamente 120 época antes de las mejoras de la meseta con una precisión bastante modesta, como el 93%. En este punto, realicé la evaluación del modelo entrenado (ver Parte 3) para limpiar el conjunto de datos. También incorporé nuevas imágenes como parte de la tubería de datos (ver Parte 1) y preparó los conjuntos de datos para la próxima ejecución de entrenamiento.
Antes de comenzar la próxima ejecución de entrenamiento, simplemente tomo el último modelo entrenado, revelo la capa de salida y la vuelvo a agregar con pesos aleatorios. Dado que el número de clases de salida aumenta constantemente en mi caso, tengo que hacer estallar esa capa de todos modos para tener en cuenta el nuevo número de clases. Es importante destacar que dejo el resto de los pesos entrenados como estaban y les permito continuar actualizando para las nuevas clases.
Esto permite que el modelo entrene mucho más rápido antes de que las mejoras se estancen. Después de repetir este proceso docenas de veces, la capacitación llega a Plateau después de unas 20 épocas, ¡y la precisión de la prueba puede alcanzar el 99%! El modelo se está basando en las características de bajo nivel que estableció a partir de las ejecuciones anteriores mientras vuelve a aprender los pesos de salida para evitar el sobreajuste.
Me tomó un tiempo confiar en este proceso, y durante algunos años entrenaría desde cero cada vez. Pero después de intentar esto y ver el tiempo de entrenamiento (sin mencionar el costo de la GPU de la nube) disminuir mientras la precisión continuaba aumentando, comencé a aceptar el proceso. Más importante aún, sigo viendo las métricas de evaluación del modelo desplegado de rendimiento sólido de retorno.
Aumento
Durante la capacitación, puede aplicar transformaciones en sus imágenes (llamada “Aumento”) para brindarle más diversidad de su conjunto de datos. Con nuestros animales del zoológico, es bastante seguro aplicar el fracaso izquierdo-derecho, ligeras rotaciones en el sentido de las agujas del reloj y en sentido antihorario, y un ligero tamaño de tamaño que se acercará y saldrá.
Con estas transformaciones en mente, asegúrese de que sus imágenes aún puedan actuar como buenas imágenes de entrenamiento. En otras palabras, una imagen en la que el sujeto ya es pequeño será aún más pequeño con un zoom, por lo que probablemente desee descartar el original. Además, algunas de sus imágenes originales pueden necesitar ser reorientadas por 90 grados para estar en posición vertical, ya que una rotación adicional las haría parecer inusuales.
Identificación a granel
Como mencioné en Parte 1puede usar el modelo capacitado para ayudarlo a etiquetar las imágenes una a la vez. Pero la forma de llevar esto aún más lejos es que su modelo recién entrenado identifique cientos a la vez mientras construye una lista de los resultados que luego puede filtrar.
Por lo general, tenemos grandes colecciones de no etiquetado Imágenes que han entrado a través del uso regular de la aplicación o algunos otros medios. Retirarse de Parte 1 Asignando etiquetas “desconocidas” a imágenes interesantes, pero no tienes idea de lo que es. Al usar el método de identificación masiva, podemos examinar las colecciones rápidamente para apuntar al etiquetado una vez que sabemos lo que son.
Al combinar sus recuentos de imágenes actuales con los resultados de identificación a granel, puede apuntar a clases que necesitan cobertura ampliada. Aquí hay algunas formas en que puede aprovechar la identificación masiva:
- Aumentar los recuentos de imágenes bajas – Algunas de sus clases pueden haber hecho el corte para ser incluido en el conjunto de capacitación, lo que significa que necesita más ejemplos para mejorar la cobertura. Filtrar para imágenes que tienen recuentos bajos.
- Reemplazar imágenes escenificadas o sintéticas -Algunas clases se pueden construir completamente utilizando imágenes no reales del mundo. Estas imágenes pueden ser lo suficientemente buenas como para comenzar, pero pueden causar problemas de rendimiento en el futuro porque se ven diferentes de lo que normalmente aparece. Filtrar para clases que dependen de imágenes escenificadas.
- Encuentra clases parecidas – Una clase en su conjunto de datos puede parecerse a otra. Por ejemplo, supongamos que su modelo puede identificar un antílope, y eso parece una gacela que su modelo aún no puede identificar. Establecer un filtro para antílope y una puntuación de confianza más baja puede revelar imágenes de gacela que puede etiquetar.
- Etiquetas desconocidas – Es posible que no haya sabido cómo identificar las docenas de lindas imágenes de Wallaby, por lo que las guardó bajo “desconocido” porque era una buena imagen. Ahora que sabe qué es, puede filtrar por su canguro parecido y agregar rápidamente una nueva clase.
- Eliminación de masa de puntajes bajos – Como una forma de limpiar su gran colección de imágenes no marcadas que no tienen nada que valga la pena etiquetar, configure un filtro para los puntajes más bajos.
Carrera de entrenamiento desechable
Recuerde la decisión que tomé para tener cortes de imagen de Parte 2que nos permite garantizar un número adecuado de imágenes de ejemplo de una clase antes de entrenar y servir un modelo para el público. El problema es que puede tener una serie de clases que son justo Debajo de su corte (en mi caso, 40) y no lo convierta en el modelo.
La forma en que me acerco a esto es con una carrera de entrenamiento “desechable” que no tengo la intención de mudarme a la producción. Disminuiré el corte inferior de 40 a quizás 35, construiré mis conjuntos de prueba de validación de tren, luego entrenaré y evaluaré como lo hago normalmente. ¡La parte más importante de esto es la identificación a granel al final!
Existe la posibilidad de que en algún lugar de la gran colección de imágenes no marcadas encontraré las pocas que necesito. Hacer la identificación masiva con este modelo desechable ayuda a encontrarlos.
Informes de rendimiento
Un aspecto muy importante de cualquier aplicación de aprendizaje automático es poder mostrar informes de uso y rendimiento. Es probable que su gerente desee ver cuántas veces se está utilizando la aplicación para justificar el gasto, y usted, como ingeniero de ML, querrá ver cómo se está desempeñando el último modelo en comparación con el anterior.
Debe construir el inicio de sesión en su modelo para registrar cada transacción que pasa por el sistema. Además, las evaluaciones manuales de Parte 3 debe grabarse para que pueda informar sobre el rendimiento de cosas como la precisión con el tiempo, por versión del modelo, por puntajes de confianza, por clase, etc. Podrá detectar tendencias y hacer ajustes para mejorar la solución general.
Hay muchas herramientas de informes, por lo que no recomendaré una sobre la otra. Solo asegúrese de recopilar tanta información como pueda para construir estos paneles. Esto justificará el tiempo, el esfuerzo y el costo asociados con el mantenimiento de la aplicación.
Conclusión
Cubrimos mucho terreno a través de esta serie de cuatro partes sobre la construcción de un proyecto de clasificación de imágenes e implementándolo en el mundo real. Todo comienza con los datos, y al invertir el tiempo y el esfuerzo para mantener la biblioteca de imágenes de la más alta calidad, puede alcanzar niveles impresionantes de rendimiento del modelo que ganen la confianza y la confianza de sus socios comerciales.
Como Ingeniero de aprendizaje automáticousted es el principal responsable de construir e implementar su modelo. Pero no se detiene allí: sumérgete en los datos. Cuanto más familiarizado esté con los datos, mejor comprenderá las fortalezas y debilidades de su modelo. Eche un vistazo de cerca a las evaluaciones y úselas como una oportunidad para ajustar el conjunto de datos.
Espero que estos artículos te hayan ayudado a encontrar nuevas formas de mejorar tu propio proyecto de aprendizaje automático. Y por cierto, no dejes que la máquina haga todo el aprendizaje, como humanos, nuestro trabajo es continuar nuestro propio aprendizaje, ¡así que no te detengas nunca!
Gracias por llevar esta inmersión profunda conmigo en un enfoque basado en datos para la optimización del modelo. Espero sus comentarios y cómo puede aplicar esto a su propia aplicación.