Kolab Tanpa Batas

Lihat di TensorFlow.org Jalankan di Google Colab Lihat di GitHub Unduh buku catatan Lihat model TF Hub

Selamat datang di Colab model Tanpa Batas! Notebook ini akan membawa Anda melalui langkah-langkah menjalankan model pada gambar dan memvisualisasikan hasilnya.

Ringkasan

Tanpa batas adalah model untuk ekstrapolasi citra. Model ini mengambil gambar, secara internal topeng sebagian darinya ( 1/2 , 1/4 , 3/4 ) dan melengkapi bagian bertopeng. Untuk lebih jelasnya lihat Tanpa Batas: generatif Adversarial Networks untuk Gambar Perpanjangan atau dokumentasi model yang di TensorFlow Hub.

Impor dan Pengaturan

Mari kita mulai dengan impor dasar.

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

Membaca gambar untuk masukan

Mari buat metode util untuk membantu memuat gambar dan memformatnya untuk model (257x257x3). Metode ini juga akan memotong gambar menjadi persegi untuk menghindari distorsi dan Anda dapat menggunakannya dengan gambar lokal atau dari internet.

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

Metode visualisasi

Kami juga akan membuat metode visualisasi untuk menampilkan gambar asli berdampingan dengan versi topeng dan versi "terisi", keduanya dihasilkan oleh model.

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()

Memuat Gambar

Kami akan memuat gambar sampel tetapi bebas mengunggah gambar Anda sendiri ke colab dan mencobanya. Ingatlah bahwa model memiliki beberapa batasan mengenai gambar manusia.

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)

Memilih model dari TensorFlow Hub

Di TensorFlow Hub, kami memiliki 3 versi model Tanpa Batas: Half, Quarter, dan Three Quarters. Di sel berikut Anda dapat memilih salah satu dari mereka dan mencoba gambar Anda. Jika Anda ingin mencoba dengan yang lain, pilih saja dan jalankan sel berikut.

Pemilihan Model

Sekarang setelah kita memilih model yang kita inginkan, mari muat dari 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)

Melakukan Inferensi

Model tak terbatas memiliki dua output:

  • Gambar input dengan topeng diterapkan
  • Gambar bertopeng dengan ekstrapolasi untuk menyelesaikannya

kita dapat menggunakan dua gambar ini untuk menunjukkan visualisasi perbandingan.

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