-
1. 数据准备
-
随机向量Z (1x512)
- embedding_size = 48 if use_embedding else 0
- latent_size = 512 - embedding_size
- 真实图像real_img (3通道)
- mask图像 (1 通道 )
-
相同宽、高
- 宽、高取决于phase
- phase每升一次,宽、高翻倍【多尺度】
-
2. 模型训练 prog_w_gan
-
构建特征
-
fake_images
-
generator ( mask,噪音latent ,phase )
- 1. 对mask的特征抽取处理
- 每个block由2个卷积层,strides分别为1和2
- 每个block输出一个递增数目的特征到接下来的网络层,并仅连接前面的8个特征到latent投影路径
- 返回
- out_features
- 只保留了每个block输出的前8个特征,为了与同层级(block)的真实图像的特征拼接
- mask_features
- mask输入经过多层卷积之后的特征
- 2. 拼接噪音z和mask特征
- 3. 对噪音z的处理(主要是反卷积)
- 1. 对输入噪音z投影得到latent
- 全连接层
- 卷积层
- 3. 对上一个block的输出做反卷积操作
- 此时的z已经融合了mask和噪音
-
fake_score
-
dicsriminator( fake_images,mask,phase )
- 拼接每个层级的blocks的image和mask(channel维度上)
- 在拼接的特征上两次卷积。跟generator一样,每个卷积的stride也是1和2
-
real_score
- dicsriminator( real_img, mask, phase )
-
构建损失
-
g_loss
- discriminator函数直接得到的生成器损失
-
d_loss
- -fake_score
- real_score
-
梯度正则损失
- 线性插值为输入,discriminator的输出
- 真实图像
- 真实图像和生成图像之间差异值的百分比
- 二者之和组成了线性插值
-
real_score的偏移损失
- 平方根损失的0.001,类似动量损失
- g_loss的梯度
- d_loss的梯度
- 最小化这两个
-
优化器
- 生成器和判别器都是使用AdamOptimizer,学习率不同
- 分支主题 3