nerf 算法路线

 

└train

        ├─config:

        ├─llff_data_load :--》input .npy[图片数目,3*5];--》output :images, poses, bds, render_poses, i_test 

        ├─create_nerf() :--》input args;--》output :render_kwargs_train, render_kwargs_test, start, grad_vars, optimizer 

                └get_embedder():作用xyz+方向进行位置编码--》input输入xyz三维  ;-- output :embed_fn, input_ch=63;是属于run_nerf_helps.py文件中的函数;包含了傅里叶变换torch.sin与cos

                └class Embedder对应论文5.1;

                        └create_embedding_fn 2pi的那个公式;对应论文5.1升维度的公式;

        ├─class NERF模型初始化:--》input d深度w通道数,xyz通道数;--》output :输出特征 alpha和rgb的最后层;

                └forward xyz与视角分开---run_nerf_helps.py

                ├─load_weights_from_keras 核权重----run_nerf_helps.py

          ├─精细模型初始化refine 网络初始化

         ├─模型批量化处理数据

                └run_network :Prepares inputs and applies network 'fn'以更小的patch-netchunk送进网络跑前向--》inputnetchunk=1024*64;--》output

         ├─优化器optimizer(torch.optim.Adam

         ├─# 训练需要的参数

                create_nerf()输出--》outputrender_kwargs_train, render_kwargs_test, start, grad_vars, optimizer

        ├─仅渲染

                └render_path输入(render_poses, hwf, K, args.chunk, render_kwargs_test, gt_imgs=images, savedir=testsavedir, render_factor=args.render_factor) 输出rgbs

        ├─如果批量处理处理ray,则准备raybatch tensor

        ├─N_iters 最大迭代次数,开始迭代for iintrange(start,N_iters):

                └get_rays输入(H,W,K,torch.Tensor(pose)) #(H,W,3),(H,W,3) ---run_nerf_helps.py; 旋转摄像方向从相机变为世界坐标系;将相机框架变为世界框架。

         ├─缩小成原始尺寸的1/2

        ├─render():输入(H, W, K, chunk=args.chunk, rays=batch_rays,verbose=i < 10, retraw=True,**render_kwargs_train)输出--》output:rgb, disp, acc, extras 【函数中的是ret_list + [ret_dict]】

Args:

H: int. 图像高度

W: int. 宽度

focal: float. 针孔相机焦距

chunk: int. 同步处理的最大光线数

rays: array of shape [2, batch_size, 3]. 每个batch的ray的原点和方向

c2w: array of shape [3, 4].相机到世界的转换矩阵3x4

ndc: bool. If True, represent ray origin, direction in NDC coordinates.NDC坐标

near: float or array of shape [batch_size]. .光线最近距离

far: float or array of shape [batch_size]. 光线最远距离

use_viewdirs: bool. If True, use viewing direction of a point in space in model.使用view方向

c2w_staticcam: array of shape [3, 4]. If not None, use this transformation matrix for

camera while using other c2w argument for viewing directions.变换矩阵

Returns:

rgb_map: [batch_size, 3]. Predicted RGB values for rays.预测的rgb图

disp_map: [batch_size]. Disparity map. Inverse of depth.视差图

acc_map: [batch_size]. Accumulated opacity (alpha) along a ray.深度图

extras: dict with everything returned by render_rays().其它

确定rays_o, rays_d的值 = get_rays(H, W, K, c2w/c2w_staticcam)or rays;

变换形状,最后一位变为3位;

                └batchify_rays() 在更小的batch上进行渲染,避免超出内存;--》input输入:(rays_flat, chunk=256*32, **kwargs);输出--》output:all_ret全部结果拼接在一起

                        └render_rays()--》input输入:ray_batch,network_fn,network_query_fn,N_samples,retraw=False,lindisp=False,perturb=0.,N_importance=0,network_fine=None,white_bkgd=False,raw_noise_std=0.,verbose=False,pytest=False输出--》output:ret

Args:

ray_batch: 用来view ray采样的所有必须数据:ray原点,方向,最大最小距离,单位方向array of shape [batch_size, ...].

network_fn: NeRF网络,用来预测空间中每个点rgb和透明度

network_query_fn: 将查询传递给network_fn的函数

N_samples: coarse采样点数,int.

retraw: bool. 如果为真,返回数据无压缩,If True, include model's raw, unprocessed predictions.

lindisp: bool. 如果为true在在深度图的逆上线性采样

perturb: 扰动 float, 0 or 1. 0在分层随机时间点对每条射线进行采样.

N_importance: fine增加的精细采样点数 int.

network_fine: fine网络

white_bkgd: 若为true则认为是白色背景 bool.

raw_noise_std:噪声 ...

verbose: 打印debug信息 bool. If True, 打印

Returns:

rgb_map: ray的rgb[num_rays, 3].

disp_map: 视差[num_rays].

acc_map:累积不透明度 [num_rays].

raw: 原始raw数据[num_rays, num_samples, 4].

rgb0: See rgb_map.

disp0: See disp_map. Output for coarse model.

acc0: See acc_map. Output for coarse model.

z_std: 标准差[num_rays]. Standard deviation of distances along ray for eachsample.

        ├─计算l2loss:img2mse ()求平均值:img2mse = lambda x, y : torch.mean((x - y) ** 2)

        ├─计算峰值信噪比psnr()mse2psnr = lambda x : -10. * torch.log(x) / torch.log (torch.Tensor([10.]))

        ├─反向传播loss 迭代

        ├─调整学习率,存日志

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值