《Contrastive Learning for Unpaired Image-to-Image Translation》

Contrastive Learning for Unpaired Image-to-Image Translation

  • 1. 摘要
  • 2. 介绍
  • 3. 相关工作
    • 3.1 图像转换、循环一致性
    • 3.2 关系保持
    • 3.3 深度网络嵌入中的感知相似性
    • 3.4 对比表示学习
  • 4. 方法

原文及代码链接 https://github.com/taesungp/contrastive-unpaired-translation

1. 摘要

  • 图像转换任务中,输入-输出对应patch内容应该保持一致;
  • 使用基于patch的对比学习方法实现单向图像转换
  • 训练数据不成对
  • 该方法促使输入-输出中对应patch映射到特征空间中的一个相似点,输入图像中其他部分为负样本;
  • 使用一个多层、基于patch的方法,而不是在整幅图像上进行操作;
  • 负样本从输入图像的其他部分进行提取,而不是数据集中的其他部分
  • 该方法可以提高转换质量且缩短训练时间;

2. 介绍

  • 图像转换任务本质工作是,在源域与目标域的映射过程中,将源域图像的结构、内容部分与外观部分分离,在转换过程中,内容不变,而外观则使用目标域图像的外观替换
  • CycleGAN中使用对抗损失保持外观部分,使用循环一致损失保持内容部分,但是循环一致损失对源域与目标域的限制较大,要求两域之间的映射关系必须为双射,也就是要求G(x)只会存在一个y与之对应,反之亦然;
  • 本文方法通过最大化对应的输入和输出patch之间的互信息仅保持内容部分对应
  • 本文通过对比损失InfoNCE Loss实现对比学习,该函数目的是学习一个嵌入或一个编码器,它将相应的补丁相互关联,同时将它们与其他补丁分离
  • 编码器会关注两个域之间的共性,例如物体的部分和形状,同时对不同之处如动物纹理保持不变:网络目标:输入域图像内容+目标域图像风格
  • 使用多层、基于patch的对比学习方法更有效,此过程中从输入的其他部分提取负样本可以强迫patch更好的保存输入的内容
  • 因为对比学习是在图像内部进行,所以该网络可以在单个图像上进行训练;

3. 相关工作

3.1 图像转换、循环一致性

  • 成对图像转换任务中,常使用对抗损失或结合重构损失学习源域到目标域之间的映射关系;
  • 不成对图像转换任务中,多使用循环一致损失强制要求源域和目标域之间内容尽可能一致,但是该损失有一个很大的限制:两域之间映射关系为双射。实际情况中类似CycleGAN的实现有一个缺点:如果两域之间图像内容上信息不对应则会很难实现重构;

3.2 关系保持

  • 此方法促使输入图像中的关系在输出中有类似反映;
  • 可使用关系保持的方法替换循环一致性,但此种方法存在两大缺点:1)依赖整幅图像之间的关系:输入图像中相似patch中存在的关系在输出中依然保持;2)依赖预先定义的距离函数:用于计算patch之间的相似度;
  • 本文方法不依赖预定义距离,通过最大化输入-输出对应patch之间的互信息(公共信息)学习一个跨域相似性函数,以此替换循环一致性;

3.3 深度网络嵌入中的感知相似性

  • 图像转换任务中,大多工作使用每像素重构度量定义感知距离函数,比如使用l1损失定义,此种方法并不能很好地反映视觉效果,可能会得到模糊结果;
  • 成对数据图像转换任务中,近期有一些工作通过在ImageNet数据集上预训练的VGG分类网络定义感知损失,这种方式存在一定缺点:1)预训练网络权重固定,可能并不适合当前提供的数据集;2)可能不适用于不成对数据训练中;
  • 本文通过图像之间的互信息提出约束,通过利用数据中的负样本,允许跨域相似函数适应特定的输入和输出域;

3.4 对比表示学习

  • 最大化互信息:利用噪声对比估计学习一种嵌入关系,将相关信号聚集在一起;
  • 优点:不用预先定义损失函数度量预测性能;
  • 使用InfoNCE loss进行对比学习;
  • InfoNCE loss 用于计算图像之间的相似度,是一种基于互信息和噪声对比估计的无监督学习方法,可用于自监督学习和基于对比的学习。通过对比图像之间的特征信息来计算相似度,从而使得学习到的特征更加具有判别性和鲁棒性;

