[2020ECCV]Contrastive Learning for Unpaired Image-to-Image Translation

2023-10-08 00:30

本文主要是介绍[2020ECCV]Contrastive Learning for Unpaired Image-to-Image Translation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[2020ECCV]Contrastive Learning for Unpaired Image-to-Image Translation

对比学习用于无配对图像转换

文章链接:https://arxiv.org/pdf/2007.15651.pdf

代码:GitHub - taesungp/contrastive-unpaired-translation: Contrastive unpaired image-to-image translation, faster and lighter training than cyclegan (ECCV 2020, in PyTorch)

简介:

在图像到图像的转换中,输出中的每个patch都应该反映输入中相应patch的内容,而不受域的限制。为此,我们提出了一种简单的方法——使用基于对比学习的框架,最大化两者之间的相互信息。

该方法鼓励两个元素(对应的patch)映射到可学习特征空间的一个相似点,相对于数据集中的其他元素(其他patch),称为negatives。 我们探索了几个关键的设计选择,以使对比学习在图像合成设置中有效。 值得注意的是,我们使用多层、基于patch的方法,而不是对整个图像进行操作。 此外,我们从输入图像本身中提取negatives,而不是从数据集的其余部分中提取。

如图1所示;我们希望输出具有目标域(斑马)的外观,同时保留特定输入马的结构或内容。从根本上说,这是一个解纠缠问题:将需要跨域保存的内容与必须更改的外观分开。

图1:patch层级的对比学习用于单边翻译。与其他随机patch相比,生成的输出patch应该更接近其相应的输入补丁。我们使用多层,patch层级的对比损失,最大限度地提高了相应的输入和输出patch之间的相互信息。这使得在未配对的图像中可以进行单方面的翻译。

通常,目标外观(班马的条纹)是使用对抗损失来进行的,而内容是使用循环一致性来保留的。然而,循环一致性假设两个域之间的关系是双射,这通常是限制性的。在一个成功的结果中,给定输出上的一个特定补丁,例如,生成的斑马额头用深蓝色突出显示,人们应该很清楚它来自马的前额,而不是来源于图中其他部分。

我们通过使用一种对比损失函数InfoNCE loss来实现这一点,它的目的是学习一个嵌入或编码器,将相应的patch相互关联,同时将它们与其他patch分离。

为此,编码器学会注意两个领域之间的共性,如物体的结构和形状,同时对差异保持不变,如动物的纹理。

生成器和编码器这两个网络共同生成图像,这样patch就可以很容易地追踪到输入。

此外,从输入图像内部直接提取nagetives,而不是从数据集中的其他图像外部取nagetives,使得patches更好地保存输入的内容。我们的方法既不需要memory bank,也不需要专门的架构。

对比学习(自监督学习一种方法):

一些方法利用噪声对比估计,学习一种将相关信号聚集在一起的嵌入,与数据集中的其他样本形成对比。相关信号可以是带有自身的图像,带有其下游表示的图像,图像内的相邻patches,或输入图像的多个视图,最成功的是带有一组自身转换版本的图像。

方法:

输入一些图像x,将生成器分为编码器Genc和解码器Gdec,生成y^= G(z) = Gdec (Genc (x))。

使用一个噪声对比估计框架来最大化输入和输出之间的相互信息。

对比学习的思想是关联两个信号,一个“query”和它的“positive”例子,与数据集中的其他点(称为“negetive”)形成对比。

query, positive,和N个 negatives分别被映射到K维向量v,v+∈ RK 和 v - ∈ RN×K ,其中v-n第n个negative。

我们的目标是关联输入和输出数据。在我们的背景中,query指的是输出。positive和nagetive的是对应的和不对应的输入。例如在图1中,输出斑马图像深蓝色的方框z指的就是query,输入马的图像中蓝色的框z+指的就是对应的positive,黄色的框z-指的就是nagetives。

我们将向量归一化到一个单位球面上,以防止空间坍缩或膨胀。一个(N + 1)方向分类问题被建立,其中query与其他样例之间的距离按温度系数τ = 0.07进行缩放,并传递为logits。

交叉熵损失被计算,代表positive例被选择的概率超过nagetives例。

由于编码器Genc被计算来产生图像翻译,它的feature stack是容易获得的,我们可以利用它。该feature stack中的每一层和空间位置都代表输入图像的一个patch,更深的层对应更大的patch。选择感兴趣的第L层,并通过一个小的两层MLP网络Hl传递特征映射。生成一个特征堆栈 {zl}L= {Hl(Glenc(x))}L,其中Glenc表示所选的第L层的输出。我们索引到层l∈{1,2,…, L},表示s∈{1,…, Sl},其中Sl为每层空间位置的个数。

