Colab sin límites

Ver en TensorFlow.org Ejecutar en Google Colab Ver en GitHub Descargar cuaderno Ver modelos TF Hub

¡Bienvenido al modelo Colab de Boundless! Este cuaderno lo guiará a través de los pasos para ejecutar el modelo en imágenes y visualizar los resultados.

Descripción general

Boundless es un modelo para la extrapolación de imágenes. Este modelo toma una imagen, máscaras internamente una parte de ella ( 1/2 , 1/4 , 3/4 ) y completa la parte enmascarada. Para más detalles consulte sin límites: generativo Acusatorios Redes para la imagen de extensión o la documentación del modelo de TensorFlow concentradores.

Importaciones y configuración

Comencemos con las importaciones base.

import tensorflow as tf
import tensorflow_hub as hub
from io import BytesIO
from PIL import Image as PilImage
import numpy as np
from matplotlib import pyplot as plt
from six.moves.urllib.request import urlopen

Lectura de imagen para entrada

Creemos un método útil para ayudar a cargar la imagen y formatearla para el modelo (257x257x3). Este método también recortará la imagen a un cuadrado para evitar la distorsión y se puede utilizar con imágenes locales o de Internet.

def read_image(filename):
    fd = None
    if(filename.startswith('http')):
      fd = urlopen(filename)
    else:
      fd = tf.io.gfile.GFile(filename, 'rb')

    pil_image = PilImage.open(fd)
    width, height = pil_image.size
    # crop to make the image square
    pil_image = pil_image.crop((0, 0, height, height))
    pil_image = pil_image.resize((257,257),PilImage.ANTIALIAS)
    image_unscaled = np.array(pil_image)
    image_np = np.expand_dims(
        image_unscaled.astype(np.float32) / 255., axis=0)
    return image_np

Método de visualización

También crearemos un método de visuzalización para mostrar la imagen original al lado de la versión enmascarada y la versión "rellena", ambas generadas por el modelo.

def visualize_output_comparison(img_original, img_masked, img_filled):
  plt.figure(figsize=(24,12))
  plt.subplot(131)
  plt.imshow((np.squeeze(img_original)))
  plt.title("Original", fontsize=24)
  plt.axis('off')
  plt.subplot(132)
  plt.imshow((np.squeeze(img_masked)))
  plt.title("Masked", fontsize=24)
  plt.axis('off')
  plt.subplot(133)
  plt.imshow((np.squeeze(img_filled)))
  plt.title("Generated", fontsize=24)
  plt.axis('off')
  plt.show()

Cargando una imagen

Cargaremos una imagen de muestra, pero siéntase libre de cargar su propia imagen en el colab y probar con ella. Recuerde que el modelo tiene algunas limitaciones con respecto a las imágenes humanas.

wikimedia = "https://upload.wikimedia.org/wikipedia/commons/thumb/3/31/Nusfjord_road%2C_2010_09.jpg/800px-Nusfjord_road%2C_2010_09.jpg"
# wikimedia = "https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/Beech_forest_M%C3%A1tra_in_winter.jpg/640px-Beech_forest_M%C3%A1tra_in_winter.jpg"
# wikimedia = "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Marmolada_Sunset.jpg/640px-Marmolada_Sunset.jpg"
# wikimedia = "https://upload.wikimedia.org/wikipedia/commons/thumb/9/9d/Aegina_sunset.jpg/640px-Aegina_sunset.jpg"

input_img = read_image(wikimedia)

Seleccionar un modelo de TensorFlow Hub

En TensorFlow Hub tenemos 3 versiones del modelo Boundless: Half, Quarter y Three Quarters. En la siguiente celda puedes elegir cualquiera de ellos y probar tu imagen. Si desea probar con otro, simplemente selecciónelo y ejecute las siguientes celdas.

Selección de modelo

Ahora que hemos elegido el modelo que queremos, cargámoslo desde TensorFlow Hub.

print("Loading model {} ({})".format(model_name, model_handle))
model = hub.load(model_handle)
Loading model Boundless Quarter (https://tfhub.dev/google/boundless/quarter/1)

Haciendo inferencia

El modelo ilimitado tiene dos salidas:

  • La imagen de entrada con una máscara aplicada.
  • La imagen enmascarada con la extrapolación para completarla

podemos usar estas dos imágenes para mostrar una visualización comparativa.

result = model.signatures['default'](tf.constant(input_img))
generated_image =  result['default']
masked_image = result['masked_image']

visualize_output_comparison(input_img, masked_image, generated_image)

png