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