دقة فائقة مع TensorFlow Lite

عرض على TensorFlow.org تشغيل في Google Colab عرض المصدر على جيثب تحميل دفتر انظر نموذج TF Hub

ملخص

يشار عادةً إلى مهمة استعادة صورة عالية الدقة (HR) من نظيرتها منخفضة الدقة باسم الدقة الفائقة للصورة المفردة (SISR).

النموذج المستخدم هنا هو ESRGAN ( ESRGAN: شبكات الخصومة المولدة سوبر قرار المحسن ). وسنستخدم TensorFlow Lite لتشغيل الاستدلال على النموذج الذي تم اختباره مسبقًا.

يتم تحويل نموذج TFLite من هذا التنفيذ استضافتها على TF المحور. لاحظ أن النموذج الذي قمنا بتحويله يقدم عينات من صورة منخفضة الدقة مقاس 50 × 50 إلى صورة عالية الدقة 200 × 200 (عامل المقياس = 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());

بي إن جي

بي إن جي

معايير الأداء

يتم إنشاؤها أرقام مؤشر الأداء مع أداة الموصوفة هنا .

اسم النموذج حجم النموذج جهاز وحدة المعالجة المركزية GPU
دقة فائقة (ESRGAN) 4.8 ميغا بايت بكسل 3 586.8 مللي ثانية * 128.6 مللي ثانية
بكسل 4 385.1 مللي ثانية * 130.3 مللي ثانية

* 4 الخيوط المستخدمة