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