Xem trên TensorFlow.org | Chạy trong Google Colab | Xem trên GitHub | Tải xuống sổ ghi chép | Xem các mẫu TF Hub |
Chào mừng bạn đến với Colab mô hình không giới hạn! Sổ tay này sẽ hướng dẫn bạn các bước chạy mô hình trên hình ảnh và hình dung kết quả.
Tổng quat
Boundless là một mô hình cho phép ngoại suy hình ảnh. Mô hình này có một hình ảnh, nội mặt nạ một phần của nó ( 1/2 , 1/4 , 3/4 ) và hoàn thành một phần công ồ ạt. Để biết thêm thông tin chi tiết tham khảo Vô Biên: Generative gây tranh cãi Networks cho hình ảnh mở rộng hoặc tài liệu mô hình trên TensorFlow Hub.
Nhập và thiết lập
Hãy bắt đầu với việc nhập cơ sở.
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
Đọc hình ảnh cho đầu vào
Cho phép tạo một phương thức sử dụng để giúp tải hình ảnh và định dạng nó cho mô hình (257x257x3). Phương pháp này cũng sẽ cắt hình ảnh thành hình vuông để tránh biến dạng và bạn có thể sử dụng với hình ảnh cục bộ hoặc từ 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
Phương pháp trực quan hóa
Chúng tôi cũng sẽ tạo một phương pháp hiển thị để hiển thị hình ảnh gốc cạnh nhau với phiên bản bị che và phiên bản "lấp đầy", cả hai đều được tạo bởi mô hình.
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()
Đang tải hình ảnh
Chúng tôi sẽ tải một hình ảnh mẫu nhưng không được phép tải hình ảnh của chính bạn lên cột và thử với nó. Hãy nhớ rằng mô hình có một số hạn chế về hình ảnh con người.
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)
Chọn một mô hình từ TensorFlow Hub
Trên TensorFlow Hub, chúng tôi có 3 phiên bản của mô hình Không giới hạn: Một nửa, một phần tư và ba phần tư. Trong ô sau, bạn có thể chọn bất kỳ ô nào trong số chúng và thử trên hình ảnh của bạn. Nếu bạn muốn thử với một cái khác, chỉ cần chọn nó và thực hiện các ô sau.
Lựa chọn mô hình
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]
Bây giờ chúng tôi đã chọn mô hình chúng tôi muốn, hãy tải nó từ 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)
Suy luận
Mô hình vô biên có hai đầu ra:
- Hình ảnh đầu vào có áp dụng mặt nạ
- Hình ảnh mặt nạ với phép ngoại suy để hoàn thành nó
chúng ta có thể sử dụng hai hình ảnh này để hiển thị trực quan so sánh.
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)