Colab sconfinato

Visualizza su TensorFlow.org Esegui in Google Colab Visualizza su GitHub Scarica taccuino Vedi i modelli di mozzo TF

Benvenuto nel modello Boundless Colab! Questo taccuino ti guiderà attraverso i passaggi per eseguire il modello su immagini e visualizzare i risultati.

Panoramica

Boundless è un modello per l'estrapolazione delle immagini. Questo modello prende un'immagine, internamente maschera una porzione di essa ( 1/2 , 1/4 , 3/4 ) e completa la parte mascherata. Per maggiori dettagli fare riferimento a Boundless: Generative Adversarial Networks per l'immagine di estensione o la documentazione sul modello di tensorflow Hub.

Importazioni e configurazione

Iniziamo con le importazioni di 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

Lettura dell'immagine per l'input

Creiamo un metodo util per aiutare a caricare l'immagine e formattarla per il modello (257x257x3). Questo metodo ridurrà anche l'immagine in un quadrato per evitare distorsioni e potrai utilizzarla con immagini locali o da 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

Metodo di visualizzazione

Creeremo anche un metodo di visualizzazione per mostrare l'immagine originale fianco a fianco con la versione mascherata e la versione "riempita", entrambe generate dal modello.

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()

Caricamento di un'immagine

Caricheremo un'immagine di esempio, ma siamo liberi di caricare la tua immagine sul colab e provare con essa. Ricorda che il modello ha alcune limitazioni per quanto riguarda le immagini umane.

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)

Selezione di un modello da TensorFlow Hub

Su TensorFlow Hub abbiamo 3 versioni del modello Boundless: Half, Quarter e Three Quarters. Nella cella seguente puoi sceglierne uno e provare la tua immagine. Se vuoi provare con un altro, sceglilo ed esegui le seguenti celle.

Selezione del modello

Ora che abbiamo scelto il modello che vogliamo, carichiamolo da 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)

Fare inferenza

Il modello illimitato ha due output:

  • L'immagine di input con una maschera applicata
  • L'immagine mascherata con l'estrapolazione per completarla

possiamo usare queste due immagini per mostrare una visualizzazione di confronto.

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