背景
三维重建的目标是确定真实世界物体的相互空间关系。随着VR/AR的发展、元宇宙概念的提出,越来越多与现实场景融合的应用依赖于真实世界的三维信息还原,三维重建作为提供真实世界信息的基础,逐步成为使能上层应用的核心技术挑战。
三维重建在工业界中普遍的解决方案是以环境中多视角采集的图片作为输入,通过分析不同图片中特征点的对应关系,建立非线性最小二乘数学模型进行图片空间位姿以及特征点空间位置的联合求解。我们基于MindSpore设计了一套高效的非线性最小二乘优化器,快速求解城市级的图片空间位姿,文章已被计算机视觉三大顶会之一的CVPR接收。该算法的开源代码已经在MindSpore上发布。
论文链接:
Huang, Jingwei, Shan Huang, and Mingwei Sun. "DeepLM: Large-Scale Nonlinear Least Squares on Deep Learning Frameworks Using Stochastic Domain Decomposition." _Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition_. 2021.
代码链接:
https://gitee.com/mindspore/m...
算法介绍
雅可比网络
这里涉及到残差对于自变量的稀疏雅可比矩阵的求解,也是现有AI框架不具备的能力。我们提出了雅可比矩阵计算网络,使用单次反向传播即可完成稀疏雅可比矩阵的计算。
图1 雅克比网络
对于用户给定的残差函数 r\_i ,雅可比网络将每个残差涉及的变量压缩排列,并通过压缩排列后张量化的变量计算残差和。残差和对于压缩张量的偏导数与稀疏雅可比矩阵非零项一一对应,可以通过单次反向传播,结合残差与自变量的索引关系,组成稀疏雅可比矩阵的三元组表达。
随机域分解
图2 随机域分解算法
除了效率之外,对于大规模问题的处理也是我们需要重点解决的问题,解决思路是将问题随机分块求解。通过分块,我们将全局问题分解为较小的子问题,这样可以显著降低单次求解问题的内存消耗。同时,通过随机分块算法,所有变量都有概率被分配在块的内部而非边界,从而有效提升了分块求解方案的收敛质量。
实验及可视化结果
本方案可以高效求解大规模的平差(Bundle Adjustment)问题,通过使用GPU进行计算能够提速4倍以上。下面为平差优化问题公开数据集BAL上的实验结果以及BAL、1DSFM中一些场景的空间特征与相机位姿求解的可视化结果。
· 测试集链接:
BAL:http://grail.cs.washington.ed...
1DSFM:http://www.cs.cornell.edu/pro...
我们的非线性最小二乘优化器在BAL数据集上同其他SOTA方法的耗时对比(单位为秒)如下:其中Ours-G代表全局优化方案,Ours-B代表采用了随机域分解的方案,Ours-BG代表采用了随机域分解和全局重初始化策略的方案。可以看到对比SOTA方法,我们的算法在耗时上的优势十分明显。
图3 本算法与SOTA方法对比结果
图4 BAL数据集上的可视化结果
通过随机域算法,我们的求解器可以解决城市级别的平差问题。如下例所示,我们联合求解了28万张照片以及超过12亿个残差项仅耗时6分钟。
图5 城市级平差求解可视化结果
适用于多种问题的优化器
我们提供了多个场景下使用我们非线性最小二乘优化器的案例。在拼接多张图像时,本优化器可用于颜色的均一化,如下所示:
本方法还可以用于网格的精确变形,如下所示:
其他例如三维物体对齐、图像融合、函数拟合等经典问题,都可以使用本优化器来完成。
图6 其他场景下的应用
MindSpore代码实现
我们基于MindSpore r1.3版本
实现时,针对Tensor切片操作、内存的分配、动态图执行性能等做了相应的优化,因此在大规模的数据集上性能表现比Pytorch版本更加优异。在多达600多万次相机采集观察次数的航拍城市场景业务数据集上,我们MindSpore版本的代码性能相比Pytorch版本进一步提升了15.6%(90.87s VS 107.71s)。
· 相关代码:
https://gitee.com/mindspore/m...
该代码基于MindSpore框架实现,运行的硬件环境为GPU。算法大大提升了城市级图片空间位姿问题的求解效率,对比之前的SOTA方法性能提升明显,实验结果如上表达到业界领先水平。
END
原文:知乎
作者:于璠
推荐阅读
更多嵌入式AI技术干货请关注嵌入式AI专栏。