HINet: Half Instance Normalization Network for Image Restoration
Paper: https://arxiv.org/pdf/2105.06086.pdf
Code: https://github.com/megvii-model/HINet
Introduction
Normalization被广泛用于high-level的计算机视觉任务,例如分类、分割、以及风格迁移等。但不能简单地将其应用到low-level的任务中,比如超分中使用BN层不会提高效果。该论文将Instance Normalization,该论文将Instance Normalization当作基础模块,名为Half Instance Normalization Block (HIN Block),基于HIN Block构建多阶段网络HINet。
主要贡献如下:
- 基于Instance Normalization构建HIN模块应用于图像复原领域,该论文是首个直接采用IN在图像复原任务中达到SOTA的方案;
- 基于HIN模块设计多阶段网络HINet,以更少的计算量以及推理时间达到SOTA;
- 将Instance Normalization作为一种特征增强方法进行扩展,并将其直接应用到图像恢复任务中;
Instance Normalization
Approach
HINet模型主要分为两个阶段,每个阶段都是由UNet组成子网络,UNet内部首先采用1个3×3卷积提取初始特征,随后特征被送到Encoder-Decoder结构中,Encoder由4×4卷积进行下采样,Encoder使用2×2卷积进行上采样。分别进行4次下采样以及4次上采样。
在Encoder中采用HIN Block用于提取low-level特征,在Decoder中采用Res Block用于提取高级特征,并通过Skip Connect与Encoder提取的特征进行信息融合从而减少不断上采样带来的信息损失,最后通过3×3卷积得到最终的残差输出。阶段1与阶段2通过SAM以及CSFF相连接(MSPNet)。
SAM全名supervised attention module,有监督的注意力模块,SAM用于提取阶段1的特征,与特征2的输入相融合,使用SAM有助于将当前阶段的重要特征传递给阶段2。为了更好理解,我这里展示HINet作者的SAM代码(MSPNet原网络使用1×1卷积,在这里被替换成了33卷积),首先F_in表示阶段1Decoder的输出,同时也是SAM的输入,通过一个3×3卷积conv2得到残差R_s,之后和退化图像Degraded相加,进行特征融合。在这里退化图像为整体网络的输入,此时得到了阶段1 的最终输出X_s。又通过3×3卷积conv3+Sigmoid构建像素注意力机制,生成Attention Maps,通过3×3卷积conv1以及与Attention Maps点乘的方式重新校准F_in,该注意力特征与初始输入F_in相加,得到注意力增强的F_out,输入阶段2。
## Supervised Attention Module
class SAM(nn.Module):
def __init__(self, n_feat, kernel_size=3, bias=True):
super(SAM, self).__init__()
self.conv1 = conv(n_feat, n_feat, kernel_size, bias=bias)
self.conv2 = conv(n_feat, 3, kernel_size, bias=bias)
self.conv3 = conv(3, n_feat, kernel_size, bias=bias)
def forward(self, x, x_img):
x1 = self.conv1(x)
img = self.conv2(x) + x_img
x2 = torch.sigmoid(self.conv3(img))
x1 = x1*x2
x1 = x1+x
return x1, img
CSFF全名cross-stage feature fusion,在这里是用于将阶段1的浅层特征传递到阶段2。分别得到阶段1在Encoder以及Decoder得到的Feature Maps,分别经过33卷积,再与阶段2的Encoder的Feature Maps进行特征融合。通过这种方式可以帮助网络从前到后传播多尺度特征。
Loss Function
基于PSNR定义损失函数,其中X_i表示阶段i的输入,R_i表示阶段i的输出,Y表示每个阶段的GT。训练中采用R_1与R_2进行共同训练,推理时使用阶段2的R_2+X_2作为最终输出。
上图展示了HIN Block与Res Block的流程,相比Res Block,HINet主要将3×3卷积后的F_mid从中间分成F_mid1以及F_mid2,F_mid1经过IN进行归一化,F_mid2则不经过任何模块,二者通过拼接合并在一起。其余操作则与Res Block一致。
Experiments
效果图
看看最终效果,上图展示了在各种数据集的恢复结果,可以看到在降噪、去模糊、去雨等任务中均可以达到比较好的效果。