وضوح فوق العاده با TensorFlow Lite

مشاهده در TensorFlow.org در Google Colab اجرا شود مشاهده منبع در GitHub دانلود دفترچه یادداشت مدل TF Hub را ببینید

بررسی اجمالی

وظیفه بازیابی یک تصویر با وضوح بالا (HR) از همتای با وضوح پایین آن معمولاً به عنوان وضوح تصویر تک تصویر (SISR) شناخته می شود.

مدل مورد استفاده در اینجا این است ESRGAN ( ESRGAN: پیشرفته سوپر سایز تصویر زایشی خصمانه شبکه ). و ما قصد داریم از TensorFlow Lite برای اجرای استنتاج بر روی مدل از پیش آموزش دیده استفاده کنیم.

مدل TFLite از این تبدیل اجرای میزبانی شده بر روی TF توپی. توجه داشته باشید که مدلی که ما تبدیل کردیم یک تصویر با وضوح پایین 50x50 را به یک تصویر با وضوح بالا 200x200 (ضریب مقیاس = 4) نمونه می‌دهد. اگر می‌خواهید اندازه ورودی یا فاکتور مقیاس متفاوتی داشته باشید، باید مدل اصلی را مجدداً تبدیل یا آموزش دهید.

برپایی

بیایید ابتدا کتابخانه های مورد نیاز را نصب کنیم.

pip install matplotlib tensorflow tensorflow-hub

وابستگی های وارداتی

import tensorflow as tf
import tensorflow_hub as hub
import matplotlib.pyplot as plt
print(tf.__version__)
2.7.0

مدل ESRGAN را دانلود و تبدیل کنید

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

دانلود تصویر آزمایشی (سر حشره).

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 یک تصویر با وضوح فوق العاده ایجاد کنید

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)

نتیجه را تجسم کنید

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

png

png

معیارهای عملکرد

تعداد معیار عملکرد با ابزار تولید در اینجا شرح داده .

نام مدل اندازه مدل دستگاه CPU پردازنده گرافیکی
وضوح فوق العاده (ESRGAN) 4.8 مگابایت پیکسل 3 586.8ms* 128.6 میلی‌ثانیه
پیکسل 4 385.1 میلی‌ثانیه* 130.3 میلی‌ثانیه

* 4 موضوعات استفاده