Cette page a été traduite par l'API Cloud Translation.
Switch to English

Colab illimité

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

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

Aperçu

Boundless est un modèle d'extrapolation d'image. Ce modèle prend une image, en masque en interne une portioin ( 1/2 , 1/4 , 3/4 ) et complète la partie masquée. Pour plus de détails, reportez-vous à Boundless: Generative Adversarial Networks for 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 l'entrée

Permet de créer 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 carré pour éviter toute distorsion et vous pourrez l'utiliser avec des images locales ou sur 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 visuzalisation pour montrer 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 chargerons un exemple d'image, mais nous sommes libres de télécharger votre propre image sur le colab et de l'essayer. Rappelez-vous que le modèle présente 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 dans 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 en essayer un autre, choisissez-le et exécutez les cellules suivantes.

Sélection de 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