基于PaddlePaddle的飞桨论文解读:StarGAN v2: Diverse Image Synthesis for Multiple Domains

StarGAN v2通过单一框架解决图像到图像转换的多样性与多域可扩展性问题,优于现有基线。在CelebAHQ和AFHQ数据集上展示出色性能,AFHQ数据集发布以促进模型评估。模型包含Generator、Mapping Network、Style Encoder和Discriminator,代码已在PaddlePaddle中实现。
摘要由CSDN通过智能技术生成

目录

 

摘要

StarGAN v2网络架构

实验 

1.Baselines

2.数据集

3.评价指标

实验结果分析

1.个别成分分析

2.多种图像合成方法的比较

结论

模型代码(model.py)  

主体代码(main.py)

总结


摘要

一个好的图像到图像的翻译模型应该学习不同视觉域之间的映射,同时满足以下特性:1)生成图像的多样性   2)多域的可伸缩性。现有的方法解决了这两个问题中的任何一个,其多样性有限,或者所有领域都有多个模型。我们提出了starganv2,一个单一的框架,它可以同时处理这两个问题,并在基线上显示出显著改进的结果。在CelebAHQ和一个新的动物面孔数据集(AFHQ)上的实验验证了我们在视觉质量、多样性和可扩展性方面的优势。为了更好地评估图像到图像的转换模型,我们发布了AFHQ,高质量的动物脸,具有较大的域间和域内差异。


StarGAN v2网络架构

  1. Generator
  2. Mapping network
  3. Style encoder 
  4. Discriminator


实验 

1.Baselines

我们使用MUNIT、DRIT和MSGAN作为Baselines,它们都学习两个域之间的多模映射。对于多域比较,我们为每对图像域多次训练这些模型。我们还将我们的方法与StarGAN进行了比较,StarGAN使用单个生成器学习多个域之间的映射。所有Baselines都是使用作者提供的实现进行训练的。

 

2.数据集

我们评估CelebA HQ上的StarGAN v2和我们新的AFHQ数据集,我们将CelebAHQ分为两个领域:雄性和雌性;AFHQ分为三个领域:猫、狗和野生动物。除域名标签外,我们不使用任何附加信息(如CelebA HQ的面部特征或AFHQ的品种),并让模型在没有监督的情况下学习样式等信息。为了公平比较,所有的图像都被调整到256×256分辨率,这是baseline中使用的最高分辨率。

 

3.评价指标

我们使用Frechet inception distance (FID)和learning perceptual image patch similarity (LPIPS)来评估生成图像的视觉质量和多样性。我们为数据集中的每对图像域计算FID和LPIPS,并报告它们的平均值。


实验结果分析

1.个别成分分析

使用CelebA-HQ来评估添加到baseline的StarGAN中的单个成分。表格给出了几种配置的FID和LPIPS,其中每个组件都是在StarGAN上累积添加的。每个配置的输入图像和相应生成的图像如图所示。baseline设置对应于StarGAN的基本设置,使用WGAN-GP、ACGAN鉴别器、深度级联为生成器提供目标域信息。如图所示,通过在输入图像上应用化妆品,原始StarGAN只产生一个局部变化。

我们首先通过用多任务鉴别器替换ACGAN鉴别器来改进baseline,允许生成器转换输入图像的全局结构,并且通过应用R1正则化并将深度连接转换为自适应实例规范化(AdaIN),进一步提高了训练的稳定性并构造了一个新的基线(C)。

 

 

 


 

 

2.多种图像合成方法的比较

  • 潜在引导合成

CelebAHQ与baseline模型相比,我们的方法合成的图像具有更高的视觉质量。此外,我们的方法是唯一能够成功地改变源图像的整个发型的模型,这需要非常大的努力(例如生成耳朵)。对于变化较大的AFHQ,基线的性能大大降低,而我们的方法仍然可以生成高质量和多样化的图像。

  • 参考指导合成

从目标域中抽取测试图像,并将它们馈送给每种方法的编码器网络。对于CelebA HQ,我们的方法成功地渲染了独特的样式(例如刘海、胡须、化妆品和发型),而其他方法大多与参考图像的颜色分布相匹配。对于更具挑战性的AFHQ,baseline模型会经历一个大的域转移。它们很难反映每个参考图像的风格,只与域匹配。相比之下,该模型渲染每个参考图像的不同风格(例如品种),以及它的皮毛图案和眼睛颜色。


结论

本文的模型解决了图像到图像转换的两个主要挑战:将一个域的图像转换为目标域的不同图像,以及支持多个目标域。实验结果表明,我们的模型可以在多个领域生成风格丰富的图像,显著优于以前的主流方法[16,28,34]。另外还发布了一个新的动物脸数据集(AFHQ),用于在一个大的域间和域内变化环境中评估方法。 


模型代码(model.py)  

"""
StarGAN v2
Copyright (c) 2020-present NAVER Corp.

This work is licensed under the Creative Commons Attribution-NonCommercial
4.0 International License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-nc/4.0/ or send a letter to
Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
"""

import copy
import math

from munch import Munch
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F

from core.wing import FAN


class ResBlk(nn.Module):
    def __init__(self, dim_in, dim_out, actv=nn.LeakyReLU(0.2),
                 normalize=False, downsample=False):
        super().__init__()
        self.actv = actv
        self.normalize = normalize
        self.downsample = downsample
        self.learned_sc = dim_in != dim_out
        self._build_weights(dim_in, dim_out)

    def _build_weights(self, dim_in, dim_out):
        self.conv1 = nn.Conv2d(dim_in, dim_in, 3, 1, 1)
        self.conv2 = nn.Conv2d(dim_in, dim_out, 3, 1, 1)
        if self.normalize:
            self.norm1 = nn.InstanceNorm2d(dim_in, affine=True)
            self.norm2 = nn.InstanceNorm2d(dim_in, affine=True)
        if self.learned_sc:
            self.conv1x1 = nn.Conv2d(dim_in, dim_out, 1, 1, 0, bias=False)

    def _shortcut(self, x):
        if self.learned_sc:
            x = self.conv1x1(x)
        if self.downsample:
            x = F.avg_pool2d(x, 2)
        return x

    def _residual(self, x):
        if self.normalize:
            x = self.norm1(x)
        x = self.actv(x)
        x = self.conv1(x)
        if self.downsample:
            x = F.avg_pool2d(x, 2)
        if self.normalize:
            x = self.norm2(x)
        x = self.actv(x)
        x = self.conv2(x)
        return x

    def forward(self, x):
        x = self._shortcut(x) + self._residual(x)
        r
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值