美文网首页
Re:从零开始的行人重识别(四)

Re:从零开始的行人重识别(四)

作者: Gary_Liu | 来源:发表于2019-12-09 13:21 被阅读0次

    度量学习之三元组损失

    Schroff F, Kalenichenko D, Philbin J. Facenet: A unified embedding for face recognition and clustering[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 815-823.

    这篇论文虽然是是用在人脸识别上的,但是行人重识别中的一个影响力十分大损失函数——triplet loss就是在这篇论文中提出的,之前用到的对比损失(contrastive loss)能够起到缩小类内距离,增大类间距离的作用,从而通过距离判断两类相似与否。但是contrastive loss有一个痛点,就是我们无法约束类间距离和类内距离的大小,虽然缩小了类内距离,也扩大了类间距离,但是类内距离仍然可能比类间距离大,这就是contrastive loss的局限性。由此作者想到增加一个类内距离比类间距离小的约束,于是三元组诞生了,如下图所示:

    Triplet Loss

    这里的Anchor指的就是我们的查询图像,Positive是与Anchor一类的图像,Negative是与Anchor不同类的图像,将这三种图像通过CNN提取得到的特征计算欧式距离,放入损失函数中进行计算,就得到了我们的triplet loss:
    L = \sum\limits_{i}^{N}{[{\left\| f(x_{i}^{a})-f(x_{i}^{p}) \right \|}_{2}^{2}-{\left\| f(x\_{i}^{a})-f(x_{i}^{n}) \right \|}_{2}^{2} + \alpha ]}_{+}

    值得注意这里的loss设置了一个超参数\alpha,这个参数的作用是要让类内距离不止比类间距离小,还要小一个\alpha的距离。

    这个损失函数的基本思想是比较浅显易懂的,但是要让这个损失函数运作起来才是重点。在预训练好的数据集上,由于大多数的类内图像的距离就已经比类间图像的距离小了,因此损失值计算得到的就是0,则模型参数就不会发生更新,如果采用暴力的方式穷举所有可能,那么会浪费大量的算力在无用的计算上,这里的计算复杂度大致为O(n^5),所以是无法穷举的,那么这里作者提出一个Generate triplets Online的方法。也就是在每一批数据中找到一个Positive使之与Anchor之间的距离最大同时再找到一个Negative使之与Anchor之间的距离最小,这样的三元组往往是有效的。

    最后作者还讨论了一下各种因素对模型的影响:

    图像质量:

    Image Quality

    嵌入维度:

    Embedding Dimensionality

    数据集大小:

    Training Data Size

    可以从上图得知嵌入维度在128时效果最好,除此之外,图像质量(尺寸)和数据集大小都是越大好。

    相关文章

      网友评论

          本文标题:Re:从零开始的行人重识别(四)

          本文链接:https://www.haomeiwen.com/subject/upubgctx.html