Super-Resolution
open source image and video super-resolution works
Posted on 11.1, 2019
SubPixel
一般来说在Pixel shuffle之后会接一个卷积,防止上采样出现一些错误。 RCAN等超分模型都考虑了这点,CAIN插帧模型却没有考虑到。| Quoting Zhaoyang RCAN modules_tail = [ common.Upsampler(conv, scale, n_feats, act=False), conv(n_feats, args.n_colors, kernel_size)] Upsampler内部实现卷积通道数 n_feats → n_feats * (scale**2) → pixelshuffle n_feats 调用nn.PixelShuffle CAIN 实现pixelshuffle,但使用时通道数恰好 n_feats → n_colors https://github.com/myungsub/CAIN/blob/master/model/common.py
关于view与图像分块、亚像素提取
灵活地使用view,既能实现down-shuffle和pixel-shuffle,也可以实现图像分块。 但要注意区别: view(batch_size, channels, out_height, block_size, out_width, block_size)是down-shuffle, view(batch_size, channels, block_num, out_height, block_num, out_width)是图像分块。
其实有个类似的有趣的话题,关于时序的建模 加入source_clip是B,T,C,H,W维度的时序序列。 方式1: source_clip = torch.cat(torch.split(source_clip, 1, dim=1), 0).squeeze(1).float().cuda() 方式2: source_clip = source_clip.reshape(B*T,C,H,W) 这两个也是有些许不同的,网络可以从 batch 维度学习到一些有价值的信息,如样本的采样顺序、相关性、噪声干扰等。 但我觉得最终这两应该都影响,只是大家都沿用了Wav2Lip的实现方式。
Global-skip-connection and Meanshift
Global-skip-connection 全局残差区分高低频,改变优化目标。 Meanshift 均值归一,增加样本稳定性。我认为是对超分任务不用BN层的一种补偿。 According to the experience of Lim et al., it should help stabilize the training but doesn't affect the PSNR obviously. thstkdgus35/EDSR-PyTorch#71、#94 1、 def forward(self, x): x = self.sub_mean(x) x = self.head(x) res = self.body(x) res += x x = self.tail(res) x = self.add_mean(x) 2、 def forward(self, x): x = self.sub_mean(x) base = F.interpolate(x, scale_factor=4, mode='bilinear', align_corners=False) x = self.head(x) x = self.body(x) x = self.tail(x) x += base x = self.add_mean(x) 1、2方案在插值前后进行全局残差,区别不大。效果一定程度等价。
Y or RGB
团队最开始基于Y通道进行超分,但经过一段时间的运营,发现视频源是清晰的情况下,如果单独把Y通道单独提取出来会有很多奇怪的纹理和毛刺,超分后会放大这些异常。 如果基于RGB超分则不会有这样的问题。虽然Y通道有自身的缺点,但在实际的落地过程中,很多场景还是离不开基于Y通道的超分。比如直播中的 4K超分,为了保证实时性, 会对一路直播流进行分布式的拆分,路由到多台GPU节点进行处理,而在分布式超分的场景中,使用Y通道传输可以节省带宽的消耗。
YUV和RGB互转要考虑的东西有两个 一个是Matrix,是BT601还是BT709,还是4K时代的BT2020,,Ycgco 不同的matrix的色彩范围不一样 数值也有差 一般HD视频(1080p)使用BT601 转换, UHDTV(4k或8K)使用BT2020协议转换 , 若视频信号中无色域标志或者色彩转换矩阵 , 默认使用BT601即可, ffmpeg转rgb也是这样操作的 第二个是range,YUV里TV和PC显示器的数值范围不一样 YUV和RGB互转有两套公式,对应两种range 8bit位深的情况下 TVrange是16-235(Y)、16-240(UV) 称为limited range PCrange是0-255 称为full range 而RGB没有range之分,全是0-255 YUV : YUV是一种模拟型号, Y∈ [0,1] U,V∈[-0.5,0.5] YCbCr :也叫YCC, YCbCr 是数字信号, 它包含两种形式, 分别为TV range 和 full range 我们平时接触到的绝大多数都是 YCbCr (tv range) , ffmpeg 解码出来的数据绝大多数也是这个, 虽然ffmpeg 里面将它的格式描述成YUV420P , 实际上它是YCbCr tv range
Checkerboard
关于棋盘纹的问题,pixel-shuffle仍是会出现的。这个和pixel-shuffle前一个卷积的表现是息息相关的。 使用ICNR初始化是有帮助的,它保证具有相关性的卷积来处理相邻的像素,也等价于最近邻插值后进行卷积(也同时保持着pixel-shuffle参数多、速度快的优势)。 同时对bias也零值初始化self.conv.bias.data.zero_(),不然默认是均匀分布。 个人认为,除此之外,我们也可以特别关注下pixel-shuffle前的卷积,在训练收敛后单独对这一层进行finetune或许会有帮助。
Training
感受野足够大的话,增大patchsize接着训是会涨点的。训练集loss不一定降,但patchsize更接近验证集的尺寸,有助于验证集指标提升。
Testing
1. 对Metircs的方差进行分析,可以挑选出具备更好泛化性能的模型。 2. 网络插值 :在MSE、GAN; different noise levels and blur kernels; different aesthetic flavors. 这三种取舍中有很好的表现。 3. 网络插值的变种 :历史平均,对不同epoch产生的中间模型求参数均值,生成一个新的模型,经测试该模型泛化效果更好,生成的图片多样性更强。
GAN Loss
1. VGG + 0.1GAN :使用感知损失,可能和对抗损失的相性比L1/L2要好。这样优化目标内部不会有矛盾。 相性不好的弊端是 - 训练不稳定,容易震荡。生成器并不会因为判别器更强,而着力于生成更"真实"的图片,仍然在追求最小化欧式距离。待到判别器变强后,loss会震荡增加。 2. PSNR & GAN网络插值 :网络插值技术的提出,也绕开了这个难题。在最优化GAN loss时,完全可以不搭配PSNR-oriented loss. 3. 判别器可以考虑 RelativeGAN + PatchGAN,前者训练稳定,后者输出的是一个N x N的矩阵,更适用于要求高分辨率、高清细节的视觉任务中。
VGG Loss
可以做的改进也不少。 首先,可视化了解HR图像和模糊图像(或LR图像bicubic上采样)特征的差异:
一些工作的观点认为:感知损失成功的关键是网络结构而非预训练权重。
MMSR
港中文mmlab的项目,基于实验室之前的工作:BasicSR、ESRGAN和EDVR. Highlights
超分选择模型的吐槽
GANs have serious problems with mode collapse, likelihood and MSE-based models just blur everything, flow-based models have artifact problems due to the restricted operator set they use. Autoregressive models are promising but are tricky to apply to SR and do not scale to high-resolution images. Diffusion models are notorious for being quite slow at processing.
Reading list
ChaofWang / Awesome-Super-Resolution
Computer Vision
- Kornia
基于PyTorch的可微计算机视觉库 kornia
Interpretable Low-Level Vision
大赛方案
扩展: 优酷天池超分大赛 巧改EDVR方案报告链接 EDVR详细分析简书链接 首届全国人工智能大赛 AI+4K HDR方案分享报告链接
Leaderboards
Usually the benchmarks are single-image super-resolution (SISR) tasks.各benchmarks榜单 入口
视频复原数据集
视频压缩、质量评估 https://www.its.bldrdoc.gov/vqeg/video-datasets-and-organizations.aspx https://www.cdvl.org/ youtube: grep ''