Working hard to know your neighbor’s margins: Local descriptor learning loss(2018)(三)

主要是在L2-NET上的改进,在L2-NET中中间feature map层以及最终的feature维度上都进行了监督,容易造成过拟合,因此本文做了优化

主要贡献点:1. End-to-end的训练模式。

                      2. loss简单有效

 

首先:

Working hard to know your neighbor’s margins: Local descriptor learning loss(2018)(三)

如上图所示,A和P表示两个匹配集合, 例如a1和p1是一个gt中的匹配, d(a1,p1)是两个匹配之间的descriptor之间的距离。

本文中目标:尽量缩小正确匹配的feature之间的距离,尽量增大错误匹配之间的距离,并且形成一套端到端的训练模式。

本文解决方式: 不使用L2-NET中对最终的距离矩阵每一个维度进行操作约束,这里使用triplet loss 。

triplet loss: 假设在P集合中和a1次近邻的是pi,那么计算d1 = d(a1,pi),假设在A集合中和p1次近邻的是ai,那么计算d2 = d(ai, p1

                    选择min(d1,d2)和a1 p1 这样构成triplet loss。

形式:Working hard to know your neighbor’s margins: Local descriptor learning loss(2018)(三)

            可以看出:d(ai , pi)惩罚正确匹配之间的不相似性,− min (d(ai , pjmin ), d(akmin , pi))惩罚错误匹配之间的相似性

 

网络结构(和l2种的网络结构一样):

    Working hard to know your neighbor’s margins: Local descriptor learning loss(2018)(三)

 

结果:

            Working hard to know your neighbor’s margins: Local descriptor learning loss(2018)(三)

           上表表示的是recall95%(匹配上95%的patch)的时候的匹配中的错误匹配率。

耗时:由于依赖于detector+blob,因此耗时应该不小

总结:

  1. 训练数据(使用的公开室外的path数据。从3d重建中获取,都是一个个32x32的path)

  2. scale(网络中没有scale的概念,但是依赖于detector,如果使用带scale的detector训练那么就是有scale的)

  3. oritation(网络中没有scale的概念,但是依赖于detector,如果使用带scale的detector训练那么就是有scale的)

  4. wild-base(看训练数据有)

  5. detector & descriptor(输入path,因此需要先DOG,在blob,最后输入网络)

  6. 网络的输入输出(输入32x32path,输出128维度的单位向量)