Unsupervised Person Re-identification: Clustering and Fine-tuning


论文:Unsupervised Person Re-identification: Clustering and Fine-tuning
https://arxiv.org/pdf/1705.10444v2.pdf
年份:TOMM2018
代码:https://github.com/hehefan/Unsupervised-Person-Re-identification-Clustering-and-Fine-tuning
这是在Tensorflow(Python)的Keras中实现的。
Unsupervised Person Re-identification: Clustering and Fine-tuning
本文主要用了self-paced learning(自步学习)方法,即:先学简单地再学难的。
关于self-paced learning(自步学习)方法,我查了一下,觉得这篇博客较为清晰,供大家参考https://blog.csdn.net/weixin_37805505/article/details/79144854

1.解决的问题:

(1)用无标签数据(或 其他域有标签数据及无标签数据)训练模型。

(2)把K-means和CNN结合,减轻了cluster太过noisy的问题。

(3)用自步学习更加流畅地完成模型训练。

2.网络主要思想:

1.用有标签数据首先预训练一个模型。
2.无标签数据经模型会有伪标签,还能选出可靠数据集。
3.用可靠数据集再从头训练模型,存起来。下一次,无标签数据再取上一次存起来的模型继续聚类。
所以,其实就一个模型。只不过每次训练数据都会升级就是了。

3.文章的参数:

N没有标签的数据集的裁剪的人物数量,其ID为K
Unsupervised Person Re-identification: Clustering and Fine-tuning
由于数据没有标签,所以将Unsupervised Person Re-identification: Clustering and Fine-tuning
作为潜在变量。因此,我们的PIL属于潜在变量模型。
令vi为样本xi的选择指标。 如果vi=1,则选择xi作为可靠样本; 否则,在微调原始模型时将xi丢弃。
Unsupervised Person Re-identification: Clustering and Fine-tuning表示为选择指示向量
Unsupervised Person Re-identification: Clustering and Fine-tuning
:作为标记向量。
Unsupervised Person Re-identification: Clustering and Fine-tuning:表示CNN模型,θ为参数。
在φ(·;θ)之后,生成一维特征向量,将其输入到由w参数化的分类器中。 在分类模型下同时优化θ和w。

作者将想法表述为交替优化以下三个问题:
Unsupervised Person Re-identification: Clustering and Fine-tuning
:类似均方差损失。使特征离聚类中心越来越近
(1)式是将一张图片使用CNN提取特征后和所有聚类的中心点Ck计算距离,选择距离最小的中心点Ck,把K作为它的预测标签。对于训练集N张图片每次迭代时,聚类完成后都要进行一次这样的标签预测
Unsupervised Person Re-identification: Clustering and Fine-tuning
:使标签样本近一步离聚类中心越来越近。
(2)式是将和聚类中心点Ck距离较近的样本Vi设为1,表示将其作为信赖样本,下次迭代中用来更新CNN。这里是一个trade-off,只有和Ck的(cosine)距离大于lambda时才会被选中(因为越相似cosine距离越大,所以lambda越小选的越多)。
Unsupervised Person Re-identification: Clustering and Fine-tuning
(3)式是使用训练集所有标注为信赖样本的数据来训练更新CNN。(普通的交叉熵损失)
其中c_k: 聚类的中心

lambda: 选择“可靠”的门槛

L: 损失函数。

4.本文算法:

综上,作者的方法算法流程如下:
Unsupervised Person Re-identification: Clustering and Fine-tuning
首先设置信赖阈值lambda(作者通过实验表明0.85时效果较好),聚类类数K(根据数据集的ID数确定),初始化CNN (作者使用的是ResNet-50,然后在另一个全监督数据集上fine tune。如工作数据集是无监督的Market-1501,则在全监督的CUHK上fine tune)。
当聚类后每次选择样本数未收敛到一个固定值时,对于每次迭代:

1、先随机初始化分类层权重W

2、然后对训练集的N个样本使用CNN提取特征向量fi

3、然后对提取的特征向量进行聚类,得到每个样本的标签yi和聚类中心点Ck

4、把聚类中心点Ck设置为距离原中心点最近的特征向量fi (这样就使得每类必有一个距离为0的样本,一定会被选中,保证了每至少有一个信赖样本)

5、对所有的特征向量fi进行l2正则(使得向量平方和为1)。

6、对所有的类别K类,从样本1到N中遍历每个样本,当样本特征和这类中心点的距离大于lambda时将Vi设为1,表示选中为信赖样本。反之Vi设为0,表示未选中为信赖样本(根据选择样本数量是否增加判断是否收敛,若未收敛则继续迭代。否则退出迭代,CNN训练完毕)

7、用所有选中的信赖样本fine tune CNN
参考:https://blog.csdn.net/baidu_39622935/article/details/82956425