在读这篇论文后,参考了一些博客对于本篇论文的理解。
总体来说,个人觉得有推荐价值的博客有二:
欢迎给出批评指正,有问题可以随时联系我:
qq邮箱:645574541@qq.com
First
http://www.cnblogs.com/fourseas/p/6659423.html
这篇博客是我师兄对这篇论文的理解,最重要的是,尽管这篇论文的code开源了,但是最核心的TDL部分代码是加密的。师兄根据作者已给出的代码,完成了TDL部分single-shot的代码,并在修正TDL中multi-shot的代码。近期会在以上博客中公布。
Second
http://blog.csdn.net/lv26230418/article/details/51172594
这篇博客阐述了对于与本篇论文相关工作的介绍,并且推荐了Person R-id方面的大牛。
其实本篇论文的算法流程不算复杂,这里不作赘述。本文的重点是介绍一下TDL的损失函数,因为事实发现,正是由于表达方式的简洁,对于损失函数的理解很容易出现偏差。对于single-shot的部分,还可能误打误撞;但对于multi-shot部分,则会出现问题,在此做下记录。
首先,在论文中的3.1.部分,给出了定义样本类间距离的公式:
这里的min之前给了我很大的误导。我误以为是求出类间的最小距离,然后对所有的类间距离求和。但这样的理解其实是 错误的。通过交流,才注意到,这里的 min是加在总的求和公式之前的。也就是说, 正确的理解是: 先求出标签均为i的样本(即位于同一类i中的样本)间的距离之和,得到类i的类内距离。同时也按照这个方法,求出其他类的类内距离。并且对所有的类内距离求和。至于前面的min,并不是指求出最小的类内距离,而是指 在TDL迭代过程中,通过更新M矩阵,不断降低总的类内距离,并在迭代结束时,使得类内距离之和取得最小。
现在给出论文中loss function的公式:
公式中的第一项即是刚刚解释的类内距离的求和值。
那么公式第二项中的子项,见下式:
是指求出某一类中的第i个样本,与 其他所有类中的 每一个样本间的距离,并且找出最小距离,这个最小距离即是标签i的样本对应的类间最小距离。并存储下与第i个样本距离最小的样本具有的标签k(这个具有标签k的样本位于其他的类中)。
因此,每个类中的每一个样本,均有一个与其距离最近的其他类中的样本。存储下两者在各自类中的标签以及所属类的标号。
公式第二项中的max部分:
则是为了求出
和
两者间的最大值, 并不是为了求出 类间最大距离,也不是我先前理解的为了确定标签j。标签j不需要确定。
第二项前面的求和公式,和第一项的求和公式等效,均是为了用每一个类中的两两样本代入公式进行计算。这里从始至终都不存在“求出类内的最小值或者最大值”这种说法,相反地,都是要用到类内所有样本两两之间的距离。