admin管理员组

文章数量:1650772

目录

  • 写在前面
  • 摘要部分
  • Introduction部分
  • Method部分
    • Head
    • Body
      • CNN 分支
      • Transformer分支
      • Fusion Block
    • Tail
  • 实验部分

写在前面

之前一直都是在总结算法和Unity的内容,一直是想往unity游戏开发方向发展的,甚至想着去开发galgame,和扶她自对线(bushi,但准备读研后还是和现实妥协了,悲
应导师要求开始读论文并进行总结整理。因为要读很多篇然后写博客也比较花时间,所以博客中方法不会去详细到各个公式去介绍,只会简单介绍思路,总的来说还是写给自己看的,如果大佬们看到有什么问题也可以随便锐评(

摘要部分

本文提出了一个用于超分辨率(SR)任务的有效的混合架构,它用CNN的获取局部特征,用Transformer进行长距离建模,并通过一个模块将两部分特征进行融合,从而进一步改善SR结果。
这个架构是一个双路结构,由Transformer和卷积分支组成,通过将两个分支各阶段获取到的特征相互融合实现特征表示的互补。此外,本文还提出了一个跨尺度的Token注意模块。这使得Transformer能够有效地利用不同尺度的Token之间的信息关系。该方法在多个超分辨率数据集上取得了最好的结果。

Introduction部分

超分辨率(SR):从给定的低分辨率(LR)图像中恢复一个高分辨率(HR)图像

文章动机:比较好理解的想法。以前基于CNN架构在获取长距离(全局)的依赖关系以及恢复弱的纹理细节方面有一定的局限性。近来大火的Vision Transformer利用了Transformer对长距离信息建模的能力,将其迁移到了CV领域,但是Vision Transformer直接用在超分辨率上肯定是效果不好的,ViT缺少变化长度的token,缺少层级的结构,难以获取多个尺度的特征(尤其是细粒度的特征),在需要精确到像素的密集预测任务上的效果不好。于是本文提出一个将CNN和ViT的优点结合起来的架构,融合CNN提取的Local Feature和Transformer获取到的长距离依赖,从而获得更加丰富完备的特征。

文章贡献

  1. 提出一个结合CNN和ViT的方法(ACT)
  2. 提出一个跨尺度的注意力机制以进行多尺度交互
  3. 进行了多个实验,在各Benchmark上的效果优秀

Method部分


整体架构如上图所示。首先,输入为低分辨率(LR)图片,经过Head提取到浅层特征,浅层特征通过两条路径:CNN分支和Transformer分支。在进Transformer branch之前进行tokenize,获得embedding。接下来,每一个阶段获得的特征会经过Fusion Block进行融合,最后一个Fusion block的输出与原本的浅层特征相加得到最终的深层特征,通过Tail部分来进行高分辨率还原。

Head

Head部分由两个带残差连接的卷积块构成,用于提取浅层特征,得到的是浅层特征 F 0 F_0 F0

Body

Body部分用于获得深层的特征,包含CNN分支和Transformer分支,这一部分用的都是stride为1的卷积,每一个阶段特征大小应该是不会变的,最终输出作为残差和和 F 0 F_0 F0进行相加

CNN 分支

CNN分支的Block用的是RCAN《Image Super-Resolution Using Very Deep Residual Channel Attention Networks》中的卷积块RCAB。这篇文章提出了一个Channel Attention去给予重要的通道更大的权重,想了解具体的细节可以去读一下这篇文章
CNN分支的第i个阶段在文中表示为:

Transformer分支


Transformer分支由堆叠的Transformer Block构成,其中每个Transformer Block含有两种Attention模块,MHSA和Cross-Scale Token Attention(CSTA)。MHSA和一般的ViT相同,而CSTA如图所示。在CSTA模块中,输入的Token在通道维被平均分为两部分,文章中记为:

其中 T a T^a Ta直接送到注意力模块,记为 T s T^s Ts,而 T b T^b Tb要经过rearrange操作构成有overlap的大token,记为 T l T^l Tl,为了之后进行交叉注意力, T l T^l Tl先用MLP层处理,将通道数调为d/2。之后,使用交叉注意力来将不同尺度的token进行融合,在 T s T^s Ts的分支 T s T^s Ts形成Query矩阵,而Key和Value矩阵来自 T l T^l Tl,在 T l T^l Tl分支则相反。总的来说,两个Cross-Attention分别接受 ( Q s , K l , V l ) (Q^s,K^l,V^l) (Qs,Kl,Vl), ( Q l , K s , V s ) (Q^l,K^s,V^s) (Ql,Ks,Vs)两个三元组进行注意力计算。计算的结果 T l T^l Tl分支需要再用MLP层将通道数调回 d ′ d' d,再进行与一开始rearrange相反的操作,得到的结果与 T s T^s Ts分支计算注意力的结果进行拼接,得到输出的token。
每一个Transformer Block中Token的处理表示如下:

Fusion Block


同一层的Transformer feature和CNN feature会经过Fusion Block进行特征融合,对于Transformer分支的特征,要先用rearrange将其Token形式转换为一般的特征形式 c × h × w c \times h \times w c×h×w ,在通道维和CNN feature进行拼接,然后通过Channel-wise fusion(由 1 × 1 1\times1 1×1卷积,relu函数,以及残差连接构成),得到混合后的特征 M i M_i Mi,从通道维对 M i M_i Mi进行切分,两部分特征分别经过Conv层/MLP层作为下一个CNN/Transformer Block的输入。(对于Transformer Block,要先重新rearrange到token的形式)

Tail

Tail部分使用PixelShuffle和单层的卷积进行上采样操作,生成高分辨率的图像。PixelShuffle的细节可以参考这篇文章《Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network》(这个操作已经整合在了pytorch里)

实验部分

在Set5, Set14, B100, Urban100, 和 Manga109 上进行了测试,在指标PSNR和SSIM上几乎都是最高的,超过了之前的SwinIR。

作者也将中间Block产生的特征图进行了可视化,将所有通道取绝对值再平均,再进行标准化,得到输出的可视化结果(第二排为Transformer Branch的输出,第三排为CNN Branch的输出)。Transformer更关注高频的纹理,材质细节,但是会有模糊的的地方;而CNN更关注边缘部分。两者的信息可以相互补充。

可以参考贡献部分。
感觉CNN和Transformer结合的架构很适合这种图像重建任务,还是要想一想怎么更好的把这两部分结合起来。

本文标签: 笔记论文CNNRichTransformer