简要介绍
利用GAN做image translation的开山之作:Image-to-Image Translation with Conditional Adversarial Networks
自然语言处理领域有text2text,所以自然而然图像领域也有image2image。作者提出pix2pix,即利用CGAN实现一个解决各种image2image任务(语义分割,边缘检测、风格迁移等等)的通用解决方案和框架(前人工作中只应用于特定领域)。
CGAN的结构化损失
在此之前的单一领域的image2image中的都是逐像素分类或回归(per-pixel classification or regression),每个输出像素被认为有条件地独立于所有其他像素,是非结构化的。
这时就出现了一个问题,通用领域中的image2image任务怎么设计损失函数呢?作者在文中指出:CGAN的不同之处在于损失是可学习的,并且理论上可以惩罚输出和目标之间任何的可能不同的结构(CGAN的损失函数就很适合通用领域嘛!我个人理解是因为他的训练模式是相互博弈,所以损失就是基于全局如果不是像素的损失)。忘记了的可以去看一下这篇CGAN的讲解。
L c G A N ( G , D ) = E x , y [ log D ( x , y ) ] + E x , z [ log ( 1 − D ( x , G ( x , z ) ) ] \begin{aligned} \mathcal{L}_{c G A N}(G, D)= & \mathbb{E}_{x, y}[\log D(x, y)]+ \mathbb{E}_{x, z}[\log (1-D(x, G(x, z))] \end{aligned} LcGAN(G,D)=Ex,y[logD(x,y)]+Ex,z[log(1−D(x,G(x,z))]
前人工作表明将GAN目标函数与更传统的损失函数(L1loss:MAE、L2loss:MSE)混合是相得益彰的。作者认为L1 loss 可以恢复图像的低频部分,而GAN loss可以恢复图像的高频部分(图像中的边缘等)。生成器的任务不仅是欺骗鉴别器,而且要在L2意义上接近真值输出。作者指出使用L1而不是L2,因为L1可以减少模糊。
L L 1 ( G ) = E x , y , z [ ∥ y − G ( x , z ) ∥ 1 ] \mathcal{L}_{L 1}(G)=\mathbb{E}_{x, y, z}\left[\|y-G(x, z)\|_1\right] LL1(G)=Ex,y,z[∥y−G(x,