首页/文章/ 详情

笔记|怎么简单理解NeRF-神经辐射场

8月前浏览194

大家好,我是李慢慢。

这是一篇学习笔记。

作为一名智驾仿真工作者,听说NeRF已经很多次了,但我既不是计算机图形学毕业的,也不是AI工作者,所以初步在网络上检索了NeRF之后,还是觉得一脸懵,对这个东西不明究理。于是,私下花了很多时间,尝试以门外汉的方式来讲述这们炙手可热的技术,遂有了这篇文章。

1、什么是NeRF?

NeRF(Neural Radiance Field,神经辐射场)是一种用于生成逼真的3D场景的计算机图形技术。它是基于神经网络的模型,通过学习场景中每个点的辐射(radiance)信息,从而能够准确地预测场景中的物体外观和光照效果。

这里的“场景”怎么理解呢?我觉得可以理解为眼睛能看到的物理世界。

简单来说,NeRF 将一个3D场景看作是由许多小点组成的,每个点都有其特定的颜色和光照属性。NeRF技术通过训练一个神经网络模型,它能够学习到这些点的位置、颜色和光照等信息。当模型训练完成后,我们就可以使用这个模型来生成逼真的图像,然后在不同视角下的图像就能重建3D场景。

我以前对三维场景的理解是,它是由不同的小3D模型组合起来的大3D模型。有了NeRF,我对三维场景的理解就会变为,在不同角度的下的2D图片。

其实以前也有一些根据采集图片进行3D建模的方法,如摄影测量技术、雷达扫描技术等,这些技术都需要针对场景进行大量的扫描才能还原3D场景。而现在的NeRF则不要那么麻烦,它仅需要少量的图片,就能训练出一个模型,从而预测出各个角度的图片,以达到3D重建的效果。效率提升只有亿点点。


2、NeRF怎么训练?

训练模型:这里就不扒公式了,总之NeRF要训练的模型是一个MLP模型(Multi-Layer Perceptron,多层感知机),这是一种常见的人工神经网络模型。训练方法:围绕静态场景的一组图片。


3、NeRF的输入是什么?

上面提到训练MLP模型时用到的是一组图片,这组图片的每个像素点会被处理成一个5D向量(x, y, z, theta, phi),这个向量就是MLP模型的输入。


4、NeRF的输出是什么?

多张图片输入,获得每个像素点的5D向量,训练出组成场景的每个粒子的属性,这个属性是个4D向量(密度,R,G,B)。这个4D向量就是NeRF的输出。最后,这个输出会进行一个后处理,根据给定的特定角度,输出这个角度下的像素矩阵,即图片。


5、NeRF的优点

1、采用少量的图片即可完成训练;

2、能真实重建烟、雾、光反射等场景;


6、NeRF的缺点

1、对静态场景的三维重建效果较好,动态场景效果差;

2、训练和推理的过程都很慢;

3、对光照的处理能力一般;

4、没有泛化能力;


7、NeRF能用来做什么?

NeRF可以用于多种应用,包括但不限于以下几个方面:

1、逼真的渲染:NeRF可以生成高度逼真的3D场景渲染图像。通过对场景中的点进行采样和预测,可以生成具有真实感的图像,包括光照、阴影、反射等效果。这使得NeRF在电影、游戏等娱乐产业中有广泛的应用。

2、视觉效果增强:NeRF可以用于增强现实(AR)和虚拟现实(VR)应用中的视觉效果。通过生成逼真的虚拟场景,可以与真实世界进行融合,提供更具沉浸感的AR/VR体验。

3、三维重建与建模:NeRF可以用于三维重建和建模任务。通过对现实世界的物体、场景进行扫描,可以获取点云数据,并使用NeRF进行建模,从而得到高保真度的3D模型。

4、视频合成与特效:NeRF可以用于视频中的特效合成,例如在现实场景中添加虚拟对象、改变背景等。通过将NeRF与视频处理技术相结合,可以实现逼真的视觉特效。

5、卫星图像和规划:卫星图像提供了一系列图像,NeRF 可以使用这些图像来生成地球表面的总和模型。它对于需要对现实世界环境进行数字化的现实捕获(RC)应用场景非常有用,您可以将空间位置数据转换为非常详细的 3D 模型。例如,将航空影像重建为景观渲染常常用于城市规划,因为它可针对区域真实布局提供有用的参考。


总之,NeRF在计算机图形学、计算机视觉和虚拟现实等领域有广泛的应用。它可以生成逼真的图像和场景,用于娱乐产业、设计、建模等各种应用场景,为用户提供更加沉浸和真实的体验。


本文完。


来源:车路漫漫
航空游戏渲染
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-12-10
最近编辑:8月前
李慢慢
硕士 自动驾驶仿真工程师一枚
获赞 14粉丝 93文章 320课程 0
点赞
收藏
作者推荐

浅尝gitlab仓库的CICD功能

