超分辨率重建: SRGAN

对于图像超分辨率重建, 第一个使用CNN实现的是SRCNN, 类似于编码器解码器结构. SRGAN是第一个使用GAN网络解决超分辨率重构的网络

创新点

  • 以GAN网络形式实现超分辨率重建
  • 使用感知损失计算重构损失

网络结构

生成器: 以LR(低分辨率)图像为输入,输出为HR 大小为输入的4倍。使用了残差块与跳跃连接

判别器: 输入原始HR图片与生成的HR图片进行判别真假

loss

对于重构损失, 如果直接使用pixel-wise的MSE使得图像变得平滑, 因此通过使用VGG提取到深层特征, 然后对得到的特征计算MSE, 可以更好的抓取不变特征.

contnt loss 即为通过VGG提取特征得到的MSE loss.

class FeatureExtractor(nn.Module):
    def __init__(self):
        super(FeatureExtractor, self).__init__()
        vgg19_model = vgg19(pretrained=True)
        self.feature_extractor = nn.Sequential(*list(vgg19_model.features.children())[:18])

    def forward(self, img):
        return self.feature_extractor(img)

criterion_content = torch.nn.MSELoss()
gen_features = feature_extractor(gen_hr)
real_features = feature_extractor(imgs_hr)
loss_content = criterion_content(gen_features, real_features.detach())

对抗损失:

result demo

ref

SRGAN