当前位置: 代码迷 >> 综合 >> 自步对比学习(Self-paced Contrastive Learning with Hybrid Memory for Domain Adaptive Object Re-ID)
  详细解决方案

自步对比学习(Self-paced Contrastive Learning with Hybrid Memory for Domain Adaptive Object Re-ID)

热度:96   发布时间:2023-12-21 09:40:48.0

自步对比学习(Self-paced Contrastive Learning with Hybrid Memory for Domain Adaptive Object Re-ID)

简介

文章来源

目标重识别

上面的链接就有很好的介绍,主要怎么理解该问题。

个人理解:用简单的大白话来说,该任务的执行过程应该是对于某个目标先进行类似于确定的操作,再在譬如不同摄像机,场景下,再次将该目标识别出来。

领域自适应

知乎深度学习大讲堂

个人理解:动机是机器学习深度学习再使用训练样本训练模型之后,测试样本或者真实场景的样本可能与训练数据的分布差异较大,容易出现过拟合的现象,针对这种问题提出迁移学习。领域自适应就是迁移学习的一个重要方法,主要是利用信息丰富的源域样本来提升目标域模型的性能。

方法

设计了一个框架,由一个基于CNN的encoder f θ f_\theta fθ?和一个混合记忆模块,关键创新是该网络是被源域类别,目标域聚类类别,目标域离群实例三者联合监督训练的,并且还能动态更新混合记忆模块去提供更加可靠的学习目标。

为了避免初始化被噪声聚类影响,该方法初始化过程使用的是更加可靠的聚类结果,因此提出了一个新的聚类评价标准去衡量聚类的质量。

3.1通过对比学习构造和升级混合记忆模块

这里假定目标域的训练样本都是无监督的 X t X^t Xt,采用3.2节的聚类策略进行聚类分组。源域的样本为 X s X^s Xs,带有标签。

目标域的伪标签数据为 X c t X^t_c Xct?,目标域的离群实例(也就是不属于任何聚类的样本)为 X o t X^t_o Xot? i . e . X t = X c t ∪ X o t i.e.X^t = X^t_c\cup X_o^t i.e.Xt=Xct?Xot?)。

3.1.1统一对比学习

给定一个一般特征向量 f = f θ ( x ) , x ∈ X s ∪ X c t ∪ X o t f=f_\theta(x),x\in X^s\cup X^t_c\cup X_o^t f=fθ?(x),xXsXct?Xot?,我们的统一对比loss为:
L f = ? l o g e x p ( < f , z + > / τ ) ∑ k = 1 n s e x p ( < f , w k > / τ ) + ∑ t = 1 n c t e x p ( < f , c k > / τ ) + ∑ t = 1 n o t e x p ( < f , v k > / τ ) \mathcal{L}_f=-log\frac{exp( \left< f,z^+ \right> /\tau)}{\sum_{k=1}^{n^s}exp(\left<f,w_k\right>/\tau)+\sum_{t=1}^{n^t_c}exp(\left<f,c_k\right>/\tau)+\sum_{t=1}^{n^t_o}exp(\left<f,v_k\right>/\tau)} Lf?=?logk=1ns?exp(?f,wk??/τ)+t=1nct??exp(?f,ck??/τ)+t=1not??exp(?f,vk??/τ)exp(?f,z+?/τ)?
z + z^+ z+表示与 f f f正相关的原型, τ \tau τ经验数值为0.05,<>为内积用来衡量相似度。 n s n^s ns表示源域类别数, n c t n_c^t nct?表示目标域聚类数, n o t n_o^t not?表示目标域离群实例的个数。根据 f f f所属类别, z + z^+ z+的值与之对应

3.1.2混合记忆模块

他这里的策略是每个epoch重新聚类得到更加可靠的聚类信息,因此每次聚类类别,离群值都在变化,相应的统一对比loss就要发生改变,因此loss的类原型是非参数化动态构造的?

记忆模块初始化:通过前向计算 f θ f_\theta fθ?得到提取的特征来初始化混合记忆模块,初始源域类中心可由每个类的平均特征向量得到,而初始的目标域实例特征 { v } \{v\} { v}是由 f f f被直接编码的。然后目标域的聚类中心被每个类的平均向量初始化。

注意,这样通过前向计算初始化仅有一次,后面更新混合记忆模块都在训练中进行。

更新记忆模块:每次迭代,每个小batch中的被编码特征向量会参与记忆模块更新。

