Unsupervised Person Re-identification: Clustering and Fine-tuning (PUL)阅读笔记
How?
文字解释就是:
现在源域上训练一个CNN,然后到目标域对目标域图像提特征,特征喂给KMeans聚类为指定簇数(K),对其中每簇中每个样本特征离中心样本特征的相似度(距离),相似度大于阈值的保留,小于等于阈值的就剔除掉(噪声,最终不会被采纳,除非这个样本又被拉到新的簇中),这个过程称为select。对于聚类好的结果,又拿回去重新fine-tune之前的CNN,得到的CNN又去目标域提特征聚类,select,再fine-tune,重复迭代。略显暴力,而且一般前几次迭代比较有效,后面涨点不多,不过也应该算是第一篇在目标域聚类打伪标签做跨域的。
在UDAP中,其实是用DBSCAN替换了KMeans+select。
效果:
聚成多少类(K的选择,KMeans一般难点也就是这个):
其实当然是聚成真实类数比较好,这个实验只能说是做做样子,真正到目标域的时候,根本不知道目标域有多少类,而且没有标签,你也不知道现在聚的这个是不是最好的,因此完全也算是靠猜,肯定不可靠,和rerank也是类似的道理(当然rerank贡献还是很大的,只不过到了不知道真实标签的目标域就不能调参了,因为没有标签,你不知道哪个参数是最好的)。
所以一个比较好的方法是,不去用和目标域有关的超参,或者说和目标域有关的超参应该是不那么敏感的,例如如果这里所有的K的性能都差不多,那就比较强了。UDAP中的p也是一个道理,也没有保证这一点,而且很多算法都有这一弊端。
一个现象:
什么意思?
CNN在源域上训练的结果直接放到目标域检索,性能比第一次聚类+Fine-tune之后的效果好,这个现象我最近在做一个比赛的时候也发现了,其原因很简单,因为第一次迭代时很多样本被打了错标签,把CNN反而带偏了。但文章其实说的是圈出来的那个点是第二次迭代,说第一次迭代结果比第二次好。这里不是很懂。
跨域性能: