tensorflow:评估并输出生成模型的SSIM指标

  SSIM(Structural Similarity),结构相似性,是一种衡量两幅图像相似度的指标。常用于衡量生成模型的图像生成能力。

  记录tensorflow下评估源图像与生成图像SSIM的code。有三个要点:

1.解决输入图像的img.shape不存在问题,需要代码最前面加入tf.enable_eager_execution()

2.value = SSIM_LOSS(img1, img2)函数输入格式问题,必须先通过resize将两图像大小,维度保持一致

3.img维度问题:img1/img2均需为4维张量,故用tf.expand_dims(img2, axis=0)扩充了维度。

img1 = tf.image.decode_image(tf.io.read_file('./test_imgs/IR5_ds.bmp'), channels=0)是灰度/bmp格式图像的参数,若为rgb,channels应设置为3。

import tensorflow as tf
#tf.compat.v1.disable_eager_execution()
import numpy as np

def _tf_fspecial_gauss(size, sigma):
	"""Function to mimic the 'fspecial' gaussian MATLAB function
	"""
	x_data, y_data = np.mgrid[-size // 2 + 1:size // 2 + 1, -size // 2 + 1:size // 2 + 1]

	x_data = np.expand_dims(x_data, axis = -1)
	x_data = np.expand_dims(x_data, axis = -1)

	y_data = np.expand_dims(y_data, axis = -1)
	y_data = np.expand_dims(y_data, axis = -1)

	x = tf.constant(x_data, dtype = tf.float32)
	y = tf.constant(y_data, dtype = tf.float32)

	g = tf.exp(-((x ** 2 + y ** 2) / (2.0 * sigma ** 2)))
	return g / tf.reduce_sum(g)


def SSIM_LOSS(img1, img2, size = 11, sigma = 1.5):
	window = _tf_fspecial_gauss(size, sigma)  # window shape [size, size]
	K1 = 0.01
	K2 = 0.03
	L = 1  # depth of image (255 in case the image has a different scale)
	C1 = (K1 * L) ** 2
	C2 = (K2 * L) ** 2
	mu1 = tf.nn.conv2d(img1, window, strides = [1, 1, 1, 1], padding = 'VALID')
	mu2 = tf.nn.conv2d(img2, window, strides = [1, 1, 1, 1], padding = 'VALID')
	mu1_sq = mu1 * mu1
	mu2_sq = mu2 * mu2
	mu1_mu2 = mu1 * mu2
	sigma1_sq = tf.nn.conv2d(img1 * img1, window, strides = [1, 1, 1, 1], padding = 'VALID') - mu1_sq
	sigma2_sq = tf.nn.conv2d(img2 * img2, window, strides = [1, 1, 1, 1], padding = 'VALID') - mu2_sq
	sigma12 = tf.nn.conv2d(img1 * img2, window, strides = [1, 1, 1, 1], padding = 'VALID') - mu1_mu2

	value = (2.0 * sigma12 + C2) / (sigma1_sq + sigma2_sq + C2)
	value = tf.reduce_mean(value)
	return value

def main():
    tf.enable_eager_execution()
    img1 = tf.image.decode_image(tf.io.read_file('./generated_imgs/XXX.bmp'), channels=0)
    img2 = tf.image.decode_image(tf.io.read_file('./test_imgs/XXX.bmp'), channels=0)  # assuming your image is RGB
    print(img1.shape)
    img2_height, img2_width = img2.shape[0], img2.shape[1]               ## img1 当前的形状是 [268, 360, 1]
    
    img1 = tf.image.resize(img1, [img2_height, img2_width], method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
    img1 = tf.image.convert_image_dtype(img1, tf.float32)  

    img2 = tf.image.convert_image_dtype(img2, tf.float32)
    img1_shape = img1.shape  
  
	# 使用 tf.expand_dims 增加一个额外的维度,表示批处理大小为 1  
    img1 = tf.expand_dims(img1, axis=0)  
    assert img1.shape == [1] + img1_shape
    
    img2_shape = img2.shape
    img2 = tf.expand_dims(img2, axis=0)
    assert img2.shape == [1] + img2_shape
    
    value = SSIM_LOSS(img1, img2) 
    print('hi')
    print(type(value))
    with tf.Session():
        print(value.numpy())
        #print(value.eval())
		#print('SSIM_Value:', num.numpy())
	
if __name__ == '__main__':
	main()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要查看SRGAN训练模型指标,可以采取以下步骤: 1. 训练过程中记录指标:在训练过程中,可以通过在每个训练步骤或每个训练周期结束时记录关键指标来跟踪模型的性能。常见的指标包括生成器和判别器的损失值、对抗损失、感知损失以及评估指标如PSNR、SSIM等。 2. 使用TensorBoard可视化:如果你使用的是TensorFlow框架,可以使用TensorBoard来可视化训练过程中的指标。通过将指标数据写入TensorBoard日志文件,你可以在训练期间实时查看这些指标的变化趋势,并在训练完成后进行详细分析。 3. 绘制图表:使用Python中的数据可视化库(如matplotlib、seaborn等),可以将记录的指标数据绘制成图表。你可以绘制损失曲线、评估指标曲线等,以便更直观地了解模型的训练进展和性能。 4. 分析和比较指标:通过比较生成器和判别器的损失值以及评估指标,可以评估模型的训练效果和超分辨能力。可以根据需要选择最佳的模型权重或进行进一步的调优。 请注意,具体的实现方法会因使用的深度学习框架和训练代码而有所不同。根据你的代码和需求,你可能需要对数据进行预处理和后处理,以便更好地分析和查看指标。 总结来说,通过记录、可视化和分析训练过程中的指标,你可以更好地了解SRGAN模型的训练效果,并根据需要进行调整和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值