在 TensorFlow.org 上查看 | 在 Google Colab 中运行 | 在 GitHub 上查看 | 下载笔记本 | 查看 TF Hub 模型 |
欢迎使用无界模型协作!本笔记本将引导您完成在图像上运行模型并可视化结果的步骤。
概述
无界是用于图像外推的模型。该模型接受图像,在内部屏蔽图像的一部分 (1/2,1/4,3/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)