Посмотреть на 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. В следующей ячейке вы можете выбрать любой из них и примерить свой образ. Если вы хотите попробовать еще один, просто выберите его и выполните следующие ячейки.
Выбор модели
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]
Теперь, когда мы выбрали нужную модель, давайте загрузим ее из 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)