Clasificación de imágenes de Tensorflow 2.0: instalación, carga de datos, construcción y entrenamiento del modelo

Publicado: 2020-04-21

La 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.

Curso de aprendizaje automático | Aprende en línea, IIIT Bangalore‎

DIPLOMA PG EN APRENDIZAJE AUTOMÁTICO E IA CON UPGRAD Y IIIT BANGALORE.
Aplica ya