一天建成罗马 translated from 《building Rome in a Day》

2.系统设计

我们的系统在一组计算机(节点)上运行,其中一个节点被指定为主节点。 主节点负责各种作业调度决策。

在本节中,我们描述了系统的详细设计,它可以自然分为三个不同的阶段:(1)预处理§2.1,(2)匹配§2.2和(3)几何估计§2.4。

2.1 预处理和特征提取

我们假设这些图像在中央商店中可用,并以固定大小的块为单位按需将其分发到群集节点。这会自动执行负载平衡,更强大的节点接收更多图像进行处理。

这是唯一需要中央文件服务器的阶段。系统的其余部分在不使用共享存储的情况下运行。这样做是为了使我们能够独立于我们的匹配和重建实验从互联网上下载图像。对于生产用途而言,可以在匹配和重建过程开始时,让每个群集节点都可以直接抓取Internet上的图像。

在每个节点上,我们首先验证图像文件是否可读,有效的图像。然后,我们提取EXIF标签(如果存在),并记录焦距。我们还对大于200万像素的图像进行缩减采样,保留它们的纵横比并缩放它们的焦距。图像然后转换为灰度,并从中提取SIFT特征[10]。由于Andrea Vedaldi的SIFT ++算法的的速度和灵活的接口[20],我们采用了此算法。在这个阶段结束时,整组图像被分割成不相交的集合,每个节点一个。每个节点都拥有与其分区关联的图像和SIFT特征。

2.2 图像匹配

匹配两幅图像时的关键计算任务是利用兴趣点的光度匹配和使用基本矩阵和本质矩阵的鲁棒性估计对这些匹配进行几何校验。但是两幅图像之间所有特征的详尽匹配过于昂贵,然而用近似相邻搜索取得的出色的结果已经有所报导。我们使用ANN库[3]来匹配SIFT特征。对于每一对图像,将其中一个图像的特征插入到k-d树中,并将来自另一个图像的特征用作查询。对于每个查询,我们考虑最近的两个邻居,其中通过Lowe的比率测试的配对图像被接受[10]。我们使用基于优先级队列的搜索方法,最大访问次数为200次。在我们的实践中,这些参数在计算成本和匹配精度之间提供了良好的折中。然后,根据EXIF标签中焦距信息的可用性,使用基于RANSAC的基本矩阵或本质矩阵[18]估算修正并验证近似近邻搜索所得的匹配。

这两个操作构成了我们匹配引擎的计算内核。

不幸的是,即使对上述匹配过程进行了优化实施,匹配集合中所有图像对也是不现实的。对于10万张图像的集合来说,可以转化为5,000,000,000两两比较,在这样的情况下即使使用500个内核以每个内核每秒10个图像的速度运行也需要约11.5天才能匹配。进一步来说,这还没有考虑所有核心都需要访问所有图像的所有SIFT特征数据的网络传输。

即使我们能够进行所有这些配对匹配,这也会浪费计算量,因为绝大多数图像对不匹配。这是从一组与城市名称这样的广泛标签相关联的图像中预期的。因此,我们必须小心选择系统花费时间匹配的图像对。

基于最近的有效目标检测工作[15,11,5,13],我们使用多阶段匹配方案。每个阶段都包含一个提案步骤和一个验证步骤。在提案步骤中,系统确定一组图像对,预计它们将共享常见的场景元素。在验证步骤中,对这些图像对执行详细的特征匹配。以这种方式获得的匹配然后通知下一个建议步骤。

在我们的系统中,我们使用两种方法来生成提案:基于词汇树的整体图像相似度§2.2.1和拓展查询§2.2.4。验证阶段在§2.2.2中描述。图1显示了整个匹配流程的系统图。

2.2.1词汇树提案