4. 方法

  • 网络整体为生成对抗网络,且生成器G分为两部分:Genc和Gdec
    在这里插入图片描述
    对抗损失:
  • 使用对抗损失保证输入输出的风格相似,视觉上看起来类似;
    在这里插入图片描述
    互信息最大化:
  • 使用噪声对比估计去最大化输入-输出之间的互信息,以此保持输入-输出之间内容部分对应;
    对比学习的目的是将两个信号联系起来:查询信号和对应的正样本,数据集中其他样本为负样本;
    查询信号和对应的正样本、N个负样本均被映射为一个K维向量;
    将向量归一化到一个单位球上,防止空间崩溃或者膨胀;
    对比学习的过程可以理解为一个N+1路分类问题,在N+1个样本中确定1个正样本,其余均为负样本;
    通过下列公式计算交叉熵损失函数,表示正样本被选取的概率;
    在这里插入图片描述
    在本文中,查询信号为输出图像中的某个patch,对应的正样本为输入图像中的对应patch,负样本为输入图像中的其他部分;

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

多层、基于patch的对比学习:

  • 无监督学习中,对比学习被用于图像级别或者patch级别;
  • 作者注意到输入-输出不仅要在图像级别共享内容,其对应patch也应该共享内容;
  • 本文应用多层、基于patch的对比学习;
  • 生成器中编码器用于捕捉内容信息,解码器用于合成风格信息;
  • 网络层提取特征图中的一个像素点可以看做输入图像中的某个patch,这得益于卷积操作的局部性;
  • 编码器结合两层MLP计算交叉熵损失,
    在这里插入图片描述

总训练目标:

  • 1)对抗损失;2)基于patch的交叉熵损失函数;
    在这里插入图片描述
  • PatchNCE(G,H,Y)损失可理解为一致性损失,即G(Y)≈Y:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/27053.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx踩坑记录(二) nginx: [warn] invalid value “TLSv1.3“ in /etc/nginx/nginx.conf:20

问题详情 (通过指定配置文件的方式)启动nginx,提示告警,nginx启动失败。 rootvultr:~# nginx -c /etc/nginx/conf/nginx.conf nginx: [warn] invalid value "TLSv1.3" in /etc/nginx/conf/conf.d/v2ray.conf:20问题原…

发现问题更全面,减少测试成本:WEB自动化测试的价值分析!

目录 前言: 一、WEB自动化测试的价值 1. 提高测试效率 2. 提高软件的质量 3. 减少测试成本 二、WEB自动化测试的瓶颈 1. 可维护性差 2. 兼容性问题 3. 比手工测试慢 三、代码示例 四、总结 前言: 自动化测试是软件开发中必不可少的一环&…

【支付平台】java springboot 通过ip获取所在地城市信息

如果只是想知道如何通过ip获取所在地城市信息,可直接看第三步. 如果搭建自己的支付平台,异地支付限制是必不可少的一环.因为市面上一些非法份子,会使用我们平台生成的付款码进行欺诈行为.这也是我们必须杜绝的一种现象.因此限制异地支付就是其中一种手段. 在上一篇文章【三方支…

第九篇:强化学习Q-learning算法 通俗介绍

你好,我是郭震(zhenguo) 今天介绍强化学习第九篇:Q-learning算法 前面我们介绍强化学习基本概念,马尔科夫决策过程,策略迭代和值迭代,这些组成强化学习的基础。 从今天开始逐步介绍常用强化学习算法&#x…

SparkCore的相关概念

1、Spark的RDD算子 RDD算子的概念和分类 1、1 Transformation算子 定义:RDD算子,返回值仍是一个RDD的,称之为转换算子 特性:这类算子是lazy懒加载的。如果没有Action算子,转换算子是不工作的。 1、2 Action算子 定义&…

做了一个日内信号可视化系统

量化策略开发,高质量社群,交易思路分享等相关内容 大家好,半年过去了。松鼠Quant计划6月内发布本年度最重要的一个策略:盘口策略。这个策略群友们的呼声很高,也是花了比较多时间去弄。整个策略有多个python脚本: CTP数据生成order…

部署和配置DHCP服务器实验:自动分配IP地址和网络配置