对于源域中的类中心 { w } \{w\} { w},譬如第k个类中心就由minibatch中的属于k类的特征向量的均值向量更新:
w k ← m s w k + ( 1 ? m s ) ? 1 ∣ B k ∣ ∑ f i s ∈ B k f i s w_k\leftarrow m^sw_k+(1-m^s) \cdot \frac{1}{|\mathcal{B}_k|}\sum_{f^s_i\in \mathcal{B}_k}f_i^s wk?mswk?+(1?ms)?Bk?1?fis?Bk??fis?
B k \mathcal{B}_k Bk?表示属于在当前minibatch中源域第k类的特征集合, m s ∈ [ 0 , 1 ] m^s\in[0,1] ms[0,1]是动量参数,由经验设置为0.2

目标域的聚类中心不能被这样存储和更新,因为聚类的集合和离群值的集合是不断变化的。混合记忆模块缓存了所有目标域特征 { v } \{v\} { v},每个minibatch中的编码特征向量 f i t f^t_i fit?被用来更新与之对应的实例条目 v i v_i vi?
v i ← m t v i + ( 1 ? m t ) f i t v_i\leftarrow m^tv_i+(1-m^t)f_i^t vi?mtvi?+(1?mt)fit?
这里 m t m^t mt按照经验设置0.2。然后再由新的 v i v_i vi?更新聚类中心。

3.2可靠聚类的自步学习

自步学习在每个epoch之前的重聚类步骤中,只有最可靠的聚类才会被保留,不可靠的类将会被打散重新归为离群值实例。

通过衡量聚类的独立性和紧性,提出一个可靠的评判标准。

**聚类的独立性:**一个可靠的类应该是与其他类和个例样本独立的。

I ( f i t ) \mathcal{I}(f_i^t) I(fit?)表示属于同一类的堂样本 f i t f_i^t fit?,用IOU分数来衡量聚类的独立性得分:
R i n d e p ( f i t ) = ∣ I ( f i t ) ∩ I l o s s e ( f i t ) ∣ ∣ I ( f i t ) ∪ I l o s s e ( f i t ) ∣ \mathcal{R}_{indep}(f_i^t)=\frac{|\mathcal{I}(f_i^t)\cap\mathcal{I}_{losse}(f_i^t)|}{|\mathcal{I}(f_i^t)\cup\mathcal{I}_{losse}(f_i^t)|} Rindep?(fit?)=I(fit?)Ilosse?(fit?)I(fit?)Ilosse?(fit?)?
I l o s s e ( f i t ) \mathcal{I}_{losse}(f_i^t) Ilosse?(fit?)表示聚类标准松散的时候包含的类集合。 R i n d e p \mathcal{R}_{indep} Rindep?越大表示该类对于 f i t f_i^t fit?越独立。在一个聚类中的样本应该有同样的独立分。

放宽聚类的标准也不会有样本被归到其他类里(对于一个聚类好的类来说)。

**聚类的紧性:**就是类内的样本之间有更短的距离。收紧聚类的标准也不会有样本被分到其他类里(对于一个聚类好的类来说)
R c o m p ( f i t ) = ∣ I ( f i t ) ∩ I t i g h t ( f i t ) ∣ ∣ I ( f i t ) ∪ I t i g h t ( f i t ) ∣ \mathcal{R}_{comp}(f_i^t)=\frac{|\mathcal{I}(f_i^t)\cap\mathcal{I}_{tight}(f_i^t)|}{|\mathcal{I}(f_i^t)\cup\mathcal{I}_{tight}(f_i^t)|} Rcomp?(fit?)=I(fit?)Itight?(fit?)I(fit?)Itight?(fit?)?
I l o s s e ( f i t ) \mathcal{I}_{losse}(f_i^t) Ilosse?(fit?)表示聚类标准收紧的时候包含的类集合。该值越大表示类内的样本间距更小

设置了 α , β ∈ [ 0 , 1 ] \alpha,\beta\in[0,1] α,β[0,1]为独立性和紧性的阈值,来确定可靠的聚类。保留 R i n d e p > α , R c o m p > β \mathcal{R}_{indep}>\alpha,\mathcal{R}_{comp}>\beta Rindep?>α,Rcomp?>β的聚类结果,剩下的其他数据全部被当做不属于任何类的离群实例。

一些方法应用细节

每个epoch前重新聚类,聚类方法使用的是DBSCAN,基于密度聚类的方法。参考

伪码(也可以找西瓜书看看):来源
在这里插入图片描述
聚类中的距离使用的是Jaccard距离。直接参照百度百科

后续实验

具体细节就可以看论文表格了,一些对比实验与消融实验。论文的附录里有算法的伪码还有一些实施细节等,对于帮助论文理解有较大的帮助。

  相关解决方案