我们的目标是在特定位置匹配相应的输入-输出patch。我们可以利用输入中的其他patch作为nagetives。并命名为PatchNCE损失,如图二。

其中l为上面的(可以当成softmax的一种形式):

相比于对比学习需要使用internal loss+external loss,CUT仅仅使用internal loss。

external NCE loss:利用来自数据集其余部分的图像patch。我们从数据集中encode一张nagetive图像{z˜l}L,也就是接下来的externalNCE loss:

在这个变体中,我们使用一个辅助的moving-averaged encoder来维持一个大的、一致的nagetives字典。z˜l是从外部字典Z−从源域采样的,其中的数据都要使用该编码器HˆlMLPHˆ。(external NCE来自于MoCo)。

我们的编码器Genc学会了捕捉了领域不变性,比如马→斑马的动物身体、背景中的草和天空,而我们的解码器Gdec学会了合成领域特定的特征,比如斑马条纹。我们的编码器不需要建模大的类内变化,如白马vs.棕马,这对于生成输出斑马是不必要的。

最终的目标函数,和CycleGAN一样也添加一致损失(identity loss)LPatchNCE(G, H, Y)对来自域Y的图像使用PatchNCE损失LPatchNCE(G, H, Y),(即生成图像y自身输入生成器生成的图像y~,y和y~再做一个PatchNCE损失),以防止生成器进行不必要的更改。

在等式损失为λY = 1的情况下,我们联合训练时选择λX = 1。在λY = 0的情况下,选择更大的值λX = 10来补偿正则化的缺失。前一种构型命名为对比未配对翻译(CUT),在性能上优于现有的方法。而后者被称为FastCUT,可以被认为是一个更快、更轻的CycleGAN版本。与最近经常使用5-10个损失和超参数的方法相比,我们的模型相对简单。

讨论:

Li et al.已经证明循环一致性损失是条件熵H(X|Y)(和H(Y |X))的上界。因此,最小化周期一致性损失鼓励输出y更依赖于输入x。这与我们最大化互信息I(x,y)的目标有关,因为I(x, y) = H(x)−H(x | y)。由于熵H(X)是一个常数,且与生成器G无关,使互信息最大化等同于使条件熵最小化。

值得注意的是,使用对比学习,我们可以在不引入反向映射网络和额外的鉴别器的情况下实现类似的目标。在我们的设置中,我们最大化了两个高维图像空间之间的互信息,其中简单的损失不再有效。我们使用对比学习来加强内容一致性,而不是改善对抗损失本身。为了测量两个分布之间的相似性,the Contextual Loss使用了从预先训练的网络中提取的特征的余弦距离上的softmax。相比之下,我们学习了带有NCE损失的编码器,以将输入和输出补丁关联在同一位置。

评估方案:

我们利用广泛使用的Fr´echet初始距离(FID)度量,该度量在深度网络空间中经验地估计真实图像和生成图像的分布,并计算它们之间的散度。直观地说,如果生成的图像是真实的,它们应该在任何特征空间中具有与真实图像相似的汇总统计信息。

在本文中,Fr´echet Inception Distance (FID[26])是通过PyTorch框架的双线性采样将图像大小调整为299 × 299来计算的,然后取预训练的最后一个平均池化层的激活Inception V3使用TensorFlow框架提供的权重。

我们使用默认设置:

https://github.com/mseitzer/pytorch-fid

所有测试集图像都用于评估。

训练细节:

为了显示所提出的基于patch的对比损失的效果,我们故意匹配CycleGAN的架构和超参数设置,但损失函数除外。这包括基于resnet的生成器,有9个剩余块,PatchGAN鉴别器,最小二乘GAN损耗,批大小为1,和Adam优化器[38],学习率0.002。

我们的完整模型CUT被训练到400个epoch,而快速变体FastCUT被训练到200个epoch,遵循CycleGAN。

此外, FastCUT使用flip-equivariance增强进行训练,其中对生成器的输入图像进行水平翻转,并在计算PatchNCE损失之前将输出特征翻转回来。

我们的编码器Genc是CycleGAN生成器的前半部分。为了计算我们的多层,基于补丁的对比损失,我们从5层中提取特征,这5层是RGB像素,第一和第二下采样卷积,以及第一和第五残差块。我们使用的层对应于大小为1×1、9×9、15×15、35×35和99×99的接受字段。对于每一层的特征,我们随机采样256个位置,并应用2层MLP来获得256维度的最终特征。对于我们使用MoCo风格的memory bank的baseline模型,我们遵循MoCo的设置,使用动量值0.999,温度0.07。每层memory bank的大小为16384个,每次迭代我们对每张图像排列256个patch。

