Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/es-419/hub/tutorials/boundless.ipynb
25118 views
Kernel: Python 3

Licensed under the Apache License, Version 2.0 (the "License");

#@title Copyright 2020 The TensorFlow Hub Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ==============================================================================

Colab de Boundless

¡Le damos la bienvenida al Colab del modelo Boundless! En estas notas leerá los pasos necesarios para la ejecución del modelo con imágenes y la visualización de los resultados.

Descripción general

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

Importaciones y preparación

Comencemos con las importaciones de 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 imágenes para entrada

Creemos un método "util" para cargar la imagen y formatearla para el modelo (257 × 257 × 3). Este método también recortará la imagen para que sea un cuadrado a fin de evitar que se distorsione y para poder usarla 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.LANCZOS) 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 visualización para mostrar la imagen original con la versión enmascarada y la versión "rellenada" una al lado de la otra, 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()

Carga de una imagen

Cargaremos una imagen de ejemplo, pero no olvide que puede cargar su propia imagen en el Colab y probar con ella. Recuerde que el modelo tiene algunos límites relacionados con 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)

Selección de un modelo de TensorFlow Hub

En TensorFlow Hub tenemos 3 versiones del modelo Boundless: uno de la mitad, otro de un cuarto y el último de tres cuartos. En la siguiente celda puede elegir cualquiera de ellos y probar con una imagen propia. Si desea intentar con otra, simplemente, elíjala y ejecute las siguientes celdas:

#@title Model Selection { display-mode: "form" } 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, carguémoslo desde TensorFlow Hub.

Nota: El navegador se puede apuntar a un handle para que lea la documentación del modelo.

print("Loading model {} ({})".format(model_name, model_handle)) model = hub.load(model_handle)

Inferencia

El modelo Boundless tiene dos salidas:

  • La imagen de entrada con una máscara aplicada.

  • La imagen enmascarada con la extrapolación necesaria para completarla.

Podemos usar ambas imágenes para mostrar una vista 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)