Colab ไร้ขอบเขต

ดูบน TensorFlow.org ทำงานใน Google Colab ดูบน GitHub ดาวน์โหลดโน๊ตบุ๊ค ดูรุ่น TF Hub

ยินดีต้อนรับสู่ Colab รุ่นไร้ขอบเขต! สมุดบันทึกนี้จะนำคุณผ่านขั้นตอนต่างๆ ในการเรียกใช้แบบจำลองบนรูปภาพและแสดงผลลัพธ์เป็นภาพ

ภาพรวม

Boundless เป็นแบบจำลองสำหรับการอนุมานภาพ รูปแบบนี้จะใช้เวลาภาพภายในหน้ากากส่วนหนึ่งของมัน ( 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

กำลังอ่านภาพสำหรับการป้อนข้อมูล

ให้สร้างวิธี 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 เรามีโมเดล Boundless 3 เวอร์ชัน ได้แก่ 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