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