TensorFlow.org'da görüntüleyin | Google Colab'da çalıştırın | Kaynağı GitHub'da görüntüleyin | Not defterini indir | TF Hub modeline bakın |
genel bakış
Yüksek çözünürlüklü (HR) bir görüntüyü düşük çözünürlüklü emsalinden kurtarma görevine genellikle Tek Görüntü Süper Çözünürlük (SISR) adı verilir.
(Burada kullanılan model ESRGAN olduğu : Enhanced Süper Çözünürlük Üretken olarak rakip Ağlar ESRGAN ). Ve önceden eğitilmiş model üzerinde çıkarım yapmak için TensorFlow Lite'ı kullanacağız.
TFLite modeli bu dönüştürülür uygulanması TF Hub barındırılan. Dönüştürdüğümüz modelin 50x50 düşük çözünürlüklü bir görüntüyü 200x200 yüksek çözünürlüklü bir görüntüye örneklediğini unutmayın (ölçek faktörü=4). Farklı bir girdi boyutu veya ölçek faktörü istiyorsanız, orijinal modeli yeniden dönüştürmeniz veya yeniden eğitmeniz gerekir.
Kurmak
Önce gerekli kütüphaneleri kuralım.
pip install matplotlib tensorflow tensorflow-hub
Bağımlılıkları içe aktarın.
import tensorflow as tf
import tensorflow_hub as hub
import matplotlib.pyplot as plt
print(tf.__version__)
2.7.0
ESRGAN modelini indirin ve dönüştürün
model = hub.load("https://tfhub.dev/captain-pool/esrgan-tf2/1")
concrete_func = model.signatures[tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY]
@tf.function(input_signature=[tf.TensorSpec(shape=[1, 50, 50, 3], dtype=tf.float32)])
def f(input):
return concrete_func(input);
converter = tf.lite.TFLiteConverter.from_concrete_functions([f.get_concrete_function()], model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
# Save the TF Lite model.
with tf.io.gfile.GFile('ESRGAN.tflite', 'wb') as f:
f.write(tflite_model)
esrgan_model_path = './ESRGAN.tflite'
WARNING:absl:Found untraced functions such as restored_function_body, restored_function_body, restored_function_body, restored_function_body, restored_function_body while saving (showing 5 of 335). These functions will not be directly callable after loading. INFO:tensorflow:Assets written to: /tmp/tmpinlbbz0t/assets INFO:tensorflow:Assets written to: /tmp/tmpinlbbz0t/assets 2021-11-16 12:15:19.621471: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:363] Ignored output_format. 2021-11-16 12:15:19.621517: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:366] Ignored drop_control_dependency. WARNING:absl:Buffer deduplication procedure will be skipped when flatbuffer library is not properly loaded
Bir test görüntüsü indirin (böcek kafası).
test_img_path = tf.keras.utils.get_file('lr.jpg', 'https://raw.githubusercontent.com/tensorflow/examples/master/lite/examples/super_resolution/android/app/src/main/assets/lr-1.jpg')
Downloading data from https://raw.githubusercontent.com/tensorflow/examples/master/lite/examples/super_resolution/android/app/src/main/assets/lr-1.jpg 16384/6432 [============================================================================] - 0s 0us/step
TensorFlow Lite kullanarak süper çözünürlüklü bir görüntü oluşturun
lr = tf.io.read_file(test_img_path)
lr = tf.image.decode_jpeg(lr)
lr = tf.expand_dims(lr, axis=0)
lr = tf.cast(lr, tf.float32)
# Load TFLite model and allocate tensors.
interpreter = tf.lite.Interpreter(model_path=esrgan_model_path)
interpreter.allocate_tensors()
# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Run the model
interpreter.set_tensor(input_details[0]['index'], lr)
interpreter.invoke()
# Extract the output and postprocess it
output_data = interpreter.get_tensor(output_details[0]['index'])
sr = tf.squeeze(output_data, axis=0)
sr = tf.clip_by_value(sr, 0, 255)
sr = tf.round(sr)
sr = tf.cast(sr, tf.uint8)
Sonucu görselleştirin
lr = tf.cast(tf.squeeze(lr, axis=0), tf.uint8)
plt.figure(figsize = (1, 1))
plt.title('LR')
plt.imshow(lr.numpy());
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plt.title(f'ESRGAN (x4)')
plt.imshow(sr.numpy());
bicubic = tf.image.resize(lr, [200, 200], tf.image.ResizeMethod.BICUBIC)
bicubic = tf.cast(bicubic, tf.uint8)
plt.subplot(1, 2, 2)
plt.title('Bicubic')
plt.imshow(bicubic.numpy());
Performans Kıyaslamaları
Performans kriter numaraları aracıyla oluşturulan Burada anlatılan .
Model adı | Model Boyutu | Cihaz | İşlemci | GPU |
---|---|---|---|---|
süper çözünürlük (ESRGAN) | 4,8 Mb | piksel 3 | 586.8 ms* | 128.6 ms |
piksel 4 | 385.1 ms* | 130.3ms |
Kullanılan * 4 konu