2020 TIP
论文地址https://ieeexplore.ieee.org/document/9172143
同样也是一篇UDA reid文章,归类于应用 agent 思路。
动机
建立一系列的代理节点,让这些代理节点成为桥梁。目的:让网络学习到域不变性的同时又具有判别性的特征。
个人理解:整篇动机和2021TIP那篇很像,或许这个代理节点这个点还能挖一挖。
思路
对源域进行有监督学习、对目标与进行相似度一致性学习、对跨域进行自监督学习;通过代理节点的学习,最终可以学习域不变性同时具有判别性的表征。
1、构建重构特征:对两个域的特征,可以分别学习它们与所有代理节点的相似度参数S,然后利用这些参数作为代理节点的权重,用代理节点重构特征。
2、衡量目标域的两个样本是否是同一id:对目标域而言,与代理节点的相似性可以用于挖掘难例负样本:如果在目标域中,两个样本对相同的一系列代理节点的相似度S参数相差很大,说明它们大概率不是同一个id。
3、自监督损失对跨域影响:在某个域中,重构的特征与原特征应该保持一致,这种一致性应该比来自另一个域的所有特征的相似度都要高的。
方法
Self-Supervised Agent Learning
一、获得重构特征
1、代理节点初始化:用源域的类代理特征(分类器的权重向量)初始化。训练过程中会更新代理节点。
问题:如何更新?
个人理解:先对源域做全监督,然后把分类层的 weights提出来,作为代理节点特征。
2、计算相似度
分别计算k个代理节点与第i个域特征fi的相似度,最终获得Si(1*k维度,k是代理节点个数,并且Si的所有元素和为1)
3、利用Si,获得重构特征:
二、源域进行有监督学习
1、源域特征经过FC做交叉熵损失:
2、用重构损失指导分类。
个人理解:挺巧妙的,并没有直接拿重构特征做分类任务。wyi是fc层类别yi的权重。提供了一种思路:重构特征如果直接输入到FC,首先会改变原来FC学到的权重,其次,放大了误差。
最终损失:
好处:可以增强源域和代理节点之间的关系
三、跨域的自监督学习
1、重构特征应该和原特征保持一致:L2损失;这一步有助于加强域特征和代理节点特征的关系
2、为防止不同域之间的特征混淆,增加约束:某一个域的重构特征和原特征之间的一致性应该比重构特征与另一个域的特征之间的一致性更高。(前者是正样本对,后者是负样本对,做三元损失)
四、目标域进行相似度一致性学习
1、目的:减少目标域内的变化影响
2、方法:如果目标域内两个样本是同一id,那么它们的特征相似度Si也应该相似。
评判正负样本的阈值计算:
(1)首先给定超参数 p,M是一个batch中的图片数量,然后得到一个整数 p*M。
(2)在一个batch中,对一个目标域样本x,计算x与M张图片的 特征相似度(两个特征做内积) 和 相似度A
然后按特征相似度倒序排列,取第 p*M 对的特征作为阈值1;
(3)阈值2:T ,作为相似度A的阈值
总结:设置了两个阈值,首先需要满足特征相似度,其次判断是否大于相似度参数。这样挖掘的负样本,只有那些特征空间很像的图像,但和代理节点的相似度参数差别较大的负样本。
最终损失:
实验
启发
1、点数低的原因:
(1)没有用聚类的方法效果好;(2)代理节点不适用。文中没有说如何更新代理节点,只说了用两个域的特征进行更新。
2、整体思路很好,包括三部分的损失设置:有监督损失+重构特征有监督损失、域内自监督损失、目标域内一致性损失。
3、可以改进的地方:
(1)对目标域增加聚类方法,提升代理节点的可靠性。
(2)ICCV2021 oral 那篇是在resnet的中间某层构建中间域,这篇是对最后一层输出的feature构建中间域,有没有可能在每个stage都输出feature,然后按权取一个最优的拿来做中间域?
去找两篇的优点进行杂糅。