Boundless Colab

在 TensorFlow.org 上檢視 在 Google Colab 中執行 在 GitHub 上檢視 下載筆記本 查看 TF Hub 模型

歡迎使用 Boundless 模型 Colab!此筆記本將引導您完成在圖像上執行模型並視覺化結果的步驟。

總覽

Boundless 是用於圖像外推的模型。此模型會接收圖像,在內部遮罩一部分 (1/21/43/4),並完成遮罩部分。如需更多詳細資訊,請參閱Boundless: Generative Adversarial Networks for Image Extension或 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 上,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)
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

執行推論

Boundless 模型有兩個輸出

  • 已套用遮罩的輸入圖像
  • 已遮罩的圖像,並進行外推以完成它

您可以透過視覺化比較這兩個圖像,如下所示

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