大家好,我是李慢慢。在上一篇文章中,简要介绍了下CICD流程。关于自动驾驶开发和CI/CD流程GitLabCI/CD的原理是“通过GitLabRunner服务启动一个执行器来运行.gitlab-ci.yml中各个阶段的脚本命令,并将运行的结果返回给GitLab”。云端:仓库中的“.gitlab-ci.yml”文件中定义了CICD触发的条件、具体的执行器gitlabrunner以及执行的内容等;本地:安装好gitlabrunner后,通过注册,可以在本地创建多个runner绑定到指定的gitlab仓库上。并执行云端.gitlab-ci.yml文件中定义的脚本内容,将结果反馈回gitlab。runner是以守护进程/服务时刻运行着的。下面,我特意注册了个gitlab账号,创建一个小仓库,本地安装runner,然后配置runner,测试CICD。以下是过程记录。1、注册一个gitlab仓库后,创建一个名为“lmm_test_cicd”的空仓库。2、进行CICD配置,入口如下:3、点击Runners或者后面的Expand,可以展开该项目,进行gitlabrunner配置:4、配置新的runner;5、按照下面的步骤在本地电脑执行:步骤1:#Downloadthebinaryforyoursystemsudocurl-L--output/usr/local/bin/gitlab-runnerhttps://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64#Giveitpermissiontoexecutesudochmod+x/usr/local/bin/gitlab-runner#CreateaGitLabRunnerusersudouseradd--comment'GitLabRunner'--create-homegitlab-runner--shell/bin/bash#Installandrunasaservicesudogitlab-runnerinstall--user=gitlab-runner--working-directory=/home/gitlab-runnersudogitlab-runnerstart步骤二:sudogitlab-runnerregister--urlhttps://gitlab.com--tokenglrt-Szjn_tbtPyx29sNiWsQs运行完后,查看下runner的状态:步骤三:sudogitlab-runnerrun“强烈建议所有的gitlab-runner”指令均以root权限运行,即“sudogitlab-runnerxxxxxx”。上述步骤执行完成后,gitlab页面也会有成功的提示:创建成功的runner服务也会出现在CICD配置项目列表里:6、点击“edit”按钮可以查看或者修改runner配置内容:7、点击“savechanges”后可以看到完整的配置内容列表:8、进入Pipeline流水线,查看当前流水线上的任务,由于还没有任何配置,会是什么都没有,还会提示您去创建一个yml文件开启流水线。9、点击“trytesttemplates”生成“.gitlab-ci.yml”文件,如下:会看到gitlab会自动生成这个yml文件的内容:#Thisfileisatemplate,andmightneededitingbeforeitworksonyourproject.#ThisisasampleGitLabCI/CDconfigurationfilethatshouldrunwithoutanymodifications.#Itdemonstratesabasic3stageCI/CDpipeline.Insteadofrealtestsorscripts,#itusesechocommandstosimulatethepipelineexecution.##Apipelineiscomposedofindependentjobsthatrunscripts,groupedintostages.#Stagesruninsequentialorder,butjobswithinstagesruninparallel.##Formoreinformation,see:https://docs.gitlab.com/ee/ci/yaml/index.html#stages##Youcancopyandpastethistemplateintoanew`.gitlab-ci.yml`file.#Youshouldnotaddthistemplatetoanexisting`.gitlab-ci.yml`filebyusingthe`include:`keyword.##TocontributeimprovementstoCI/CDtemplates,pleasefollowtheDevelopmentguideat:#https://docs.gitlab.com/ee/development/cicd/templates.html#Thisspecifictemplateislocatedat:#https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.ymlstages:#Listofstagesforjobs,andtheirorderofexecution-build-test-deploybuild-job:#Thisjobrunsinthebuildstage,whichrunsfirst.stage:buildscript:-echo"Compilingthecode..."-echo"Compilecomplete."unit-test-job:#Thisjobrunsintheteststage.stage:test#Itonlystartswhenthejobinthebuildstagecompletessuccessfully.script:-echo"Runningunittests...Thiswilltakeabout60seconds."-sleep60-echo"Codecoverageis90%"lint-test-job:#Thisjobalsorunsintheteststage.stage:test#Itcanrunatthesametimeasunit-test-job(inparallel).script:-echo"Lintingcode...Thiswilltakeabout10seconds."-sleep10-echo"Nolintissuesfound."deploy-job:#Thisjobrunsinthedeploystage.stage:deploy#Itonlyrunswhen*both*jobsintheteststagecompletesuccessfully.environment:productionscript:-echo"Deployingapplication..."-echo"Applicationsuccessfullydeployed."10、先不解释这个yml文件的内容,也不要做改变,直接点击“commitchanges”确认即可;11、回到主界面,发现主目录下多了这个yml文件:同时,Pipelines已经触发了CICD任务(因为仓库检测到了更新):任务的状态从“running”到“passed”可能需要一些时间。(如果您出现了“pending”或者“failed”等状态,需要自己百度找一下原因。)12、点击一下“passed”状态按钮,可以进入到具体的状态阶段进行查看:这里为什么有一个build,一个test,一个deploy共三个阶段,以及每个阶段有几个任务,则和yml文件中的定义息息相关了。再随意选一个任务点进去,可以看到类似命令行的东西,显示了每一个任务的执行过程:上面这个红框里的东西是不是很眼熟?因为他就是yml文件里定义的东西呀:13、上面就是一个简单的CICD过程,现在,我们来简单来修改下README.md文件,使得仓库发生一些变化,来主动触发CICD流程看一下。步骤1、修改README.md,我这里就简单加了个注释。步骤2、查看任务:最后来总结一下:以前总是感觉CICD这个过程很神奇,gitlab的仓库的代码只要更新了,就能触发CICD去做一些事情,通过今天的小测试,感觉其实也没那么复杂。只要在本地安装好gitlab-runner执行器,并与gitlab仓库进行绑定,那么就能根据gitlab仓库的更新监控机制,自动触发CICD流程,本地runner运行的程序则可以由yml文件进行指定。后面将继续探索CICD的使用,比如通过docker来运行gitlab-runner服务,比如更改CICD的触发逻辑,比如执行仓库中的特定脚本,比如启动多个runner服务,比如在网页端获取本地脚本执行的结果文件等内容。欢迎持续关注哦。来源:车路慢慢

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