Colab sans limites

Voir sur TensorFlow.org Exécuter dans Google Colab Voir sur GitHub Télécharger le cahier Voir les modèles TF Hub

Bienvenue dans le modèle Colab Boundless ! Ce cahier vous guidera à travers les étapes d'exécution du modèle sur des images et visualisera les résultats.

Aperçu

Boundless est un modèle d'extrapolation d'images. Ce modèle prend une image, à l' intérieur masque une partie de celui - ci ( 1/2 , 1/4 , 3/4 ) et termine la partie masquée. Pour plus de détails , voir Boundless: générative accusatoires Networks pour l' image Extension ou la documentation du modèle sur tensorflow Hub.

Importations et configuration

Commençons par les importations 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

Lecture de l'image pour la saisie

Créons une méthode util pour aider à charger l'image et la formater pour le modèle (257x257x3). Cette méthode recadrera également l'image en un carré pour éviter la distorsion et vous pouvez l'utiliser avec des images locales ou à partir d'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éthode de visualisation

Nous allons également créer une méthode de visualisation pour afficher l'image originale côte à côte avec la version masquée et la version "remplie", toutes deux générées par le modèle.

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

Chargement d'une image

Nous allons charger un exemple d'image, mais n'hésitez pas à télécharger votre propre image dans le colab et à essayer avec. N'oubliez pas que le modèle a certaines limites concernant les images humaines.

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)

Sélection d'un modèle à partir de TensorFlow Hub

Sur TensorFlow Hub, nous avons 3 versions du modèle Boundless : Half, Quarter et Three Quarters. Dans la cellule suivante, vous pouvez choisir l'un d'entre eux et essayer votre image. Si vous voulez essayer avec un autre, choisissez-le et exécutez les cellules suivantes.

Sélection du modèle

Maintenant que nous avons choisi le modèle que nous voulons, chargeons-le depuis 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)

Faire de l'inférence

Le modèle illimité a deux sorties :

  • L'image d'entrée avec un masque appliqué
  • L'image masquée avec l'extrapolation pour la compléter

nous pouvons utiliser ces deux images pour montrer une visualisation de comparaison.

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