部署和配置DHCP服务器实验:自动分配IP地址和网络配置 【实验目的】 部署DHCP服务器。熟悉DHCP服务器的配置方法。验证拓扑。 【实验拓扑】 实验拓扑如图所示。 设备参数如下表所示。 设备 接口 IP地址 子网掩码 默认网关 DHCPSERVE F0/0 172.16.10.1 25…

数据安全--16--数据采集阶段安全防护措施

本博客地址:https://security.blog.csdn.net/article/details/131033616 一、引子 数据采集阶段的安全防护措施主要是从三个方面来开展的,第一个是从个人数据主体采集方面,第二个是从外部机构采集方面,以上两个方面基本涵盖了数…

Bitmiracle Docotic.Pdf 9.015 Crack

Docotic.Pdf 库是正确的法语和强大的编程和界面,可以让用户和开发人员创建专业和高质量的 PDF 文件,甚至可以阅读和修改那些已经存在的。它具有干净而强大的编程接口,能够帮助用户创建质量非常好的 PDF 文档。在这个库的帮助下,用…

CMake学习(1): CMake基本使用

https://subingwen.cn/cmake/CMake-primer/ 1. CMake 概述 CMake是一个项目构建工具,并且是跨平台的。Cmake跟Makefile其实是差不多的,只不过makefile更底层些。大多是 IDE 软件都集成了 make,比如:VS 的 nmake、linux 下的 GNU…

python之函数(参数,匿名函数,局部变量和全局变量)

文章目录 前言一、函数的参数 1、形参和实参2、必传参数(也叫:必须参数)3、关键字传参4.、默认参数5、不定长参数6、传参的顺序二、匿名函数(lambda函数) 1. 定义及特点语法格式2. lambda函数的特点三、函数返回值retu…

【测试开发】实训记录日志

软件测试系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 了解测试开发和软件测试 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 …

SSD源码总结

一、生成默认框 默认框的宽高 默认框的宽高是相对于原图的尺寸计算出来的。 默认框的中心 默认框的中心是相对于特征图的尺寸计算出来的。 二、将真实框分配给默认框 1、区分正负样本 1.1、选取正样本 计算真实框(bboxs)与每个默认框(…

SpringMVC-【回顾】

回顾MVC架构 什么是mvc:模型、视图、控制器 -----软件设计规范 回顾servlet maven项目导入依赖(webmvc,servlet-api,jsp-api,jstl,junit)创建子模块,在子模块中添加框架支持(在子模块中导入依赖jsp、servlet【因为父…

2018 年一月联考逻辑真题

2018 年一月联考逻辑真题 三、逻辑推理:第 26-55 小题,每小题 2 分,共 60 分。下列每題给出的A.、 B.、C.、D.五个选项中,只有一项是符合试题要求的。请在答题卡上将所选项的字母涂黑。 真题(2018-26)-翻译…

区块链的基本介绍

目录 1、简介 2、区块链的分类 2.1 公有链 2.2 联盟链 2.3 私有链 3、区块链特征 4、区块链结构 5、区块链对记账权利的分配方式 5.1 POW 5.2 PoS 5.3 DPoS 6、Defi、NFT、 gameFi 7、DAPP 7.1 DAPP 的核心要素 8、比特币 8.1 比特币简介 8.2 比特币数字签名…

基站机房:保障通信网络稳定,如何解决安全隐患?

基站机房作为无线通信网络的关键组成部分,承载着大量的网络设备和通信设施,对于运营商和通信服务提供商来说具有重要意义。 无论是大型运营商还是通信服务提供商,动环监控系统都将成为他们成功运营和管理通信网络的关键工具。 客户案例 案例…

Java学习路线(22)——测试框架Junit

一、单元测试概念 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法正确性。 二、Junit测试框架 (一)概念: Jun…

HBase:(三)HBase API

HBase:(一)安装部署_只爱大锅饭的博客-CSDN博客hbase部署安装https://blog.csdn.net/qq_35370485/article/details/130988364?spm1001.2014.3001.5501 1.创建maven项目 2.添加依赖 <dependency><groupId>org.apache.hbase</groupId><artifactId>hba…

【Java基础】注解与反射

一、学习笔记 &#xff08;本文内容基本源自参考链接1视频教程&#xff09; 1、注解的含义 1&#xff09;注解&#xff08;annotation)是从jdk5.0开始引入的新技术&#xff0c;其作用&#xff1a;不是程序本身&#xff0c;可对程序作解释&#xff08;该作用与注释comment相同…