受文本检索启发的方法已经在对象和图像检索问题上取得了巨大的成功。这些方法基于将图像以文字包的形式再现,其中文字是通过量化图像特征而获得的。我们使用基于词汇树的方法[11],其中使用分层k-均值树来量化特征描述符。 (关于如何使用测试图像的小集合建立词汇树的细节,请参阅第3节)。这些量化指标被聚合到图像中的所有特征上以获得图像的词频(TF)矢量,以及文档频率( DF)矢量用于图像的集合(图1a-e)。文档频率矢量跨节点聚集成单个矢量,并在整个集群中传播。每个节点对它拥有的术语频率向量进行归一化处理,以获得该节点的TFIDF矩阵。这些每个节点的TFIDF矩阵通过网络传播,以便每个节点可以计算其TFIDF矢量与其余TFIDF矢量之间的内积。实际上,这是TFIDF向量矩阵与其自身的分布式乘积,但每个节点只计算块

的行相对应的一组图像。 对于每幅图像,确定最高得分的k1 + k2图像,其中第一张k1图像用于初始验证阶段,另外的k2图像用于放大连接成分(见下文)。

我们的系统与Nister和Stewenius [11]的系统不同,因为他们的系统有一个固定的数据库,它们匹配传入的图像。 因此,他们可以将数据库存储在词汇树本身中,并评估图像的匹配分数。 在我们的例子中,查询集与数据库相同,并且在功能编码时不可用。 因此,我们必须有一个单独的矩阵乘法阶段来找到最匹配的图像。

2.2.2 验证和详细匹配

下一步是验证候选图像匹配,然后找到匹配图像之间的一组详细匹配。如果图像全部位于单个机器上,验证提出的匹配图像对的任务将是通过图像对运行的简单问题,可能需要注意验证次序的执行次序,以便尽量减少磁盘I / O。但是,在我们的案例中,图像及其特征描述符分布在整个群集中。因此,要求节点匹配图像对(i,j)需要它从集群的其他两个节点获取图像特征。这是不可取的,因为网络传输速度和本地磁盘传输之间存在很大差异。此外,这为三个节点创建工作。因此,图像对应该以一种尊重数据局部性的方式在整个网络上分布,并尽量减少网络传输量(图1f-g)。

我们用一些方法进行了实验,结果令人惊讶。我们最初试图在任何验证完成之前优化网络传输。在这种设置中,一旦主节点具有需要验证的所有图像对,它就会建立一个连接共享图像的图像对的图形。使用MeTiS [7],该图被分割成与计算节点一样多的块。然后通过解决线性分配问题来将分区与计算节点相匹配,从而最大限度地减少向每个节点发送所需文件所需的网络传输数量。

这个算法适用于小问题大小,但随着问题规模的增加,其性能会下降。我们假设所有图像对之间的详细匹配采用相同的恒定时间是错误的:一些节点提前完成并且闲置长达一个小时。

我们尝试的第二个想法是将图形过度分割成小块,并按需将它们分组到群集节点。当一个节点请求另一块工作时,网络传输最少的块被分配给它。这个策略实现了更好的负载平衡,但是规模更大问题越来越大,我们需要划分的图形变得非常庞大,分区本身成为瓶颈。

给出最佳结果的方法是使用简单的贪心bin-packing算法(其中每个bin表示发送到节点的作业集),其工作方式如下。主节点维护每个节点上的图像列表。当一个节点要求工作时,它会遍历可用映像对列表,如果它们不需要任何网络传输,则将它们添加到该映像对中,直到该映像对已满或者不再有要添加的映像对为止。然后,它选择一个图像(特征向量列表)以传送到节点,选择图像以允许它将最大数量的图像对添加到该箱中。重复此过程,直到箱满。该算法有一个缺点:它可能需要多次扫描所有需要匹配的图像对。对于大问题,工作计划可能成为瓶颈。一个简单的解决方案是一次只考虑一部分工作,而不是试图全局优化。这种窗口化的方法在实践中效果很好,我们所有的实验都是用这种方法运行的。

