Catat tanggalnya! Google I / O mengembalikan 18-20 Mei Daftar sekarang
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Resolusi super dengan TensorFlow Lite

Lihat di TensorFlow.org Jalankan di Google Colab Lihat sumber di GitHub Unduh buku catatan Lihat model TF Hub

Gambaran

Tugas memulihkan gambar resolusi tinggi (HR) dari gambar resolusi rendah biasanya disebut sebagai Single Image Super Resolution (SISR).

Model yang digunakan di sini adalah ESRGAN ( ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks ). Dan kami akan menggunakan TensorFlow Lite untuk menjalankan inferensi pada model yang telah dilatih sebelumnya.

Model TFLite diubah dari implementasi ini yang dihosting di TF Hub. Perhatikan bahwa model yang kami konversi meningkatkan sampel gambar resolusi rendah 50x50 menjadi gambar resolusi tinggi 200x200 (faktor skala = 4). Jika Anda menginginkan ukuran input atau faktor skala yang berbeda, Anda perlu mengonversi ulang atau melatih ulang model asli.

Mempersiapkan

Mari instal pustaka yang diperlukan terlebih dahulu.

pip install -q matplotlib tensorflow tensorflow-hub

Ketergantungan impor.

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

Unduh dan ubah model ESRGAN

model = hub.load("https://tfhub.dev/captain-pool/esrgan-tf2/1")
concrete_func = model.signatures[tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY]
concrete_func.inputs[0].set_shape([1, 50, 50, 3])
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
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'

Unduh gambar uji (kepala serangga).

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
8192/6432 [======================================] - 0s 0us/step

Buat gambar resolusi super menggunakan 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)

Visualisasikan hasilnya

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());
<matplotlib.image.AxesImage at 0x7f99dad41588>

png

png

Tolok Ukur Kinerja

Angka tolok ukur kinerja dibuat dengan alat yang dijelaskan di sini .

Nama model Ukuran Model Alat CPU GPU
resolusi super (ESRGAN) 4.8 Mb Pixel 3 586,8 md * 128,6 md
Pixel 4 385.1ms * 130,3 md

* 4 utas digunakan