超分辨率重建: 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())
对抗损失: