IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 图像超分辨率[CVPR2016]-VDSR-PyTorch代码复现 -> 正文阅读

[人工智能]图像超分辨率[CVPR2016]-VDSR-PyTorch代码复现

前言:

Implementation of CVPR2016 Paper: “Accurate Image Super-Resolution Using Very Deep Convolutional Networks”(http://cv.snu.ac.kr/research/VDSR/) in PyTorch

论文原作者是用matlab写的代码,GitHub上有大佬用PyTorch复现,为我们提供了便捷。但是毕竟已经过去五年了,复现过程中也遇到了很多问题,当然,也从中学到了很多。

跑源码遇到的问题

  1. main_vdsr:
UserWarning: torch.nn.utils.clip_grad_norm is now deprecated in favor of torch.nn.utils.clip_grad_norm_.
  nn.utils.clip_grad_norm(model.parameters(),opt.clip)

特别细微的区别,函数方法后加了一个下划线

# 修改前
nn.utils.clip_grad_norm(model.parameters(),opt.clip)	
# 修改后
nn.utils.clip_grad_norm_(model.parameters(),opt.clip)	
  1. demo.py:

    ImportError: cannot import name ‘imread’ from ‘scipy.ndimage’,从scipy1.3.0开始,imread已从这个模块移除

from scipy.ndimage import imread
ImportError: cannot import name 'imread' from 'scipy.ndimage' (D:\Anaconda\envs\pytorch\lib\site-packages\scipy\ndimage\__init__.py)
# 修改前
from scipy.ndimage import imread
# 修改后
from imageio import imread
  1. 如何在训练的时候指定GPU(如果你的电脑有GPU的话,最好用起来)
  2. 看到每个py里,开头总有很多parser.add_argument()来设置参数,这有什么作用呢?python之parser.add_argument()用法——命令行选项、参数和子命令解析器
  3. 解决报错:h5py objects cannot be pickled,这是因为在加载训练集时使用了多线程

PSNR(图像峰值信噪比)

什么是PSNR?为什么结果要用这个参数度量

vdsr.py中参数对卷积参数的初始化

        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                # 打印下来看了看
                # print(m.kernel_size[0], m.kernel_size[1], m.out_channels)
                n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
                m.weight.data.normal_(0, sqrt(2. / n))

把以上报错以及一些小错误解决之后,代码终于跑通了!用作者给的model_epoch_50.pth重新跑demo.pyeval.py可以出结果,总是报一堆SourceChangeWarning,很明显是网络源有了更改,但结果和GitHub及论文里公布的差不多,我本以为这样就算成功了。

image-20211119220213159

但正是由于我的强迫症,于是打算自己重新训练一下,用自己训练出来的模型进行测试,果然模型训练出来了,这些warning也不在了,结果令我震惊,好像白训练了,PSNR和双三次插值的基本没差别,这是什么问题呢?

想找一下解决方案也搜不到,找了好久,就在自己想要放弃的时候,在GitHub的Issues下发现了同样的问题:使用提供的train.h5按照main_vdsr.py中的超参数进行重新训练,经过50个epochs后得到的结果却是和bicubicu的值差不多,请问这是什么原因?

这下就不奇怪了,原来大家也遇到这问题了。还好作者耐心解答,我也根据作者提供的matlab源码,用91张图片重新生成了训练用的数据。然后白嫖Google Colab的Tesla K80进行训练,原本训练50个epochs不到30分钟,现在训练了将近两天(而且Google还要限制使用时长)。最后顺利用2G数据集训练出来的第50个epoch测试,得到了和论文、GitHub中接近的结果。

用91张图片数据集训练的结果

From left to right are ground truth, bicubic and vdsr
在这里插入图片描述

After 50 epochs of training, performance on set5:

ScalaPSNR_bicubicPSNR_predictedPSNR_paperTime
2x33.6937.3237.532.54s
3x30.4133.5233.662.14s
4x28.4131.2231.352.03s

后记:

这个代码虽然复现成功了,但其实仅仅是停留在了跑通代码的阶段,只是看懂了网络。要让自己现在重写还真写不出来。b站刘老师说,要提升能力应该是这样的过程:

  1. 理论《Deep Learning》,从数学和工程学的角度理解深度学习理念
  2. 阅读PyTorch文档
  3. 想写复杂网络:要阅读PyTorch文档
    经典代码光跑通没用,如何提炼能力:读代码->写代码->学代码,不断迭代
  4. 读代码,看系统、训练、测试架构、如何构建损失函数等
  5. 尝试自己来写,而不是直接拿下来跑代码
  6. 扩充视野:知识盲点、代码实践上的不足

我的代码:https://github.com/Eppp/vdsr-pytorch-recurrence

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:23:44  更:2021-11-20 18:25:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 4:19:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码