עזרה להגן על שונית המחסום הגדולה עם TensorFlow על Kaggle הצטרפו אתגר

קולאב חסר גבולות

הצג באתר TensorFlow.org הפעל ב-Google Colab הצג ב-GitHub הורד מחברת ראה דגמי TF Hub

ברוכים הבאים לדגם Colab ללא גבולות! מחברת זו תעביר אותך דרך השלבים של הפעלת המודל על תמונות ותמחיש את התוצאות.

סקירה כללית

Boundless הוא מודל להפקרת תמונה. מודל זה לוקח תמונה, פנימי מסכות חלק ממנו ( 1/2 , 1/4 , 3/4 ) ומשלים את החלק רעולי פנים. לפרטים נוספים מתייחסות אינסופי: רשתות תשובה: הגנרטיבי תמונה רחב או בתיעוד המודל על Hub 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()

טעינת תמונה

אנו נטען תמונה לדוגמה אך נאלצנו להעלות תמונה משלך לקולאב ולנסות איתה. זכור שלדגם יש כמה מגבלות לגבי תמונות אנושיות.

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 גרסאות של המודל ללא גבולות: חצי, רבע ושלושה רבעים. בתא הבא תוכל לבחור כל אחד מהם ולנסות את התמונה שלך. אם אתה רוצה לנסות עם אחד אחר, פשוט בחר אותו והפעל את התאים הבאים.

בחירת דגם

כעת, לאחר שבחרנו את הדגם הרצוי, בואו נטען אותו מ- 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