【图像超分】论文复现:Pytorch实现RDN!保姆级复现教程!实现与原论文基本一致的PSNR和SSIM!代码注释详尽!易读易复用!可用于训练自己的数据集!附完整代码和各放大倍数下的最优模型权重文件!

第一次来请先看这篇文章:【超分辨率(Super-Resolution)】关于【超分辨率重建】专栏的相关说明,包含专栏简介、专栏亮点、适配人群、相关说明、阅读顺序、超分理解、实现流程、研究方向、论文代码数据集汇总等)

项目代码和最优性能的权重文件下载见文末链接!!!可以复现论文、训练自己的数据集,详细代码使用说明!!!同时包含最优性能的模型权重文件(x2、x3、x4),可以直接用来超分自己的图像!!!

本文亮点:

  • 详解RDN的网络结构、训练流程、测试流程、画图流程,代码注释详细,无论是科研还是应用,新手小白都能看懂,学习阅读毫无压力
  • 提供完整代码和x2、x3、x4训练好的最优模型权重文件,可以直接拿来超分自己的图像数据;
  • 只需简单替换训练集,即可训练你自己的图像数据集,给出了可能的调参方式
  • 量化评估实现,计算测试集Set5、Set14、BSD100、URBAN100、MANGA109的平均PSNR和SSIM,指标与原论文基本一致,有的甚至更高
  • 质量评估实现,可视化图像超分结果
  • 44
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: PSNRSSIM 的 PyTorch 实现代码如下: ``` import torch import numpy as np import matplotlib.pyplot as plt def psnr(img1, img2): mse = torch.mean((img1 - img2)**2) if mse == 0: return 100 PIXEL_MAX = 1.0 return 20 * torch.log10(PIXEL_MAX / torch.sqrt(mse)) def ssim(img1, img2, data_range=1.0, size_average=True): window = torch.hann_window(11) K1 = 0.01 K2 = 0.03 C1 = (K1 * data_range) ** 2 C2 = (K2 * data_range) ** 2 mu1 = torch.nn.functional.conv2d(img1, window.unsqueeze(0).unsqueeze(0), stride=1, padding=5) mu2 = torch.nn.functional.conv2d(img2, window.unsqueeze(0).unsqueeze(0), stride=1, padding=5) mu1_sq = mu1.pow(2) mu2_sq = mu2.pow(2) mu1_mu2 = mu1 * mu2 sigma1_sq = torch.nn.functional.conv2d(img1 * img1, window.unsqueeze(0).unsqueeze(0), stride=1, padding=5) - mu1_sq sigma2_sq = torch.nn.functional.conv2d(img2 * img2, window.unsqueeze(0).unsqueeze(0), stride=1, padding=5) - mu2_sq sigma12 = torch.nn.functional.conv2d(img1 * img2, window.unsqueeze(0).unsqueeze(0), stride=1, padding=5) - mu1_mu2 if size_average: SSIM = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2)) else: raise Not ### 回答2: PSNR(峰值信噪比)和SSIM(结构相似性)是评估图像质量的常用指标,它们可以通过PyTorch进行实现。这里我们先介绍一下它们的理。 PSNR测量的是图像与压缩或者失真后图像之间的差别。它的计算公式为: PSNR = 10 * log10((MAX^2) / MSE) 其中,MAX是像素值的最大可能取值,MSE代表均方误差。在PyTorch中,我们可以使用`torch.mean`函数来计算MSE,然后根据PSNR的公式计算出PSNR值。 SSIM衡量的是两幅图像之间的结构相似性。它是基于亮度、对比度和结构三个方面的比较。在PyTorch中,我们可以使用`torch.mean`、`torch.var`、`torch.covar`等函数计算图像的均值、方差和协方差,然后利用这些值计算出SSIM值。 为了显示结果,我们可以使用折线图。在PyTorch中,可以使用Matplotlib库绘制折线图。我们将PSNRSSIM计算的结果按照图像的索引进行组织,然后使用Matplotlib库的`pyplot.plot`函数将这些结果绘制成折线图。 具体的代码实现如下: ```python import torch import matplotlib.pyplot as plt # 计算PSNR def psnr(original, compressed): mse = torch.mean((original - compressed) ** 2) max_pixel = torch.max(original) psnr = 10 * torch.log10(max_pixel**2 / mse) return psnr # 计算SSIM def ssim(original, compressed): c1 = (0.01 * 255) ** 2 c2 = (0.03 * 255) ** 2 mean_original = torch.mean(original) mean_compressed = torch.mean(compressed) var_original = torch.var(original) var_compressed = torch.var(compressed) cov = torch.mean((original - mean_original) * (compressed - mean_compressed)) ssim = ((2 * mean_original * mean_compressed + c1) * (2 * cov + c2)) / ((mean_original ** 2 + mean_compressed ** 2 + c1) * (var_original + var_compressed + c2)) return ssim # 生成示例图像 original_images = [torch.randn(3, 256, 256) for _ in range(10)] compressed_images = [torch.randn(3, 256, 256) for _ in range(10)] # 计算PSNRSSIM psnr_values = [] ssim_values = [] for i in range(10): psnr_values.append(psnr(original_images[i], compressed_images[i])) ssim_values.append(ssim(original_images[i], compressed_images[i])) # 显示折线图 plt.plot(range(10), psnr_values, label='PSNR') plt.plot(range(10), ssim_values, label='SSIM') plt.xlabel('Image Index') plt.ylabel('Metric Values') plt.title('PSNR and SSIM') plt.legend() plt.show() ``` 这段代码会生成10个示例图像,并分别计算它们的PSNRSSIM值。然后使用Matplotlib库绘制一个折线图来显示这些值。折线图中,横坐标代表图像索引,纵坐标代表对应的PSNRSSIM值。 ### 回答3: PSNRSSIM是两种常用的用于图像质量评估的指标。下面给出它们的PyTorch实现,并用折线图显示它们在不同图像数据上的值。 首先,我们需要导入所需的库。以下是一个简单的例子: ```python import torch import torch.nn.functional as F import torchvision.transforms.functional as TF import matplotlib.pyplot as plt ``` 下一步是加载图像数据并将其转换为张量。这一步假设你已经准备好一个包含图像数据的文件夹,其中包含了你想要进行测试的图像。 ```python image_path = "path/to/your/image.jpg" image = Image.open(image_path) image_tensor = TF.to_tensor(image).unsqueeze(0) ``` 接下来,我们可以定义PSNRSSIM函数。这些函数将计算图像之间的PSNRSSIM值,并将其返回。 ```python def psnr(original, compared): mse = F.mse_loss(original, compared) return 10 * torch.log10(1 / mse) def ssim(original, compared): return torch.sum(F.l1_loss(original, compared)) ``` 最后,我们可以计算每个图像PSNRSSIM值,并将结果绘制成折线图。 ```python psnr_values = [] ssim_values = [] # 通过循环遍历图像数据并计算相应的值 for image_tensor in image_tensors: compared_image_tensor = # 与图像进行比较的图像 psnr_value = psnr(image_tensor, compared_image_tensor) ssim_value = ssim(image_tensor, compared_image_tensor) psnr_values.append(psnr_value.item()) ssim_values.append(ssim_value.item()) # 绘制折线图 plt.plot(psnr_values, label='PSNR') plt.plot(ssim_values, label='SSIM') plt.xlabel('Image Index') plt.ylabel('Value') plt.legend() plt.show() ``` 上述代码将根据所提供的图像数据计算出每个图像PSNRSSIM值,并将这些值绘制成折线图,以便更直观地了解图像质量的变化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十小大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值