Un frase que cada ingeniero trabajando en IA escucha durante el trabajo es:
Garbage In, Garbage Out
Significa "Pon basura adentro y lo que sale también será basura". Sin embargo, una cosa que todavía veo frecuentemente en vision por computador, y seguro que existe en otras disciplinas de aprendizaje mecánica también, es no confirmar los datos salidendo del data loader.
Una Historia
Una vez estaba trabajando con un cliente con un modelo de detección de objetos que tenia rendimiento malo, y no lo podían mejorar. Trataban de cambiar los parámetros de aumentación, cambiar los hiperparámetros del modelo y añadir más datos, pero nada mejoró al rendimiento.
Al fin, cuando yo tenía la oportunidad de mirar al código, los aumentaciones me parecían un poco extraños. Busqué un poco y encontré que el modelo originalmente fue escrito en Chainer y después fue cambiado a Tensorflow. Cuando fue cambiado a Tensorflow, el ingeniero que lo hizo usaba las funciones exactas de Chainer sin cambiarlos.
La primera cosa que hice fue implementar a una función para visualizar un batch del data loader de entrenamiento y mostrar los cuadros delimitadores. Resultó en que las funciones de aumentación no funcionaban correctamente y estaban cambiando a los cuadros delimitadores de manera extraña. Entonces los cuadros no estaban en los mismos lugares que los objetos que representaban.
Después de eso, saqué todas las funciones de Chainer y les reemplacé con funciones de un librario de aumentación que funciona bien con Tensorflow. Lo confirmé otra vez más con visualizador y entrené el modelo otra vez. Desde ese punto, el rendimiento del model mejoró y el cliente aprendio sobre el concepto de Garbage In, Garbage Out.
Y Como Puedo Visualizar?
El primer método, y lo mas simple, es usar un librario como matplotlib o guardarlo como imagen usando OpenCV. Típicamente combino todos los imágenes de un batch en un imagen grande y lo guardo así. Lo importante es dibujar los cuadros delimitadores antes de guardarlo!
Otra manera muy buena es usar logging por Weights and Biases. Si usas el PyTorch Lightning Wandb Logger, es muy simple porque tiene una función que se llama "log_image" que podés usar para guardarlo. Una cosa que podés considerar es hacer logging de los imágenes automáticamente cada vez que empezás el entrenamiento, así que podés verlo si el entramiento no pasa bien.
Cuídense
Cuando visualizás un batch, recordáte que sacás la normalización. Si no, no vas a entender lo que los imágenes contienen. Al mismo tiempo, necesitás la normalización para entrenar, y por eso no sacálo cuando estás entrenando.
Conclusión
Poner basura en el modelo puede destruir el rendimiento. Siempre visualiza un batch antes de empezar entrenamiento!
Deja un comentario
Lo siento, tenés que estar conectado para publicar un comentario.
Connect with
Login with Linkedin