版权声明:要转随便转,如果能加上原文的链接就感谢各位了。( ⊙ o ⊙ ) https://blog.csdn.net/Hungryof/article/details/78093174
可以看到,猫变狗,单车变摩托了。效果看上去有点尴尬,但毕竟是初步效果是有了。
但这篇论文的主要贡献是提出了一个“Contrast distance”。
主要思想
我要从小猫变小狗,变的小狗与真实像狗要像,但是到底像到什么程度呢?输入是猫,那么起码生成的小狗,与真实的小狗的相像程度,要大于与其输入的猫的相像程度吧。其实就是一个triple loss的思想。我们要想生成的是狗,希望生成的狗输入真实狗的那一类,那么这两只狗的距离,肯定要小于生成的狗与输入的猫的距离。因为狗与猫是不同类,他们的距离属于类间距离。所以这种”Contrast distance”就相当于类间距离大于类内距离。
损失
对于G来说就有三个损失,除了最简单的 重建损失,还有GAN损失(用LSGAN来让稳定性高点),最后就是这里的重点 对比损失了。比较简单的就是下面这样写:
∥fx∼fy′∥>∥fy′∼fy¯∥
‖fx∼fy′‖>‖fy′∼fy¯‖
因为我们要比较的距离不是直接在raw image上进行比较,起码是semantic上的距离吧。所以就用一个DcyDcy来提取语义信息,并在特征上进行约束。为了避免模式塌陷,用f¯yf¯y,即抽取多张真实的狗图,提取特征再取个平均,而不是任意抽一张。
那么距离的具体定义:
Q(fy′,fx,fy¯)=−loge−∥fy′−fy¯∥2e−∥fy′−fy¯∥2+e−∥fy′−fx∥2
Q(fy′,fx,fy¯)=−loge−‖fy′−fy¯‖2e−‖fy′−fy¯‖2+e−‖fy′−fx‖2
可以看到,如果∥fy′−fy¯∥2‖fy′−fy¯‖2 比∥fy′−fx∥2‖fy′−fx‖2 小的越多,那么QQ值就越小。所以G就最小化QQ,而DcyDcy就最大QQ就行。
值得注意的是,这里只需要用一个cycle网络就行。原因就是因为加了Q约束。
隐藏层加类别选择的方法
这个还是挺常用的,就是你如果要进行对G加入一定的条件,比如这里是要求让G生成狗,那么你在latent representation中直接加入“one-hot”类型的特征就行。不过如果是在隐藏层特征中加入“标签”,比如这里 1*64的被扩展成 16*16*64。当然不能胡乱扩展,扩展方式是,每个spaital size的点,都有one-hot这么多通道。可以这样理解,对于每个点来说,64个通道,只有一个值是1,其余全部为0。相当于这个点是被赋予了“狗”的标签。扩展的16*16*64, 每次只有一个面(假设是第3个)是1,其余63个面全为0。经过网络训练后,会自动认为第3个通道面为1的话,就专门提取一些有助于变成狗的特征。(以后有更好的解释再补充吧。。)其实这在很多地方都这样弄,比如Generative Adversarial Text to Image Synthesis, 在D的隐藏层也是这样加入类别选择的。
---------------------
作者:Hungryof
来源:CSDN
原文:https://blog.csdn.net/hungryof/article/details/78093174
版权声明:本文为博主原创文章,转载请附上博文链接!