کولاب بی حد و مرز

مشاهده در 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. در سلول زیر می توانید هر یک از آنها را انتخاب کرده و تصویر خود را امتحان کنید. اگر می خواهید با یکی دیگر امتحان کنید، کافی است آن را انتخاب کنید و سلول های زیر را اجرا کنید.

انتخاب مدل

اکنون که مدل مورد نظر خود را انتخاب کرده ایم، اجازه می دهیم آن را از 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)

png