SRGAN超分辨重建

简介

SRGAN全称:super-resolution generative adversarial network,是利用生成对抗网络进行图像超分辨率重建的一种深度学习网络。

效果展示

在这里插入图片描述

网络结构

网络由生成网络和判别网络组成。

生成网络:input + Conv(channel = 64, stride = 1) + Relu + B个残差块 + 2次Deconv(4倍放大)
判别网络:input + Conv(channel = 64, stride = 1) + Leaky Relu + 重复卷积块(Conv+Leak Relu+BN)进行下采样 + Dense + Sigmoid (结果和1或0对比)
在这里插入图片描述

Loss函数

1.优化目标
在这里插入图片描述
2.损失函数
总损失 = 内容损失 + 对抗损失 + 正则项
其中,正则项基于全变分损失,用来去噪,使图像变得平滑。
在这里插入图片描述
3.感知损失
感知损失 = 内容损失 + 对抗损失

内容损失:
采用VGG提取特征,计算fake和gt特征的欧氏距离。
在这里插入图片描述
尽管使用传统的MSE损失函数能实现高的信噪比PSNR,但缺失了高频内容,使生成的图像过于平滑。所以使用VGG损失函数。

对抗损失:
判别生成网络生成的样本。
在这里插入图片描述

训练过程

生成网络和判别网络交替训练。

判别网络:

# original的imgs_hr和valid=1对比
# generator的fake_hr和fake=0对比

imgs_hr, imgs_lr = self.data_loader.load_data(batch_size)
fake_hr = self.generator.predict(imgs_lr)

d_loss_real = self.discriminator.train_on_batch(imgs_hr, valid=1)
d_loss_fake = self.discriminator.train_on_batch(fake_hr, fake=0)
d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)

生成网络:

# generator的fake_hr判别结果validity和valid=1对比
# 通过VGG的fake_features和image_features对比

fake_hr = self.generator(img_lr)
fake_features = self.vgg(fake_hr)
validity = self.discriminator(fake_hr)
self.combined = Model(img_lr, [validity, fake_features])

imgs_hr, imgs_lr = self.data_loader.load_data(batch_size)

image_features = self.vgg.predict(imgs_hr)
g_loss = self.combined.train_on_batch(imgs_lr, [valid=1, image_features])

网络计算参数

判别网络参数

