基于Nerf的三维重建算法Neus初探

这篇具有很好参考价值的文章主要介绍了基于Nerf的三维重建算法Neus初探。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

介绍

安装

训练开源数据

训练自己的数据


介绍

作者提出了一种新的神经表面重建方法,称为NeuS,用于从2D图像输入中以高保真度重建对象和场景。在NeuS中,我们建议将曲面表示为有符号距离函数(SDF)的零级集,并开发一种新的体绘制方法来训练神经SDF表示。我们观察到,传统的体绘制方法会导致表面重建的固有几何误差(即偏差),因此提出了一种在一阶近似中没有偏差的新公式,从而即使在没有掩模监督的情况下也能实现更准确的表面重建。在DTU数据集和BlendedMVS数据集上的实验表明,NeuS在高质量表面重建方面优于现有技术,尤其是对于具有复杂结构和自遮挡的对象和场景。

算法已开源,先把代码扔这了。

github:GitHub - Totoro97/NeuS: Code release for NeuS

安装

git clone https://github.com/Totoro97/NeuS.git
cd NeuS
pip install -r requirements.txt

这是readme中给出的,如果顺利的话说明你安装的很顺利,如果不顺利的话,可以参考我的方法。(顺利的安装千篇一律,不顺的安装各有各的不顺,我的不顺是cuda和pytorch的版本不匹配)

首先还是推荐用conda搭建虚拟环境。

conda create -n neus python=3.8

激活虚拟环境

conda activate neus

然后安装pytorch,requirements.txt给出的版本是1.8.0,这里为了体现出个性,我选择装1.9.0。(其实是1.8.0版本不匹配报错了,不得已换了1.9.0,我用的cuda版本是11.1)

pip --default-timeout=1000 install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html

然后用pip install 把requirements.txt中的包都装一下,还有个tensorboard没写,也一并装一下。

环境搭建完成。

训练开源数据

在NeuS文件夹下创建public_data用于存放数据,把下载的开源数据解压放到这个文件夹下。

用不带mask的模式训练

python exp_runner.py --mode train --conf ./confs/womask.conf --case bmvs_clock

带mask的模式训练

python exp_runner.py --mode train --conf ./confs/wmask.conf --case bmvs_clock

这里显存不足的话可能会报错,把./confs/wmask.conf中的batch_size调小一点即可。

训练生成的结果会保存在根目录下exp文件夹下,可以看到meshes文件夹中保存了训练过程中的mesh模型,但面片较少。需要比较精细的mesh模型需要运行

python exp_runner.py --mode validate_mesh --conf ./confs/womask.conf --case bmvs_clock--is_continue 

还可以生成多视角的渲染效果,可运行:

python exp_runner.py --mode interpolate_000_001 --conf ./confs/womask.conf --case bmvs_clock --is_continue 

000,001是图片编号,根据自己需要调整。

用meshlab打开ply文件,没有纹理,只有白模。

基于Nerf的三维重建算法Neus初探

训练自己的数据

首先用手机对着重建模型咔咔一顿拍,尽量多拍一些不同角度的,然后我们获得了一堆图像文件。

先来看一下之前训练的开源数据,包含了两个文件夹和一个文件。

基于Nerf的三维重建算法Neus初探

image文件夹就是rgb图片数据,算法默认支持png格式。

基于Nerf的三维重建算法Neus初探

mask文件夹包含的是模型的前景图像,前景和后景以黑色和白色区分,如果配置文件选择withou mask,其实这个文件夹的数据是没有意义的。但必须有文件,且名称、图像像素要和image的图像一一对应。

最后是cameras_sphere.npz文件,它包括了相机的属性和图像的位姿信息等,这个是需要我们自己计算的。官方给出了两种计算方案,这里只介绍第二种,用colmap计算npz文件。colmap的使用可参考:colmap简介及入门级使用 - 知乎。这里就不详述了。

新建一个文件夹test1和一个子文件夹test1/image,并将图片数据都放在image文件夹下。使用colmap计算得到data.db文件,File->Export model将计算结果导出到/sparse/0文件夹下。

基于Nerf的三维重建算法Neus初探

运行

cd colmap_preprocess
python imgs2poses.py ../../public_data/test1

会在/public_data/test1路径下生成sparse_points.ply文件。这是重建的稀疏点云模型。根据需要分割要建模的区域保存为sparse_points_interest.ply。

运行

python gen_cameras.py ../../public_data/test1

在test1/preprocessed会生成cameras_sphere.npz文件。

此时按照开源数据的方法训练是会报错的,还差mask数据,即使运行without mask模式也不行,必须要在mask文件夹下找到对应image文件夹的数据,图像的文件名和大小也要一致,空白图片也可以。这里把我的生成mask数据的代码放到这里,供大家参考。

# coding:utf-8

import cv2
import os
import numpy as np

dir = '/home/user/nerf/NeuS/public_data/test1'
dir_mask = os.path.join(dir,'mask')
if not os.path.exists(dir_mask):
    os.mkdir(dir_mask)
