Always Visualize A Batch From Your Data Loader

Un frase que cada ingeniero trabajando en IA escucha durante el trabajo es:

Garbage In, Garbage Out

However, despite that, something that I still see often enough in the Computer Vision industry and no doubt affects other machine learning disciplines as well is a complete lack of checking what is coming out of the data loader. In this article, I’ll discuss why it is important to always visualize a batch from your 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.

So How Do I Visualize a Batch?

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.  If you use the PyTorch Lightning Wandb Logger, it’s even easier because the logger provides a log_image function.  One thing you could even consider is to automate logging a batch of images before each training run so then you can go back and see what a batch of images looks like if a training run doesn’t go well.

Cuídense

When you visualize your batch, make sure to undo normalization or it will be hard to tell what your images look like.  Likewise, don’t turn off normalization just to visualize and then forget to normalize before passing to your model.

Conclusión

Putting garbage into your model can be detrimental to getting any sort of good performance.  Always visualize your batches before you start training!

For more articles on Pytorch, take a look at some of my other content!

Comentarios

Deja un comentario

es_ARES