位置: IT常识 - 正文

NeRF 源码分析解读(二)(nerf代码)

编辑:rootadmin
NeRF 源码分析解读(二) NeRF 源码分析解读(二)光线的生成

推荐整理分享NeRF 源码分析解读(二)(nerf代码),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nerf 算法,netsurf 源码分析,nerf csdn,nerf原理图,nerf 算法,nerf代码,nerf代码,nerf开源图纸,内容如对您有帮助,希望把文章链接给更多的朋友!

由上一章节我们得到了加载到的数据,包括读取图像的数组、图像的高宽焦距、相机的 pose 、以及用于分割测试集、训练集的分割数组。得到这些数据后,我们开始进行生成光线的步骤。 生成光线的步骤是 NeRF 代码中最为关键的一步,实际上我们模拟的光线就是三维空间中在指定方向上的一系列离散的点的坐标。有了这些点坐标,我们将其投入到 NeRF 的 MLP 神经网络中,计算这个点的密度值以及颜色值。 下面我们对具体代码进行分析。

def train():...# 加载数据,具体加载代码分析详见 上一篇博客... if K is None: K = np.array([ [focal, 0, 0.5*W], [0, focal, 0.5*H], [0, 0, 1] ])

注意这里的 K 。这里的 K 指的是相机的内参,具体的作用会在后面的分析中进行解释说明

1、初始化 NeRF 网络模型def train():...# 初始化 NeRF 网络模型render_kwargs_train, render_kwargs_test, start, grad_vars, optimizer = create_nerf(args)bds_dict = { 'near' : near, 'far' : far, } # 更新字典,加入三维空间的边界框 bounding box render_kwargs_train.update(bds_dict) render_kwargs_test.update(bds_dict)...

我们首先对 create_nerf() 返回的值进行解释说明:

render_kwargs_train:一个字典,包含了用于训练的各个参数值。具体字典内容详见下面的代码分析render_kwargs_test:start:grad_vars: 整个网络的梯度变量optimizer: 整个网络的优化器NeRF 源码分析解读(二)(nerf代码)

接下来我们对 create_nerf() 代码进行具体的逐行分析:

def create_nerf(args): embed_fn, input_ch = get_embedder(args.multires, args.i_embed) ...

这行语句实际上获得一个编码器 embed_fn 以及一个编码后的维度,给定 embed_fn 一个输入,就可以获得输入的编码后的数据。具体的编码公式如下,详见论文 5.1 节,代码分析详见:位置编码代码注释分析。

γ(p)=(sin⁡(2πp),cos⁡(2πp),⋯ ,sin⁡(2L−1πp),cos⁡(2L−1πp))\gamma(p)=\left(\sin \left(2^{0} \pi p\right), \cos \left(2^{0} \pi p\right), \cdots, \sin \left(2^{L-1} \pi p\right), \cos \left(2^{L-1} \pi p\right)\right)γ(p)=(sin(20πp),cos(20πp),⋯,sin(2L−1πp),cos(2L−1πp))

以下是网络结构的初始化代码,网络的层级模型详见论文 补充材料 pic 7。 关于 NeRF 的 model 部分我们会单独开一个章节进行解读。(待更新),总之我们只需要知道我们在这里创建了 NeRF 的粗网络,给这个粗网络输入一个 5D 的输入,就可以得到一个 (RGB,A)的输出,即: FΘ:(x,d)→(c,σ)F_{\Theta}:(\mathbf{x}, \mathbf{d}) \rightarrow(\mathbf{c}, \sigma)FΘ​:(x,d)→(c,σ) FθF_{\theta}Fθ​ 就是我们创建的网络 model