验证图像对是一个两步过程,包括特征描述符之间的光度匹配,以及根据相机校准信息的可用性对基本或基本矩阵进行的稳健估计。在基本矩阵的估计成功的情况下,两个摄像机的观察方向之间存在足够的角度,并且匹配的数量超过阈值,则我们进行完整的欧几里得两视角重建并存储它。这些信息用于后期(见§2.4),以减少重建问题的规模。

2.2.3 连接关联组件

在这个阶段,如果在它们之间找到匹配的特征,考虑在边缘连接两个图像的一组图像上的图。我们称之为匹配图。为了获得尽可能全面的重构,我们需要此图中连接组件的数量最少。为此,我们进一步使用词汇树中的提案尝试连接此图中的各种连接组件。对于每个图像,我们考虑由词汇树建议的下一个k2图像。从这些,我们验证跨越两个不同连接组件的图像对(图1h-i)。我们仅对尺寸为2或更大的图像进行此操作。因此,有效地丢弃了不匹配其顶部k1个提议的匹配中的任何一个的图像。同样,得到的图像对需要进行详细的特征匹配。图2说明了这一点。请注意,在第一轮之后,匹配图有两个连接的组件,它们在第二轮匹配后连接。

2.2.4拓展查询

在如上所述进行了两轮匹配之后,我们有一个匹配图,通常密度不足以可靠地产生良好的重建。为了弥补这一点,我们使用文本和文档检索研究中的另一个想法 - 查询扩展[5]。

在最简单的形式中,查询扩展是通过首先查找与用户查询匹配的文档,然后使用它们再次查询数据库来完成的,从而扩展了初始查询。系统返回的结果是这两个查询的组合。实质上,如果我们要在文档集上定义一个图形,并通过边连接相似的文档,并将查询视为文档,则查询扩展相当于查找查询两个步骤内的所有顶点顶点。

在我们的系统中,我们考虑图像匹配图,其中图像i和j如果它们具有共同的特征的最小数目特征,则连接。现在,如果图像i连接到图像j并且图像j连接到图像k,我们执行详细的匹配以检查图像j是否匹配图像k。这个过程可以重复固定的次数,或者直到匹配图收敛。

迭代循环查询扩展时需要注意的一点是漂移。辅助查询的结果可能会迅速偏离原始查询。这在我们的系统中不是问题,因为查询扩展图像对在匹配图中的边缘连接之前需要经过详细的几何验证。

2.3 初代追踪

匹配过程的最后一步是将所有成对匹配信息组合起来,以便在图像之间生成一致的轨迹,即在单个特征匹配图(特征图)中查找和标记所有连接的组件。由于匹配信息本地存储在计算节点上,轨道生成过程分两个阶段进行(图1k-m)。首先,每个节点根据本地可用的所有匹配数据生成轨道。这些数据收集在主节点上,然后通过网络广播到所有节点。观察匹配图中每个连接组件的轨迹可以独立处理。轨道生成随后继续为每个计算节点分配一个需要生成轨道的连接组件。当我们基于共享特征合并轨道时,可以生成不一致轨道,其中同一图像中的两个特征点属于同一轨道。在这种情况下,我们会放弃赛道上的违规点。

一旦生成了轨道,下一步就是从相应的图像特征文件中提取轨道中出现的特征点的二维坐标。我们还为每个这样的特征点提取像素颜色,稍后将其用于渲染具有平均值的3D点与其关联的特征点的颜色。 再次,这个过程分两步进行。 给定每个分量的轨迹,每个节点从SIFT和它拥有的图像文件中提取特征点坐标和点颜色。 这些数据是通过网络收集和广播的,在每个连接组件的基础上进行处理。

2.4 物理估计

一旦轨迹生成后,下一步是在匹配图的每个连接组件上运行结构运动(SfM),以恢复每个相机的姿态和每个轨道的3D位置。大多数用于无序照片集的SfM系统是渐进式的,首先是一个小的重建,然后一次生成几张图像,三角化新的点,并进行一轮或多轮非线性最小二乘优化(称为束调整[19]),以尽量减少重投影误差。重复此过程,直到不再添加摄像机。但是,由于我们收藏的规模,对所有照片一次采用这种渐进方式是不切实际的。上述增量重建过程中隐含着假设,即所有图像对重建的覆盖范围和准确度的影响差不多。互联网照片收集本质上是多余的 - 很多照片是从附近的角度拍摄的,处理所有这些照片并不一定会增加重建。因此,最好找到并重建拍摄匹配图和场景几何图形的基本连通性的照片的最小子集[8,17]。完成此操作后,我们可以使用姿态估计重新添加剩余的所有图像,对所有剩余的点进行三角测量,然后做一个最终包调整以改善SfM估计。

为了找到这个最小集合,我们使用[17]的骨架集合算法,该算法计算一组跨度的图像集,保留图像图中重要的连通性信息(例如大型循环)。在[17]中,为每对具有已知焦距的匹配图像计算两帧重建。在我们的系统中,这些成对重建是作为并行匹配的一部分计算的处理。 一旦计算了骨架集,我们就使用增量算法[16]来估计每个结果组件的SfM参数。 骨架集算法通常在弱连接边界上分解连接的组件,从而产生更大的组件集合。

2.4.1 束调整

将SFM问题的规模缩小到骨架集后,重构过程中的主要瓶颈是重投影误差或束调整(BA)的非线性最小化。公开发布的性能最好的BA软件是由Lourakis&Argyros [9]提供的Sparse Bundle Adjustment(SBA)。其高性能的关键在于使用所谓的Schur补充技巧[19]来减小Levenberg-Marquardt每次迭代需要解决的线性系统的大小(也称为正规方程) (LM)算法。该线性系统的大小取决于3D点和相机参数,而Schur补充的大小仅取决于相机参数。然后,SBA使用密集的Cholesky因式分解和解决由此导致的线性系统降低。由于典型的SfM问题中3D点的数量通常比相机数量多两个数量级或更多,因此会带来相当大的节省。这适用于小到中等大小的问题,但对于包含数千个图像的大型问题,计算Schur补充的密集Cholesky分解会成为时空瓶颈。然而,对于大问题,Schur补充本身相当稀疏(通常只有少数相机才能看到3D点),利用这种稀疏性可以节省大量的时间和空间。

我们开发了一种新的高性能捆绑调整软件,根据问题的大小,在截断的LM算法和精确的LM算法之间进行选择。在第一种情况下,块对角线预条件共轭梯度法用于近似求解法向方程。在第二种情况下,CHOLMOD [4]是一种用于计算Cholesky分解的稀疏直接方法,用于通过Schur补充来精确求解法方程技巧。 第一种算法每次迭代的时间复杂度较低,但使用更多的LM迭代,而第二种算法以每次迭代更多的时间和内存为代价收敛得更快。 由此产生的代码比SBA使用的内存少得多,运行速度快了一个数量级。 确切的运行时间和内存节省取决于所涉及的线性系统的稀疏结构。

2.5 分布式计算引擎

我们的匹配和重建算法被实现为一个双层系统。该系统的基础是一个应用激情分布式计算引擎。除了易于移植的小型内核之外,该系统是跨平台的,可运行在UNIX和Microsoft Windows的所有主流平台上。该系统体积小且可扩展,并且配备了多种调度策略和数据传输原语,用户可自由添加自己的。

该系统针对批量处理大量数据的应用程序。它广泛支持本地应用程序数据缓存以及通过网络按需传输数据。如果共享文件系统可用,则可以使用该文件系统,但为了获得最佳性能,所有数据都存储在本地磁盘上,并且只在需要时通过网络传输。它支持各种调度模型,从简单的数据并行任务到一般的map-reduce样式计算。分布式计算引擎被编写为一组Python脚本,每个计算阶段都被实现为Python和C ++代码的组合。

猜你喜欢

转载自blog.csdn.net/i_BigBill/article/details/79775946
今日推荐