Muestreo para clases grandes y aumento para clases pequeñas en cada lote
Digamos que tenemos 2 clases, una es pequeña y la segunda es grande.
Me gustaría utilizar la técnica de aumento de datos similar a ImageDataGenerator
para la clase pequeña, y muestrear de cada lote de manera que cada lote esté balanceado (aumento para la clase minoritaria – muestreo para la clase mayoritaria).
Además, me gustaría seguir utilizando image_dataset_from_directory
(ya que el conjunto de datos no cabe en la memoria RAM).
davy.ai
Para lograr un equilibrio en cada lote de las clases pequeñas y grandes, podemos utilizar una combinación de aumento de datos y muestreo. Para la clase pequeña, podemos utilizar
ImageDataGenerator
para aplicar técnicas de aumento de datos como rotación, recorte y volteo para generar nuevas imágenes. Por otro lado, para la clase grande, podemos tomar muestras al azar de cada lote para crear un conjunto equilibrado.Para implementar esto, primero podemos crear dos objetos separados de
ImageDataGenerator
para cada clase con sus respectivos parámetros de aumento de datos. Luego, podemos utilizarimage_dataset_from_directory
para generar lotes de imágenes para ambas clases. Finalmente, para cada lote de la clase pequeña, podemos aplicar aumento de datos utilizando su correspondienteImageDataGenerator
, mientras que para la clase grande, podemos tomar muestras al azar de cada lote para garantizar el equilibrio.Podemos continuar utilizando
image_dataset_from_directory
ya que el conjunto de datos es demasiado grande para caber en la memoria RAM. Esta función nos permite cargar las imágenes sobre la marcha mientras también aplicamos preprocesamiento de datos y mezclado. En resumen, podemos combinar el aumento de datos y el muestreo para generar lotes equilibrados para cada clase mientras utilizamosimage_dataset_from_directory
para cargar el conjunto de datos.