前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图像/视频超分之BackProjection

图像/视频超分之BackProjection

作者头像
AIWalker
发布2020-11-03 10:50:13
1.1K0
发布2020-11-03 10:50:13
举报
文章被收录于专栏:AIWalkerAIWalker

该文是图像/视频超分“反思”之旅的第二站:BackProjection,本文对图像/视频超分中的BackProjection进行了汇总,从源头到其在AI中的应用进行了介绍。

起源

BackProjection最早是由Michal Irani与Shmuel Peleg于1991年提出用于图像超分,该方法就是传统图像超分领域知名的IBP。下图给出了BackProjection示意图,BackProjection的本质思想在于:一个好的SR结果对应的LR应当与原始的LR尽可能的相近。

BackProjection

对IBP感兴趣的同学建议去查看原文,这里就不再过多进行介绍,仅提供两个版本的Matlab实现参考:

  1. MATLAB工具包|IBP.
  2. BasicSR|BackProjection.核心代码如下所示。
代码语言:javascript
复制
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

它的上采样单元可以描述如下:

\text{scale up}: H_0^t = (L^{t-1} * p_t) \uparrow_s \\ \text{scale down}: L_0^t = (H_0^t * g_t) \downarrow_s \\ residual: e_t^l = L_0^t - L^{t-1} \\ \text{scale residual up}: H_1^t = (e_t^l * q_t) \uparrow_s \\ output: H_t = H_0^t + H_1^t

它的下采样单元与上述过程比较类似,这里就不再赘述。各位同学可以对比一下前述的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相结合很有可能会取得“意想不到的”效果。谈到这里了,就稍微多的提几点:

  1. SAN一文其实可以理解为双边滤波与CNN的结合,各位同学可以尝试从双边滤波的角度去理解一下该文;
  2. 3DLUT一文不就是传统的LUT与AI的结合在图像增强领域的应用吗?
  3. PANet不就是非局部均值与AI的结合在图像超分中的应用吗?
  4. NSR不就是稀疏表达与AI的结合在图像超分中的应用吗?
  5. ...

参考

  1. [1991]IBP: Improving Resolution by Image Registration
  2. [2016]Seven ways to improve example-based single image super resolution
  3. [2018] Deep Back-Projection Networks for Super Resolution
  4. [2018] MGBPv1: Multi-Grid Back projection Super Resolution and Deep Filter Visualization
  5. [2019] Recurrent Back-Projection Network for Video Super Resolution
  6. [2019] Hierarchical Back Projection Network for Image Super Resolution
  7. [2019] MGBPv2: Scaling Up Multi-Grid Back-Projection Networks
  8. [2019] Image Super Resolution via Attention based Back Projection Networks
  9. [2020] Sub-Pixel Back-Projection Network for Lightweight Single Image Super Resolution.
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AIWalker 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 起源
  • AI+时代
    • DBPN
      • ABPN
        • RBPN
        • 小结
        • 参考
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档