IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【研究生工作周报】(NICE-GAN论文再回顾) -> 正文阅读

[人工智能]【研究生工作周报】(NICE-GAN论文再回顾)

NICE-GAN



前言

早在假期就对这篇论文做过初步研究,但碍于当时在对抗生成网络这一领域的基础比较薄弱,所以对论文的理解比较肤浅。通过这段时间对CGAN,pix2pix,CycleGAN等经典GAN模型学习之后,在理论和实践层面对GAN有了一个比较系统的认识。本周就NICE-GAN模型进行一个理论上的总结。


一、图像翻译的问题定义

??
对于两个图像域 D o m a i n X Domain X DomainX D o m a i n Y Domain Y DomainY
监督图像翻译:给定联合分布 p ( X , Y ) p(X,Y) p(X,Y),学习条件映射 f x → y = p ( Y ∣ X ) f_{x \rightarrow y} = p(Y|X) fxy?=p(YX) f y → x = p ( X ∣ Y ) f_{y \rightarrow x} = p(X|Y) fyx?=p(XY)
而无监督图像翻译:给定边缘分布 p ( X ) p(X) p(X) p ( Y ) p(Y) p(Y);学习条件映射 f x → y = p ( Y ∣ X ) f_{x \rightarrow y} = p(Y|X) fxy?=p(YX) f y → x = p ( X ∣ Y ) f_{y \rightarrow x} = p(X|Y) fyx?=p(XY)

??现在的问题是做无监督的图像翻译时,可以有无数个条件概率 p ( Y ∣ X ) p(Y|X) p(YX) p ( X ∣ Y ) p(X|Y) p(XY) 服从相同的边缘分布 p ( X ) p(X) p(X) p ( Y ) p(Y) p(Y) ,这也诠释了为什么衡量Cycle-GAN性能时会以pix2pix模型作为Top-line。为了解决这个问题,不同模型都有自己的策略:UNIT使用了weight-coupling,Cycle-GAN使用的cycle-consistency,identity-mapping-enforcing。

对于大多数现存的架构来说,翻译过程可以表述为:

