![]() |
![]() |
![]() |
![]() |
![]() |
歡迎使用 Boundless 模型 Colab!此筆記本將引導您完成在圖像上執行模型並視覺化結果的步驟。
總覽
Boundless 是用於圖像外推的模型。此模型會接收圖像,在內部遮罩一部分 (1/2、1/4、3/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)