Contrastive Learning for Unpaired Image-to-Image Translation
文章链接:https://arxiv.org/pdf/2007.15651.pdf
代码:https://github.com/taesungp/contrastive-unpaired-translation
2020年发表在ECCV上的文章,在cyclegan的基础上,采用对比学习的方法进行改进优化
通读
abstract
maximizing mutual information between the two
作者选择的方法是最大化两张图片的互信息,采用了对比学习的框架,能够实现二者之间相互映射到学习特征空间,数据集中的其他元素称为(negatives),不会被学习到
作者采用的是多层的,基于patch的方法,而不是在整个数据集(dataset)中实现
对于negatives的提取也是从当前的输入图片中提取,而不是数据集的其他部分
值得注意的是,CUT可以拓展到每个域仅为单张图片的训练模式
introduction
image2image 需要值得注意的点是,需要让输出呈现目标域的外观,同时能够保留源域的结构或内容(细节)
separating the content, which needs to be preserved across domains, from appearance, which must change 将需要跨域保留的内容与必须更改的外观分开
cyclegan使用循环一致性损失来保留内容,同时使用对抗性损失来强制改变风格(外观)
但是循环一致性损失的假设是两个域之间存在双射的关系(能找到对应),which is often too restrictive.
by maximizing the mutual information between corresponding input and output patches. 使用这种方式来保持内容的不变
提出了使用对比损失函数 InfoNCE loss 来实现:
通过生成的斑马的前额 patch,知道其来自于马前额,其目的是学习将对应的补丁彼此关联的嵌入或编码器,,同时将他们与其他 patch 分开。
为此,编码器学会关注两个域之间的共性,例如对象部分和形状,同时差异得到了保留,例如动物的纹理。
生成器和编码器,共同生成一个图像,使得 patch 可以很容易地跟踪到输入,实现映射关系
它适用于一个多层次的,拼接的方式。
在非配对的图像生成中,循环一致性是一种强制对应的方法,它学习从输出域到输入的逆映射,并检查输入是否可以重建。
尝试通过信息最大化( information maximization)来学习输入和输出补丁之间的跨域相似性函数,而不依赖于预先指定的距离来取代周期一致性。
该方法只需要学习一个方向的映射,避免了使用逆辅助生成器和判别器。这可以大大简化训练过程并减少训练时间。同时将生成函数G分解为两个分量,编码器Genc和解码器Gdec,它们被顺序地应用以产生输出图像y = G(z)= Gdec(Genc(x))
使用对抗性损失:Adversarial loss. We use an adversarial loss, to
encourage the output to be visually similar to images from the target
domain, as follows:
这个公式没给解释诶,损失函数没讲清楚
Mutual information maximization 互信息最大化
在特征提取后结合了两层MLP,该网络学习将输入和输出 patch
投影到共享的嵌入空间。
The cross-entropy loss is calculated, representing the probability of
the positive example being selected over negatives.
- Our goal is to associate the input and output data. In our context, query refers to an output. positive and negatives are corresponding and noncorresponding input.
- 我们的目标是关联输入和输出数据。在我们的文章中,query指的是一个输出。正和负是对应的和非对应的输入。
使用MLP的目的是什么? - 特征图本身并非为满足对比损失而设计的,因为它们只是对图像转换有用的特征。但它们应该很容易投射到可以满足对比损失的另一个空间,MLP 负责这部分工作。
如何将图片映射到矢量中?如何对负样本进行采样?
多层次的,基于patch的学习方法
- Each layer and spatial location within this feature stack represents a patch of the input image, with deeper layers corresponding to bigger patches.
- 该特征堆栈中的每个层和空间位置表示输入图像的一个patch,较深的层对应于较大的patch
PatchNCE loss 可以简单理解为对于输入和输出两张图片,相同位置的patch可以更好的联系在一起,相较于输入图片中的其他patch (单图像的内部统计)
编码器Genc学习捕获跨域中的不变内容,解码器Gdec学习合成特定域的特征
final objective:
生成真实的图像,同时保持输入和输出图像相同位置上的 patch 保持对应关系,在生成域上,可以使用 PatchNCE loss 来防止生成器对生成的图像进行不必要的修改(这里我理解为改变了输入图像的轮廓)
循环一致性损失是条件熵上界H(X|Y) or
H(Y|X),最小化循环一致性损失会促进输出y更加依赖于输入x
- This is related to our objective of maximizing the mutual information I(X, Y), as I(X, Y) = H(X) − H(X|Y).
- As entropy H(X) is a constant and independent of the generator G, maximizing mutual information is equivalent to minimizing the conditional entropy.
- 这里我的理解为最大化互信息就是让输入和输出之间的熵最小(更相似),H(X|Y) 可以表示输入x与输出y之间的差异程度,cyclegan的优化目标是让 输入和输出之间的差异 H(X|Y) 更小,本质上和作者这里的想法是一致的。
记录一些其他读过的内容
风格转换的可行性:
- 数据一致性提升:不同站点的 CT 图像由于设备品牌、扫描参数等因素导致图像的亮度、对比度、纹理等方面存在差异,通过风格转换可以使它们在视觉上更加相似。这有助于模型更稳定地学习图像特征,避免模型因数据风格差异过大而出现过拟合或学习困难的情况。
- 利用公开数据集的优势:以一个高质量的公开数据集风格为标准,可以借鉴公开数据集在数据标注、数据质量控制等方面的优点。公开数据集通常经过精心整理和标注,其风格也往往是被广泛认可和适用于特定任务的。通过将各站点数据转换为这种风格,能够使模型更好地利用在公开数据集上验证过的架构和训练方法
现在的想法就是可以实现一种风格图像到另一种风格的转换,同时能够提高模型训练的识别精度
MIA2024年还发布了一篇文章,里面提到了:用于多站点脑网络分析的多源 DA 方法(Wang et al., 2020、She et al., 2022、Guan et al., 2021 )具有局限性,并且通常涉及两个独立的阶段,即多源域适应和疾病诊断,如图 1 (c) 所示。然而,很难确保 DA 后对齐的特征一定对最终的分类任务有益。虽然这些方法考虑了多源 DA,但它们独立地建立每个源域和目标域之间的单独域映射,忽略了不同域映射之间的潜在相关性。
记录灵感
设计一种跨模态的注意力机制,允许图像级别的信息与特征级别的信息进行交互:可以利用图像样式转化后的输出来指导特征提取器关注那些对领域对齐特别重要的区域或者特征,利用这种机制,有助于提高模型对特定领域变化的鲁棒性
虽然图像层面的样式转化可以实现,但是转换后的图像保存的领域特征可能并非是我们需要的,因此我们需要同时保持特征层面的对齐(比如使用共享的特征提取器)