Human-in-the-Loop Person Re-iden

作者: __Vision | 来源:发表于2017-03-24 01:27 被阅读0次

    最近在看person re-identification相关的paper,之后应该会有一系列以eccv 2016 person re-identification为主题相关的笔记。

    这是第一篇。

    主要思想之一(HVIL)

    假设有一组probe set,有一组gallery set,HVIL(human verification incremental learning) 的主要做法就是,每给出一张probe,用模型对gallery set里的图片进行rank,然后把rank list给user看,user从中找出true match(就是和probe属于同一个人的照片)并且给出以下三个值中的一个{true match, similar, dissimilar} ,true match 代表模型给出的top rank 和 probe是匹配的(属于同一个人),similar 代表模型给出的top rank 和probe有点像,dissimilar代表一点也不像。user给出这两个反馈信息后,model就进行参数更新,并online地再次给出rank list,user再给出上述的两个反馈信息。如此往复,直到user给出的第二个信息是true match 或者 循环的次数达到了预先设定的次数(这篇论文中设定3次)。对每个probe都进行这样的操作。这样训练完以后再进行testing。

    这样做有这样几个好处:

    • 传统的人工标注,需要user在看到一个probe后在所有gallery中寻找匹配的identity,gallery分布比较随机,你说不定翻遍整个gallery set才找到true match。这个方法的话,随着模型的迭代修正,会把gallery set 按照rank score排列,这样越到后面,就越可能在很靠前的位置找到true match,减轻劳动力。
    • 除了像传统标注方法给出true match以外,还给出{true match, similar, dissimilar}三个值中的一个,有利于模型的自我修正。
    • 现在reID存在的一个问题就是,训练数据少,但是待测试的数据太多,在实际场景是更是如此,你想一个24小时工作的摄像头一天能产生多少数据。。。所以传统的方法,即在训练数据上训练,再把训练好的模型做testing,是unscalable的,但是这个方法,不需要传统的预标注的数据,如果testing数据变多了,那么再在原来的基础上user再继续训练模型就好了。

    具体做法

    计算error

    前面已经说了,user给出两个反馈信息,一个是true match ,另一个是{true match, similar, dissimilar}三个值中的一个,然后就要算模型的error了,


    1式中,下面这一项代表模型给出的rank scores,其中x^p是给定的probe的特征(可以是color LBP等),x^g是gallery set 中的对给定probe的true match的特征。


    2式中,I(·)是指示函数,意思就是·如果成立,那函数值为1,·如果不成立,那函数值为0。1式等号右边的意思就是把所有rank score高于true match的score的数量统计出来(理想状况下,这些gallery的分数不应该高于true match)(注:后来想到,最后对结果进行评价的时候,有个前5hit 前10hit 前20hit之类的,所以这里应该是,如果正确答案在分数top5 top10 top20的list内,就算true match)

    3式中,y就是{true match, similar, dissimilar}三个值中的一个,如果y是true match或者 similar,loss function就是上面那个式子,如果y是dissimilar,那就用下面那个式子。此外,如果y是true match, 那么αi取1/i(比较陡峭),如果y是similar或者dissimilar,那么αi取1/(ng - 1)(比较平缓),这样做可以让true match在rank list 中迅速上升,让negatives缓慢下降。虽然我不懂为啥要这样干,但是作者说这样做的实际表现很好,姑且就信了吧。

    更新模型参数

    根据user的反馈得到error 后,就要实时更新模型参数了

    f(·)是负的Mahalanobis distance metric,这个函数值越大,表示probe和gallery越接近。越小表示越远,所以其实就是我上面说的rank score。

    5式是object function,其中ΔF是Bregman divergence measure,你也可以看做是一种距离的度量。你可以把5式理解为,当很多次循环后,如果M和Mt-1已经近似相同了(收敛),那么训练目标也就达到了。其实5式后面那个我也不是很理解,这里把原文摘录如下,有谁理解的可以交流一下:


    (注:我已经搞懂上面的意思了,我上面说的那段话有错误,5式才是我们的目标函数,5式的目的是为了平稳的更新M,5式左侧的三角形式子是Bregman divergence measure,你也可以看做是一种距离的度量,右式是loss,左侧式子的意思是为了让M的更新速度小一点,右式的意思是要让loss向着变小的方向移动,两者相互调节)

    但是按照3式中的loss function,这个Mt是离散的,所以不可微,作者做了一些处理,使它变得可微(用一个连续的上界来估计loss),如6式:

    其中:

    上面那部分我没有细读,所以直接摘录了。
    后面作者为了加速整个参数更新,又对6式做了处理,这里不摘录了。

    整个流程总结如下

    主要思想之二 (RMEL)

    上面的训练过程中产生了一系列副产品,就是每次得到的模型Mt(随着t变化,有好几个从弱到强的模型)。给出一个probe-gallery pair ,作者把这几个模型给出的结果ensemble起来,作为probe和gallery之间的距离:

    最终的ranking function设计如下:

    所以还要学习W这个参数矩阵。
    学习的目标函数如下:

    F星号是理想的W,Fens是现有的W,学习的目标就是最小化两者的差距(理想的W,在i和j相同时应该让fens为0,在i和j不同时让f^ens为-1,所以这个F星号是可以得到的。)。13式右边最后那一项也是一个正则项这个R(w)可以取很多类型,比如L1 L2 或者matrix trace,作者在这里取成这样:

    这么做的目的是为了重重惩罚(severe penalties)下面这种情况:这个pair是match的,但是分数很低。f值是负的(从12式可以看出),如果分数很低,那么f值在取相反数,那这个R值就很大,惩罚就大。

    13式是个凸函数,可以比较轻易的做优化。这一步里训练数据用的是之前人工参与的时候的true pairs。

    结合上述两个思想就能把模型训练出来。

    实验结果

    以上。

    相关文章

      网友评论

        本文标题:Human-in-the-Loop Person Re-iden

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