Bezgraniczna współpraca

Zobacz na TensorFlow.org Uruchom w Google Colab Zobacz na GitHub Pobierz notatnik Zobacz modele piasty TF

Witamy w modelu Boundless Colab! Ten notatnik przeprowadzi Cię przez kolejne etapy uruchamiania modelu na obrazach i wizualizacji wyników.

Przegląd

Boundless to model ekstrapolacji obrazu. Model ten obraz wewnętrznie maski jego część ( 1/2 , 1/4 , 3/4 ) i uzupełnia zamaskowaną część. Aby uzyskać więcej informacji patrz bezgraniczna: Generative kontradyktoryjności Networks dla Obrazek Extension lub dokumentacji modelu na TensorFlow Hub.

Import i konfiguracja

Zacznijmy od podstawowych importów.

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

Czytanie obrazu do wprowadzenia

Stwórzmy metodę util, która pomoże załadować obraz i sformatować go dla modelu (257x257x3). Ta metoda również przytnie obraz do kwadratu, aby uniknąć zniekształceń i można go używać z lokalnymi obrazami lub z Internetu.

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

Metoda wizualizacji

Stworzymy również metodę wizualizacji, aby pokazać oryginalny obraz obok wersji zamaskowanej i wersji „wypełnionej”, obie wygenerowane przez model.

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

Ładowanie obrazu

Załadujemy przykładowy obraz, ale możesz przesłać własny obraz do kolaboracji i spróbować z nim. Pamiętaj, że model ma pewne ograniczenia dotyczące wizerunków ludzi.

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)

Wybór modelu z TensorFlow Hub

Na TensorFlow Hub mamy 3 wersje modelu Boundless: Half, Quarter i Three Quarters. W poniższej komórce możesz wybrać dowolny z nich i przymierzyć swój obraz. Jeśli chcesz spróbować z innym, po prostu wybierz go i wykonaj następujące komórki.

Wybór modelu

Teraz, gdy wybraliśmy model, który chcemy, załadujmy go z 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)

Wnioskowanie

Model bez granic ma dwa wyjścia:

  • Obraz wejściowy z zastosowaną maską
  • Zamaskowany obraz z ekstrapolacją, aby go uzupełnić

możemy użyć tych dwóch obrazów, aby pokazać wizualizację porównawczą.

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