Безграничный колаб

Посмотреть на TensorFlow.org Запускаем в Google Colab Посмотреть на GitHub Скачать блокнот Посмотреть модели TF Hub

Добро пожаловать в модель Boundless Colab! Эта записная книжка проведет вас через этапы запуска модели на изображениях и визуализирует результаты.

Обзор

Boundless - это модель для экстраполяции изображений. Эта модель принимает изображение, внутренне маскирует его часть ( 1/2 , 1/4 , 3/4 ) и завершает замаскированную часть. Для получения более подробной информации обратитесь к Безграничному: Generative состязательных сети для изображения расширения или модель документации на TensorFlow Hub.

Импорт и настройка

Начнем с базового импорта.

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

Чтение изображения для ввода

Давайте создадим служебный метод, который поможет загрузить изображение и отформатировать его для модели (257x257x3). Этот метод также обрежет изображение до квадрата, чтобы избежать искажения, и вы можете использовать его с локальными изображениями или из Интернета.

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

Метод визуализации

Мы также создадим метод визуализации, чтобы показать исходное изображение бок о бок с версией с маской и версией с «заливкой», обе сгенерированы моделью.

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

Загрузка изображения

Мы загрузим образец изображения, но вы можете загрузить свое собственное изображение в колаб и попробовать его. Помните, что у модели есть некоторые ограничения в отношении человеческих изображений.

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)

Выбор модели из TensorFlow Hub

На TensorFlow Hub у нас есть 3 версии модели Boundless: Half, Quarter и Three Quarters. В следующей ячейке вы можете выбрать любой из них и примерить свой образ. Если вы хотите попробовать еще один, просто выберите его и выполните следующие ячейки.

Выбор модели

Теперь, когда мы выбрали нужную модель, давайте загрузим ее из 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)

Делаем вывод

Безграничная модель имеет два выхода:

  • Входное изображение с примененной маской
  • Изображение в маске с экстраполяцией для его завершения

мы можем использовать эти два изображения, чтобы показать сравнительную визуализацию.

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