input = generate (512, 512, 3)--------> output = (32, 32, 1) 
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_3 (InputLayer)         (None, 512, 512, 3)       0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 512, 512, 64)      1792      
_________________________________________________________________
leaky_re_lu_1 (LeakyReLU)    (None, 512, 512, 64)      0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 256, 256, 64)      36928     
_________________________________________________________________
leaky_re_lu_2 (LeakyReLU)    (None, 256, 256, 64)      0         
_________________________________________________________________
batch_normalization_1 (Batch (None, 256, 256, 64)      256       
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 256, 256, 128)     73856     
_________________________________________________________________
leaky_re_lu_3 (LeakyReLU)    (None, 256, 256, 128)     0         
_________________________________________________________________
batch_normalization_2 (Batch (None, 256, 256, 128)     512       
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 128, 128, 128)     147584    
_________________________________________________________________
leaky_re_lu_4 (LeakyReLU)    (None, 128, 128, 128)     0         
_________________________________________________________________
batch_normalization_3 (Batch (None, 128, 128, 128)     512       
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 128, 128, 256)     295168    
_________________________________________________________________
leaky_re_lu_5 (LeakyReLU)    (None, 128, 128, 256)     0         
_________________________________________________________________
batch_normalization_4 (Batch (None, 128, 128, 256)     1024      
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 64, 64, 256)       590080    
_________________________________________________________________
leaky_re_lu_6 (LeakyReLU)    (None, 64, 64, 256)       0         
_________________________________________________________________
batch_normalization_5 (Batch (None, 64, 64, 256)       1024      
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 64, 64, 512)       1180160   
_________________________________________________________________
leaky_re_lu_7 (LeakyReLU)    (None, 64, 64, 512)       0         
_________________________________________________________________
batch_normalization_6 (Batch (None, 64, 64, 512)       2048      
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 32, 32, 512)       2359808   
_________________________________________________________________
leaky_re_lu_8 (LeakyReLU)    (None, 32, 32, 512)       0         
_________________________________________________________________
batch_normalization_7 (Batch (None, 32, 32, 512)       2048      
_________________________________________________________________
dense_1 (Dense)              (None, 32, 32, 1024)      525312    
_________________________________________________________________
leaky_re_lu_9 (LeakyReLU)    (None, 32, 32, 1024)      0         
_________________________________________________________________
dense_2 (Dense)              (None, 32, 32, 1)         1025      
=================================================================
Total params: 5,219,137
Trainable params: 5,215,425
Non-trainable params: 3,712

生成网络参数

input = original (128, 128, 3)--------> output = (512, 512, 3) 
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_4 (InputLayer)            (None, 128, 128, 3)  0                                            
__________________________________________________________________________________________________
conv2d_9 (Conv2D)               (None, 128, 128, 64) 15616       input_4[0][0]                    
__________________________________________________________________________________________________
activation_1 (Activation)       (None, 128, 128, 64) 0           conv2d_9[0][0]                   
__________________________________________________________________________________________________
conv2d_10 (Conv2D)              (None, 128, 128, 64) 36928       activation_1[0][0]               
__________________________________________________________________________________________________
batch_normalization_8 (BatchNor (None, 128, 128, 64) 256         conv2d_10[0][0]                  
__________________________________________________________________________________________________
activation_2 (Activation)       (None, 128, 128, 64) 0           batch_normalization_8[0][0]      
__________________________________________________________________________________________________
conv2d_11 (Conv2D)              (None, 128, 128, 64) 36928       activation_2[0][0]               
__________________________________________________________________________________________________
batch_normalization_9 (BatchNor (None, 128, 128, 64) 256         conv2d_11[0][0]                  
__________________________________________________________________________________________________
add_1 (Add)                     (None, 128, 128, 64) 0           batch_normalization_9[0][0]      
                                                                 activation_1[0][0]               
__________________________________________________________________________________________________
conv2d_12 (Conv2D)              (None, 128, 128, 64) 36928       add_1[0][0]                      
__________________________________________________________________________________________________
batch_normalization_10 (BatchNo (None, 128, 128, 64) 256         conv2d_12[0][0]                  
__________________________________________________________________________________________________
activation_3 (Activation)       (None, 128, 128, 64) 0           batch_normalization_10[0][0]     
__________________________________________________________________________________________________
conv2d_13 (Conv2D)              (None, 128, 128, 64) 36928       activation_3[0][0]               
__________________________________________________________________________________________________
batch_normalization_11 (BatchNo (None, 128, 128, 64) 256         conv2d_13[0][0]                  
__________________________________________________________________________________________________
add_2 (Add)                     (None, 128, 128, 64) 0           batch_normalization_11[0][0]     
                                                                 add_1[0][0]                      
__________________________________________________________________________________________________
conv2d_14 (Conv2D)              (None, 128, 128, 64) 36928       add_2[0][0]                      
__________________________________________________________________________________________________
batch_normalization_12 (BatchNo (None, 128, 128, 64) 256         conv2d_14[0][0]                  
__________________________________________________________________________________________________
activation_4 (Activation)       (None, 128, 128, 64) 0           batch_normalization_12[0][0]     
__________________________________________________________________________________________________
conv2d_15 (Conv2D)              (None, 128, 128, 64) 36928       activation_4[0][0]               
__________________________________________________________________________________________________
batch_normalization_13 (BatchNo (None, 128, 128, 64) 256         conv2d_15[0][0]                  
__________________________________________________________________________________________________
add_3 (Add)                     (None, 128, 128, 64) 0           batch_normalization_13[0][0]     
                                                                 add_2[0][0]                      
__________________________________________________________________________________________________
conv2d_16 (Conv2D)              (None, 128, 128, 64) 36928       add_3[0][0]                      
__________________________________________________________________________________________________
batch_normalization_14 (BatchNo (None, 128, 128, 64) 256         conv2d_16[0][0]                  
__________________________________________________________________________________________________
activation_5 (Activation)       (None, 128, 128, 64) 0           batch_normalization_14[0][0]     
__________________________________________________________________________________________________
conv2d_17 (Conv2D)              (None, 128, 128, 64) 36928       activation_5[0][0]               
__________________________________________________________________________________________________
batch_normalization_15 (BatchNo (None, 128, 128, 64) 256         conv2d_17[0][0]                  
__________________________________________________________________________________________________
add_4 (Add)                     (None, 128, 128, 64) 0           batch_normalization_15[0][0]     
                                                                 add_3[0][0]                      
__________________________________________________________________________________________________
conv2d_18 (Conv2D)              (None, 128, 128, 64) 36928       add_4[0][0]                      
__________________________________________________________________________________________________
batch_normalization_16 (BatchNo (None, 128, 128, 64) 256         conv2d_18[0][0]                  
__________________________________________________________________________________________________
activation_6 (Activation)       (None, 128, 128, 64) 0           batch_normalization_16[0][0]     
__________________________________________________________________________________________________
conv2d_19 (Conv2D)              (None, 128, 128, 64) 36928       activation_6[0][0]               
__________________________________________________________________________________________________
batch_normalization_17 (BatchNo (None, 128, 128, 64) 256         conv2d_19[0][0]                  
__________________________________________________________________________________________________
add_5 (Add)                     (None, 128, 128, 64) 0           batch_normalization_17[0][0]     
                                                                 add_4[0][0]                      
__________________________________________________________________________________________________
conv2d_20 (Conv2D)              (None, 128, 128, 64) 36928       add_5[0][0]                      
__________________________________________________________________________________________________
batch_normalization_18 (BatchNo (None, 128, 128, 64) 256         conv2d_20[0][0]                  
__________________________________________________________________________________________________
activation_7 (Activation)       (None, 128, 128, 64) 0           batch_normalization_18[0][0]     
__________________________________________________________________________________________________
conv2d_21 (Conv2D)              (None, 128, 128, 64) 36928       activation_7[0][0]               
__________________________________________________________________________________________________
batch_normalization_19 (BatchNo (None, 128, 128, 64) 256         conv2d_21[0][0]                  
__________________________________________________________________________________________________
add_6 (Add)                     (None, 128, 128, 64) 0           batch_normalization_19[0][0]     
                                                                 add_5[0][0]                      
__________________________________________________________________________________________________
conv2d_22 (Conv2D)              (None, 128, 128, 64) 36928       add_6[0][0]                      
__________________________________________________________________________________________________
batch_normalization_20 (BatchNo (None, 128, 128, 64) 256         conv2d_22[0][0]                  
__________________________________________________________________________________________________
activation_8 (Activation)       (None, 128, 128, 64) 0           batch_normalization_20[0][0]     
__________________________________________________________________________________________________
conv2d_23 (Conv2D)              (None, 128, 128, 64) 36928       activation_8[0][0]               
__________________________________________________________________________________________________
batch_normalization_21 (BatchNo (None, 128, 128, 64) 256         conv2d_23[0][0]                  
__________________________________________________________________________________________________
add_7 (Add)                     (None, 128, 128, 64) 0           batch_normalization_21[0][0]     
                                                                 add_6[0][0]                      
__________________________________________________________________________________________________
conv2d_24 (Conv2D)              (None, 128, 128, 64) 36928       add_7[0][0]                      
__________________________________________________________________________________________________
batch_normalization_22 (BatchNo (None, 128, 128, 64) 256         conv2d_24[0][0]                  
__________________________________________________________________________________________________
activation_9 (Activation)       (None, 128, 128, 64) 0           batch_normalization_22[0][0]     
__________________________________________________________________________________________________
conv2d_25 (Conv2D)              (None, 128, 128, 64) 36928       activation_9[0][0]               
__________________________________________________________________________________________________
batch_normalization_23 (BatchNo (None, 128, 128, 64) 256         conv2d_25[0][0]                  
__________________________________________________________________________________________________
add_8 (Add)                     (None, 128, 128, 64) 0           batch_normalization_23[0][0]     
                                                                 add_7[0][0]                      
__________________________________________________________________________________________________
conv2d_26 (Conv2D)              (None, 128, 128, 64) 36928       add_8[0][0]                      
__________________________________________________________________________________________________
batch_normalization_24 (BatchNo (None, 128, 128, 64) 256         conv2d_26[0][0]                  
__________________________________________________________________________________________________
activation_10 (Activation)      (None, 128, 128, 64) 0           batch_normalization_24[0][0]     
__________________________________________________________________________________________________
conv2d_27 (Conv2D)              (None, 128, 128, 64) 36928       activation_10[0][0]              
__________________________________________________________________________________________________
batch_normalization_25 (BatchNo (None, 128, 128, 64) 256         conv2d_27[0][0]                  
__________________________________________________________________________________________________
add_9 (Add)                     (None, 128, 128, 64) 0           batch_normalization_25[0][0]     
                                                                 add_8[0][0]                      
__________________________________________________________________________________________________
conv2d_28 (Conv2D)              (None, 128, 128, 64) 36928       add_9[0][0]                      
__________________________________________________________________________________________________
batch_normalization_26 (BatchNo (None, 128, 128, 64) 256         conv2d_28[0][0]                  
__________________________________________________________________________________________________
activation_11 (Activation)      (None, 128, 128, 64) 0           batch_normalization_26[0][0]     
__________________________________________________________________________________________________
conv2d_29 (Conv2D)              (None, 128, 128, 64) 36928       activation_11[0][0]              
__________________________________________________________________________________________________
batch_normalization_27 (BatchNo (None, 128, 128, 64) 256         conv2d_29[0][0]                  
__________________________________________________________________________________________________
add_10 (Add)                    (None, 128, 128, 64) 0           batch_normalization_27[0][0]     
                                                                 add_9[0][0]                      
__________________________________________________________________________________________________
conv2d_30 (Conv2D)              (None, 128, 128, 64) 36928       add_10[0][0]                     
__________________________________________________________________________________________________
batch_normalization_28 (BatchNo (None, 128, 128, 64) 256         conv2d_30[0][0]                  
__________________________________________________________________________________________________
activation_12 (Activation)      (None, 128, 128, 64) 0           batch_normalization_28[0][0]     
__________________________________________________________________________________________________
conv2d_31 (Conv2D)              (None, 128, 128, 64) 36928       activation_12[0][0]              
__________________________________________________________________________________________________
batch_normalization_29 (BatchNo (None, 128, 128, 64) 256         conv2d_31[0][0]                  
__________________________________________________________________________________________________
add_11 (Add)                    (None, 128, 128, 64) 0           batch_normalization_29[0][0]     
                                                                 add_10[0][0]                     
__________________________________________________________________________________________________
conv2d_32 (Conv2D)              (None, 128, 128, 64) 36928       add_11[0][0]                     
__________________________________________________________________________________________________
batch_normalization_30 (BatchNo (None, 128, 128, 64) 256         conv2d_32[0][0]                  
__________________________________________________________________________________________________
activation_13 (Activation)      (None, 128, 128, 64) 0           batch_normalization_30[0][0]     
__________________________________________________________________________________________________
conv2d_33 (Conv2D)              (None, 128, 128, 64) 36928       activation_13[0][0]              
__________________________________________________________________________________________________
batch_normalization_31 (BatchNo (None, 128, 128, 64) 256         conv2d_33[0][0]                  
__________________________________________________________________________________________________
add_12 (Add)                    (None, 128, 128, 64) 0           batch_normalization_31[0][0]     
                                                                 add_11[0][0]                     
__________________________________________________________________________________________________
conv2d_34 (Conv2D)              (None, 128, 128, 64) 36928       add_12[0][0]                     
__________________________________________________________________________________________________
batch_normalization_32 (BatchNo (None, 128, 128, 64) 256         conv2d_34[0][0]                  
__________________________________________________________________________________________________
activation_14 (Activation)      (None, 128, 128, 64) 0           batch_normalization_32[0][0]     
__________________________________________________________________________________________________
conv2d_35 (Conv2D)              (None, 128, 128, 64) 36928       activation_14[0][0]              
__________________________________________________________________________________________________
batch_normalization_33 (BatchNo (None, 128, 128, 64) 256         conv2d_35[0][0]                  
__________________________________________________________________________________________________
add_13 (Add)                    (None, 128, 128, 64) 0           batch_normalization_33[0][0]     
                                                                 add_12[0][0]                     
__________________________________________________________________________________________________
conv2d_36 (Conv2D)              (None, 128, 128, 64) 36928       add_13[0][0]                     
__________________________________________________________________________________________________
batch_normalization_34 (BatchNo (None, 128, 128, 64) 256         conv2d_36[0][0]                  
__________________________________________________________________________________________________
activation_15 (Activation)      (None, 128, 128, 64) 0           batch_normalization_34[0][0]     
__________________________________________________________________________________________________
conv2d_37 (Conv2D)              (None, 128, 128, 64) 36928       activation_15[0][0]              
__________________________________________________________________________________________________
batch_normalization_35 (BatchNo (None, 128, 128, 64) 256         conv2d_37[0][0]                  
__________________________________________________________________________________________________
add_14 (Add)                    (None, 128, 128, 64) 0           batch_normalization_35[0][0]     
                                                                 add_13[0][0]                     
__________________________________________________________________________________________________
conv2d_38 (Conv2D)              (None, 128, 128, 64) 36928       add_14[0][0]                     
__________________________________________________________________________________________________
batch_normalization_36 (BatchNo (None, 128, 128, 64) 256         conv2d_38[0][0]                  
__________________________________________________________________________________________________
activation_16 (Activation)      (None, 128, 128, 64) 0           batch_normalization_36[0][0]     
__________________________________________________________________________________________________
conv2d_39 (Conv2D)              (None, 128, 128, 64) 36928       activation_16[0][0]              
__________________________________________________________________________________________________
batch_normalization_37 (BatchNo (None, 128, 128, 64) 256         conv2d_39[0][0]                  
__________________________________________________________________________________________________
add_15 (Add)                    (None, 128, 128, 64) 0           batch_normalization_37[0][0]     
                                                                 add_14[0][0]                     
__________________________________________________________________________________________________
conv2d_40 (Conv2D)              (None, 128, 128, 64) 36928       add_15[0][0]                     
__________________________________________________________________________________________________
batch_normalization_38 (BatchNo (None, 128, 128, 64) 256         conv2d_40[0][0]                  
__________________________________________________________________________________________________
activation_17 (Activation)      (None, 128, 128, 64) 0           batch_normalization_38[0][0]     
__________________________________________________________________________________________________
conv2d_41 (Conv2D)              (None, 128, 128, 64) 36928       activation_17[0][0]              
__________________________________________________________________________________________________
batch_normalization_39 (BatchNo (None, 128, 128, 64) 256         conv2d_41[0][0]                  
__________________________________________________________________________________________________
add_16 (Add)                    (None, 128, 128, 64) 0           batch_normalization_39[0][0]     
                                                                 add_15[0][0]                     
__________________________________________________________________________________________________
conv2d_42 (Conv2D)              (None, 128, 128, 64) 36928       add_16[0][0]                     
__________________________________________________________________________________________________
batch_normalization_40 (BatchNo (None, 128, 128, 64) 256         conv2d_42[0][0]                  
__________________________________________________________________________________________________
add_17 (Add)                    (None, 128, 128, 64) 0           batch_normalization_40[0][0]     
                                                                 activation_1[0][0]               
__________________________________________________________________________________________________
up_sampling2d_1 (UpSampling2D)  (None, 256, 256, 64) 0           add_17[0][0]                     
__________________________________________________________________________________________________
conv2d_43 (Conv2D)              (None, 256, 256, 256 147712      up_sampling2d_1[0][0]            
__________________________________________________________________________________________________
activation_18 (Activation)      (None, 256, 256, 256 0           conv2d_43[0][0]                  
__________________________________________________________________________________________________
up_sampling2d_2 (UpSampling2D)  (None, 512, 512, 256 0           activation_18[0][0]              
__________________________________________________________________________________________________
conv2d_44 (Conv2D)              (None, 512, 512, 256 590080      up_sampling2d_2[0][0]            
__________________________________________________________________________________________________
activation_19 (Activation)      (None, 512, 512, 256 0           conv2d_44[0][0]                  
__________________________________________________________________________________________________
conv2d_45 (Conv2D)              (None, 512, 512, 3)  62211       activation_19[0][0]              
==================================================================================================
Total params: 2,042,691
Trainable params: 2,038,467
Non-trainable params: 4,224
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SRGAN是一种基于生成对抗网络的分辨率模型,其核心思路是通过训练一个生成器网络和一个判别器网络,使得生成器网络能够将低分辨率图像转换为高分辨率图像,并且判别器网络能够区分生成的高分辨率图像和真实高分辨率图像之间的差异。 具体实现上,SRGAN模型包含两个部分:生成器网络和判别器网络。生成器网络由一系列卷积层、反卷积层和残差块组成,用于将低分辨率图像转换为高分辨率图像。判别器网络则由一系列卷积层和全连接层组成,用于判别生成的高分辨率图像和真实高分辨率图像之间的差异。 在训练过程中,生成器网络和判别器网络相互博弈,不断优化模型参数,直到最终生成的高分辨率图像能够和真实高分辨率图像无法区分为止。具体来说,训练过程包括以下几个步骤: 1. 准备训练数据。将高分辨率图像和对应的低分辨率图像作为训练数据,其中低分辨率图像可以通过对高分辨率图像进行下采样得到。 2. 训练判别器网络。首先,使用真实高分辨率图像和生成器网络生成的高分辨率图像作为正样本,使用下采样的高分辨率图像作为负样本,训练判别器网络,使其能够区分正样本和负样本。 3. 训练生成器网络。首先,使用生成器网络将低分辨率图像转换为高分辨率图像,然后使用判别器网络判别生成的高分辨率图像的质量。通过最小化生成的高分辨率图像和真实高分辨率图像之间的差异,以及最大化判别器网络判别生成的高分辨率图像为真实高分辨率图像的概率,来优化生成器网络的参数。 4. 微调生成器网络。在训练过程中,生成器网络可能会出现过拟合或者欠拟合的情况,需要通过微调生成器网络的参数来解决这些问题。 SRGAN模型的训练需要大量的高分辨率图像和低分辨率图像作为训练数据,并且需要在GPU上进行训练,因此需要一定的计算资源和时间。但是,SRGAN模型能够生成非常逼真的高分辨率图像,对于一些对图像质量要求较高的应用场景具有很大的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值