img_dir = os.path.join(dir,'image')
img_list = os.listdir(img_dir)
for img_file in img_list:
    (filename, extension) = os.path.splitext(img_file)
    if extension == '.JPG' :
        img_file_png = filename + '.png'
        img_file_png = os.path.join(img_dir, img_file_png)
        img_file_mask = dir + '/mask/' + filename + '.png'
        img = cv2.imread(os.path.join(img_dir,img_file))
        img_mask = np.zeros(img.shape, np.uint8)
        for i in range(img.shape[0]):
            for j in range(img.shape[1]):
                 img_mask[i,j,:] = [255,255,255]
        cv2.imwrite(img_file_png, img)  
        cv2.imwrite(img_file_mask, img_mask)  
        os.remove(os.path.join(img_dir,img_file))  # 删除原文件

然后和开源数据用相同的方法训练即可。文章来源地址https://www.toymoban.com/news/detail-492644.html

到了这里,关于基于Nerf的三维重建算法Neus初探的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeRF(LLFF格式)数据集

    提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 LLFF格式是NeRF网络模型训练使用的数据集格式之一,本文基于COLMAP软件展示从LLFF格式数据集的制作到开始模型训练的完整流程。NeRF(神经辐射场)通过输入同一场景不同视角下

    2024年02月10日
    浏览(46)
  • 【三维重建】NeRF原理+代码讲解

    NeRF是2020年ECCV论文,任务是 做新视角的合成 ,是借助深度学习技术的计算机图形学任务,实现了摄像机级别的逼真的新视图合成。仅仅2年时间,相关work和论文就已经大量涌现。 论文 :https://arxiv.org/abs/2003.08934 TensorFlow代码 :https://github.com/bmild/nerf PyToch代码 :https://github.

    2024年02月01日
    浏览(43)
  • Nerf神经辐射场三维重建0基础学习

    前言 本期内容为对Nerf神经辐射场的网络结构以及其使用的体渲染技术的一个介绍。文章会同步更新到公众号 AI知识物语 ,并且后续有需要也会更新响应的讲解视频到B站,同名 出门吃三碗饭 开讲! 简单介绍Nerf Nerf是2020年的一篇ECCV论文,其贡献就是通过提供2维信息来渲染

    2024年02月09日
    浏览(40)
  • 【3D生成与重建】SSDNeRF:单阶段Diffusion NeRF的三维生成和重建

    题目 :Single-Stage Diffusion NeRF: A Unified Approach to 3D Generation and Reconstruction 论文 :https://arxiv.org/pdf/2304.06714.pdf 任务 :无条件3D生成(如从噪音中,生成不同的车等)、单视图3D生成 机构 :Hansheng Chen,1,* Jiatao Gu,2 Anpei Chen, 同济、苹果、加利福尼亚大学 代码 :https://github.com/Lakon

    2024年02月02日
    浏览(44)
  • 神经辐射场(NERF)模型:一个令人惊叹的三维场景重建方法

      在计算机图形学、计算机视觉和增强现实等领域,三维场景重建一直是一个热门话题。近年来,神经网络模型的出现已经彻底改变了这个领域,而其中最引人注目的就是 NERF(神经辐射场)模型。在这篇文章中,我们将深入探讨这个令人惊叹的三维场景重建方法。     简单

    2024年02月07日
    浏览(40)
  • 三维重建方法3D gaussian splatting与NeRF的区别和异同

    最近学习了一些三维重建相关的内容,目前比较主要的重建流派就是3DGS以及NeRF,NeRF作为2020年发布的文章轰动一时,影响深远,有很多NeRF based的相关工作在这些年涌现。3DGS作为2023年的new talk of the town,其在保证合成质量的情况下能够以数倍乃至数十倍的速度碾压许多NeRF b

    2024年02月01日
    浏览(39)
  • 基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置

    本人书写本系列博客目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。 MVS(多视点立体视觉,Multi-view stereo)能够单独从图像中构造出高度细节化的3D模型,采集一个庞大的图像数据集,用其来构建出一个用来解析

    2024年01月15日
    浏览(45)
  • 数字人解决方案——RAD-NeRF真人视频的三维重建数字人源码与训练方法

    1.真人视频三维重建数字人源码是基于NeRF改进的RAD-NeRF, NeRF(Neural Radiance Fields) 是最早在2020年ECCV会议上的Best Paper,其将隐式表达推上了一个新的高度,仅用 2D 的 posed images 作为监督,即可表示复杂的三维场景。 NeRF其输入稀疏的多角度带pose的图像训练得到一个神经辐射场

    2024年02月06日
    浏览(43)
  • 基于MVS的三维重建算法学习笔记(三)— 立体匹配概述

    本人书写本系列博客目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。 在之前的博客中简单介绍过立体匹配,它是MVS稠密重建中的重要环节,而在这篇博客中,将详细的介绍立体匹配的相关概念,其中详细的过程和

    2024年02月11日
    浏览(43)
  • 【项目实战】三维重建:基于RGB-D数据集的TSDF算法

    主要流程: 计算每个体素在深度图像中的TSDF值,然后基于前一个体素的TSDF值更新后一个(加权平均),最后得到所有体素的结果,拼接为3D模型。 TSDF需要非常大的显存空间,GPU需要大概 2KB 存储单个体素的所有信息。因此, 只适用于小场景下的三维重建(如室内环境)。

    2024年02月12日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包