题目:Simple Baselines for Image Restoration
单位:旷视
代码:https://github.com/megvii-research/NAFNet
论文:https://arxiv.org/abs/2204.0467
作者认为系统复杂度分解为两部分: 块间(inter-)复杂度和块内(intra-)复杂度,其中inter-block的复杂度是指网络的宏观结构,比如multi-stage, UNet等,文章就简单的选择了Unet为宏观结构,作者宏观结构不是影响效果的关键("We believe the architecture will not be a barrier to performance. ")
作者的目标是使用块间低和块内复杂度低的网络实现SOTA
解释了GELU,GA和GLU的关系:
激活函数GELU和通道注意力GA都是门控线性单元GLU的特例,为降低计算量,作者用实验证明可以用特征图的哈达玛积来代替
作者罗列了几种结构,很明显采用传统的U-Net模型最简单,作者认为结构不影响性能
块间复杂度比较
首先,尽管transformers在计算机视觉方面表现出良好的性能,它们可能不是实现SOTA结果所必需的,有可能就是其中的一小步。其次,深度卷积比自注意机制更简单,能获得丰富的局部信息。
transformers在底层视觉的成功是得益于MSA本身还是与之配套的其他模块/结构/trick的效果是值得思考,这个文章告诉我们复杂或者简单(Restormer,PlainNet两个类似的结构)都可以实现SOTA
归一化 Normalization
文章采用了Transformer里被通常采用的LayerNorm,虽然学习率上会提高10倍+但是会让训练稳定!
解释:
韩国团队在2017NTIRE图像超分辨率中取得了top1的成绩,主要原因竟是去掉了网络中的batchnorm层,由此可见,BN并不是适用图像恢复image-to-image的任务中,比如超分辨率上,因为我们这个领域的图像的绝对差异(具体来说就是增强细节)是非常重要的,所以batchnorm并不适合。底层视觉一般是不太会增加BN,因为在batch中进行统计很容易将其他图片的信息引入,忽略了恢复图像的特定信息,导致降点而且让图像模糊。之前底层视觉里面用的比较多的norm是instance Norm(比较多的是在风格迁移,近期恢复这边有HI-Net),instance Norm是对同一个样本的同一个通道所有元素做归一化,更适合对单个像素有更高要求的场景。LayerNorm是对同一个样本的不同通道做归一化,关注了整幅图。
SOTA方法大都采用在普通块中用GELU代替ReLU
使用了简化的channel attention,减少计算量的同时引入channel的交互,避免了计算问题,同时在每个特征中保持全局信息。
从swin到restormer,其实tranformer的全局attention可能没有想象的那么重要,swin里切成window-based仍然可以保持很好的效果,restormer里面干脆放弃了spatial的MSA而使用深度卷积和传统的spatial attention,有可能CA对恢复任务更重要一些
G a t e ( X , f , g , σ ) = f ( X ) ⊙ σ ( g ( X ) ) Gate(X,f,g,σ)=f(X)⊙σ(g(X)) Gate(X,f,g,σ)=f(X)⊙σ(g(X))
G E L U ( x ) = x Φ ( x ) GELU(x)=xΦ(x) GELU(x)=xΦ(x)
从公式可以注意到GELU是GLU的特例,即 f , g f,g f,g取恒等函数,并取 σ σ σ 为 Φ Φ Φ。
通过相似性,作者从另一个角度推测GLU可以被视为激活函数的推广,并且它可能能够替代非线性激活函数。
即使去除 σ σ σ, G a t e ( X ) = f ( X ) ⊙ g ( X ) Gate(X)=f(X)⊙g(X) Gate(X)=f(X)⊙g(X) 也包含非线性。基于这些,提出了一个简单的GLU变体: 在通道维度中直接将特征图分为两部分并将其相乘,称为SimpleGate
原本的CA的公式如下,
C A ( X ) = X ∗ σ ( W 2 m a x ( 0 , W 1 p o o l ( X ) ) ) CA(X)=X∗σ(W2max(0,W1pool(X))) CA(X)=X∗σ(W2max(0,W1pool(X)))
如果我们将通道注意计算视为一个函数,用输入 X X X记为 Ψ Ψ Ψ
C A ( X ) = X ∗ Ψ ( X ) CA(X)=X∗Ψ(X) CA(X)=X∗Ψ(X)
作者将CA也和GELU一样,视为GLU的特例
最终的结果是
S C A ( X ) = X ∗ W p o o l ( X ) SCA(X)=X∗Wpool(X) SCA(X)=X∗Wpool(X)
如果觉得对你有帮助的话:
点赞,你的认可是我创作的动力!
收藏,你的青睐是我努力的方向!
评论,你的意见是我进步的财富!