Clasificación de imágenes de Tensorflow 2.0: instalación, carga de datos, construcción y entrenamiento del modelo
Publicado: 2020-04-21La clasificación de imágenes es una categoría de reconocimiento de patrones. Clasifica las imágenes según la relación entre los píxeles vecinos. En otras palabras, utiliza información contextual para organizar imágenes y es bastante popular entre diferentes tecnologías. Es un tema destacado en Deep Learning, y si está aprendiendo sobre él, seguramente disfrutará de este artículo.
Aquí, realizaremos la clasificación de imágenes de TensorFlow. Construiremos un modelo, lo entrenaremos y luego mejoraremos su precisión para clasificar imágenes de cactus. TensorFlow es una plataforma de aprendizaje automático de código abierto y un producto de Google.
Empecemos.
Tabla de contenido
Instalar TensorFlow 2.0
Primero, deberá instalar TensorFlow en Google Colab. Puedes instalarlo a través de pip:
!pip instalar tensorflow-gpu==2.0.0-alpha0
Luego verificaremos la instalación:

importar tensorflow como tf
imprimir (tf. __ versión)
# Salida: 2.0.0-alpha0
Fuente
Aprende: Los 5 proyectos de TensorFlow más populares para principiantes
Cargar datos
Después de la verificación, podemos cargar los datos usando tf.data.dataset. Construiremos un clasificador que determine si una imagen contiene un cactus o no. El cactus tiene que ser columnar. Podemos usar el conjunto de datos de fotos aéreas de cactus para este propósito. Ahora, cargaremos las rutas de los archivos junto con sus etiquetas:
tren_csv = pd.read_csv('datos/tren.csv')
# Anteponer nombres de archivo de imagen en tren/con ruta relativa
nombres de archivo = ['tren/' + fname para fname en train_csv['id'].tolist()]
etiquetas = tren_csv['has_cactus'].tolist()
tren_nombres de archivo, val_nombres de archivo, tren_etiquetas, val_etiquetas =
train_test_split(nombres de archivo,
etiquetas,
tren_tamaño=0.9,
estado_aleatorio=42)
Una vez que tengamos las etiquetas y los nombres de archivo, estamos listos para crear los objetos tf.data.Dataset:
train_data = tf.data.Dataset.from_tensor_slices(
(tf.constant(train_filenames), tf.constant(train_labels))
)
val_data = tf.data.Dataset.from_tensor_slices(
(tf.constant(val_filenames), tf.constant(val_labels))
)
Fuente
Por el momento, nuestro conjunto de datos no tiene las imágenes reales. Sólo tiene sus nombres de archivo. Necesitaremos una función para cargar las imágenes necesarias y procesarlas para que podamos realizar el reconocimiento de imágenes de TensorFlow en ellas.
IMAGE_SIZE = 96 # Tamaño de imagen mínimo para usar con MobileNetV2
TAMAÑO_LOTE = 32
# Función para cargar y preprocesar cada imagen
def _parse_fn(nombre de archivo, etiqueta):
img = tf.io.read_file(img)
img = tf.imagen.decode_jpeg(img)
img = (tf.cast(img, tf.float32)/127.5) – 1
img = tf.image.resize(img, (TAMAÑO_IMAGEN, TAMAÑO_IMAGEN))
devolver img, etiqueta
# Ejecute _parse_fn sobre cada ejemplo en conjuntos de datos de tren y val
# También barajar y crear lotes
tren_datos = (tren_datos.map(_parse_fn)
.shuffle(tamaño_búfer=10000)
.lote(TAMAÑO_LOTE)
)
val_data = (val_data.map(_parse_fn)
.shuffle(tamaño_búfer=10000)
.lote(TAMAÑO_LOTE)
)
Fuente
Construcción de un modelo
En este ejemplo de clasificación de imágenes de TensorFlow, crearemos un modelo de aprendizaje de transferencia. Estos modelos son rápidos ya que pueden usar modelos de clasificación de imágenes existentes que se han entrenado antes. Solo tienen que volver a entrenar la capa superior de su red, ya que esta capa especifica la clase de la imagen requerida.
Usaremos la API Keras de TensorFlow 2.0 para crear nuestro modelo de clasificación de imágenes. Y para fines de transferencia de aprendizaje, usaremos MobileNetV2 como detector de atributos. Es la segunda versión de MobileNet y es un producto de Google. Es más liviano que otros modelos como Inception y ResNet y puede ejecutarse en dispositivos móviles. Cargaremos este modelo en ImageNet, congelaremos los pesos, agregaremos un cabezal de clasificación y lo ejecutaremos sin su capa superior.
FORMA_IMG = (TAMAÑO_IMAGEN, TAMAÑO_IMAGEN, 3)
# Modelo preentrenado con MobileNetV2
modelo_base = tf.keras.aplicaciones.MobileNetV2(

input_shape=IMG_SHAPE,
include_top=Falso,
pesos='imagennet'
)
# Congelar los pesos del modelo pre-entrenados
base_model.entrenable = Falso
# Cabezal de clasificación entrenable
maxpool_layer = tf.keras.layers.GlobalMaxPooling2D()
capa_predicción = tf.keras.layers.Dense(1, activación='sigmoide')
# Cabezal de clasificación de capas con detector de características
modelo = tf.keras.Sequential([
modelo_base,
maxpool_capa,
capa_de_predicción
])
tasa_de_aprendizaje = 0.0001
# Compilar el modelo
model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate),
loss='binary_crossentropy',
métricas=['precisión']
)
Fuente
Debe usar optimizadores de TensorFlow si va a entrenar modelos tf.keras. Los optimizadores de las API tf.keras.optimizers y tf.train están juntos en tf.keras.optimizers de TensorFlow 2.0. En TensorFlow 2.0, muchos de los optimizadores originales de tf.keras recibieron actualizaciones y reemplazos para un mejor rendimiento. Nos permiten aplicar optimizadores sin comprometer el rendimiento y también ahorrar tiempo.
Leer: Tutorial de detección de objetos de TensorFlow para principiantes
Aprenda cursos de ciencia de datos de las mejores universidades del mundo. Obtenga programas Executive PG, programas de certificados avanzados o programas de maestría para acelerar su carrera.
Entrenando al modelo
Después de haber construido el modelo, podemos enseñarlo. La API tf.keras de TensorFlow 2.0 es compatible con la API tf.data, por lo que debe usar los objetos tf.data.Dataset para este fin. Puede realizar el entrenamiento de manera eficiente y no tendríamos que comprometer el rendimiento.
num_epochs = 30
pasos_por_epoch = round(num_tren)//BATCH_SIZE
val_pasos = 20
modelo.fit(tren_datos.repetir(),
épocas=num_épocas,
pasos_por_epoca = pasos_por_epoca,
validación_datos=val_datos.repetir(),
validación_pasos=val_pasos)
Fuente
Después de 30 épocas, la precisión del modelo aumenta sustancialmente, pero podemos mejorarlo aún más. ¿Recuerdas que mencionamos congelar los pesos durante el aprendizaje de transferencia? Bueno, ahora que hemos entrenado el cabezal de clasificación, podemos descongelar esas capas y ajustar aún más nuestro conjunto de datos:
# Descongele todas las capas de MobileNetV2
modelo_base.entrenable = Verdadero
# Vuelva a congelar las capas hasta las capas que queremos ajustar
para capa en base_model.layers[:100]:
capa.entrenable = Falso
# Use una tasa de aprendizaje más baja
lr_finetune = tasa_de_aprendizaje / 10
# Recompilar el modelo
model.compile(pérdida='binary_crossentropy',
optimizador = tf.keras.optimizers.Adam(lr=lr_finetune),
métricas=['precisión'])
# Aumente las épocas de entrenamiento para afinar
fine_tune_epochs = 30
total_epochs = num_epochs + fine_tune_epochs
# Modelo de ajuste fino
# Nota: configure initial_epoch para comenzar a entrenar después de la época 30 ya que
# entrenado previamente durante 30 épocas.
modelo.fit(tren_datos.repetir(),
pasos_por_epoca = pasos_por_epoca,
épocas=total_épocas,
initial_epoch = num_epochs,
validación_datos=val_datos.repetir(),
validación_pasos=val_pasos)

Fuente
30 épocas después, la precisión del modelo mejora aún más. Con más épocas, vimos más mejoras en la precisión del modelo. Ahora, tenemos un modelo de reconocimiento de imágenes de TensorFlow adecuado que puede reconocer cactus columnares en imágenes con una alta precisión.
Lea también: Ideas de proyectos de Tensorflow para principiantes
Más información sobre la clasificación de imágenes de TensorFlow
Las API altamente funcionales de TensorFlow y sus capacidades la convierten en una tecnología poderosa para cualquier programador. Sus API de alto nivel también eliminan su complejidad general, lo que facilita su uso.
¿Está interesado en obtener más información sobre TensorFlow, la clasificación de imágenes y temas relacionados? Luego, le recomendamos que consulte el Diploma PG en aprendizaje automático e IA de IIIT-B y upGrad, que está diseñado para profesionales que trabajan y ofrece más de 450 horas de capacitación rigurosa, más de 30 estudios de casos y asignaciones, estado de ex alumno de IIIT-B, más de 5 prácticas. proyectos finales prácticos y asistencia laboral con las mejores empresas.