Se usó la API de Cloud Translation para traducir esta página.
Switch to English

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.

Visión de conjunto

Boundless es un modelo para la extrapolación de imágenes. Este modelo toma una imagen, enmascara internamente una porción de ella ( 1/2 , 1/4 , 3/4 ) y completa la parte enmascarada. Para obtener más detalles, consulte Boundless: Generative Adversarial Networks for Image Extension o la documentación del modelo en TensorFlow Hub.

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

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


model_name = 'Boundless Quarter' # @param ['Boundless Half', 'Boundless Quarter', 'Boundless Three Quarters']
model_handle_map = {
    'Boundless Half' : 'https://tfhub.dev/google/boundless/half/1',
    'Boundless Quarter' : 'https://tfhub.dev/google/boundless/quarter/1', 
    'Boundless Three Quarters' : 'https://tfhub.dev/google/boundless/three_quarter/1'
}

model_handle = model_handle_map[model_name]

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 utilizar 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