

多视图几何三维重建实战系列之MVSNet
source link: https://mp.weixin.qq.com/s/ee7-jr8QN8D2MSTyDNeWWw
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
点击上方“3D视觉工坊”,选择“星标”干货第一时间送达
MVS是一种从具有一定重叠度的多视图视角中恢复场景的稠密结构的技术,传统方法利用几何、光学一致性构造匹配代价,进行匹配代价累积,再估计深度值。虽然传统方法有较高的深度估计精度,但由于存在在缺少纹理或者光照条件剧烈变化的场景中的错误匹配,传统方法的深度估计完整度还有很大的提升空间。近年来卷积神经网络已经成功被应用在特征匹配上,提升了立体匹配的精度。在这样的背景下,香港科技大学Yaoyao等人,在2018年提出了一种基于深度学习的端到端深度估计框架——MVSNet[1]。虽然这两年已经有更多的框架在精度和完整度上面超过了MVSNet,但笔者发现,无论是基于监督学习的R-MVSNet 、Cascade – MVSNet等网络,还是基于自监督学习的M3VSNet,核心网型设计都是在借鉴MVSNet而完成的,而且MVSNet也是比较早期且较为完整的三维重建深度学习框架,了解该框架的原理、数据IO与实际操作能加深对2020年以来各种新方法的理解。本篇的主要内容为MVSNet的深度估计框架介绍、深度估计原理及如何利用MVSNet进行三维重建的具体操作。(注意:本方法需要11GB以上的GPU,推荐使用至少NVIDIA 1080Ti,且同样建议使用Linux进行操作。驱动建议安装CUDA9.0以上版本。)2. MVSNet框架
图4 代价累计结果
1) 环境配置参考Yaoyao的github主页中installation即可完成环境配置。(https://github.com/YoYo000/MVSNet)2) 数据整理在文末分享的百度云盘中下载数据集preprocessed_inputs/dtu.zip和预训练好的网络models/tf_model_19307.zip。将tf_model解压,在其中的3DCNNs/中获得训练好的模型 model.ckpt-100000.data-00000-of-00001。
python test.py --dense_folder TEST_DATA_FOLDER --regularization '3DCNNs' --max_w 1152 --max_h 864 --max_d 192 --interval_scale 1.06
- flag --dense_folder 要设定为scan10的地址。
- flag –regularization表示正则化代价体的方式,MVSNet中使用的是3D卷积神经网络。
- 图片的大小可以按照GPU的大小变更参数,但是需要时32的整数倍(特征提取时2D神经网络要求图像是32的整数倍)
- Max_d 和interval_scale 建议先按照默认的要求,在使用自己的数据时,我们会给出调整的方式
- 安装fusible
python depthfusion.py --dense_folder TEST_DATA_FOLDER --fusibile_exe_path FUSIBILE_EXE_PATH --prob_threshold 0.3
注意:每一个深度图在估计的时候,都有一个对应的概率图,及表示该像素沿深度方向不同的概率,所以flag –prob_threhold 表示用于过滤深度的概率阈值,即如果当前深度图的某个像素的深度对应的概率低于该阈值,则在点云融合的时候,该像素的深度不被使用,即该像素不会被投影到三维空间点。这样可以对稠密点云进行过滤优化。在dense_folder中,之后会生成新的文件夹points_mvsnet。在该文件夹下,找到consisitency_Check-time/final3d_model.ply. 即为融合之后的三维点云,利用meshlab打开即可。图10是笔者实验过后的稠密点云。6) 流程回顾环境配置 -> 整理输入数据 -> 配准好flag,运行代码 -> 安装深度融合软件 -> 生成稠密点云4.2 数据IO要求及数据配置回顾
MVSNet的整个流程完整、简单,再回顾一下整个流程中文件夹的结构。1) Input输入时,有一个初始的文件夹(--dense_folder),存放了两个文件夹cams,images 和一个pair.txt.(图8以scan10为例)其中images文件夹,包含了49张照片,是放置畸变校正之后RGB图像的地方, cams中也包含了49个.txt文件,每一个txt文件就是对应序号图片的相机内参数和外参数. 第三个pair.txt 保存了,当每一个照片为参考影像时, 与其最相似的前十张相片(具体的排序方式是:在稀疏重建过程中, 两张相片共视的三维点数, 共视的三维点越多,则排名越高.)
如果将MVSNet暂时看成黑箱, 那么输入到MVSNet的input文件夹,结构一定要遵从上述结构(图8)。2) Output在深度估计结束后, 会在dense_folder下新建一个depths_mvsnet, 里面包含了生成的深度图,点云生成后,还有一个文件夹points_mvsnet,里面包含场景的三维点云。
将MVSNet看做一个黑箱, 需要将自采数据整理成4-1中dense_folder的文件夹结构,即需要每一个包含经过畸变矫正的RGB图片的images文件夹、包含每一个相片的内外参数的cams文件夹,和一个pair.txt文件。一般的自采数据,可获得RGB图片,所以,需要再利用稀疏重建的原理获得相机的内外参数和相关中间输出。这里提供了一个完整的数据处理pipeline,第一,先利用COLMAP进行稀疏重建,第二,导出相机文件和稀疏场景的信息,第三利用Yaoyao提供的python代码,将COLMAP结果直接转换为MVSNet的输入格式。具体步骤如下:1) 稀疏重建利用COLMAP进行稀疏重建,根据上一篇文章, 稀疏重建结束后,可得到了如下的场景。
- camera.txt是保存相机内参数的文件
- images.txt是保存图片外参数和图片二维特征与三维空间点对应信息的文件
- points3D.txt是保存三维空间点在世界坐标系下坐标、RGB值以及在各个影像上的轨迹(track)
python colmap2mvsnet.py –dense_folder our_dense_folder –max_d XXX –interval_scale XXX
- Flag –dense_folder 需要以我们的dense_folder作为地址,里面必须包含sparse文件夹
- --max_d 表示,最大估计的离散深度采样区间数,因为MVSNet是按照平面扫描原理进行深度估计的,所以深度是离散采样的,一般我们设定为192个深度采样区间。
- --interval_scale表示每个深度区间的大小,默认为1.06(mm)。
- 深度估计范围:已知深度最小值depth_min,则深度最大值满足:
- 注意:我们需要估计自采数据的深度范围,已保证在深度采样区间内,能对目标场景进行有效的深度估计,举个例子,如果自采数据的深度范围为45cm – 80cm,那么我们用于深度估计的区间范围应该是35cm,从45 – 80cm。此时如果我们设定的深度区间为0 – 35cm,那么估计出来的深度图肯定是错误的。所以对于自采数据,大家需要尝试不同的深度区间,以找到合适的取值范围。
- 在估计自采数据的深度范围时,需要修改Yaoyao的代码,需要的朋友们可以私戳笔者,获取修改之后的代码。
[1] Yao Yao, Luo Zixin, Li Shiwei, Fang Tian, Quan Long. MVSNet: Depth Inference for Unstructured Multi-View Stereo. European Conference on Computer Vision (ECCV)
[2] Scharstein D , Szeliski R . A Taxonomy and Evaluation of Dense Two-Frame Stereo Correspondence Algorithms[J]. International Journal of Computer Vision, 2002, 47(1-3):7-42.
[3] Han, X., Leung, T., Jia, Y., Sukthankar, R., Berg, A.C.: Matchnet: Unifying feature and metric learning for patch-based matching. Computer Vision and Pattern Recognition (CVPR) (2015)
[4] Collins R T . A Space-Sweep Approach to True Multi-Image Matching[C] Computer Vision and Pattern Recognition, 1996. Proceedings CVPR '96, 1996 IEEE Computer Society Conference on. IEEE, 1996.
[5] Yang R , Pollefeys M . Multi-Resolution Real-Time Stereo on Commodity Graphics Hardware[C] 2003 IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 2003. Proceedings. IEEE, 2003.
[6] Furukawa Y , Hernández, Carlos. Multi-View Stereo: A Tutorial[J]. Foundations & Trends in Computer Graphics & Vision, 2015, 9(1-2):1-148.
[7] Ronneberger, O., Fischer, P., Brox, T.: U-net: Convolutional networks for biomedical image segmentation. International Conference on Medical Image Computing and Computer Assisted Intervention (MICCAI) (2015)
附录开源数据集下载链接:(感谢香港科技大学 姚遥开源的数据集链接)我们需要下载的是用于测试的数据集,在公众号「3D视觉工坊」后台回复「mvsnet」,即可获得下载链接。打开百度云链接时,点击 “mvsnet”,再点击“preprocessed_inputs”,下载其中的“dtu.zip”和“tankandtemples.zip”即可(图18)。重磅!3DCVer-学术论文写作投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群。
一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、可答疑解惑、助你高效解决问题觉得有用,麻烦给个赞和在看~
Recommend
-
22
多视图立体匹配论文分享PVA-MVSNet ...
-
9
多视图几何三维重建实战系列- Cascade-MVSNet Original...
-
21
多视图几何三维重建实战系列之R-MVSNet ...
-
34
点击上方“3D视觉工坊”,选择“星标”干货第一时间送达为了方便大家了解基于多视图立体的三...
-
12
多视图立体匹配论文分享:P-MVSNet ...
-
11
多视图立体匹配论文分享 | Fast-MVSNet (CVPR2020) ...
-
6
基于多视图几何方式的三维重建 ...
-
14
CVPR 2021 | pixelNeRF:一种基于NeRF的多视图三维重建网络 ...
-
12
多视图立体匹配MVSNet网络解析:保姆级教程 ...
-
2
基于深度学习的三维重建MVSNet系列 [论文+源码+应用+科研] 小...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK