zoukankan      html  css  js  c++  java
  • GeoDesc: Learning Local Descriptors by Integrating Geometry Constraints

    这篇论文提出了一种新的局部描述子学习方法,有一些点值得学习,记录下来以供参考。文章中涉及了一些3D reconstruction、structure from 的知识,不是很了解,所以理解可能有偏颇。

    一。介绍

    基于网络学习的局部描述子在patch-based benchmark取得了很好的结果,但是在最近image-based 3D reconstruction的benchmarks上面没有得到泛化性能的验证。所以作者提出一种描述子学习方法,可以受益于数据生成数据采样,以及损失函数。这三点一般也作为论文的创新之处。所提出的GeoDesc在重建任务上得到好的结果,并且提供了一个在structure-from-Motion(sfM)应用的指导。一个有效的descriptor应当同时对photometricgeometric变换保持不变性。而基于学习的descriptors虽然在patch-based benchmarks(如HPatches datasets)上取得了很好的结果,但是在image-based datasets(如ETH local feature benchmark)上,基于学习的描述子 表现劣于传统的手工描述子。所以在实际应用场合中,基于学习的descriptors还有很大的提升空间。

    而这种问题出现的原因则可能是缺乏泛化性能,即数据不充足。作者认为之前许多工作在采样这里做了改进,但是还是限于数据来源,例如Brown数据集只有三个sets。所以很容易过拟合。为了解决这个问题,L2Net等应用了额外的正则来影响特征学习,与此同时,LIFT等文想提升数据多样性,从reconstructions of Internet tourism data中来生成训练数据

    此外,缺乏对于实际应用例如sfM的指导,特别的,ratio criterion几乎没人注意或被认为不适于learned descriptors。而ratio criterion在sfM等中可以很好提升,所以该怎么应用ratio criterion呢?

    在本文,提出了一套解决方案,可以利用多视角重建数据中的geometry constraints。特别的强调了数据采样的重要性。在patch-based和image-based的情况下都取得了好的结果。贡献如下:

    • 提出了一种batch reconstructed method模拟pair-wise的matching,来有效的在学习过程中进行采样有用数据
    • 提出一种损失函数来减少过拟合,并通过geometry constraints来提升表现
    • 提供关于ratio cirterion的指导,面向learned descriptors的真实应用

    二。 相关工作

    现有网络因为效率所需、数据语义信息较弱(patch携带语义极少)相对较浅,池化操作相对较少,由L2 pooling或者在L2Net中被移出。尺度信息体现在CS架构,旋转不变性等也有加入。损失函数就不解释了,pair、triplet、structured等都有。其中triplet loss表现更好,但是容易过拟合。

    三。方法

    1. 网络结构采用L2-Net,每个卷积层后面加BN,除了最后一层。对于数据来说,讨论一种实用的pipeline使得自动产生合适的数据来用于descriptor learning。很好奇如何做的这一点?

    1)2D correspondence generation

    类似于LIFT,我们依赖于成功的3D reconstructions来自动生成2D correspondences的真实ground truth。首先,从标准sfM中获取sparse reconstructions,然后通过映射3D点云来生成2D correspondences。一般而言,sfM用来过滤大多数图像中的非匹配关系。尽管有sfM验证,生成的对应仍然含有噪声外点等,尤其对于Internet tourism datasets datasets(这个数据集不了解...见下图1a)。这个数据不太容易轻易被过滤掉错误匹配。为了提高数据质量,在LIFT下一步计算3D Delaunay triangulation来过滤(这个方法也不了解...)。

     

    2)Matching patch generation

    下一步根据2D projection来裁剪roi,这种方法得到的patch大多没有尺度和旋转的差异,因此适于训练。在后面实验中,利用同样方法来实现scale和rotation不变性。

    2.Patch similarity 和Image similarity

    定义Image similarity为对应的平均patch similarity,image similarity对于下文中data sampling很有用。

    3. Batch construction

    对于descripors学习,已有方法利用pair或triplet来作为输入。而收敛速度和有用数据非常相关。这里的有用数据是指学习过程中产生有意义的损失。然而有效采样这种数据一般而言是有挑战性的,因为可组合的pair或triplet之多

    因此,困难挖掘anchor swap被相继提出,此外,有效的batch construction也用来在loss func中对比参考patch与所有batch里的samples。

    受之前工作启发,我们提出一个新奇的batch construction方法,依赖于sfM中的geometry constraints来产生有用数据。具体操作是:给定一对image,提取一个匹配集合:

    N1是集合尺寸,x对为通过sfM验证的匹配patch,一个训练batch在N2个匹配集合中构建。

    这种方法相比于L2Net和HardNet来说,并非在整个database中随机选取。这种方法产生更加困难的样本,对于学习更有挑战性。如图2d所示,该方法构造的patch在一个batch中包含许多相似的pattern。而这种训练样本是有好处的。同时为了效率,作者剔除了那些长得非常相似的样本对(简单正样本!!!)

    4. Loss function

    由两项组成:structured loss和geometric loss

    样本类似hardnet也是输入只有匹配对!

    1)structured loss

    HardNet中基于“hardest-in-batch”策略,并且显示了距离margin比L2Net中的对数似然更加有效。然而我们注意到将这种策略直接用到我们的自己的批量数据会产生过拟合。我们认为这是太强的约束导致的。在这种策略中,损失根据样本中产生最大损失的样本来计算(产生更大损失的样本理应得到更大的关注),一个大的margin用来将非匹配对距离推离匹配对。在我们自己组建的批量数据中,已经有效的采样了一些视觉上相似的困难样本,这时再采用一个大的margin将是不合适的,阻塞学习。一个简单的解决方案就是减小margin的值,然而这么做将损害性能!

    为了避免上述的限制,并且更好的利用我们的batch data,我们提出如下的loss:首先计算一个match set的structured loss,给定正则的特征F1和F2,得到cosine相似度矩阵S,然后得到如下loss:

    alpha属于0-1为距离比,将不匹配对推离匹配对。最终我们计算美分match set的损失均值作为该batch的loss。

    这个loss与hardnet loss有三点不同:1.采用余弦相似度而非欧式距离,计算更高效。2.利用distance ratio margin作为自适应阈值来减少过拟合而不是固定的距离margin(hardnet中设为1)。3.计算了每个损失项的均值而非最大(hardest-in-batch)来配合所提出的batch construction。

    我的理解

    关于这个损失函数,我认为对于一个batch(作者自己构建的困难匹配对)中所有的匹配样本对来说,求得一个相似度矩阵S,那么类似于hardnet,这个矩阵的对角线为匹配对,非对角线为不匹配对。而相似度矩阵中的元素值范围都在-1到1之间,即cos范围。所以我们希望所有的正样本的相似度尽可能趋近于1,负样本的相似度尽可能趋近于-1。再者,与hardnet不同的是,上面的loss中对于每一对负样本对都与两个正样本对来求损失。也就是说最终的负样本计算了N(N-1)次,而正样本计算了2N次。我认为这与正样本存在更多困难样本有关。而hardnet中正负样本对计算次数都为N,这是不是说明正样本多次贡献对于优化更加有利?

    对于所有正负样本而言,一般论文中都认为负样本组合数量太多,从而简单负样本也太多,从而需要挖掘困难负样本,那么正样本呢?随意丢过来一对正样本,由于在一定角度或偏移范围内才为正样本对,这个度我认为人眼很难把握,那么机器也需要大量样本训练才能区分,所以我认为好的训练样本一定是困难的正样本+困难的负样本。并且按照本文的思路,正样本应该略侧重一些?

    只训练困难样本就够了?不,在训练时只训练困难样本容易过拟合,泛化性能降低。所以作者的margin利用了自适应设置。

    下图是我自己可视化的正负匹配样本对的分布图: 

                      

                                            3epoch                                                                                                           15epoch

    上图是我可视化的一个batch(128)个正负匹配对。(采用norm后的128维欧式距离度量,所以距离最小值为0,最大为1.414),a是匹配样本,b是非匹配样本。可以看到匹配样本分布较为分散,简单、一般、困难的正样本都有,而优化了一定程度后分布变化很小,优化很困难,无法都集中在距离小的区域。而负样本很容易优化,大多都集中在1.0以上。 所以我认为正样本是应该多次优化。理想的分布应当是两个正太分布均值相距很远,而方差都比较小。

    作者又提出了另一个loss来略提升性能:

    2)Geometric loss

    尽管上面的loss可以使得正对与负对区分开来。但是并未明确保证自己的类内间距足够小。所以作者附加了一个pair-wise loss,但是直接利用会使结果恶化:a risk of positive collapse and overfitting。所以作者根据相似度的不同程度为损失函数设计了一个分段操作:

    可以看到相似度大的图像块的阈值相对而言也大,并没有令所有块的相似度都大于某个固定的阈值。

    此外,可知第二个loss并非主loss,所以加权0.2。loss1中的alpha取值为0.4。 match set=64, batch size=12。

    四。 实验

    作者介绍了三个数据集。我只对HPatches略有了解...

    1)HPatches benchmark

    这个数据即包含了3个任务:patch verification、patch matching、patch retrieval。不同程度的几何扰动加载形成了EASY,HARD,TOUGH三种patch groups。在验证任务中,两个子任务基于负对是否在同一sequence或否(SAMESEQ, DIFFSEQ)采样来区分。在匹配任务中,两个子任务定义为是否主要影响为视角view或光照illumination。所有任务采用mAP来判定。结果:

    2) Heinly benchmark

    不同于HPatches是在image patches上做实验,此benchmark评估pair-wise image匹配根据不同类型的photometric或者geometric变化。说白了就是基于image而非patch!其他没有什么。

    3) ETH local feature benchmark

    此数据关注于image-based 3D重建任务。

    五。Practical Guidelines

    Ratio criterion:对比最近邻和次近邻的距离,如果前者比后者小于一定的阈值ratio,则认定为是match。对于sfM任务,ratio criterion提高了整个匹配质量,RANSAC效率。对于sfM的应用有了很好的提高。

  • 相关阅读:
    gorm使用小结
    golang 输入输出
    nginx 命令和配置
    设计模式
    并发
    Java教程
    Spring实战
    第12章 高级数据结构及其实现
    第10章 算法设计技巧
    第9章 图论算法
  • 原文地址:https://www.cnblogs.com/king-lps/p/9863649.html
Copyright © 2011-2022 走看看