CycleGAN
网络特点
对于Real A,它的完整流程是这样的:$A_{real}\rightarrow B_{fake}\rightarrow A_{fake}$,对于Real B,它的流程是这样的:$B_{real}\rightarrow A_{fake}\rightarrow B_{fake}$。可以看到,无论是domain A还是domain B的图像,整个流程就是一个cycle, 所以叫CycleGAN。整个cycle可以看成是一个autoencoder,两个generator看成是encoder和decoder。而两个discriminator则是准则。
两个生成器(AB\BA):
loss
对于discriminator A:
$$ \mathcal{L}_{D_A}=\mathbb{E}_{x\in\mathbb{P}_A}\log{D_A(x)}+\mathbb{E}_{x\in+\mathbb{P}_{B2A}}\log(1-D_A(x)) $$
对于discriminator B:
$$ \mathcal{L}_{D_B}=\mathbb{E}_{x\in\mathbb{P}_B}\log{D_B(x)}+\mathbb{E}_{x+\in\mathbb{P}_{A2B}}\log(1-D_B(x)) $$
对于generator BA:
$$ \mathcal{L}_{G_{BA}}=\mathbb{E}_{x\in\mathbb{P}_{B2A}}\log{D_A(x)}+\lambda\mathbb{E}_{x\in\mathbb{P}_A}\|x-G_{BA}(G_{AB}(x)) $$
对于generator AB:
$$ \mathcal{L}_{G_{AB}}=\mathbb{E}_{x\in\mathbb{P}_{A2B}}\log{D_B(x)}+\lambda\mathbb{E}_{x\in\mathbb{P}_B}\|x-G_{AB}(G_{BA}(x)) $$
(对于discriminator,需要最大化目标函数;对于generator,需要最小化目标函数)
优点
循环将生成器生成的数据加入到输入中,达到扩充样本目的
StarGAN
网络特点
StarGAN为了解决跨多个域、多个数据集的训练而提出的。在StarGAN中,并不使用传统的fixed translation((e.g., black-to-blond hair),而是将域信息和图片一起输入进行训练,并在域标签中加入mask vector,便于不同的训练集进行联合训练。
解决了一个生成器完成多个域迁移的问题
loss
GAN网络通用的损失函数Adversatial Loss,以判断输出的图像是否真实:
类别损失,该损失被分为两个,训练判别网络D的时候,使用真实图片在原始领域的监督信号进行训练;而训练生成网络G的时候,使用生成之后的图片在目标领域的监督信号进行训练。
- 其中训练D的损失(交叉熵损失):
- 训练G的损失
重建损失,主要目的是保证图片翻译过程中非关键的图片内容信息保存下来,其中损失函数如下(L-1 norm):
汇总:
优点:
最关键:解决了一个生成器完成多个域迁移的问题
其他:
- 提出StarGAN模型,使用单组GAN模型进行跨domain和跨数据集的训练
- 展示了mask vector技术来实现上述的训练过程
- 训练了角色的面部属性和面部表情特征的各种图片
AGGAN
网络特点
生成网络$ G_{X \rightarrow Y}$ 的网络结构可以与CycleGAN一致,差异在于输出层:
- 维持原来生成图像的3通道输出,作为 content mask$C_y \in{\Bbb R^{H\times W\times3}}$ ;
- 多加一个输出通道,接上sigmoid激活函数,得到 attention mask $A_y \in {\Bbb R^{H\times W}}$ 。
最终融合得到生成图像:
$$ G_y=C_y*A_y+x*(1-A_y) $$
其中, $x$ 为输入图像。
然后就是判别网络有两个: $D_Y$ 和 $D_{YA}$ (输入4通道: $[A_y,G_y],[A_y,y]\in{\Bbb R^{H\times W\times4}}$)。
loss
生成网络的损失函数包含了5项:Vanilla Adversarial Loss,Attention-Guided Adversarial Loss,Cycle-Consistency Loss,Pixel Loss,Attention Loss。
整体如下:
$$ \begin{array}{l}{\cal{L}}(G_{X\rightarrow{Y}},G_{Y\rightarrow{X}},D_X,D_Y,D_{XA},D_{YA})&=&\lambda_{gan}[&{\cal{L}}_{GAN}(G_{X+\rightarrow{Y}},D_Y)+{\cal{L}}_{GAN}(G_{Y\rightarrow{X}},D_{X})\\ &&&+{\cal{L}}_{AGAN}(G_{X\rightarrow{Y}},D_{YA})+{\cal{L}}_{AGAN}(G_{Y\rightarrow{X}},D_{XA})]\\ &&&+\lambda_{cycle}*{\cal{L}}_{cycle}(G_{X\rightarrow{Y}},G_{Y\rightarrow{X}})\\ &&&+\lambda_{pixel}*{\cal{L}}_{pixel}(G_{X\rightarrow{Y}},G_{Y\rightarrow{X}})+\lambda_{tv}*[{\cal{L}}_{tv}(A_x)+{\cal{L}}_{tv}(A_y)]\end{array}\\ $$
Vanilla Adversarial Loss ${\cal L}_{GAN}(G_{X\rightarrow Y},G_{Y}))$ 就是一般的对抗损失:
$$ {\cal{L}}_{GAN}(G_{X\rightarrow{Y}},D_Y)={\Bbb{E_{y\sim{p_{data}(y)}}}}[logD_Y(y)]+{\Bbb{E_{1-y\sim{p_{data}(x)}}}}[log+(1-D_Y(G_{X\rightarrow{Y}}(x)]) $$
这里 $G_{X \rightarrow Y}(x)=G_y==C_y*A_y+x*(1-A_y)$ 。
Attention-Guided Adversarial Loss ${\cal L}_{AGAN}(G_{X\rightarrow Y},G_{YA}))$ 就是加了 attention mask 的4通道输入对抗损失:
$$ {\cal{L}}_{AGAN}(G_{X\rightarrow{Y}},D_{YA})={\Bbb{E_{y\sim{p_{data}(y)}}}}[logD_Y([A_y,y])]+{\Bbb{E_{1-y\sim{p_{data}(x)}}}}[log(1-D_Y([A_y,G_{X\rightarrow{Y}}(x)]))] $$
Cycle-Consistency Loss ${\cal L}_{cycle}(G_{X\rightarrow Y},G_{Y\rightarrow X}))$ 就是CycleGAN中的循环一致性损失:
$$ {\cal{L}}_{cycle}(G_{X\rightarrow{Y}},G_{Y\rightarrow{X}})={\Bbb{E_{y\sim{p_{data}(x)}}}}[||G_{Y\rightarrow{X}}(G_{X\rightarrow{Y}}(x)-x||_1])+{\Bbb{E_{1-y\sim{p_{data}(y)}}}}[||G_{X\rightarrow{Y}}(G_{Y\rightarrow{X}}(y)-y||_1]) $$
Pixel Loss ${\cal L}_{pixel}(G_{X\rightarrow Y},G_{Y\rightarrow X}))$ 就是生成图像和输入图像的重构损失:
$$ {\cal{L}}_{pixel}(G_{X\rightarrow{Y}},G_{Y\rightarrow{X}})={\Bbb{E_{y\sim{p_{data}(x)}}}}[||G_{X\rightarrow{Y}}(x)-x||_1]+{\Bbb{E_{1-y\sim{p_{data}(y)}}}}[||G_{Y\rightarrow{X}}(y)-y||_1] $$
Attention Loss ${\cal L}_{tv}(A_x)$ 就是限制 attention mask 上的值平滑一点:
$$ {\cal{L}}_{tv}(A_x)=\sum_{w,h=1}^{W,H}|A_x(w1,h,c)-A_x(w,h,c)|+|A_x(w,h1,c)-A_x(w,h,c)| $$
以上各项损失的权重系数取值为: $\lambda_{cycle}=10,\lambda_{gan}=0.5,\lambda_{pixel}=1,\lambda_{tv}=1e-6$ 。和CycleGAN一样,设置50的作为训练D网络的buffer。
优点
在CycleGAN的基础上,生成模型不仅生成图像,也生成注意力图,然后用注意力图、生成图像、原图进行融合,得到最终生成的图像。
AttentionGAN
网络特点:
前身是AGGAN
AttentionGAN主要改变在网络结构上,下采样部分的网络是共享权重的,然后上采样有两个分支:Content Mask生成器分支,Attention Mask生成器分支。Attention Mask生成器有两种含义的输出(形式上是一样的):Foreground Attention Mask和Background Attention Mask。最终结合原图,融合生成图像。
loss
损失函数的话,就和CycleGAN 一致
只有对抗损失、循环一致性损失和单位映射损失:
$$ \begin{array}{l}{\cal{L}}(G_{X\rightarrow{Y}},G_{Y\rightarrow{X}},D_X,D_Y)=&{\cal{L}}_{GAN}(G_{X\rightarrow{Y}},D_Y,G_{Y\rightarrow{X}},D_{X})\\ &+\lambda_{cycle}*{\cal{L}}_{cycle}(G_{X\rightarrow{Y}},G_{Y\rightarrow{X}})\\ &+\lambda_{idt}*{\cal{L}}_{idt}(G_{X\rightarrow{Y}},G_{Y\rightarrow{X}})\end{array}\\ $$
其中,$\lambda_{cycle}=10,\lambda_{idt}=0.5$ ,代码是: $\lambda_{idt}=\lambda_{cycle}*0.5=5.0$ 。
优点
创新点在于它的attention mark,下采样部分的网络共享权重,然后上采样有两个分支:Content Mask生成器分支,Attention Mask生成器分支。最终结合原图,融合生成图像,达到提高生成效果的目的。
U-GAT-IT
网络特点
主要基于CycleGAN的框架进行改进:
- 借鉴辅助分类器的CAM思想,提出 注意力模块:利用源域与目标域的辅助分类器得到的全连接权重,对特征图进行加权;
- 提出新的规范化函数 AdaLIN,结合注意力模块能够自适应的控制风格和内容的变化程度(也就是 迁移内容/shape 或 迁移风格 的任务都可以很好cover)。
效果,特别强!
拥有三个机制:G的CAM注意力、D的CAM注意力和AdaLIN
从 LN / IN 到 AdaIN / LIN 再到 AdaLIN
LN是对层做归一化(两个可学习参数 $\gamma,\beta$ ):
$$ y_{nchw}=\gamma\cdot\frac{(x_{nchw}-\mu_{n})}{\sqrt{\sigma^2_{n}+\epsilon}}+\beta\\ \mu_{n}=\frac{1}{CHW}\sum^C{\sum^H{\sum^W{x_{nchw}}}}\\ \sigma_{n}=\frac{1}{CHW}\sum^C{\sum^H{\sum^W{(x_{nchw}-\mu_{n})^2}}}) $$
IN是对特征图做归一化(2 * channel个可学习参数 $\gamma_{c},\beta_{c}$ ):
$$ y_{nchw}=\gamma_{c}\cdot\frac{(x_{nchw}-\mu_{nc})}{\sqrt{\sigma^2_{nc}+\epsilon}}+\beta_{c}\\ mu_{nc}=\frac{1}{HW}\sum^H{\sum^W{x_{nchw}}}\\ \sigma_{nc}=\frac{1}{HW}\sum^H{\sum^W{(x_{nchw}-\mu_{nc})^2}} $$
AdaIN则是将IN中的可学习参数 $\gamma_{c},\beta_{c}$用网络(我们这里用MLP)的形式的来学习,从而使得当网络训练好后 $\gamma_{c},\beta_{c}$不是固定的,而是依赖于网络输入( $z$ 是网络的某一层特征,由于样本相关所以此时 $\gamma_{c},\beta_{c}$ 应该为 $\gamma_{nc},\beta_{nc}$:
$$ y_{nchw}=\gamma_{nc}+\cdot\frac{(x_{nchw}-\mu_{nc})}{\sqrt{\sigma^2_{nc}+\epsilon}}+\beta_{nc}\\ \gamma_{nc}=f_{mlp}(z),\beta_{nc}=g_{mlp}(z)\\ $$
LIN 是对 LN 和 IN 的加权结合(3 * channel个可学习参数 $\gamma_{c},\beta_{c},\rho_{c}$ ):
$$ y_{nchw}=\gamma_c\cdot(\rho_c\cdot{IN(x_{nchw}})+(1-\rho_c)\cdot{LN(x_{nchw}))}+\beta_c\\ IN(x_{nchw})=\frac{(x_{nchw}-\mu_{nc})}{\sqrt{\sigma^2_{nc}+\epsilon}}\\ \mu_{nc}=\frac{1}{HW}\sum^H{\sum^W{x_{nchw}}}\\ \sigma_{nc}=\frac{1}{HW}\sum^H{\sum^W{(x_{nchw}-\mu_{nc})^2}}\\ LN(x_{nchw})=\frac{(x_{nchw}-\mu_{n})}{\sqrt{\sigma^2_{n}+\epsilon}}\\ \mu_{n}=\frac{1}{CHW}\sum^C{\sum^H{\sum^W{x_{nchw}}}}\\ \sigma_{n}=\frac{1}{CHW}\sum^C{\sum^H{\sum^W{(x_{nchw}-\mu_{n})^2}}}\\ $$
AdaLIN 与AdaIN类似:将LIN中的可学习参数 $\gamma_{c},\beta_{c}$ 用网络(我们这里用MLP)的形式的来学习, $\rho_{c}$ 依然为可学习参数:
$$ y_{nchw}=\gamma_{nc}\cdot(\rho_c\cdot{IN(x_{nchw})}+(1-\rho_c)\cdot{LN(x_{nchw}))}+\beta_{nc}\\ \gamma_{nc}=f_{mlp}(z),\beta_{nc}=g_{mlp}(z)\\ $$
- IN: Instance normalization 对每一个 channel / feature map 做标准化并重新赋上均值方差。如果浅层就开始使用IN,那么就可以对每个纹理进行操作(增强、减弱、抹除、反转等),从而改变图像的风格(副作用是对深层的组合形状特征也造成了一定程度的影响,但由于不会抹除所有纹理,所以剩余纹理还是可以组合成大致形状特征的)。
- LN: Layer normalization 对所有channel做标准化并重新赋上均值方差,所以可以发动组合技,对整体进行相同的变换。所以可以用来改变组合形状特征,而对纹理特征的改变能力不强。
综上,IN适合风格迁移(texture/style),而LN适合内容迁移(shape/content),两个融合则可以实现 风格 + 内容 的迁移。(这个是论文的观点)
loss
跟CycleGAN的损失函数相比,多了CAM loss,也就是辅助分类器的损失。
生成器损失(对抗损失 + 循环一致性损失 + 单位映射损失 + CAM分类损失):
$$ min_{G_{s\rightarrow{t}},G_{t\rightarrow{s}},\eta_{s},\eta_{t}}\quad{L_{G}}=\lambda_1L_{lsgan}+\lambda_{2}L_{cycle}+\lambda_{3}L_{identity}+\lambda_{4}L_{cam}\\ \begin{cases} L_{lsgan}^{s\rightarrow{t}}&=E_{x\sim{X_{s}}}[(D_{t}(G_{s\rightarrow{t}}(x))^2]+E_{x\sim{X_{s}}}[(\eta_{D_{t}}(G_{s\rightarrow{t}}(x))^2]\\ L_{cycle}^{s\rightarrow{t}}&=E_{x\sim{X_{s}}}[|x-G_{t\rightarrow{s}}(G_{s\rightarrow{t}}(x))|_1]\\ L_{identity}^{s\rightarrow{t}}&=E_{x\sim{X_{t}}}[|x-G_{s\rightarrow{t}}(x)|_1]\\ L_{cam}^{s\rightarrow{t}}&=-(E_{x\sim{X_{s}}}[log(\eta_{s}(x))]+E_{x\sim{X_{t}}}[log(1-\eta_{s}(x))]) \end{cases} $$
其中,$\lambda_{1}=1,\lambda_{2}=10,\lambda_{3}=10,\lambda_{4}=1000$ ,细项 $L_{lsgan}^{s\rightarrow t}$ 是单个方向 $s\rightarrow t$ 的损失,两个方向的综合才是一整项损失 $L_{lsgan}$ 。
判别器损失(特征图heatmap的判别损失 + CAM分类损失):
$$ min_{D_{s},D_{t},\eta_{D_{s}},\eta_{D_{t}}}\quad{L_{D}}=\lambda_1(L_{hm}+L_{cam})\\ \begin{cases} L_{hm}^{D_t}&=E_{x\sim{X_{t}}}[(D_{t}(x))^2]+E_{x\sim{X_{s}}}[(1-D_{t}(G_{s\rightarrow{t}}(x))^2]\\ L_{cam}^{D_t}&=E_{x\sim{X_{t}}}[(\eta_{D_{t}}(x))^2]+E_{+\sim{X_{s}}}[(1-\eta_{D_{t}}(G_{s\rightarrow{t}}(x))^2] \end{cases} $$
其中, $\lambda_{1}=1$,细项 $L_{hm}^{D_t}$ 是域 $t$ 个的判别损失,两个域判别损失的综合才是一整项判别损失 $L_{hm}$ 。
优点
开头讲到的:
- 借鉴辅助分类器的CAM思想,提出 注意力模块:利用源域与目标域的辅助分类器得到的全连接权重,对特征图进行加权;
- 提出新的规范化函数 AdaLIN,结合注意力模块能够自适应的控制风格和内容的变化程度(也就是 迁移内容/shape 或 迁移风格 的任务都可以很好cover)。
网络实现的两步走:找差异、修改差异(G是修改差异,D是判别差异)
- 找差异(注意力):利用一个辅助分类器来识别两个域之间的差异,然后利用CAM的机制,将体现这些差异的权重作为对应feature map的权重,来提取并增强这种主要区分这个两个域的特征;
- 修改差异(AdaLIN):用第一步找到的差异,来引导AdaLIN自适应修改纹理和形状。
2 条评论
轩轩更新了!|´・ω・)ノ
呜呜考试月还是难顶(。•ˇ‸ˇ•。)