7

多视图立体匹配MVSNet网络解析:保姆级教程

 3 years ago
source link: https://mp.weixin.qq.com/s/iCkHZUVTuPX7kHmoiacq-w
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

多视图立体匹配MVSNet网络解析:保姆级教程

Todd-Qi 3D视觉工坊 1 week ago
计算机视觉工坊
计算机视觉工坊
专注于计算机视觉、VSLAM、目标检测、语义分割、自动驾驶、深度学习、AI芯片、产品落地等技术干货及前沿paper分享。这是一个由多个大厂算法研究人员和知名高校博士创立的平台,我们坚持工坊精神,做最有价值的事~
121篇原创内容
Official Account
论文题目:MVSNet: Depth Inference for Unstructured Multi-view Stereo, (ECCV2018 Oral)

开源代码(tensorflow、PyTorch)地址:在公众号「3D视觉工坊」,后台回复「MVSNet网络」,即可直接下载。

摘要:作者提出MVSNet,基于多视图图像的深度估计网络。在网络中,首先在2D图像上进行特征提取得到特征图,然后通过可微分的单应变换,基于参考视图的相机视锥体构建3D代价体。然后使用3D卷积对代价体进行正则化,回归得到初始的深度图;初始的深度图通过参考图像优化得到最后的深度图。MVSNet可以灵活地处理任意数量视图,因为基于方差的代价指标可将多个特征代价提融合为一个特征代价体。MVSNet在大规模室内数据集DTU上进行验证。通过简单的后处理,不仅有显著的性能,还有更快的运行速度。同时也在更加复杂的室外数据集Tanks and Temples上进行评测。无需任何微调,MVSNet在排行榜上位列第一,证明了网络具有良好的泛化性能。关键词:多视图立体匹配;深度估计;深度学习一、引言多视图立体匹配(Multi-view Stereo, MVS)是计算机领域中一个核心问题。多视图立体匹配重建可以当做对确定场景进行拍摄照片的逆过程。拍照通过相机把三维场景映射为二维,而多视图立体匹配重建则刚好相反,其目的是通过不同视点拍摄的图像,恢复出真实的三维场景。传统的方法使用手工设计的相似性度量指标和正则化方法计算场景的稠密对应关系(比如使用归一化互相关Normalized Cross-Correlation和半全局匹配semi-global matching)。这些方法在非朗伯体表面、无弱纹理区域的场景可以达到很好的效果。但是在弱纹理区域,人工设计的相似性指标变得不可信,因此导致重建结果不完整。由MVS数据集的排行榜可知,这些方法具有很高的精度,然而在重建的完整度方法还有很大的空间可以提升。卷积神经网络的研究的最新进展引发了人们对改善立体匹配重建的兴趣。从概念上讲,基于学习的方法可以学习到全局的语义信息,比如说有高光和反射的先验可以得到更加鲁棒的匹配效果。目前已经有一些两视图立体匹配的尝试,用神经网络替换手工设计的相似性度量或正则化方法。这些方法展现出更好的结果,并且逐步超过立体匹配领域的传统方法。事实上,立体匹配任务完全适合使用CNN,因为图像对是已经过修正过的,因此立体匹配问题转化为水平方向上逐像素的视差估计。与双目立体匹配不同的是,MVS的输入是任意数目的视图,这是深度学习方法需要解决的一个棘手的问题。而且只有很少的工作意识到该问题,比如SurfaceNet事先重建彩色体素立方体,将所有像素的颜色信息和相机参数构成一个3D代价体,所构成的3D代价体即为网络的输入。然而受限于3D代价体巨大的内存消耗,SurfaceNet网络的规模很难增大:SurfaceNet运用了一个启发式的“分而治之”的策略,对于大规模重建场景则需要花费很长的时间。为此,作者提出端到端的多视图深度预测网络MVSNet,和其他基于深度图的MVS方法类似,MVSNet将一张参考图像和多张源图像作为输入,为参考图像预测深度图,而不是整个3D场景。网络的关键之处在于可微分的单应变换操作,在从2D特征图构建3D代价体的过程中,网络将相机参数隐式地将编码入网络。为使网络能够适应任意数目的输入视图数,提出基于方差的指标,该指标将多个特征体映射为一个代价体。对代价体进行多尺度的3D卷积可以回归出一个初始的深度图。最后使用参考图像对深度图进行优化以提升边界区域的精度。我们的方法与之前基于学习方法有两个明显的不同。第一点,基于深度图估计的目的,本文的3D代价体的构建是基于相机视锥体而不是规整的欧式空间。第二点,本文方法将MVS重建划分为逐视图的深度估计问题,使得大规模的重建成为可能。本文在DTU数据集上对所提出的MVSNet进行训练和评测。实验表明通过简单的后处理,MVSNet在完整度和总分上都要比其他方法要好。除此之外,还在室外数据集Tanks and Temples上验证了网络的泛化性能,MVSNet在榜单上排名第一(截止至2018年4月18号),无需任何调整,MVSNet的效果比开源MVS方法(COLMAP)和商业软件(Pixel4D)要好。同样值得注意的是,在运行速度方面MVSNet比之前最好的方法要快几倍甚至几个数量级。二、相关工作多视图立体匹配重建可以当做对确定场景进行拍摄照片的逆过程。拍照通过相机把三维场景映射到二维,而多视图立体匹配重建正好相反,其目标是借助从不同视点拍摄的图像,恢复真实的三维场景。
640?wx_fmt=png
在立体匹配算法研究中关键的一个组成部分是匹配不同视点拍摄的图像中相似点,即找到某一空间点A在不同图像中的投影位置,也就是找到所对应的点,。该匹配的准则在多视图立体匹配重建领域及其他计算机视觉相关领域中都是至关重要的存在。其中有一个简单的准则,该准则根据比较像素的亮度和颜色来确定其相似度,然而这样的准则对光照的改变十分敏感。为了使图像匹配更加鲁棒,一些新的度量评价指标逐渐被提出:归一化互相关(Normalized Cross-Correlation, NCC),关键点描述符(SIFT描述符)。基于这些基本方法,立体匹配算法逐步进行改进。匹配图像相似点的最终目的是得到图像的一致性。图像一致性的评定是多视图立体匹配的关键点之一,评定图像一致性的方法是比较图像中的像素点,比较的过程中可能用到三维的信息,包括体元,物体表面或是三角面片。评定匹配程度的指标一般有如下几种:亮度平方差之和(Sum of Squared difference, SSD);亮度绝对值差之和(Sum of absolute difference, SAD)等。基于投影的技术也在深度图的重建中广泛应用。其中代表的方法就是平面扫描算法(Plane-Sweep)。平面扫描算法的发明者是Collins,他在1996年提出了这个算法,并且用于在输入图片上过滤检测到的边缘,以便于用这些灰度图片对场景进行立体三维重建。平面扫描的输入数据是一系列经过校准的照片。与其他的重建方法一样,平面扫描方法也假设场景中所有物体只有漫反射。平面扫描虚构了一个虚拟的摄像机,在面对这个虚拟摄像机的空间中选定一个远平面以及一个近平面,需要重建的场景的物体要位于这两个平面之间。三、MVSNet本章节对所提出的MVSNet进行详细的描述,MVSNet的设计遵循了相机几何原理,并且借鉴了传统MVS方法的一些观点。在接下来的部分,将网络中的每个模块与传统的MVS方法进行对比,以此验证基于深度学习MVS方法的优势。MVSNet的网络架构如图1所示。
640?wx_fmt=png
图 1 MVSNet网络架构图3.1 图像特征提取
640?wx_fmt=png
2D卷积神经网络的输出为N个32通道的特征图。与原图相比,在每个维度上进行了4倍的下采样。值得注意的是,虽然特征图经过了下采样,但被保留下来像素的邻域信息已经被编码保存至32通道的特征描述子中,这些特征描述子为匹配提供了丰富的语义信息。与在原始图像上进行特征匹配对比,使用提取的特征图进行匹配显著提高了重建质量。3.2 代价体接下来是基于提取的特征图和相机参数构建3D代价体。之前的空间划分的方法是基于规整的网格,但是对于深度预测的任务而言,我们是基于参考相机视锥体进行代价体的构建。
640?wx_fmt=png
图 2 相机视锥体示意图

