图像/视频超分之降质过程
点击上方“计算机视觉工坊”,选择“星标”
干货第一时间送达
图像/视频超分领域近期并无突破性的方法出现,故近期计划将图像/视频超分相关方法进行一次综述性汇总。计划从不同点出发对图像/视频超分进行一次“反思”之旅。本文是该旅程的第一站:图像降质过程。
尽管图像超分和视频超分在方法上或多或少会有一些关键性的区别,但是两者在训练数据对的制作方面其实并无非常大的区别。所以本文主要以图像超分为例进行介绍。
说到图像超分,大家可能会很自然的想到这样几个数据集:DIV2K,Set5,Set14等等。确实,这些数据集都是图像超分领域最常见的数据集。我们先来简单汇总一下图像/视频超分领域有哪些公开数据集。
Name | Phase |
---|---|
Set5 | test |
Set14 | test |
B100 | test |
Menga109 | test |
Urban100 | test |
General100 | test |
L20 | test |
DIV2K | train/val |
DIV8K | train/val |
Flickr2K | train |
DF2K(DIV2K+Flickr2K) | train |
City100 | train/val |
DRealSR | train/val |
RealSR(V1, V2, V3) | train/val |
Aogra(声网) | train |
Vid4 | test |
SPMCs | test |
UDM10 | test |
MM522 | train |
REDS | train/val |
Vimeo | train/val |
Youku | train |
注:上面所列出的仅是图像/视频超分的常用数据集以及部分竞赛数据集,除此之外还有一些Real-World数据集。其中DIV2K当属图像超分领域应用最多的一个数据集,它也是目前图像超分最常用的一个训练数据集(部分模型会考虑采用DF2K进一步提升模型性能,比如AIM2020-Efficient SuperResolution中的方法都采用了DF2K进行模型训练);REDS与Vimeo是视频超分领域应用最多的两个训练数据集(REDS是NTIRE2019竞赛中引入的一个数据集);RealSR、DRealSR是两个真实场景采集的图像超分数据集(具体怎样构建的训练数据对后期有空会介绍一下)。
尽管有了上述数据集,那么训练数据对LR-HR是如何构建的呢?
原理
对于图像超分而言,LR图像的获取过程一般可以描述为:
其中,k表示降质模糊核(它有多种选择,比如双三次核、高斯核等),表示下采样,n表示加性高斯白噪声。
可以看到上述降质过程包含模糊、下采样以及噪声,而图像超分则仅仅考虑了模糊核下采样。我们就来对可能的降质过程做一个简单的归纳,见下表。
类型 | 说明 |
---|---|
BI | bicubic-down |
BD | blur-down |
BN | bicubic-down+noise |
DN | blur-down+noise |
注:BI表示降质过程仅包含双三次下采样;BD表示通过高斯模糊下采样;BN表示双三次插值下采样+高斯白噪声;DN表示高斯模糊下采样+高斯白噪声。
在这四种降质类型中,BI与BD是最常见的两种降质类型,而针对BN和DN的研究相对较少。而针对BI与BD两种降质的研究则属BI更多。
BI实现
接下来,我们将简单的介绍一下上述四种降质类型是如何实现的。首先,我们来看一下BI。做CV的同学对Bicubic应该非常熟悉,可以轻松的采用OpenCV或者PIL等库图像的双三次插值。但是,这里大家需要特别注意:BI一般特指matlab中的imresize。OpenCV与MATLAB在imresize的实现上是有区别的:matlab中的imresize具有抗锯齿功能,而OpenCV中的resize则不具备上述功能。关于matlab如何制作数据,可以参考BasicSR。这里附上关键性代码。
sclae = 4
image_path = "butterfly.png"
image = imread(image_path)
image = im2double(image)
image = modcrop(image, scale)
imgLR = imresize(image, 1/scale, 'bicubic')function image = modcrop(image, scale)
if size(img, 3) == 1sz = size(img);sz = sz - mod(sz, scale)image = image(1:sz(1), 1:sz(2))
elsetmpsz = size(img);sz = tmpsz(1:2)sz = sz - mod(sz, scale)image = image(1:sz(1), 1:sz(2))
end
end
也许有同学会说,都2020年了,谁还会用MATLAB啊,有没有Python版的呢?这里提供两个基于Pytorch与matlab相当的imresize。
matlab_functiosn_verification
bicubic_pytorch
但是,需要注意:尽管上述两个版本的imresize实现是参考MATLAB中的imresize进行的实现,但因为一些数据精度问题,最终的实现还是会有一点点的区别。区别有多大呢,见下表。
注:表中数据来自XinTao大佬的测试,笔者也对Diff进行了测试,指标一致;不过与测试机器的性能区别,算法的耗时存在部分出入。
从上述表中结果来看,如果要进行X4超分,强烈建议各位同学采用bicubic_pytorch中的实现,因为它还可以通过GPU进行加速(就是这么优秀);当然XinTao大佬提供的Pytorch实现更为精确(笔者就是资深受益者,哈哈)。
BD实现
上面介绍了BI的实现方法(matlab和python),这里我们将介绍BD的实现方法。
在图像超分领域,BD中的高斯模糊参数为:kernelsize=7,sigma=1.6。相关实现可以参考如下链接中的代码:Prepare_TrainData_HR_LR_BD.m。这里列出核心代码:
kernelsize = 7;
sigma = 1.6;
kernel = fspecial('gaussian', kernelsize, sigma)sclae = 4
image_path = "butterfly.png"
image = imread(image_path)
image = im2double(image)
image = modcrop(image, scale)blur = imfilter(image, kernel, 'replicate')
imgLR = imresize(blur, 1/scale, 'nearest')
在视频超分领域,BD中的高斯模糊参数为:kernelsize=13, sigma=1.6。相关实现可以参考如下链接中的代码:DUFDown(这里这里是采用Tesorflow进行的实现)。考虑到不少同学对于Tensorflow不熟悉,我们这里提供一版Pytorch实现(XinTao大佬提供)。
def DUF_downsample(x, scale=4):"""Downsamping with Gaussian kernel used in the DUF official codeArgs:x (Tensor, [B, T, C, H, W]): frames to be downsampled.scale (int): downsampling factor: 2 | 3 | 4."""assert scale in [2, 3, 4], 'Scale [{}] is not supported'.format(scale)def gkern(kernlen=13, nsig=1.6):import scipy.ndimage.filters as fiinp = np.zeros((kernlen, kernlen))# set element at the middle to one, a dirac deltainp[kernlen // 2, kernlen // 2] = 1# gaussian-smooth the dirac, resulting in a gaussian filter maskreturn fi.gaussian_filter(inp, nsig)B, T, C, H, W = x.size()x = x.view(-1, 1, H, W)pad_w, pad_h = 6 + scale * 2, 6 + scale * 2 # 6 is the pad of the gaussian filterr_h, r_w = 0, 0if scale == 3:r_h = 3 - (H % 3)r_w = 3 - (W % 3)x = F.pad(x, [pad_w, pad_w + r_w, pad_h, pad_h + r_h], 'reflect')gaussian_filter = torch.from_numpy(gkern(13, 0.4 * scale)).type_as(x).unsqueeze(0).unsqueeze(0)x = F.conv2d(x, gaussian_filter, stride=scale)x = x[:, :, 2:-2, 2:-2]x = x.view(B, T, C, x.size(2), x.size(3))return x
BN/DN实现
接下来,我们将要介绍一下DN的实现。它是在BD的基础上添加额外的高斯白噪声,它是RDN所提出。RDN的官方代码中也提供了响应的matlab实现:Prepare_TrainData_HR_LR_DN。但不知为何这里的DN其实是BI+Noise的实现,也就是应当是Noise。但无论如何,这里关键的是Noise的生成方式,看到code后,想必各位同学可以轻易根据改成所需要的code。这里列出关键性code。
sclae = 4;
sigma = 30; %噪声水平
image_path = "butterfly.png";
image = imread(image_path);
image = im2double(image);
image = modcrop(image, scale);
imgLR = imresize(image, 1/scale, 'bicubic');
imgLR = single(imgLR)
LRNoise = imgLR + single(sigma * randn(size(imgLR)));
LRNoise = uint8(LRNoise)
上面所提供的代码为matlab代码,但相比BI,BD,这里的关键仅在于Noise的生成部分。大家可以采用Pytorch、Numpy以及Tensorflow等轻易实现。比如,Pytorch的参考实现:
noise = torch.randn(B,C,H,W).mul_(noise_level).float()
Others
上面介绍了BI、BD、BN以及BD降质原理以及实现代码。那么除了上述降质外,还有其他类型的吗?有的!但基本与上述降质大同小异,对此感兴趣的同学可以去看一下KAIR中实现的几种降质:SRMD, DPSR, USRNet。这里就不再进行过多的介绍。
注意事项
前面对图像/视频超分中的降质方案进行了简单的梳理与总结。有一点需要各位同学牢记在心:在进行方法对比时,其降质过程一定要相同,否则对比就会不公平。为什么这样说呢?见下表的结果对比。
Degradation | Method | Scale | Dataset | PSNR | SSIM |
---|---|---|---|---|---|
BI | RDN | X3 | Set5 | 34.71 | 0.9296 |
BD | RDN | X3 | Set5 | 34.58 | 0.9280 |
BI | RCAN | X3 | Set5 | 34.74 | 0.9299 |
BD | RCAN | X3 | Set5 | 34.70 | 0.9288 |
BI | TDAN | X4 | Vid4 | 26.24 | 0.7800 |
BD | TDAN | X4 | Vid4 | 26.58 | 0.8010 |
从上表可以看到:对于图像超分而言,BI与BD两种降质制作的数据训练的模型指标基本相当;而对于视频超分而言,BI与BD两种降质方式训练的模型的指标差别较大(0.34dB)。
所以研究视频超分的小伙伴一定要特别注意新方法的指标是在BD降质所得,还是BI降质所得。如果强制的将BD模型指标与BI模型指标进行对比,那么有点"贻笑大方"了。
参考
KAIR
RDN
EDVR
BasicSR
matlab_functions_verification
bicubic_pytorch
VSR-DUF
本文仅做学术分享,如有侵权,请联系删文。
下载1
在「计算机视觉工坊」公众号后台回复:深度学习,即可下载深度学习算法、3D深度学习、深度学习框架、目标检测、GAN等相关内容近30本pdf书籍。
下载2
在「计算机视觉工坊」公众号后台回复:计算机视觉,即可下载计算机视觉相关17本pdf书籍,包含计算机视觉算法、Python视觉实战、Opencv3.0学习等。
下载3
在「计算机视觉工坊」公众号后台回复:SLAM,即可下载独家SLAM相关视频课程,包含视觉SLAM、激光SLAM精品课程。
重磅!计算机视觉工坊-学习交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。
同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。
▲长按加微信群或投稿
▲长按关注公众号
觉得有用,麻烦给个赞和在看~
图像/视频超分之降质过程相关推荐
- 强烈推荐!商汤-港中文MMLab开源图像视频超分辨率工具箱MMSR
点击我爱计算机视觉标星,更快获取CVML新技术 近一年,图像视频超分辨率突然变得异常火热,各大AI巨头和新锐均在发力. 52CV曾经第一时间报道了在今年CVPR 2019上 商汤EDVR算法获NTIR ...
- 图像视频超分辨率基本概念
视频超分是由图像超分发展而来的.基于深度学习的图像超分辨率(SISR)首次实现于2014年,推广到视频超分是在2017年,由此可见超分辨率还是一个比较新颖的课题方向. 超分类任务主要源自对图像视频信息 ...
- 超分辨率重建生成低分辨率图像,生成降质图像公认方法代码
目录 1背景 2.BI 3.BD 4.DN 5总结 1背景 超分辨率重建中经典的生成降质图像通常使用MATLAB实现的,通常有四种方法: 类型 说明 BI bicubic-down BD blur-d ...
- 综述丨视频超分辨率研究方法
看点 近年来,深度学习在很多领域取得了进展,其中包括视频超分辨率任务.本文是第一个也是唯一一个视频超分方向的综述,主要看点如下: 1)回顾了基于深度学习的视频超分技术的研究进展: 2)提出了一种基于深 ...
- 即插即用!视频超分中的涨点神器:iSeeBetter
CNN让超分结果更真实,GAN让超分结果更丰满,所以CNN+GAN=GOOD! 添加一个鉴别器组件就能使结果增加0.32dB,即插即用,涨点神器!是否在其他的CNN架构上也可行,还需实验验证. 题目: ...
- CVPR 2021 论文大盘点-图像视频去雨篇
本文继续总结图像处理相关论文,关注一类特殊的图像修补任务--视频.图像去雨,共计 10 篇. 大家可以在: https://openaccess.thecvf.com/CVPR2021?day=all ...
- 720P实时超分和强悍的恢复效果:全知视频超分OVSR
论文:https://arxiv.org/pdf/2103.15683.pdf 单位:武汉大学.哈尔滨工业大学.武汉工程大学 译者言: 本文可以看做是PFNL(同一作者)的续作.LOVSR是将PFNL ...
- AAAI 2021 | 视频超分中的可变形对齐解读
摘要 · 看点 在 AAAI 2021,南洋理工大学 S-Lab.香港中文大学-商汤科技联合实验室和中科院深圳先进技术研究院等对视频超分辨率中的可变形对齐作出分析.可变形卷积最初是为适应对象的几何变化 ...
- 在Vid4上突破28dB大关!视频超分新的里程碑:IconVSR
BasicVSR:The Search for Essential Components in Video Super-Resolution and Beyond BasicVSR:在视频超分组件上的 ...
- CVPR 2019 神奇的超分辨率算法DPSR:应对图像模糊降质
点击我爱计算机视觉标星,更快获取CVML新技术 上两幅图像中上面为低分辨率模糊图像,下面大图来自几天前刚出来的超分辨率算法DPSR的结果.在我们的印象中,往往超分辨率后的图像会看起来轻微模糊,但该算法 ...
最新文章
- 16_python_面向对象
- python添加时间戳_Python 给某个文件名添加时间戳的方法
- 删除唯一性约束unique
- 合肥学院计算机对口升学2019,15高校招生4340人!2019安徽省对口升学本科招生计划出炉!...
- 关于 OData 协议的数据类型 - SAP gateway 框架是如何解析数据类型的?
- python 动态属性
- 2019 年起如何开始学习 ABP 框架系列文章-开篇有益
- python 如何快速判断列表是否相同_Python-检查列表中的所有元素是否相同
- 拼接大屏数据展示_可视化大屏的UI设计是根据哪几个方面来进行?
- 如何在excel 单元格中增加换行
- Java 设计模式之装饰器模式
- 写在32岁年龄的开始
- 面向对象 —— 类设计(八)
- php上传文件 按日期文件夹,fckeditor上传文件按日期存放及重命名方法
- qt最大化和还原实现_Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)...
- 某笔试的一道简单题目
- window10安装jdk17
- c 语言友元函数重载,C++友元函数重载++和--运算符
- C语言数据的输入输出
- 电视盒子和机顶盒有什么区别?哪个更值得买?
热门文章
- 使用MonkeyTest对Android客户端进展压力测试
- leetcode 46 Permutations ----- java
- BZOJ 1085: [SCOI2005]骑士精神( IDDFS + A* )
- 使用Emit动态调用方法(技术原型)
- 你先说什么事,我再决定有没有空
- Thingsboard 3.1.0 - 规则链:转换数据结构
- 每天一道剑指offer-约瑟夫环求解圆圈中剩余的数
- mysql 流浪,流浪汉机器 – 如何找出mysql用户名/密码
- php mysql 内存表_用mysql内存表来代替php session的类_PHP教程
- (day 001 - 进制转换) 405. 数字转换为十六进制数