编码器 E x E_{x} Ex?和生成器 G x → y G_{x \rightarrow y} Gxy?组合实现图像的生成
y ′ = f x → y ( x ) = G x → y ( E x ( x ) ) y' = f_{x \rightarrow y}(x) = G_{x \rightarrow y}(E_{x}(x)) y=fxy?(x)=Gxy?(Ex?(x))
再拿判别器 D y D_{y} Dy? 区分真实图像 y y y 和生成图像 y ′ y' y
( y → x y \rightarrow x yx 同理, x ′ = f y → x ( y ) = G y → x ( E y ( y ) ) x' = f_{y \rightarrow x}(y) = G_{y \rightarrow x}(E_{y}(y)) x=fyx?(y)=Gyx?(Ey?(y)))

NICE-GAN模型使用判别器进行编码
在这里插入图片描述
这里我们把判别器 D x D_{x} Dx? 拆分成编码部分 E x D E^{D}_{x} ExD? 和分类部分 C x D C^{D}_{x} CxD? E x D E^{D}_{x} ExD? 会代替 f x → y f_{x \rightarrow y} fxy? 原始的编码器,得到一个新的翻译过程 y ′ = f x → y ( x ) = G x → y ( E x D ( x ) ) y' = f_{x \rightarrow y}(x) = G_{x \rightarrow y}(E^{D}_{x}(x)) y=fxy?(x)=Gxy?(ExD?(x))
( y → x y \rightarrow x yx 同理, x ′ = f y → x ( y ) = G y → x ( E y D ( y ) ) x' = f_{y \rightarrow x}(y) = G_{y \rightarrow x}(E^{D}_{y}(y)) x=fyx?(y)=Gyx?(EyD?(y)))
新形成的分类组件 C x C_{x} Cx? C y C_{y} Cy? 采用mutil-scale结构来增强表达能力。
新形成的编码组件 E x D E^{D}_{x} ExD? E y D E^{D}_{y} EyD? 在翻译和判别的过程中都要参与训练,增加了训练难度,采用解耦训练策略。

二、NICE-GAN各组件架构

在这里插入图片描述

1.多尺度判别器(Multi-Scale Discriminator)

??其实从名字就能大概猜出来应该是对输入的img做了多层特征的判别,也就是说传统的discriminator是对一张image做判别,但是Multiscale是多个传统discriminator的叠加。比如Multiscale中的第一个D是用来判别输入img的真假,第二个D是判别输入img经过下采样后的真假,以此类推。。。

??Multi-Scale Discriminator首先被提出时,用于应对不同尺寸的输入图像。这篇论文里使用一种更有效的方式:
??对于一个固定size的输入图像,我们把它在不同层经过卷积的特征图作为不同size的图像喂给对应size的分类器作判别。

2.残差注意力机制(Residual Attention)

为了促进特征在判别器中的传递,U-GAT-IT首次提出引入注意力机制。
设编码器包含 K K K个特征图 { E x k } k = 1 K \left\{{E^{k}_{x}}\right\}^{K}_{k=1} {Exk?}k=1K? ,引入一个注意力向量 ω \omega ω ,得到注意力特征图
α ( x ) = ω × E x ( x ) = { ω k × E x k ( x ) } k = 1 K \alpha(x) = \omega \times {E_{x}(x)} = \left\{ \omega_{k} \times {E^{k}_{x}(x)}\right\}^{K}_{k=1} α(x)=ω×Ex?(x)={ωk?×Exk?(x)}k=1K?

基于U-GAT-IT,进一步考虑一个残差连接,引入一个可训练参数 γ \gamma γ 来权衡
带权重的特征和原始特征
α ( x ) = γ × ω × E x ( x ) + E x ( x ) \alpha(x) = \gamma \times \omega \times {E_{x}(x)} + {E_{x}(x)} α(x)=γ×ω×Ex?(x)+Ex?(x)

( γ \gamma γ =0代表未激活参与特征,非0代表激活残差注意力机制,而且通过对不同数据集的训练发现, γ → 0 \gamma\rightarrow0 γ0,代表更多关注全局特征,说明翻译图像的全部内容比局部细节更重要)


3. 自适应混合归一化层(Adaptive layer-instance normalization)

U-GAT-IT引入了自适应的LN和IN的混合归一化层,帮助我们的注意力引导模型在不修改模型架构或超参数的情况下灵活控制形状和纹理的变化量。

这里说一下Adaptive Layer-Instance Normalization的具体公式:
a ^ I = a ? μ I σ I 2 + ? , a ^ L = a ? μ L σ L 2 + ? \hat{a}_{I}=\frac{a-\mu_{I}}{\sqrt{\sigma_{I}^{2}+\epsilon}}, \hat{a}_{L}=\frac{a-\mu_{L}}{\sqrt{\sigma_{L}^{2}+\epsilon}} a^I?=σI2?+? ?a?μI??,a^L?=σL2?+? ?a?μL??
上面是IN和LN的归一化公式,然后将 a ^ I \hat{a}_{I} a^I? a ^ L \hat{a}_{L} a^L?代入到进行合并( γ \gamma γ β \beta β通过外部传入): AdaLIN ? ( a , γ , β ) = γ ? ( ρ ? a ^ I + ( 1 ? ρ ) ? a ^ L ) + β \operatorname{AdaLIN}(a, \gamma, \beta)=\gamma \cdot\left(\rho \cdot \hat{a}_{I}+(1-\rho) \cdot \hat{a}_{L}\right)+\beta AdaLIN(a,γ,β)=γ?(ρ?a^I?+(1?ρ)?a^L?)+β
为了防止 ρ \rho ρ超出[0,1]范围,对 ρ \rho ρ进行了区间裁剪:
ρ ← c l i p [ 0 , 1 ] ( ρ ? τ Δ ρ ) \rho \leftarrow c l i p[0,1](\rho-\tau \Delta \rho) ρclip[0,1](ρ?τΔρ)
AdaIN能很好的将 cotents_feature 转移到 style_feature 上,但AdaIN假设特征通道之间不相关,意味着style_feature需要包括很多的内容模式,而LN则没有这个假设,但LN不能保持原始域的内容结构,因为LN考虑的是全局统计信息,所以作者将AdaIN和LN结合起来,结合两者的优势,有选择地保留或改变 c o t e n t s cotents cotents 信息,有助于解决广泛的图像到图像的翻译问题。

class adaILN(nn.Module): #Adaptive Layer-Instance Normalization代码

    def __init__(self, num_features, eps=1e-5):

        super(adaILN, self).__init__()

        self.eps = eps

        #adaILN的参数p,通过这个参数来动态调整LN和IN的占比

        self.rho = Parameter(torch.Tensor(1, num_features, 1, 1)) 

        self.rho.data.fill_(0.9)



    def forward(self, input, gamma, beta):

        #先求两种规范化的值

        in_mean, in_var = torch.mean(torch.mean(input, dim=2, keepdim=True), dim=3, keepdim=True), torch.var(torch.var(input, dim=2, keepdim=True), dim=3, keepdim=True)

        out_in = (input - in_mean) / torch.sqrt(in_var + self.eps)

        ln_mean, ln_var = torch.mean(torch.mean(torch.mean(input, dim=1, keepdim=True), dim=2, keepdim=True), dim=3, keepdim=True), torch.var(torch.var(torch.var(input, dim=1, keepdim=True), dim=2, keepdim=True), dim=3, keepdim=True)

        out_ln = (input - ln_mean) / torch.sqrt(ln_var + self.eps)

        #合并两种规范化(IN, LN)

        out = self.rho.expand(input.shape[0], -1, -1, -1) * out_in + (1-self.rho.expand(input.shape[0], -1, -1, -1)) * out_ln 

        #扩张得到结果

        out = out * gamma.unsqueeze(2).unsqueeze(3) + beta.unsqueeze(2).unsqueeze(3)

		

        return out

可视化隐层编码(t-SNE)

在这里插入图片描述

分析与结论:

通过t-SNE可视化隐层编码,并利用Maximum Mean Discrepancy(MMD)以计算隐层空间两个编码分布的差异。有趣的是,通过NICE的训练,两个域的隐层空间分布变得更加聚集和紧密,但彼此依然可分。这种现象解释了为什么NICE-GAN表现出色。基于共享隐层空间假设构建的NICE-GAN,通过缩短低维隐层空间中域之间的转换路径,可能会促进高维图像空间的域的转换。同时进一步支持了一个重要观点:对比由通过最大似然训练的编码器网络学习的特征,由经过判别训练的网络学习到的特征往往更具表现力,也更适合推理。在NICE-GAN中,编码器也成为分布距离度量函数的一部分,而生成器只需要从隐层分布中提取循环一致性信息并拟合目标域分布。

三. 解耦训练机制

由于我们将编码器 E x E_{x} Ex?作为判别器 D x D_{x} Dx?的一部分呢,它也同样作为生成器 G x → y G_{x\rightarrow y} Gxy?的输入,用传统训练方式会导致不一致。我们采用将编码器 E x Ex Ex的训练同生成器 G x → y G_{x\rightarrow y} Gxy?解耦。

Adversarial loss

LSGAN主要解决关键: 使用最小二乘损失代替交叉熵损失,来避免梯度消失和训练过程不稳定等缺陷。
在这里插入图片描述
m i n G x → y L g a n x → y \underset{G_{x\rightarrow y}}{min}L^{{x\rightarrow y}}_{gan} Gxy?min?Lganxy? 时, E x E_{x} Ex? E y E{y} Ey 固定;
m a x D y L g a n x → y \underset{D_{y}}{max}L^{{x\rightarrow y}}_{gan} Dy?max?Lganxy? 时, E x E_{x} Ex?固定,训练 E y E_{y} Ey?

Cycle-consistency loss

在这里插入图片描述

Reconstruction loss

Cycle-GAN考虑 identity loss 时有一个域相似性的假设,我们这里考虑Reconstruction loss时是共享隐藏空间的假设
在将源域的真实样本 x x x 的隐藏向量 E x ( x ) E_{x}(x) Ex?(x) 作为生成器 G x → y G_{x\rightarrow y} Gxy? 的输入时,考虑到重构损失。
在这里插入图片描述
判别器的总损失:
m a x E x , C x , E y , E y λ 1 L g a n \underset{E_{x},C_{x},E_{y},E_{y}}{max}\lambda_{1} L_{gan} Ex?,Cx?,Ey?,Ey?max?λ1?Lgan?

生成器的总损失:
m i n G x → y , G y → x λ 1 L g a n + λ 2 L c y c l e + λ 3 L r e c o n \underset{G_{x\rightarrow y},G_{y\rightarrow x}}{min}\lambda_{1} L_{gan}+\lambda_{2} L_{cycle}+\lambda_{3} L_{recon} Gxy?,Gyx?min?λ1?Lgan?+λ2?Lcycle?+λ3?Lrecon?

( L g a n = L g a n x → y + L g a n y → x L_{gan} = L^{{x\rightarrow y}}_{gan} + L^{{y\rightarrow x}}_{gan} Lgan?=Lganxy?+Lganyx? L c y c l e = L c y c l e x → y + L c y c l e y → x L_{cycle} = L^{{x\rightarrow y}}_{cycle} + L^{{y\rightarrow x}}_{cycle} Lcycle?=Lcyclexy?+Lcycleyx? L r e c o n = L r e c o n x → y + L r e c o n y → x L_{recon} = L^{{x\rightarrow y}}_{recon} + L^{{y\rightarrow x}}_{recon} Lrecon?=Lreconxy?+Lreconyx?)


四. 判别网络,生成网络架构总览

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

参考论文及博客

Least Squares Generative Adversarial Networks(LSGANs)
paper / note
Residual Attention Network for Image Classification
paper / blog
Adaptive Instance Normalization(AdaIN)
paper / note
Unsupervised Generative Attentional Networks with Adaptive Layer-Instance Normalization for Image-to-Image Translation (U-GAT-IT)
paper / note

深度学习中的五种归一化(BN、LN、IN、GN和SN)

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:29:07  更:2022-09-21 00:29:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:50:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码