这篇关于[2020ECCV]Contrastive Learning for Unpaired Image-to-Image Translation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/161474

相关文章

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

简单的Q-learning|小明的一维世界(3)

简单的Q-learning|小明的一维世界(1) 简单的Q-learning|小明的一维世界(2) 一维的加速度世界 这个世界,小明只能控制自己的加速度,并且只能对加速度进行如下三种操作:增加1、减少1、或者不变。所以行动空间为: { u 1 = − 1 , u 2 = 0 , u 3 = 1 } \{u_1=-1, u_2=0, u_3=1\} {u1​=−1,u2​=0,u3​=1}

简单的Q-learning|小明的一维世界(2)

上篇介绍了小明的一维世界模型 、Q-learning的状态空间、行动空间、奖励函数、Q-table、Q table更新公式、以及从Q值导出策略的公式等。最后给出最简单的一维位置世界的Q-learning例子,从给出其状态空间、行动空间、以及稠密与稀疏两种奖励函数的设置方式。下面将继续深入,GO! 一维的速度世界 这个世界,小明只能控制自己的速度,并且只能对速度进行如下三种操作:增加1、减

idea中配置Translation插件完成翻译功能

文章目录 idea下载插件配置有道云阿里云百度翻译开放平台 idea下载插件 idea中安装Translation插件 使用方法:右下角选择翻译引擎,鼠标选中想翻译的部分,右键翻译即可 之前一直用的微软的翻译,不需要配置,但是最近微软服务器总是抽风,无法使用,故打算配置一下国内的翻译服务。 配置 有道云 只有初始的一点额度,用完就要收费了,不推荐

IMAGE LIST

   CImageList就是一个容器,用来存储图片资源,方便这些资源被CListBox,CComboBox,CComboBoxEx,CTabCtrl以及CTreeCtrl,CListCtrl等使用。      要使用CImgeList首先要使用它的create函数:      一般用的比较多的是这一个函数,当然,它还有很多重载,自己可以去翻阅msdn.       BOOL

【vscode】vscode paste image插件设置

本文首发于 ❄️慕雪的寒舍 vscode编辑md文件的时候,如果想插入图片,自带的粘贴只会粘贴到当前目录下,也没有文件重命名,很不友好。 在扩展商店里面有mushan的Paste Image插件,相比自带的,更加友好一点。但是它的配置把我弄糊涂了,简单测试了一下才明白处理的逻辑。 注意,本文编写的是对mushan的Paste Image插件的教程。 首先是安装这个插件,这个不多说

Learning Memory-guided Normality for Anomaly Detection——学习记忆引导的常态异常检测

又是一篇在自编码器框架中研究使用记忆模块的论文,可以看做19年的iccv的论文的衍生,在我的博客中对19年iccv这篇论文也做了简单介绍。韩国人写的,应该是吧,这名字听起来就像。 摘要abstract 我们解决异常检测的问题,即检测视频序列中的异常事件。基于卷积神经网络的异常检测方法通常利用代理任务(如重建输入视频帧)来学习描述正常情况的模型,而在训练时看不到异常样本,并在测试时使用重建误

pytorch时空数据处理4——图像转文本/字幕Image-Captionning(二)

pytorch时空数据处理4——图像转文本/字幕Image-Captionning(二) pytorch时空数据处理4——图像转文本/字幕Image-Captionning(二)DatasetInputs to modelCaption LengthsData pipelineEncoderAttentionDecoder代码数据集初始化 create_input_files.py训练 tr

Learning Temporal Regularity in Video Sequences——视频序列的时间规则性学习

Learning Temporal Regularity in Video Sequences CVPR2016 无监督视频异常事件检测早期工作 摘要 由于对“有意义”的定义不明确以及场景混乱,因此在较长的视频序列中感知有意义的活动是一个具有挑战性的问题。我们通过在非常有限的监督下使用多种来源学习常规运动模式的生成模型(称为规律性)来解决此问题。体来说,我们提出了两种基于自动编码器的方法,以

Show,Attend and Tell: Neural Image Caption Generation with Visual Attention

简单的翻译阅读了一下 Abstract 受机器翻译和对象检测领域最新工作的启发,我们引入了一种基于注意力的模型,该模型可以自动学习描述图像的内容。我们描述了如何使用标准的反向传播技术,以确定性的方式训练模型,并通过最大化变分下界随机地训练模型。我们还通过可视化展示了模型如何能够自动学习将注视固定在显着对象上,同时在输出序列中生成相应的单词。我们通过三个基准数据集(Flickr9k,Flickr