مشاهده در TensorFlow.org | در Google Colab اجرا شود | در GitHub مشاهده کنید | دانلود دفترچه یادداشت | مدل های TF Hub را ببینید |
به کولب مدل بی کران خوش آمدید! این نوت بوک شما را مراحل اجرای مدل بر روی تصاویر را طی کرده و نتایج را تجسم می کند.
بررسی اجمالی
Boundless مدلی برای برون یابی تصویر است. این مدل یک تصویر، در داخل ماسک بخشی از آن (طول می کشد 1/2 ، 1/4 ، 3/4 ) و تکمیل بخشی نقاب دار. برای اطلاعات بیشتر به مراجعه بیکران: شبکه های زایشی خصمانه برای تصویر فرمت یا اسناد و مدارک مدل در TensorFlow توپی.
واردات و راه اندازی
بیایید با واردات پایه شروع کنیم.
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
خواندن تصویر برای ورودی
اجازه می دهد تا یک روش Util برای کمک به بارگذاری تصویر و فرمت آن برای مدل (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()
در حال بارگذاری یک تصویر
ما یک تصویر نمونه را بارگذاری میکنیم، اما میتوانیم تصویر خود را در 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 ما 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)