关键词:Image Super-Resolution、Video Super-Resolution
本专栏研究领域为【超分辨率重建】,涵盖图像超分、视频超分,实时超分,4K修复等方面。主要内容包括主流算法模型的 论文精读、论文复现、毕业设计、涨点手段、调参技巧、论文写作、应用落地 等方面。
算法模型从SRCNN开始更新至今,一般是一篇论文精读对应一篇论文复现。
论文精读 详解理论,归化繁为简,归纳核心,积累词句,培养阅读论文和论文写作能力 。 论文复现依托 Pytorch代码,实现完整的模型训练流程,总结调参方法,记录碰到的bug,论文插图可视化,培养读写代码能力、做实验的能力、以及应用落地能力 。在复现大量的算法后,专栏会更新 涨点方法 ,帮助有需要的同学找到创新点。专栏中还会更新一些 实用技术 ,帮助大家解决实际问题。此外,专栏会更新超分算法相关的 毕业设计 ,以完整软件项目的形式呈现(UI界面+超分算法)。
建议:有科研需要的同学【论文精读】和【论文复现】都看,理论+实验;有做项目应用需要而不需要写论文的同学可以只看【论文复现】,有最优PSNR的模型文件,可以直接用,超分自己的图像。
笔者的项目环境:
pycharm专业版远程连接服务器运行。你可以根据自己的情况使用不同配置,结果不会差很多。
如果你的环境不同,请根据自己的情况修改部分代码。
例如,多个GPU就会用到torch.nn.parallel DataParallel,而且会model.to(device)或者to cuda。而你自己的环境是windows本地跑,只有一个GPU,那么就需要修改对应部分的代码。
仅做参考,相信大多数人的环境应该都能运行。实在不行,只能升级设备了。
超分辨率(Super-Resolution),顾名思义,是将低分率的图像变成高分辨率的图像。它是低级别(low-level)的图像复原任务(同级别的还有去噪)。但是,超分是病态的(ill-pose)。它是无中生有,凭空创造出来的。为的是改善视觉效果,提升后续工作的效率。
那么,图像是如何无中生有,从低分辨率到高分辨率的呢?
举一个分辨率放大2倍的例子。GT是Groud Truth,也是HR。作为标签(label)或者目标(target)指导低分率图像要向着什么目标努力。低分辨率图像是通过插值算法造出来的,常见的方法是用双三次插值缩小再放大(也可以添加高斯噪声)。当然,如果你自己有两个2倍关系的数据,低分辨率(LR)的是输入,高分辨率(HR)是GT。
这样,LR和HR之间有一个映射,通过损失函数最小化来得到最优的模型。
如上图所示,Input就是通过双三次插值(Bicubic)先缩小2倍(LR)再放大2倍的结果。Output是通过模型将LR超分的结果。
横向对比,一个是不同算法的对比,得出我们的模型更好的结论;一个是超分的结果与GT对比,得出我们的模型更接近于原图。质量评估,可视化看清晰度;量化评估,看PSNR和SSIM等指标。
常见的传统方法对比有:nearest,双线性,双三次,lanczos,sinc,spline等。
然而,实际应用场景中,想让图像从模糊变清晰,往往是给出模糊图像,而不是像上图中作为GT,也没有对应放大倍数后想达到的指导。超分之后,发现图像还是模糊。
这是为什么呢?
答:超分只是将图像的分辨率放大,模糊是因为失焦或图像大小变化导致的,超分才有效果。一定要分析模糊产生的原因,是因为噪声模糊(去噪模型)、运动模糊(有对应的去运动模糊的方法)还是大小变化模糊。
实际应用往往需要去噪、锐化、超分等多种图像复原手段共同作用才能产生比较好的效果。
所以,当你训练的超分模型效果不好时,不必气馁。需要写论文的只站在论文的角度思考有提升就可以;需要实际应用的调调数据或者换换模型,总会守得云开见月明,轻舟已过万重山。
超分也和其他深度学习任务相同,一般分为以下几步实现算法模型:
看懂论文,学习算法知识,拓宽思路,提升科研写作能力。
【图像超分】主流算法:
视频超分:
其他领域:
跑通代码,学习超分算法实现流程,复现论文中性能,提升代码能力。
科研相关:
两个常用的库:
一些主流模型的论文源码只给出了模型结构,训练是基于上面这两个库的。在主流SOTA模型都掌握后,可以看看如何使用它们训练,这样可以将模型都汇总在一起,不用一个一个单独做了。
注:上述链接是本人在学习超分的过程中觉得有用的资料,分享给大家,侵删。
本小节汇总遇到的问题,不定期更新。
答:可以,但不符合超分的做法。因为超分的含义就是提升分辨率,没办法训练scale=1的模型,scale=1就变成其他问题了( 想变清晰是去模糊image deblurring )。但可以放大完再缩小。也有输入输出图像大小一致的模型,但不是scale=1训练出来的。总之,有很多手段可以不放大,只变清晰。但不是scale=1。跟图像大小没关系,超分主要是学习不同分辨率图像之间的映射关系,实际上不是图像大小缩放而来的关系,也可以按照超分的流程训练找到LR和HR的关系,LR图像输入模型,模型推理出对应的HR。缩放倍数只是一种得到LR的手段,一种提前设定好的关系。
【深度思考】为什么评价指标PSNR、SSIM和论文中的不一样?一文搞清超分辨率主流benchmarks测试集Set5等的PSNR、SSIM的计算方式以及python与matlab的imresize差别
what is the difference between opencv’s and matlab’s bicubic algorithm?
https://github.com/spnova12/SR_bicubic_test-matlab-vs-cv2
没有硬件条件,需要云服务的同学可以扫码看看: