pix2pixHD

动机

实现高分辨率的图像生成

网络结构

在pix2pix的基础上,增加了一个“从糙到精生成器(coarse-to-fine generator)”、一个多尺度鉴别器架构和一个健壮的对抗学习目标函数。

从糙到精生成器

在这里插入图片描述
生成器包含G1和G2两个子网络,G1是全局生成网络,G2是局部增强网络
在训练时,先训练全局生成器G1,然后训练局部增强器G2,然后整体微调所有网络的参数 。

  • G2又被割裂成两个部分。G1和pix2pix的生成器没有差别,就是一个end2end的U-Net结构。G2的左半部分提取特征,并和G1的输出层的前一层特征进行相加融合信息,把融合后的信息送入G2的后半部分输出高分辨率图像。
  • G1计算的分辨率是1024×512,而G2将输出图像的分辨率扩大到4倍,也就是横向纵向分别乘以2,2048×1024。

如果想生成分辨率更高的图片,可以再继续增加局部增强网络的个数,输出4096×2048的图。

多尺度鉴别器

在这里插入图片描述

判别器使用多尺度判别器,在三个不同的尺度上进行判别并对结果取平均。
判别的三个尺度为:原图,原图的1/2降采样,原图的1/4降采样(实际做法为在不同尺度的特征图上进行判别,而非对原图进行降采样)。

如上图所示,这三个鉴别器D1、D2和D3有着相同的网络结构,但是在不同尺寸的图像上进行训练。通过对高分辨率图像进行两次降低采样,生成3种大小的图像,然后训练鉴别器D1、D2和D3分别来辨别这3种尺寸图像的真假。

最粗糙尺度上的鉴别器感受野最大,越关注全局一致性,负责让图像全局和谐,最精细尺度的鉴别器负责引导生成器生成出精致的细节。

创新点

改进的损失函数

在这里插入图片描述

总的损失函数为对抗损失(Loss GAN)、特征匹配损失(Feature matching loss)和内容损失(Content loss):

  • GAN loss:和pix2pix一样,使用PatchGAN。
  • Feature matching loss:将生成的样本和Ground truth分别送入判别器提取特征,然后对特征做Element-wise loss
  • Content loss:将生成的样本和Ground truth分别送入VGG16提取特征,然后对特征做Element-wise loss
    Feature matching loss和Content loss只保证内容一致,细节则由GAN去学习

为什么算两个特征的loss呢?
因为一个是自己的判别器提取的特征的loss,相当于“自检”; 一个是别的网络提取的特征算loss,相当于“他检”。

使用Instance-map的图像进行训练

在这里插入图片描述

pix2pix采用语义分割的结果进行训练,可是语义分割结果没有对同类物体进行区分,导致多个同类物体排列在一起的时候出现模糊,这在街景图中尤为常见。在这里,作者使用实例分割(Instance-level segmention) 的结果来进行训练,因为实例分割的结果提供了同一类物体的边界信息。具体做法如下:

  1. 根据实例分割的结果求出Boundary map
  2. 将Boundary map与输入的语义标签concat到一起作为输入。

Boundary map求法很简单,直接遍历每一个像素,判断其4邻域像素所属语义类别信息。全部相同则置为0;如果有不同,则置为1。

语义编辑

不同于pix2pix实现生成多样性的方法(使用Dropout),这里采用了一个非常巧妙的办法,即学习一个条件(Condition)作为条件GAN的输入,不同的输入条件就得到了不同的输出,从而实现了多样化的输出,而且还是可编辑的。具体做法如下:
在这里插入图片描述
在这里插入图片描述

  1. 首先训练一个编码器
  2. 利用编码器提取原始图片的特征,进行Average pooling,得到特征(上图的Features)。这个Features的每一类像素的值都代表了这类标签的信息。
  3. 如果输入图像有足够的多,那么Features的每一类像素的值就代表了这类物体的先验分布。 对所有输入的训练图像通过编码器提取特征,然后进行K-means聚类,得到K个聚类中心,以K个聚类中心代表不同的颜色,纹理等信息。
  4. 实际生成图像时,除了输入语义标签信息(labels),还要从K个聚类中心随机选择一个,即选择一个颜色/纹理风格(即Features,从编码器提取过来的特征)
    这个方法总的来说非常巧妙,通过学习数据的隐变量达到控制图像颜色纹理风格信息。

总结

作者主要的贡献在于:

  • 提出了生成高分辨率图像的多尺度网络结构,包括生成器,判别器
  • 通过Boundary map提升生成重叠物体的清晰度
  • 提出了Feature loss和VGG loss提升图像的分辨率
  • 通过学习隐变量达到控制图像颜色,纹理风格信息,交互式的语义编辑方式

参考文献:

  1. https://arxiv.org/abs/1711.11585v1
  2. https://zhuanlan.zhihu.com/p/56808180
  3. https://zhuanlan.zhihu.com/p/31627466
  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
pix2pixHD是一种用于图像到图像的转换的深度学习模型,它可以将输入图像转换为输出图像。下面是pix2pixHD的环境配置步骤: 1. 安装Python和PyTorch:首先,确保你已经安装了Python和PyTorch。你可以从官方网站下载并按照指示进行安装。 2. 安装依赖库:在配置pix2pixHD环境之前,你需要安装一些必要的依赖库。可以使用以下命令来安装这些库: ``` pip install dominate pip install visdom pip install numpy pip install scipy pip install pillow ``` 3. 下载pix2pixHD代码:你可以从GitHub上下载pix2pixHD的代码。使用以下命令克隆代码库: ``` git clone https://github.com/NVIDIA/pix2pixHD.git ``` 4. 下载预训练模型:在运行pix2pixHD之前,你需要下载预训练的模型权重。你可以从GitHub页面上找到预训练模型的链接,并使用wget或其他下载工具进行下载。 5. 数据集准备:准备你的输入图像和对应的目标图像数据集。确保数据集的文件结构符合pix2pixHD的要求。 6. 运行pix2pixHD:在完成以上步骤后,你可以使用命令行进入pix2pixHD的代码目录,并运行以下命令来训练或测试模型: ``` python train.py --name your_experiment_name --dataroot /path/to/dataset --gpu_ids 0 ``` 其中,`your_experiment_name`是你的实验名称,`/path/to/dataset`是你的数据集路径,`--gpu_ids 0`表示使用GPU进行训练。 如果你只是想测试模型而不是训练模型,可以使用以下命令: ``` python test.py --name your_experiment_name --dataroot /path/to/dataset --gpu_ids 0 ``` 以上是pix2pixHD的环境配置步骤。如果你有任何进一步的问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值