Transferable Joint Attribute-Identity Deep Learning for Unsupervised Person Re-Identification(TJAIDL)阅读笔记
这篇文章时第一次在无监督跨域reid之中引入属性的paper。
最经典的属性reid的文章当然是ZL老师组的:Improving Person Re-identifification by Attribute and Identity Learning(APR),这篇paper不仅是第一篇在reid中引入属性的,还标注Market和Due的属性,贡献很大。
但思想很简单:
图很清楚的描述了整个过程:一条支路做reid的IDE分类,另一条支路分为M条子支路,每条子支路做一个属性的二分类。然后所有损失相加(多任务)。
到那时,其实有不合理的地方。所有任务共享CNN的backbone,也就是说用于reid的支路的特征也必须用在属性分类支路。也就导致CNN学的特征必须既有利于属性分类,又有利于reid,最后就只能到底一个折衷的共享空间,即都能做,但都不强。
于是本文作者抓住这一点,提出了TJAIDL。怎么做的?
大体上还是一样,但最明显的是CNN的backbone用了两个,每个CNN都专注于自己分支的任务。上分支专门做reid,保证鉴别力。下分支做属性分类,但其实也包含了用于reid的信息,为什么这么说呢?这是因为其和c模块之间的损失做到的。具体地,
x
i
d
x_{id}
xid送给IIA模块,编码出一个更能表示行人ID最关键信息的特征,与此同时,由于IIA模块是重建
x
i
d
x_{id}
xid,因此不需要目标域的id标签,只要输入样本,经过a自然会得到
x
i
d
x_{id}
xid(当然目标域就不会有
L
i
d
L_{id}
Lid损失的监督)。之后,
e
I
I
A
e_{IIA}
eIIA这个与ID高度相关的特征属性分支的特征提取结果(这个分支用
L
a
t
t
L_{att}
Latt监督来的,因此学习到属性信息)做
L
I
D
−
t
r
a
n
s
f
e
r
L_{ID-transfer}
LID−transfer损失监督。这个损失不像
L
i
d
,
L
r
e
c
,
L
a
t
t
L_{id},L_{rec},L_{att}
Lid,Lrec,Latt那样常见(分别是交叉熵,MSE,交叉熵损失),给出其定义如下:
不难看出其实也是一个MSE损失,其致力于让属性预测分支提取的特征与ID分支的结果很近似。什么意思?
其实作者这里和APR有相通之处,也有明显的区别。APR中,属性和ID共享同一个特征空间,也就可以最终目标是让ID特征中包含属性信息,属性特征中包含ID信息。但作者指出,这样是不对的,但不对的是ID特征中包含属性信息,因为ID特征不够纯粹,也就不够鉴别力。而至于属性特征中包含ID信息,那我们根本不care,因为我们并不做属性,属性只是在辅助,污染就污染了吧(当然,如果两者高度独立,只具有对应关系,效果应该会更好)。作者的模型也是这么做的:
首先ID分支,作者让其与属性分支独立,于是设计用两个CNN backbone,而不是一个;其次,就是污染部分,作者通过让ID相关信息( e I I A e_{IIA} eIIA)和属性信息做MSE损失以尽量接近,那就导致属性特征中包含了ID信息,当然,这种污染也是必要的,因为属性是为了辅助ID,如果属性不和ID之间建立任何联系,那加了属性和没加也就没有区别。而这里作者选择 e I I A e_{IIA} eIIA和属性信息做MSE损失就更加高明了,因为直接用 x i d x_{id} xid和属性信息做MSE损失,那就个APR没什么区别,同样导致属性信息中有ID信息,ID中也有属性信息,这是我们不希望看到的。作者通过IIA的处理就有效避开了这一点:其让 e I I A e_{IIA} eIIA这个ID信息中包含属性信息,属性信息中包含 e I I A e_{IIA} eIIA的ID信息,这样就不会直接去污染 x i d x_{id} xid,同时又建立了ID和属性的联系。当然, e I I A e_{IIA} eIIA肯定也是会在BP时污染到 x i d x_{id} xid,但就比直接污染的影响小多了。
最后,还有一个
L
a
t
t
,
I
I
A
L_{att,IIA}
Latt,IIA没有解释,其到底是干嘛的?
这一块也很简单,由于前面我们说
e
I
I
A
e_{IIA}
eIIA的ID信息中其实包含了属性信息,但这个属性信息只是通过MSE损失得到的,如果只是MSE的话就很玄乎,会得到一个平滑的结果,未必是真实利于属性分类的,于是不妨用
e
I
I
A
e_{IIA}
eIIA直接去像
x
a
t
t
+
I
D
x_{att+ID}
xatt+ID那样做一个属性预测,也就是属性分类任务,那样就能有效强化其中属性的信息。
对比两处属性预测:
其中:
基本上是一样的。
最终IIA模块的损失为:
用以更新IIA模块,其中:
属性分支的损失为:
用以更新属性分支(加上
L
I
D
−
t
r
a
n
s
f
e
r
L_{ID-transfer}
LID−transfer的目的是让属性分支的信息中包含ID信息,也就是属性分支中是
x
a
t
t
+
I
D
x_{att+ID}
xatt+ID而不是
x
a
t
t
x_{att}
xatt的原因)。注意这里:在源域时,
L
a
t
t
L_{att}
Latt的GT就是真实属性标签,但在目标域时,
L
a
t
t
L_att
Latt其实没有属性标签,于是作者充分利用了
e
I
I
A
e_{IIA}
eIIA中的属性信息,对用
e
I
I
A
e_{IIA}
eIIA做属性预测/分类的结果(式5中的
p
I
I
A
p_{IIA}
pIIA,但只取该软标签,不打成one-hot的硬标签)作为属性伪标签,来给
L
a
t
t
L_{att}
Latt当作GT。如下图:
红色箭头表示拉近距离。
ID分支的损失为:
用来更新ID分支。不过在目标域的时候,就不能更新,只能forward了(没有ID标签)。
于是,整个算法流程如下:
最后就是效果了:
在Market上达到了58的跨域rank@1,其实是很不错的效果了,而且还是第一次在跨域中引入属性,很新颖。
消融:
独立监督指的是两个支路分别训练,然后对两个支路的结果直接concat作为行人特征;联合监督指的是APR那样的。