def create_nerf(args):...# 初始化MLP模型参数,网络的层级模型详见论文 补充材料 pic 7 model = NeRF(D=args.netdepth, W=args.netwidth, input_ch=input_ch, output_ch=output_ch, skips=skips, input_ch_views=input_ch_views, use_viewdirs=args.use_viewdirs).to(device) # 模型中的梯度变量 grad_vars = list(model.parameters()) ... # 定义一个查询点的颜色和密度的匿名函数,实际上给定点坐标,方向,以及查询网络,我们就可以得到该点在该网络下的输出([rgb,alpha]) network_query_fn = lambda inputs, viewdirs, network_fn : run_network(inputs, viewdirs, network_fn, embed_fn=embed_fn, embeddirs_fn=embeddirs_fn, netchunk=args.netchunk # 网络批处理查询点的数量)

可以看到这里的 network_query_fn 是一个匿名函数,真正起作用的函数是 run_network() 。下面我们对 run_network() 进行分析,观察我们是如何生成给定点的颜色和密度的。 run_network() 代码分析如下:

def run_network(inputs, viewdirs, fn, embed_fn, embeddirs_fn, netchunk=1024*64): """ 对 input 进行处理,应用 神经网络 fn """ inputs_flat = torch.reshape(inputs, [-1, inputs.shape[-1]])embedded = embed_fn(inputs_flat) # 对输入进行位置编码,得到编码后的结果,是一个 array 数组if viewdirs is not None:# 视图不为 None,即输入了视图方向,那么我们就应该考虑对视图方向作出处理,用以生成颜色input_dirs = viewdirs[:, None].expand(inputs.shape)input_dirs_flat = torch.reshape(input_dirs, [-1, input_dirs.shape[-1]])embedded_dirs = embeddirs_fn(input_dirs_flat) # 对输入方向进行编码embedded = torch.cat([embedded, embedded_dirs], -1) # 将编码后的位置和方向聚合到一起outputs_flat = batchify(fn, netchunk)(embedded) # 将编码过的点以批处理的形式输入到 网络模型 中得到 输出(RGB,A)outputs = torch.reshape(outputs_flat, list(inputs.shape[:-1]) + [outputs_flat.shape[-1]])return outputs

这里的 batchify() 函数会把 embedded 数组分批输入到网络 fn 中,前向传播得到对应的 (RGB,A)。 接下来我们继续对 create_nerf() 进行分析

def create_nerf(args):...# 创建网络的优化器 optimizer = torch.optim.Adam(params=grad_vars, lr=args.lrate, betas=(0.9, 0.999))...# 关于加载已有模型的部分我们不在逐行分析,对整体算法的分析没有任何影响...# 注意看,现在整体的初始化已经完成,我们需要对返回值进行一些处理render_kwargs_train = { 'network_query_fn' : network_query_fn, 'perturb' : args.perturb, 'N_importance' : args.N_importance, 'network_fine' : model_fine, 'N_samples' : args.N_samples, 'network_fn' : model, 'use_viewdirs' : args.use_viewdirs, 'white_bkgd' : args.white_bkgd, 'raw_noise_std' : args.raw_noise_std, } # NDC 空间,只对前向场景有效,具体解释可以看论文,这里不再展开 if args.dataset_type != 'llff' or args.no_ndc: print('Not ndc!') render_kwargs_train['ndc'] = False render_kwargs_train['lindisp'] = args.lindisp render_kwargs_test = {k : render_kwargs_train[k] for k in render_kwargs_train} render_kwargs_test['perturb'] = False render_kwargs_test['raw_noise_std'] = 0. return render_kwargs_train, render_kwargs_test, start, grad_vars, optimizer

下面我们对字典 render_kwargs_train 中的键值进行分析:

'network_query_fn' : network_query_fn, # 上文已经解释过了,这是一个匿名函数,给这个函数输入位置坐标,方向坐标,以及神经网络,就可以利用神经网络返回该点对应的 颜色和密度'perturb' : args.perturb, # 扰动,对整体算法理解没有影响'N_importance' : args.N_importance, # 每条光线上细采样点的数量'network_fine' : model_fine, # 论文中的 精细网络'N_samples' : args.N_samples, # 每条光线上粗采样点的数量'network_fn' : model, # 论文中的 粗网络'use_viewdirs' : args.use_viewdirs, # 是否使用视点方向,影响到神经网络是否输出颜色'white_bkgd' : args.white_bkgd, # 如果为 True 将输入的 png 图像的透明部分转换成白色'raw_noise_std' : args.raw_noise_std, # 归一化密度

