Preprocesamiento de imágenes de entrada

Contenido del Bootcamp Dirigido por: | Última modificación: 30 de septiembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Un preprocesamiento de imágenes de entrada es un conocimiento base dentro del manejo Deep Learning en el procesamiento de los datos. De manera que todo buen data scientist debe tener en cuenta sus procesos para facilitar el análisis del Big Data.

Por este motivo, en el desarrollo de este post, te presentamos cómo funciona el preprocesamiento de imágenes de entrada para que puedas implementarlo una vez vayas a realizar tu estudio.

Preprocesamiento de imágenes de entrada

Para entender el preprocesamiento de imágenes de entrada, primero debes partir de que lo más importante es preprocesar los datos para facilitarle la faena lo máximo posible a nuestra red.

Para llevar a cabo este preprocesamiento de imágenes de entrada, se suelen hacer dos cosas:

Centrar los datos

Centrar los datos te ayuda a calcular la media del dataset y restársela. Cuando trabajamos con imágenes, se puede calcular la media completa del dataset y restársela directamente, o se puede calcular la media de cada canal de la imagen y restárselo a cada canal.

Normalizar los datos

Dentro del preprocesamiento de imágenes de entrada, se cuenta con la normalización de los datos para conseguir que todos los datos tengan aproximadamente la misma escala.

Para normalizar los datos podrás contar con dos formas comunas:

  • La división de cada dimensión por su desviación estándar, después de haber sido centrados los datos, es decir, de haber restado la media en el estudio.
  • En segundo lugar, normalizar para que el mínimo y el máximo de cada dimensión sean -1 y 1. Esto tiene sentido si vamos a partir de datos con diferentes escalas, aunque nosotros sabemos que deberían ser parecidas, puesto que tienen una importancia muy similar para el algoritmo. En el caso de las imágenes, sabemos que los valores que pueden tomar van del 0 al 255, con lo cual no es estrictamente necesario normalizar, ya que los valores ya se encuentran en una escala similar.

Por último, la normalización se debe calcular solo a partir del conjunto de entrenamiento. Con ello, queremos decir que se debe calcular primero la media y, después, la desviación estándar del conjunto de entrenamiento. Asimismo, posteriormente, se usan esos valores con el conjunto de validación y de set.

Ejemplo de preprocesamiento

Vamos a ver qué tal funciona nuestra red con las medidas que acabamos de ver en el preprocesamiento de imágenes de entrada a partir del siguiente ejemplo:

# Centramos los datos (le restamos la media)
X_train_mean = np.mean(X_train, axis = 0)
X_train_cent = X_train - X_train_mean

# Normalizamos
X_train_std = np.std(X_train, axis = 0)
X_train_norm = X_train_cent / X_train_std

Ahora, preparamos nuestro test set:

X_test_norm = (X_test - X_train_mean) / X_train_std

¡Ya lo tenemos todo listo! Vamos a probar nuestra red de nuevo con los datos normalizados:

# Inizializamos el modelo
model = Sequential()

# Definimos una capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu', input_shape=(32, 32, 3)))

# Definimos una segunda capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

# Definimos una tercera capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

# Añadimos nuestro clasificador
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dense(10, activation='softmax'))

# Compilamos el modelo
model.compile(loss='categorical_crossentropy',
              optimizer=Adam(lr=0.0001, decay=1e-6),
              metrics=['accuracy'])

# Entrenamos el modelo
model.fit(X_train_norm, to_categorical(Y_train),
          batch_size=128,
          shuffle=True,
          epochs=10,
          validation_data=(X_test_norm, to_categorical(Y_test))) # aquí deberíamos usar un conjunto distinto al de test!!!

# Evaluamos el modelo
scores = model.evaluate(X_test_norm, to_categorical(Y_test))

print('Loss: %.3f' % scores[0])
print('Accuracy: %.3f' % scores[1])
model.summary()

Muy bien, ahora por fin funciona. De manera que ya tenemos la primera CNN entrenada con una precisión de ~0.99 en training y ~0.7 en el test.

En el desarrollo de este post, te hemos mostrado cómo funciona el preprocesamiento de imágenes de entrada dentro del aprendizaje profundo del Big Data. No obstante, hace falta una gran variedad de saberes que también te facilitan estos procesos.

Por otra parte, desde KeepCoding te brindamos el Bootcamp Big Data, por medio del que te formarás y, al terminar en solo nueve meses, serás capaz de reconocer las ventajas e inconvenientes de los distintos programas estudiados como en el proceso de ingesta, clasificación, resguardo, procesamiento y presentación de los macrodatos por medio del uso de diferentes herramientas, sistemas y lenguajes. ¡Échale un vistazo a nuestro temario e inscríbete!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado