[論文メモ] Simple Baselines for Image Restoration

arxiv.org

画像修復タスクで非線形の活性化関数なしのシンプルなSOTAモデルを提案。

f:id:Ninhydrin:20220415090259p:plain

既存のSOTA手法は複雑だが、このモデルの複雑さをinter-blockとintra-blockに分けて考えてみる。

inter-blocアーキテクチャ自体についてで、図2のようにマルチスケールやマルチステージのモデルが提案されている。
intra-blockはアーキテクチャを構成するブロックについてで、Swin Transformer BlockやHINBlockなどが提案されている。
これらのinter・intra blockの中でも単純なblockでSOTAを達成できないか?というお気持ち。
f:id:Ninhydrin:20220415091329p:plain

手法

「必要な構造」だけの非常に単純な形のベースラインモデルを作成する。
「必要な構造」はタスク(SIDDデータセットのdenoising、GoProデータセットのdeblurring)の評価で決定。

inter-blockの複雑さが小さいアーキテクチャとしてシングルステージのUNet(図2(c))を採用。
アーキテクチャはintra-blockをスタックして全体を構成するがそのBlockをどう設計するか。
intra-blockに関しては3つを考える

PlainNet's Block

まずはシンプルにConv(Depth-wise Convも)とReLUとショートカットのBlockとする(論文では図3(a)となっているが多分図3(b)の間違い)。
f:id:Ninhydrin:20220415095743p:plain

transformer blockを使わないのは

  • transformer blockのパフォーマンスは良いとされているがSOTAモデルのために必須では無いという主張がある
  • Depth-wise Conv(DWConv)のほうがself-attentionより単純な構造
  • ConNetとTransformerを比較するのが目的ではない

といった理由から。
このBlockをPlain Blockと予備、これを使ったアーキテクチャをPlainNetとする。

Baseline's Block

ベースラインモデルを作成するために先ほどPlain BlockにNormalizationとAttentionの追加とActivationの変更を行う。

Normalization

BatchNormはバッチサイズが小さいと不安定で、代わりに提案されたInstanceNormは必ずしもプラス効果があるわけではなくチューニングが必要。
そこでLayerNormを採用した。
これにより10倍大きい学習率でも学習がスムーズになり、SIDDとGoProデータセットでもパフォーマンスが向上した。

Activation

ReLUはよく使われている活性化関数だが、近年のSOTAでは主流がReLUからGELUに置き換わってきている。
そこでPlain BlockのReLUをGELUに変更したら一部のパフォーマンスが向上したのでGeLUを採用する。

Attention

ViTのようなself-attentionは計算コストが高い。Swin Transformerのwindow-basedなattentionはグローバルな情報が欠落し、そもそもローカルな情報はPlainBlockのDWConvで十分。
しかし、Channel Attentionについては低コストかつグローバルな情報を扱えるので採用した。パフォーマンスも向上。

これがBaseline Block(図3(c))で、Baseline Blockを使ったアーキテクチャをBaselineとする。
Baselineモデルのパフォーマンスは表1参照。
f:id:Ninhydrin:20220418091652p:plain

Nonlinear Activation Free Network

このBaselineモデルは結果的に低コストでSIDDとGoProデータセットでSOTAを超えたが、現状のようにシンプルな構造のままよりパフォーマンスを向上させられないか?もしくはパフォーマンスを維持したままよりシンプルにできないか?

BaselineモデルのGELUとCAに注目する。

GELU

いくつかのSOTAモデルを見るとGated Liner Units(GLU)が採用されていて、これがキーになる可能性が高い。

GLUは特徴マップを \textbf{X}、線形変換を f, g、活性化関数 \sigmaとして以下の式(入力を分割したり線形変換が1つとか種類はあるが)。
f:id:Ninhydrin:20220415100503p:plain
 \odotアダマール積。活性化関数はSigmoidが多い。
それに対してBaselineで採用したGeLUは以下の式。
f:id:Ninhydrin:20220415100832p:plain

以下のように実装されることが多い。
f:id:Ninhydrin:20220415100849p:plain

 f,gを恒等写像 \sigma \PhiとするとGELUはGLUの特殊なケースと考えられる。
なのでGELUをGLUに置き換えられそう。また、GLUは非線形な計算を含んでいて非線形活性化関数 \sigmaは必須では無いのでこれも取り除く。
そうすると f(\textbf{X}) \odot g(\textbf{X})といった非線形なものが含まれない形になる。
これらから、入力をチャンネル方向で2分割しチャンネル次元でアダマール積を取るSimpleGateでGLUを置き換える。
f:id:Ninhydrin:20220415101759p:plain
 \textbf{X}, \textbf{Y}は二分割され同じ形の特徴マップ。
SimpleGateのイメージを図4(c)に示す。
f:id:Ninhydrin:20220415102235p:plain

Channel Attention(CA)

CAとしてSqueeze-and-excitation networks(SENet)のものを採用したが(図4(a))、CAは以下の式に書ける。
f:id:Ninhydrin:20220415102519p:plain

 *はチャンネル毎の積。 \Psiがpoolingやconvをひっくるめたもので、これは式(1)GLUに非常に似ていて、これもGLUの特徴ケースとみなせる。poolingによるグローバル情報の集約は必須なので、それを追加してSimple Channel Attention(SCA)を提案。
f:id:Ninhydrin:20220415102733p:plain
 Wは線形変換。図4(b)がSCAのイメージ。

BaselineモデルのGELUとCAをそれぞれSimpleGateとSCAに置き換えることでパフォーマンスを落とさず、よりシンプルなモデルにできた。
しかも非線形活性化関数を完全に取り除けた。
なのでこれを Nonlinear Activation Free Network(NAFNet)とする。

実験・結果

PlainNetからBaselineモデルへのパフォーマンス変化は表1に示した。
BaselineモデルからNAFNetへのパフォーマンス変化を表2に示す。
f:id:Ninhydrin:20220418094037p:plain

SIDDデータセットのdenoising
f:id:Ninhydrin:20220418093944p:plain
f:id:Ninhydrin:20220418094647p:plain

GoProデータセットのdeblurring
f:id:Ninhydrin:20220418094727p:plain
f:id:Ninhydrin:20220418094748p:plain

その他は論文参照

Ablations。
ブロック数によるパフォーマンス変化。
f:id:Ninhydrin:20220418094216p:plain

GLUの \sigmaはSigmoidだが、ほかの変換も調べ非線形関数が必要であるか調査。
f:id:Ninhydrin:20220418094339p:plain

所感

実際、非線形活性化関数がなくてもSOTAが達成できたというのはすごいが、「シンプルでもSOTAのベースとなるモデルを作る」という目標から「非線形活性化関数を取り除く」に切り替わっている感がある。目的と手段が逆転している的な。
結果はUNet + 非線形活性化関数の無いブロックとなったが、個人的にはもっと簡単な構造のinter blockでの結果とかもっとAblationが欲しかった。