以上我们完成了 NeRF 模型的初始化部分。我们在下一章节继续对 train() 函数进行分析。NeRF源码分析解读(三)

本文链接地址:https://www.jiuchutong.com/zhishi/298610.html 转载请保留说明!

上一篇:共识算法涉及的概念(共识算法主要解决什么问题)

下一篇:Win11 Build 23430 预览版发布(附更新修复内容汇总)

  • 优酷扫码登录在哪(优酷扫码登录在哪里?)

    优酷扫码登录在哪(优酷扫码登录在哪里?)

  • 苹果手机怎么改字体风格(苹果手机怎么改语言)

    苹果手机怎么改字体风格(苹果手机怎么改语言)

  • ppt图片透明度怎么更改(PPT图片透明度怎么调不了)

    ppt图片透明度怎么更改(PPT图片透明度怎么调不了)

  • iphonexsmax多长(iphonexs max 有多长)

    iphonexsmax多长(iphonexs max 有多长)

  • vivo手机怎么解除禁止安装权限(vivo手机怎么解锁?忘记密码了)

    vivo手机怎么解除禁止安装权限(vivo手机怎么解锁?忘记密码了)

  • 电脑上下载钉钉应该下载哪个版本(电脑上下载钉钉怎么安装不了)

    电脑上下载钉钉应该下载哪个版本(电脑上下载钉钉怎么安装不了)

  • 候补显示候补人数较少(候补显示候补人数较少能补上吗)

    候补显示候补人数较少(候补显示候补人数较少能补上吗)

  • 系统还原有什么后果(系统还原有什么问题)

    系统还原有什么后果(系统还原有什么问题)

  • 荣耀20pro可以当遥控器使用吗(荣耀20pro支持nfc吗)

    荣耀20pro可以当遥控器使用吗(荣耀20pro支持nfc吗)

  • 电脑上的pr突然打不开(电脑上的pr突然不见了)

    电脑上的pr突然打不开(电脑上的pr突然不见了)

  • 微信自己评论自己别人能看到吗(微信自己评论自己别人看不见)

    微信自己评论自己别人能看到吗(微信自己评论自己别人看不见)

  • 小米9微信白屏怎么回事(小米9微信白屏怎么解决)

    小米9微信白屏怎么回事(小米9微信白屏怎么解决)

  • iPhone11支持apple pencil吗(iphone11支持apple pencil第二代)

    iPhone11支持apple pencil吗(iphone11支持apple pencil第二代)

  • 淘宝违规积分多久清零(淘宝违规积分多久会清零)

    淘宝违规积分多久清零(淘宝违规积分多久会清零)

  • 华为桌面小球怎么关闭(华为桌面小球怎么弄掉)

    华为桌面小球怎么关闭(华为桌面小球怎么弄掉)

  • 携程抢票加速包的钱会退吗(携程抢票加速包没抢到票会退吗)

    携程抢票加速包的钱会退吗(携程抢票加速包没抢到票会退吗)

  • 苹果11支持双卡吗?(苹果11支持双卡吗中国大陆)

    苹果11支持双卡吗?(苹果11支持双卡吗中国大陆)

  • xr可以下载两个微信吗(苹果xr可以安装两个微信吗)

    xr可以下载两个微信吗(苹果xr可以安装两个微信吗)

  • 手机怎么看qq绑定的身份证(手机怎么看qq绑定了哪些软件)

    手机怎么看qq绑定的身份证(手机怎么看qq绑定了哪些软件)

  • 手机保存的网页在哪找(手机保存的网页在电脑上打开是乱码怎么解决)

    手机保存的网页在哪找(手机保存的网页在电脑上打开是乱码怎么解决)

  • 如何删除系统自带的“你的手机”应用(如何删除系统自带的软件)

    如何删除系统自带的“你的手机”应用(如何删除系统自带的软件)

  • 德纳利国家公园和自然保护区的驯鹿,阿拉斯加 (© Design Pics/Danita Delimont)(德纳里山)

    德纳利国家公园和自然保护区的驯鹿,阿拉斯加 (© Design Pics/Danita Delimont)(德纳里山)

  • 〖大前端 - 基础入门三大核心之CSS篇⑱〗- CSS中的背景(大前端最新)

    〖大前端 - 基础入门三大核心之CSS篇⑱〗- CSS中的背景(大前端最新)

  • Qt--无边框窗口完美(FrameLess)实现,包含缩放和移动功能重写。(qt无边框窗口设计)

    Qt--无边框窗口完美(FrameLess)实现,包含缩放和移动功能重写。(qt无边框窗口设计)

  • 留抵税额下月抵扣的分录
  • 印花税的三种缴税方式
  • 视同内销补税的财务处理
  • 增值税属于会计科目的什么
  • 土地增值税清算的条件
  • 出口产品报关单上保险费与实际不符可以丿退税吗
  • 项目部建筑施工筹建期会计账务处理
  • 领用包装物会计处理
  • 证券清算款是什么科目
  • 农产品发票抵扣需要勾选吗
  • 个税申报与社保申报一定是一致的么
  • 营改增后小规模ktv怎么纳税
  • 税控盘维护费优惠政策
  • 福利费开专票怎么处理
  • 住宿费增值税怎么算
  • 增值税进项税额在借方还是贷方
  • 城镇土地使用税会计分录怎么做
  • 损益类科目的借方表示
  • 个人所得税由公司承担的账务处理
  • 工资可以一次性计提全年的吗
  • 1697509029
  • 办劳务发票需要什么资料
  • win10怎么恢复被系统删除的文件
  • 华为鸿蒙系统网速慢怎么解决
  • 现金流量表的内涵及其编制基础
  • 总资产收益率什么意思
  • 出口退免税的基本政策包括
  • 联想随身充评测
  • 公司给客户报销费用可以吗
  • 劳务报酬所得缴纳时间
  • 跨境收入怎么入账
  • 开发商违法
  • ai绘画网站
  • parted命令详解
  • vgchange命令
  • 金融企业贷款损失
  • 分期收款销售产品
  • 什么叫做归属
  • 帝国cms下载
  • SQLServer中Partition By及row_number 函数使用详解
  • 将原生html改成vue
  • 承兑汇票大回头是啥意思
  • 劳务费走应付职工薪酬
  • 资产负债表是根据科目余额表填的吗
  • windows下重启mysql服务
  • 融资租赁固定资产折旧年限
  • 管理费用税金包括
  • 盈余公积的计提基数
  • 以前年度损益调整怎么结转
  • 一般纳税人增值税怎么做账务处理
  • 销项税和进项税计算公式
  • 暂估入库有时间限制吗
  • 退回资金怎么做账
  • 电子银行承兑汇票操作流程
  • 包装物报废收回残料
  • 什么差旅费
  • 小规模增值税减免申报表怎么填
  • mysql --help
  • 屏幕右下角显示A2
  • fedora使用
  • 将某软件添加到桌面
  • winxp怎么改壁纸
  • win7系统卡慢怎么修复
  • 怎样设置win10
  • debian与centos详细对比区别
  • win7系统无法安装ie8
  • win7系统可移动的文件
  • zabbix添加客户端
  • accessviolation怎么解决
  • node.js web
  • 用shell写一个脚本,对文本中无序的一列数字排序
  • 欢迎使用本公司智能语音电动车
  • javascript基础教程教材答案
  • ORMLite完全解析(四) 官方文档第四章、在Android中使用
  • 重大税务违法案件一案双查标准
  • 郑州房产契税缴纳
  • 发票事业单位有税号吗
  • 代销手续费增值税会计处理
  • 铁路土地使用税减免
  • 纪检组长如何监督党员
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设