- This is tensorflow 2.x conversion of official repo LPIPS metric (pytorch)
- Similar to lpips-tensorflow except,
- In this repo, network architecture is explicitly implemented rather than converting with ONNX.
- Currently only
model='net-lin', net='vgg'
is implemented
- input image should be [0.0 ~ 255.0], float32, NHWC format
import os
import numpy as np
import tensorflow as tf
from PIL import Image
from models.lpips_tensorflow import learned_perceptual_metric_model
def load_image(fn):
image = Image.open(fn)
image = np.asarray(image)
image = np.expand_dims(image, axis=0)
image = tf.constant(image, dtype=tf.dtypes.float32)
return image
image_size = 64
model_dir = './models'
vgg_ckpt_fn = os.path.join(model_dir, 'vgg', 'exported')
lin_ckpt_fn = os.path.join(model_dir, 'lin', 'exported')
lpips = learned_perceptual_metric_model(image_size, vgg_ckpt_fn, lin_ckpt_fn)
# official pytorch model value:
# Distance: ex_ref.png <-> ex_p0.png = 0.569
# Distance: ex_ref.png <-> ex_p1.png = 0.422
image_fn1 = './imgs/ex_ref.png'
image_fn2 = './imgs/ex_p0.png'
# image_fn2 = './imgs/ex_p1.png'
image1 = load_image(image_fn1)
image2 = load_image(image_fn2)
dist01 = lpips([image1, image2])
print('Distance: {:.3f}'.format(dist01))
To reproduce same checkpoint files...
- Clone official repo LPIPS metric
- Place
./example_export_script/convert_to_tensorflow.py
and ./models/lpips_tensorflow.py
on root directory
- Run
convert_to_tensorflow.py