该文是图像/视频超分“反思”之旅的第二站:BackProjection,本文对图像/视频超分中的BackProjection进行了汇总,从源头到其在AI中的应用进行了介绍。
起源
BackProjection最早是由Michal Irani与Shmuel Peleg于1991年提出用于图像超分,该方法就是传统图像超分领域知名的IBP。下图给出了BackProjection示意图,BackProjection的本质思想在于:一个好的SR结果对应的LR应当与原始的LR尽可能的相近。
BackProjection
对IBP感兴趣的同学建议去查看原文,这里就不再过多进行介绍,仅提供两个版本的Matlab实现参考:
- MATLAB工具包|IBP.
- BasicSR|BackProjection.核心代码如下所示。
function [im_h] = backprojection(im_h, im_l, maxIter)
[row_l, col_l,~] = size(im_l);
[row_h, col_h,~] = size(im_h);
p = fspecial('gaussian', 5, 1);
p = p.^2;
p = p./sum(p(:));
im_l = double(im_l);
im_h = double(im_h);
for ii = 1:maxIter
im_l_s = imresize(im_h, [row_l, col_l], 'bicubic');
im_diff = im_l - im_l_s;
im_diff = imresize(im_diff, [row_h, col_h], 'bicubic');
im_h(:,:,1) = im_h(:,:,1) conv2(im_diff(:,:,1), p, 'same');
im_h(:,:,2) = im_h(:,:,2) conv2(im_diff(:,:,2), p, 'same');
im_h(:,:,3) = im_h(:,:,3) conv2(im_diff(:,:,3), p, 'same');
end
尽管BackProjection提出非常久远,但其在目前的图像超分中仍有不少可参考价值。“SevenWay”一文中提出BackProjection一种有效的提升重建图像PSNR指标的方法。不同图像超分方法的性能提升见下表,最高提升可达0.59dB。
AI 时代
尽管深度学习方法主导了诸多CV领域的SOTA,但传统的很多思想都是非常有价值的,还可以继续在AI时代继续“发光发热”。BackProjection就是其中一例,它继续在图像超分领域取得了一些列的SOTA结果。
DBPN
AI BackProjection最早由Muhammad Hari等于DBPN一文提出,所提方法取得了X8超分的SOTA结果。DBPN的网络结构见下图,它包含多次连续的上采样-下采样操作。
DBPN
它里面的Upsample与Downsample就是BackProjection在AI中的一个直接应用,下图给出了两个模块的示意图。
Up/Down Projection Unit
它的上采样单元可以描述如下:
它的下采样单元与上述过程比较类似,这里就不再赘述。各位同学可以对比一下前述的MATLAB代码与这里的公式,可以发现:residual就是BackProjection思想的直接应用。下面给出了上采样单元的实现code,更详细代码详见:DBPN。
代码语言:javascript复制class UpBlock(torch.nn.Module):
def __init__(self, num_filter, kernel_size=8, stride=4, padding=2, bias=True, activation='prelu'):
super(UpBlock, self).__init__()
self.up_conv1 = DeconvBlock(num_filter, num_filter, kernel_size, stride, padding, activation)
self.up_conv2 = ConvBlock(num_filter, num_filter, kernel_size, stride, padding, activation)
self.up_conv3 = DeconvBlock(num_filter, num_filter, kernel_size, stride, padding, activation)
def forward(self, x):
h0 = self.up_conv1(x)
l0 = self.up_conv2(h0)
h1 = self.up_conv3(l0 - x)
return h1 h0
在全局网路结构方面,DBPN为了更充分的利用多尺度特征,还采用了类似RDN的思想,在每个模块内将已有的同尺度特征通过Concat方式进行融合。参考代码如下:
DBPN forward
注:上述为DBPN的forward部分的code,红框表示各个阶段的同尺度特征融合与下采样模块;绿框表示同尺度特征融合与上采样模块;而在RDN网络中,仅在最后进行一次特征融合。
ABPN
ABPN
考虑到DBPN中采用简单的Concat方式进行特征融合,ABPN(见上图)对此进行了优化改进提出了非局部注意力机制的融合模式:它在每个模块中都添加了一个非局部注意力融合模块,见下图两种非局部注意力模块,对非局部注意力了解的同学可以很轻松的理解下面两个图,不再赘述。
NonLocalAttention
除了特征融合部分的代码外,ABPN还在重建部分引入了BackProjection思想以进一步提升重建质量。
RBPN
除了在图像超分领域大放光彩外,BackProjection在视频超分领域还有所应用,如RBPN,见下图。RBPN是DBPN的作者将BackProjection在视频超分中的应用。
RBPN
RBPN中的BackProjection体现在两个方面:(1) 特征提取部分,与图像超分基本相同;(2)特征融合部分,也就是Projection模块,见下图Projection模块的Encoder示意图。很明显,这里也是BackProjection的一个直接应用。
Encoder
小结
当然,除了上述DBPN、ABPN以及RBPN外,还有其他AI BackProjection的方法。比如ABPN的前身HBPN,MGBPv1与v2(见下图)。但这些方法都是对DBPN的改进(多阶段、多尺度、Attention等),所以就不再赘述,对BackProjection类方法感兴趣的同学可以看一下文末的参考。
MGBPv2
除了AI BackProjection外,BackProjection在图像增强也有应用,比如PhotoShop中知名的非锐化掩模(USM)不也是BackProjection的一种应用吗。
传统图像处理中有不少非常经典的idea是值得各位同学思考的,针对性的将其与CNN相结合很有可能会取得“意想不到的”效果。谈到这里了,就稍微多的提几点:
- SAN一文其实可以理解为双边滤波与CNN的结合,各位同学可以尝试从双边滤波的角度去理解一下该文;
- 3DLUT一文不就是传统的LUT与AI的结合在图像增强领域的应用吗?
- PANet不就是非局部均值与AI的结合在图像超分中的应用吗?
- NSR不就是稀疏表达与AI的结合在图像超分中的应用吗?
- ...
参考
- [1991]IBP: Improving Resolution by Image Registration
- [2016]Seven ways to improve example-based single image super resolution
- [2018] Deep Back-Projection Networks for Super Resolution
- [2018] MGBPv1: Multi-Grid Back projection Super Resolution and Deep Filter Visualization
- [2019] Recurrent Back-Projection Network for Video Super Resolution
- [2019] Hierarchical Back Projection Network for Image Super Resolution
- [2019] MGBPv2: Scaling Up Multi-Grid Back-Projection Networks
- [2019] Image Super Resolution via Attention based Back Projection Networks
- [2020] Sub-Pixel Back-Projection Network for Lightweight Single Image Super Resolution.