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