640?wx_fmt=png

3.2.1单应矩阵单应矩阵(Homography)H用于描述两个平面之间的映射关系。若场景中的特征点都落在同一平面上(比如墙,地面等),则可以通过单应矩阵来进行运动估计。
640?wx_fmt=png
3.2.2 可微分的单应变换
640?wx_fmt=png
3.2.3 代价指标(Cost Metric)
640?wx_fmt=png
3.2.4 代价体正则化从图像特征图计算得到的初始代价体很有可能是包含噪声的(由于非朗伯体表面的存在或者视线遮挡的问题),为了预测深度图还需要进行光滑处理。正则化的步骤是对上面的代价体进行优化(refine)以得到概率体。受SurfaceNet等工作的启发,我们使用一个多尺度的3D-CNN网络用于代价体正则化。4个尺度的网络类似于3D版本的UNet,使用编码-解码的结构方式,以相对较小的存储/计算代价在一个大的感受野范围内进行邻域信息聚合。为了减轻网络的计算代价,在第一个3D卷积层后,我们将32通道的代价体缩减为为8通道,将每个尺度的卷积从3层降为2层。最后卷积层的输出为1通道的体(Volume)。最终在深度方向上使用softmax操作进行概率值的归一化。产生的概率体可很好适合于深度值预测,不仅可以用于逐像素的深度预测,还可以用来衡量估计的置信度。3.3 深度图3.3.1 初始深度估计从概率体中恢复深度图最简单的方式是采用“赢者通吃”的策略(比如argmax)。但是argmax操作不能够产生亚像素级的估计,而且由于不可微分不能在网络中进行反向传播。所以我们采用在深度方向上计算期望,即所有假设深度值的加权和:
640?wx_fmt=jpeg
3.3.2 概率图沿深度方向上的概率分布还可以反映了深度估计的质量。尽管多尺度的3D CNN有一定的正则化能力,可以将概率分布调整为单峰分布,我们也应注意到由于错误匹配的出现,使得深度的概率分布散乱,不能集中在一个峰值处。如图3所示,参考视图(a)的概率概率图为图(d)。
640?wx_fmt=png
图 3 参考图像、预测的深度图、概率分布、概率图因为深度假设在相机视锥体内离散采样得到的,简单地将四个最近深度假设的概率求和得到最后的估计质量。注意其他的统计指标(比如标准差或熵)也可以用在这里,但在我们的实验中我们观察到这些指标对于后续的深度图过滤没有显著的提升。除此之外,我们的概率和公式可以在后续的外点剔除过程中起到阈值参数的作用。3.3.3 深度图优化尽管从概率体恢复出深度图是一个直接而合理的过程,但还是会存在一些问题。由于正则化过程中较大的感受野造成重建深度图边界过平滑的现象,这些问题也是在语义分割和图像抠图(Image Matting)中存在的。我们注意到参考图像是包含图像边界信息的,因此可以将参考图像作为引导来优化预测的深度图。受到图像抠图算法的启发,我们在MVSNet的末端添加了一个深度残差学习的网络。预测的深度图和被resized的参考图像被连接在一起构成一个4通道的输入,被送入三个32通道的2D卷积层和一个1通道的卷积层,来学习得到深度的残差值。为了可以学习到负的残差,最后一层网络没有使用BN层和ReLU单元。同样地,为避免在某一特定深度值上存在偏差,将初始深度幅值缩放至范围[0, 1]内,在深度图优化完成之后转换回来。3.4 损失函数初始深度值和优化深度值的损失都被考虑在内了。我们使用真实深度图与所估计深度的L1损失作为我们的训练损失。考虑到真实深度图并不是每个像素点都有值的,因此我们只考虑那些有效的像素点,即存在Ground Truth标签的像素。损失函数定义如下:
640?wx_fmt=png
四、网络的实现4.1 训练4.1.1 数据准备目前MVS数据集提供的Ground Truth数据是以点云或三角面片(mesh)的格式呈现的,所以我们需要自己使用这些数据产生深度图。DTU数据集包含了128个场景,数据集提供了带有法向信息的点云。我们使用泊松表面重建获得三角网格表面,将三维网格投影至每个视点以得到我们需要的深度图。为获取更好质量的三维网格,我们将泊松表面重建中树的深度(depth-of-tree)设为11;同时,为减轻表面边缘处的人工痕迹,我们将修剪因子(trimming-factor)设为9.5。为了公平地与其他深度学习的方法进行对比, DTU数据集的划分同SurfaceNet一样。根据文献[7],将DTU数据集划分训练集、验证集和测试集。验证集中场景序列号包括{3, 5, 17, 21, 28, 35, 37, 38, 40, 43, 56, 59, 66, 67, 82, 86, 106, 117};测试集中场景序列号包括{1, 4, 9, 10, 11, 12, 13, 15, 23, 24, 29, 32, 33, 34, 48, 49, 65, 75, 77, 110, 114, 118};训练集为其余79个场景。训练集包括79个场景,每个场景包含49张图,有7组不同光照的图。将每张图作为参考图像,DTU数据集总共有27097个训练样本。4.1.2 视图选择
640?wx_fmt=png
注意到图像尺寸在特征提取阶段会被下采样,再加上3D正则化部分的4层编码-解码结构,输入的图像尺寸必须能被32整除。同时考虑到GPU显存的限制,我们将图像分辨率从1600×1200降至800×600,然后在图像中心处截取640×480大小的图像块作为网络训练的输入。输入的相机参数也随之改变。深度假设在425mm~935mm范围内以2mm的分辨率均匀采样(采样数D=256)。4.2 后处理4.2.1 深度图过滤
640?wx_fmt=png
4.2.2 深度图融合
640?wx_fmt=png
五、实验结果基于深度学习的多视图立体重建一般由两部分组成,深度图重建、深度图融合为点云。5.1 DTU数据集评测在DTU数据集中22个测试场景进行评测,输入视图数,图像宽度,图像高度和深度采样数分别设置为N=5,W=1600,H=1184,D=256。基于DTU提供的MATLAB脚本对重建点云的精度(accuracy)和完整度(completeness)进行评测。同时也定义了一个“总分”的评价指标用于衡量重建的质量,即精度和完整度的平均数。实验结果的定量结果如表1所示。点云的重建结果如图4所示。表 1 DTU数据集实验结果
640?wx_fmt=png
640?wx_fmt=png
图 4 点云重建对比图5.2 消融分析(Ablations Study)本节对MVSNet网络中的若干组成部分进行分析,在接下来的实验中,我们使用验证集的深度值损失来衡量重建质量。5.2.1 视图数量首先研究输入视图数N对重建结果的影响,此实验也同时说明了模型可以适用于任意视图的输入。如4.1小节说明的,训练时视图数N=3,本实验测试时模型视图使用了N=2, 3, 5。结果如图5所示。
640?wx_fmt=png
图 5 视图数对验证损失的影响5.2.2 图像特征我们研究发现,基于深度学习的特征可以显著提升MVS重建质量,为了在MVSNet建模出传统的基于图像块的图像特征,我们将网络中的特征提取部分替换为一32通道的卷积层。卷积核的大小设定为7×7,步长为4。由图6可知,2D特征提取的网络在验证损失上比单层网络效果更好。5.2.3 代价指标我们还比较了基于平均的代价指标和基于方差的代价指标。如图6所示,逐元素的方差操作可以达到更快的收敛速度,同时也验证了使用显式差异指标去计算多视图间的相似性是合理的。
640?wx_fmt=png
图 6 对2D图像特征、代价指标和深度优化的消融分析图5.2.4 深度图优化对有深度图优化、没有深度图优化的MVSNet两种情况进行训练,深度图优化基本上对验证集损失没有影响,但是深度图优化步骤可以提高点云重建结果。在小于1mm条件下f-score从75.58提高为75.69;2mm条件下f-score从79.98提高为80.25。5.3 部分深度图重建结果部分场景的重建深度图如图7~10所示。在每一幅图中,左子图为参考图像,右子图为重建的深度图,深度图以彩虹图的形式呈现。
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
参考文献1.Furukawa Y, Hernández C. Multi-view stereo: A tutorial[J]. Foundations and Trends® in Computer Graphics and Vision, 2015, 9(1-2): 1-148.2.Yao Y, Luo Z, Li S, et al. Mvsnet: Depth inference for unstructured multi-view stereo[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 767-783.3.Yao Y, Luo Z, Li S, et al. Recurrent mvsnet for high-resolution multi-view stereo depth inference[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 5525-5534.4.Cui Z, Gu J, Shi B, et al. Polarimetric multi-view stereo[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2017: 1558-1567.5.Schönberger J L, Zheng E, Frahm J M, et al. Pixelwise view selection for unstructured multi-view stereo[C]//European Conference on Computer Vision. Springer, Cham, 2016: 501-518.6.Xu Q, Tao W. Multi-Scale Geometric Consistency Guided Multi-View Stereo[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 5483-5492.7.Ji M, Gall J, Zheng H, et al. Surfacenet: An end-to-end 3d neural network for multiview stereopsis[C]//Proceedings of the IEEE International Conference on Computer Vision. 2017: 2307-2315.8.王跃嵩. 多视图立体匹配三维重建方法[D].华中科技大学,2015.9.Kendall A, Martirosyan H, Dasgupta S, et al. End-to-end learning of geometry and context for deep stereo regression[C]//Proceedings of the IEEE International Conference on Computer Vision. 2017: 66-75.10.Ronneberger O, Fischer P, Brox T. U-net: Convolutional networks for biomedical image segmentation[C]//International Conference on Medical image computing and computer-assisted intervention. Springer, Cham, 2015: 234-241.备注:作者也是我们「3D视觉从入门到精通」特邀嘉宾:一个超干货的3D视觉学习社区本文仅做学术分享,如有侵权,请联系删文。下载1在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。下载2在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。下载3在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

640?wx_fmt=png▲长按加微信群或投稿

640?wx_fmt=jpeg

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款640?wx_fmt=jpeg 圈里有高质量教程资料、可答疑解惑、助你高效解决问题觉得有用,麻烦给个赞和在看~640?wx_fmt=gif


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK