无界协作

在 TensorFlow.org 上查看 在 Google Colab 中运行 在 GitHub 上查看 下载笔记本 查看 TF Hub 模型

欢迎使用无界模型协作!本笔记本将引导您完成在图像上运行模型并可视化结果的步骤。

概述

无界是用于图像外推的模型。该模型接受图像,在内部屏蔽图像的一部分 (1/21/43/4) 并完成屏蔽部分。有关更多详细信息,请参阅 无界:用于图像扩展的生成对抗网络 或 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.LANCZOS)
    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()

加载图像

现在您可以加载示例图像。您可以通过将自己的图像上传到 Colab 笔记本来使用自己的图像。请记住,该模型可能对人像图像有一些限制。

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 上,有三个版本的无界模型:一半、四分之一和四分之三。在下面的单元格中,您可以选择任何模型并将它们应用于您的图像。如果您想选择另一个模型,请在下面选择它,然后运行以下单元格。

模型选择

选择模型后,您可以从 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)
2024-03-09 13:56:07.413611: E external/local_xla/xla/stream_executor/cuda/cuda_driver.cc:282] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected

执行推理

无界模型有两个输出

  • 应用了蒙版的输入图像
  • 蒙版图像,外推以完成它

您可以通过以下可视化方式比较这两张图像

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