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简单有效
首先:
如上图所示,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。
形式:
可以看出:d(ai , pi)惩罚正确匹配之间的不相似性,− min (d(ai , pjmin ), d(akmin , pi))惩罚错误匹配之间的相似性
网络结构(和l2种的网络结构一样):
结果:
上表表示的是recall95%(匹配上95%的patch)的时候的匹配中的错误匹配率。
耗时:由于依赖于detector+blob,因此耗时应该不小
总结:
-
训练数据(使用的公开室外的path数据。从3d重建中获取,都是一个个32x32的path)
-
scale(网络中没有scale的概念,但是依赖于detector,如果使用带scale的detector训练那么就是有scale的)
-
oritation(网络中没有scale的概念,但是依赖于detector,如果使用带scale的detector训练那么就是有scale的)
-
wild-base(看训练数据有)
-
detector & descriptor(输入path,因此需要先DOG,在blob,最后输入网络)
-
网络的输入输出(输入32x32path,输出128维度的单位向量)